[MEMO] 在 Termux 使用 nginx+php-fpm+mariadb 架設本機網站

嘗試在 Android 行動裝置上架設網站,讓手邊的手機作為本機 (Local) 網頁伺服器;你可以在手機上架設 WordPress 以建立只屬於自己的網誌內容,或者架設傳輸檔案的伺服器,直接透過網頁伺服器傳輸檔案,而不用直接將 Android 行動裝置與電腦連線。

以下使用 Termux 並透過 nginx+php-fpm+mariadb 來進行架設。

改寫自:https://greenhandzdl.github.io/termux-creates-a-wordpress-website.html/

並參考:

termux 创建 wordpress 网站 – Greenhandzdl 的个人博客
NGINX 設定 HTTPS 網頁加密連線,建立自行簽署的 SSL 憑證- G. T. Wang
XYZ 的筆記本: Nginx 設定 https 連線
用 OpenSSL 自簽開發用 HTTPS SSL 憑證 « Nic Lin’s Blog
SSL X.509 憑證教學 – Study-Area – 依瑪貓
OpenSSLについて
Jimmy’s Blog: OpenSSL 操作筆記 – 產生 RSA 金鑰
Jimmy’s Blog: OpenSSL 操作筆記 – 產生 CSR

原作者:Greenhandzdl
来源:termux 创建 wordpress 网站 | 梦想,起飞~~
链接:https://greenhandzdl.github.io/termux-creates-a-wordpress-website.html/


配置 nginx+php-fpm+mariadb 環境

安裝 nginx

$ apt-get update
$ apt-get install nginx

這時候存取本機位址只會得到預設頁面。

nginx 的組態設定值

組態設定位於 $PREFIX/etc/nginx/nginx.conf

使用 vim 開啟 nginx.conf:

$ vim $PREFIX/etc/nginx/nginx.conf 

以進行編輯。

修改網站根目錄路徑

網站預設路徑位於:

/data/data/com.termux/files/usr/share/nginx/html

如果有需要修改路徑,將所有相同路徑的內容修改即可,例如修改成:

/data/data/com.termux/files/home/.nginx/html

並將 69 行修改為 fastcgi_param SCRIPT_FILENAME “網站根目錄路徑”$fastcgi_script_name;

將 php 加入首頁規則並監聽

將 php 加入首頁規則

如果需要將 php 做為首頁規則:

將 index.php 加入到首頁規則裡面

45 行位置index index.html index.htm;

加入 index.php 將 php 做為首頁規則

index index.html index.htm index.php;

監聽 php

