docker-compose + Nginx (リバースプロキシ) + WordPress-FPMでブログを建てたので、やった事をまとめます。
docker-composeはインストール済として進めます。
目次
結論
docker-compose.yml
version: "3"
services:
nginx:
image: nginx:latest
container_name: nginx
volumes:
- ./etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./etc/nginx/conf.d:/etc/nginx/conf.d:ro
- /etc/letsencrypt:/etc/letsencrypt:ro
- ./html:/usr/share/nginx/html
ports:
- "80:80"
- "443:443"
depends_on:
- wordpress-fpm
restart: always
wordpress:
image: wordpress:6.7-fpm
container_name: wordpress-fpm
restart: always
depends_on:
- wordpress-db
volumes:
- ./html/wordpress:/var/www/html
- ./html:/usr/share/nginx/html
- /etc/letsencrypt:/etc/letsencrypt:ro
wordpress-db:
image: mariadb:latest
container_name: wordpress-db
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
restart: always
volumes:
- ./wordpress-db:/var/lib/mysql
environment:
- MARIADB_AUTO_UPGRADE=1
- MARIADB_DISABLE_UPGRADE_BACKUP=1
env_file:
- wordpress-db.env
- nginx
設定ファイルと証明書をマウントします。 - wordpress
wordpress:6.7-fpmを利用します。
※nginxとwordpress-fpmがアクセスするファイルパスは共通である必要があります。
自分の場合、既に設定済のnginxはroot=/usr/share/nginx/html
に設定していますが、wordpress-fpmコンテナは/var/www/html
にコンテンツを配置します。
そのため、一旦 wp側の/var/www/html
をローカルの./html/wordpress
に配置した上で、ローカルの./html
をwp側の/usr/share/nginx/html
と繋げます。
これによりwp用のnginx設定はroot = /usr/share/nginx/html/wordpress
とすることができます。 - wordpress-db
MySQL (mariadb)を利用します。
env_file経由でパスワード等を渡します、wordpress起動時に入力が必要です。- wordpress-db.env
MYSQL_ROOT_PASSWORD=(任意のrootパスワード)
MYSQL_USER=(任意のユーザー名)
MYSQL_PASSWORD=(任意のパスワード)
MYSQL_DATABASE=(任意のデータベース名)
nginx.conf
セキュリティ上の理由により、必要な部分のみを抜き出して記述しています。
今回はnginxをリバースプロキシとして利用し、裏のwordpress-fpmにアクセスを振り分けています。
server {
listen 80;
listen [::]:80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
root /usr/share/nginx/html/wordpress;
ssl_certificate /etc/letsencrypt/live/dev.mix64.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/dev.mix64.com/privkey.pem;
server_name dev.mix64.com;
index index.php;
client_max_body_size 512M
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass wordpress-fpm:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
重要なのは fastcgi_pass wordpress-fpm:9000;
の部分で、.phpファイルのcgiはwordpress-fpmの9000ポートに投げるという意味です(FPMはデフォルトで9000ポートを利用する)
なお、デフォルトだとアップロード可能なファイルが1MBまでなので、client_max_body_sizeの設定も入れておくと良いでしょう。
WordPress の設定
docker-composeで起動したらenv_fileで指定したパスワード等を入力します。
この時点で完成ですが、いくつかWordpressに設定を入れたので備忘録として残しておきます。
外観(テーマ)
デフォルトの見た目だと寂しかったので、テーマを入れました。
テーマについては調べれば無料/有料問わず大量に出てくるので割愛します。
自分はシンプルな見た目が好きだったのでSimplicity2を入れました。
https://wp-simplicity.com/simplicity-install/
プラグイン
デフォルトだと目次を表示できないため、プラグインで【Easy Table of Contents】を入れました。
プラグインから検索→インストール→有効化するだけなので簡単でした。