OpenWrt24.10.0 wordpress6.7+PHP8.3+Sqliteで再構築

OpenWrtを24.10.0に更新 WordPress6.7 PHP8.3 Sqliteで構築しなおしました。
サイトにアクセスできない状態が続いていました。
リダイレクトループエラーの原因がわからず、cloudflareのSSLが原因であることに気づくのに時間かかりました。元サイトがSSLでcloudflareがflexibleだとリダイレクトループになります。フルにしないといけないことを完全に忘れていました。
USBメモリーのコピーだけで環境移行ができて楽です。ただ、インポートでDBの再構築をするのはすごく時間がかかります。
その点sqliteだとMT7621A メモリ128MB flash128MBの USBない機種でも動きます。wp-sqlite-dbで+PHP8で新規インストールできました。WordPress本家で正式に採用される計画もあるようです。
違いはsqliteかMariaDBかの差で他は一緒です。ページの遷移や操作感は明らかにax3600のほうが早いです。サクサク動いています。VR-500のほうはワンテンポ待たされる感じでもっさりしてます。まだ我慢できる範囲ではあります。
GoogleのPageSpeed Insightsでは最初のサイトの読み込みのSpeed indexが4.2秒から1.6秒に早くなりました。





WordPressを手動で更新したのでバックグラウンド更新が正常に動作しない可能性があります。と出ました。
古いデータベースサーバーはSQliteを使用しているためです。
pppoe接続のopenwrtルーター(192.168.0.1) 配下のopenwrtルーター(192.168.1.1)として配下のルーターにwordpressをインストールします。
問題の切り分けのため、ローカルネットワークで本体ROMでhtml, php wordpress表示確認、それをUSBに移し、それを外部に公開します
uhttpdはluci用に残すか削除
/etc/config/uhttpd
list listen_http '0.0.0.0:80'
list listen_http '[::]:80'
list listen_https '0.0.0.0:443'
list listen_https '[::]:443'
uhttpdのポートを80 443を別のポートへ変更
デフォルトユーザー一覧
cat /etc/passwd
デフォルトではwww-dataグループはあるがwww-dataユーザーは無い
デフォルトグループ一覧
cat /etc/group
nginxインストール とwww-dataユーザー追加
opkg update && opkg install nginx-ssl shadow-useradd && useradd -u 33 -g www-data -c www-data -d /var -s /bin/false www-data -p パスワード
デフォルトではuci.confが使われるので無効にします。
/etc/config/nginx
config main global
option uci_enable 'false’
mkdir -p /www/data/test
echo “test" > /www/data/test/index.html
chown -R www-data:www-data /www/data
vi /etc/nginx/nginx.conf
worker_processes auto;
user www-data;
events {}
http {
server_tokens off;
access_log off;
log_format openwrt
'$request_method $scheme://$host$request_uri => $status’
' (${body_bytes_sent}B in ${request_time}s) <- $http_referer’;
include mime.types;
default_type application/octet-stream;
sendfile on;
client_max_body_size 128M;
large_client_header_buffers 2 1k;
gzip on;
gzip_vary on;
gzip_proxied any;
include conf.d/*.conf;
}
vi /etc/nginx/conf.d/test.conf
server {
listen 80;
listen [::]:80;
server_name 192.168.1.1;
return 301 https://192.168.1.1$request_uri;
}
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name 192.168.1.1;
ssl_certificate /etc/nginx/conf.d/lan.crt;
ssl_certificate_key /etc/nginx/conf.d/lan.key;
ssl_session_cache shared:SSL:32k;
ssl_session_timeout ’10m’;
index index.php index.html;
try_files $uri $uri/ /index.php$is_args$args;
root /www/data/test;
include conf.d/*.locations;
large_client_header_buffers 4 32k;
}
nginxテスト
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
となればOK
nginx.conf確認
nginx -T -c '/etc/nginx/nginx.conf’
nginx 再起動
service nginx restart
192.168.1.1でindex.htmlでtestと表示されます。
chromeのキャッシュが原因でURL表示されない場合firefoxなど使ってください
PHP8インストール
opkg update && opkg install php8-fpm php8-mod-bcmath php8-mod-calendar php8-mod-ctype php8-mod-curl php8-mod-dom php8-mod-exif php8-mod-fileinfo php8-mod-filter php8-mod-ftp php8-mod-gd php8-mod-iconv php8-mod-intl php8-mod-mbstring php8-mod-mysqli php8-mod-mysqlnd php8-mod-opcache php8-mod-openssl php8-mod-pdo php8-mod-pdo-sqlite php8-mod-session php8-mod-shmop php8-mod-simplexml php8-mod-sockets php8-mod-sodium php8-mod-sqlite3 php8-mod-xml php8-mod-xmlreader php8-mod-zip php8-pecl-imagick
vi /etc/nginx/fastcgi_params
SCRIPT_FILENAME SCRIPT_NAME PATH_TRANSLATEDの3行追加
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
vi /etc/php8-fpm.d/www.conf
nginxがwww-dataの場合php-fpmもwww-dataで実行します。
user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data
listen.mode = 0666
vi /www/data/test/index.php
php8-fpm.sockと/www/data以下の権限をwww-dataにします。
chown www-data:www-data /var/run/php8-fpm.sock
chown -R www-data:www-data /www/data
vi /etc/php.ini
doc_root = “/www/data/test"
と/etc/nginx/nginx.confのserver{root /www/data/test}を一致させます。
マルチドメインにする場合doc_rootは空白にして
doc_root =
にします。
192.168.1.1/index.phpにアクセスしてPHP情報表示確認
/dev/sda1を/mnt/sda1にマウントする
opkg update && opkg install block-mount e2fsprogs kmod-usb-storage kmod-usb2 kmod-usb3 kmod-fs-ext4
ls -al /dev/sd*
block detect | uci import fstab
uci set fstab.@mount[0].enabled=’1′ && uci set fstab.@global[0].anon_mount=’1′ && uci commit fstab
/etc/init.d/fstab boot
/dev/sda1をext4フォーマットする場合
mkfs.ext4 /dev/sda1
vi /etc/nginx/conf.d/test.conf
server {
listen 80;
listen [::]:80;
server_name 192.168.1.1;
return 301 https://192.168.1.1$request_uri;
}
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name 192.168.1.1;
ssl_certificate /etc/nginx/conf.d/lan.crt;
ssl_certificate_key /etc/nginx/conf.d/lan.key;
ssl_session_cache shared:SSL:32k;
ssl_session_timeout ’10m’;
index index.php index.html;
try_files $uri $uri/ /index.php$is_args$args;
root /mnt/sda1/sqlite/test;
include conf.d/*.locations;
large_client_header_buffers 4 32k;
}
vi /etc/php.ini
doc_root = “/mnt/data/sqlite/test"
vi /mnt/sda1/sqlite/test/index.php
chown -R www-data:www-data /mnt/sda1/sqlite
192.168.1.1/phpinfo.phpにアクセス確認
rm -rf /www/data
wp-contentにdb.phpをコピー
wp-config.php
define('USE_MYSQL’, false);
define('DB_TYPE’, “sqlite");
define('DB_FILE’,"test.sqlite");
define('DB_DIR’, '/mnt/sda1/sqlite/database/’);define('WP_SITEURL’, 'https://192.168.1.1’);
define('WP_HOME’, 'https://192.168.1.1’);
192.168.1.1でwordpressにアクセスできることを確認します。
ローカルのwordpressを外部に公開します。
下流ルーター(192.168.1.1)wanIP固定
vi /etc/config/network
config interface 'wan’
option device 'wan’
option proto 'static’
option ipaddr '192.168.0.2’
option netmask '255.255.255.0’
option gateway '192.168.0.1’
list dns '192.168.0.1’
下流ルーター(192.168.1.1)wanからlanへポート転送
vi /etc/config/firewall
config redirect
option dest 'lan’
option target 'DNAT’
option name 'http’
option src 'wan’
option src_dport ’80’
option dest_ip '192.168.1.1’
option dest_port ’80’
config redirect
option dest 'lan’
option target 'DNAT’
option name 'https’
option src 'wan’
option src_dport '443’
option dest_ip '192.168.1.1’
option dest_port '443’
上流のルーター(192.168.0.1)から配下のルーターへポート転送
/etc/config/firewall
config redirect
option target 'DNAT’
option name 'http’
option src 'wan’
option src_dport ’80’
option dest 'lan’
option dest_ip '192.168.0.2’
option dest_port ’80’
config redirect
option target 'DNAT’
option name 'https’
option src 'wan’
option src_dport '443’
option dest 'lan’
option dest_ip '192.168.0.2’
option dest_port '443’
wp-config.php
define('WP_SITEURL’, 'https://***.com’);
define('WP_HOME’, 'https://***.com’);
vi /etc/nginx/conf.d/***.com.conf
192.168.1.1を.***.comへ置き換えます。
server {
listen 80;
listen [::]:80;
server_name .***.com;
return 301 https://***.com$request_uri;
}
server {
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
server_name .***.com;
ssl_certificate /etc/nginx/conf.d/***.crt;
ssl_certificate_key /etc/nginx/conf.d/***.key;
ssl_session_cache shared:SSL:32k;
ssl_session_timeout ’10m’;
index index.php index.html;
try_files $uri $uri/ /index.php$is_args$args;
root /www/data/test;
include conf.d/*.locations;
large_client_header_buffers 4 32k;
}
CloudFlare対応ポート
HTTP 80 8080 8880 2052 2082 2086 2095
HTTPS 443 2053 2087 2096 8443
キャッシュ未対応 2052 2053 2082 2086 2087 2095 2096 8880 8443
HTTPキャッシュ対応ポート80 8080
HTTPSキャッシュ対応 443
残念ながらHTTPSキャッシュ対応は443のみです。
CloudFlareDDNSサービスを利用してIPを固定します。
opkg update && opkg install ddns-scripts ddns-scripts-cloudflare
vi /etc/config/ddns
config service 'myddns_ipv4’
option interface 'wan’
option lookup_host '***.com’
option use_ipv6 '0’
option service_name 'cloudflare.com-v4’
option domain '***.com’
option username '***’
option password '***’
option ip_source 'web’
option ip_url 'http://checkip.dyndns.com’
option check_unit 'minutes’
option force_unit 'minutes’
option retry_unit 'seconds’
option enabled '1’
/etc/init.d/ddns start
WARN : Service section disabled! – TERMINATEとでますが、DDNSは更新されます。
タイムゾーンエラーの対処法
wordpressで東京のタイムゾーンを追加する
opkg update && opkg install zoneinfo-core zoneinfo-asia
vi /etc/config/system
config system
option timezone 'JST-9’
option zonename 'Asia/Tokyo’
負荷を分散させるため、上流のルーターをリバースプロキシとして配下のルーターに転送することもできます。
mkdir -p /mnt/sda1/nginx/cache
mkdir -p /mnt/sda1/nginx/tmp
chown -R www-data:www-data /mnt/sda1/nginx/cache
chown -R www-data:www-data /mnt/sda1/nginx/tmp
httpブロックに以下を追加
proxy_cache_path /mnt/sda1/nginx/cache levels=1:2 keys_zone=zone1:4m inactive=7d max_size=50m;
proxy_temp_path /mnt/sda1/nginx/tmp;
ディスカッション
コメント一覧
Hi there, just became alert to your blog through Google, and
found that it’s really informative. I am going to watch out for brussels.
I will be grateful if you continue this in future. A lot of people will be benefited from your writing.
Cheers! Lista escape roomów