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;

 

OpenWrt,WordPress

Posted by taroumaru