將 nginx 組態設定裡的 location ~ \.php$ 開頭的註釋符號( #號)取消:

位於 65~71 行,將範圍內每行開頭取消註釋。

解析 php

請參考下段,安裝 php-fpm。

php-fpm

由於 nginx 無法直接解析 php,所以必須依賴 php-fpm 這個套件。

安裝 php-fpm:

$ apt-get update
$ apt-get install php-fpm

另外必須修改 php-fpm 組態:

vim $PREFIX/etc/php-fpm.d/www.conf

修改以下內容:

36行 listen = 監聽對象修改為本機位址:

listen = 127.0.0.1:9000

安裝 MySQL 資料庫 MariaDB

$ apt-get update
$ apt-get install mariadb

進行配置

登入 termux 使用者資料庫

mysql -u $(whoami)

如果出現類似錯誤訊息:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/data/data/com.termux/files/usr/tmp/mysqld.sock' (111)

請執行 mysqld_safe(將佔用目前 session)並再開啟一個 terminal session

mysqld_safe

mysqld_safe &(背景執行)

mysqld_safe &

重試一次:

mysql -u $(whoami)

修改 root 密碼的 SQL 語句

use mysql;
set password for 'root'@'localhost' = password('欲設定密碼');

更新權限並離開

flush privileges;
quit;

與你的資料庫連線

mysql -u root -p

輸入剛剛建立的密碼(密碼不可見)

建立 wordpress 資料庫

create database wordpress;

使用 wordpress 資料庫

use wordpress;

設定 Unicode 編碼

set names utf8;

離開資料庫模式

quit;

增強安全性

強制啟用 https 8443 埠

生成自行簽署的SSL憑證以建立安全連線

建立放置憑證的路徑:

$ mkdir -p $PREFIX/etc/nginx/ssl

透過 openssl 生成 SSL 憑證:

openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout $PREFIX/etc/nginx/ssl/nginx.key -out $PREFIX/etc/nginx/ssl/nginx.crt

openssl req:透過 openssl 生成憑證簽署要求(Certificate Signing Request, CSR)
-new:建立新的CSR
-x509:使用X.509形式的憑證,透過此選項將生成自我簽署憑證(self-signed certificates),而不是CSR
-nodes:不對輸出的私鑰加密,與 key 相關的選項併用時要注意,不當使用 key 可能會被覆蓋
-days [days]:指定憑證有效期間為今天起算後n天
-newkey [arg]:用於生成 CSR + 私鑰,後面指定加密演算法,例如rsa:2048,格式為演算法:金鑰長度(位元)
-in [filename]:輸入憑證申請檔案名稱,預設是標準輸出
-out [filename]:指定憑證的輸出路徑
-key [filename]:輸入已有的私鑰檔案,若無指定此選項將生成新私鑰
-keyout [filename]:指定私鑰的輸出路徑,未指定時將套用組態設定值的設定
[filename].key [filename].pem:私鑰檔案
[filename].crt:憑證

生成憑證時會要求輸入基本資料:

Country Name (2 letter code) [AU]:TW
State or Province Name (full name) [Some-State]:Taiwan
Locality Name (eg, city) []:Kaohsiung
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Personal
Organizational Unit Name (eg, section) []:Personal Unit
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:user@example.com

Country Name (2 letter code) [AU]:國家代碼(2碼)
State or Province Name (full name) [Some-State]:州或省
Locality Name (eg, city) []:城市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:公司名稱
Organizational Unit Name (eg, section) []:部門單位名稱
Common Name (e.g. server FQDN or YOUR name) []:伺服器的完整網域名稱(FQDN),填寫不正確將被視為無效憑證,沒有申請網域可以用 IP 位址替代
Email Address []:電子郵件地址

開啟 https 伺服器服務

開啟 nginx 組態,並移至HTTPS server一項,位於 96~115 行:

# HTTPS server
#
#server {
#    listen       443 ssl;
#    server_name  localhost;
#    ssl_certificate      cert.pem;
#    ssl_certificate_key  cert.key;
#    ssl_session_cache    shared:SSL:1m;
#    ssl_session_timeout  5m;
#    ssl_ciphers  HIGH:!aNULL:!MD5;
#    ssl_prefer_server_ciphers  on;
#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}

將 nginx 組態設定裡的 HTTPS server 開頭的註釋符號( #號)取消,

位於 96~115 行,將範圍內每行開頭取消註釋:

# HTTPS server
server {
    listen       443 ssl;
    server_name  localhost;
    ssl_certificate      cert.pem;
    ssl_certificate_key  cert.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    location / {
        root   html;
        index  index.html index.htm;
    }
}

指定私鑰以及憑證的路徑

# HTTPS server
server {
    listen       443 ssl;
    server_name  localhost;
    ssl_certificate      /data/data/com.termux/files/usr/etc/nginx/ssl/nginx.crt;
    ssl_certificate_key  /data/data/com.termux/files/usr/etc/nginx/ssl/nginx.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    location / {
        root   html;
        index  index.html index.htm;
    }
}

指定網站目錄

# HTTPS server
server {
    listen       443 ssl;
    server_name  localhost;
    ssl_certificate      /data/data/com.termux/files/usr/etc/nginx/ssl/nginx.crt;
    ssl_certificate_key  /data/data/com.termux/files/usr/etc/nginx/ssl/nginx.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    location / {
        root   /data/data/com.termux/files/home/.nginx/html;
        index  index.html index.htm;
    }
}

啟用 https 的 php 解析以及 php 監聽

http 與 https 的設定是獨立的,所以必須在這裡再一次指定,

將 63~71 行的內容複製並貼上到 https 的設定內:

# HTTPS server
server {
    listen       443 ssl;
    server_name  localhost;
    ssl_certificate      /data/data/com.termux/files/usr/etc/nginx/ssl/nginx.crt;
    ssl_certificate_key  /data/data/com.termux/files/usr/etc/nginx/ssl/nginx.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    location / {
        root   /data/data/com.termux/files/home/.nginx/html;
        index  index.html index.htm index.php;
    }
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /data/data/com.termux/files/home/.nginx/html$fastcgi_script_name;
        include        fastcgi_params;
    }
}

使用 8443 埠當作 https 的埠號

# HTTPS server
server {
    listen       8443 ssl;
    server_name  localhost;
    ssl_certificate      /data/data/com.termux/files/usr/etc/nginx/ssl/nginx.crt;
    ssl_certificate_key  /data/data/com.termux/files/usr/etc/nginx/ssl/nginx.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    location / {
        root   /data/data/com.termux/files/home/.nginx/html;
        index  index.html index.htm index.php;
    }
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /data/data/com.termux/files/home/.nginx/html$fastcgi_script_name;
        include        fastcgi_params;
    }
}

連線 8080 埠自動轉址到 https 8443 埠

在指定 http 的 server 裡面加入return 301 https://$host:8443$request_uri;(位於第38行):

server {
    listen       8080;
    server_name  localhost;
    return 301 https://$host:8443$request_uri;
    #charset koi8-r;
    #access_log  logs/host.access.log  main;

開啟伺服器部分路徑的檔案列表存取權限

以安全為由,避免伺服器檔案被窺視,預設此功能是關閉的,

如果想要開啟部分的目錄列表瀏覽權限,

在 http 埠或 https 埠的 server 內指定:

location   /0_download {
        root      /data/data/com.termux/files/home/.nginx/html;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }

location /0_download:指定欲開放目錄瀏覽權限的路徑
autoindex on;:啟用列出目錄功能
autoindex_exact_size off;:啟用以位元組顯示,關閉以人讀方式顯示
autoindex_localtime on;:是否以伺服器時區顯示時間

例如在 https 內指定則:

# HTTPS server
#
server {
    listen       8443 ssl;
    server_name  localhost;
    ssl_certificate      /data/data/com.termux/files/usr/etc/nginx/ssl/nginx.crt;
    ssl_certificate_key  /data/data/com.termux/files/usr/etc/nginx/ssl/nginx.key;
    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    location / {
        root   /data/data/com.termux/files/home/.nginx/html;
        index  index.html index.htm index.php;
    }
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /data/data/com.termux/files/home/.nginx/html$fastcgi_script_name;
        include        fastcgi_params;
    }
    location   /0_download {
        root      /data/data/com.termux/files/home/.nginx/html;
        autoindex on;
        autoindex_exact_size off;
        autoindex_localtime on;
    }
}

安裝網站

安裝 wordpress

$ wget https://wordpress.org/latest.zip
$ unzip latest.zip
$ cp -r wordpress/. 網站根目錄位址

啟用網站服務

啟用 nginx 服務

$ nginx

如果要更新網站組態,透過指令進行更新:

$ nginx -s reload

啟用 php-fpm 服務

$ php-fpm

啟用 MySQL

$ mysqld_safe &

造訪 127.0.0.1:8080 開始使用。



原作者:Greenhandzdl
来源:termux创建wordpress网站 | 梦想,起飞~~
链接:https://greenhandzdl.github.io/termux-creates-a-wordpress-website.html/


本作品採用 姓名標示-相同方式分享 4.0 國際 (CC BY-SA 4.0) 進行許可

預設圖片
Huán-Hsüān Lín (WordPressLocal)
文章: 18