なぜかちょいちょい WordPress と MySQL の接続ができなくなる現象が発生していて、結構な負担になっていたこともあって、前々から構成変更したいと思っていた。
もともとは、CentOS のイメージ上にスクラッチで WordPress に必要なものを構築していき、MySQL も docker コンテナとして稼働させていたのだが、これを下記のような構成に変更した。
- Web 側は結局 WordPress しか使っていないので潔く wordpress イメージを使って完全に wordpress 専用に
- docker 設定などは基本的に git で管理するが、コンテナのビルドで自動的に展開されるものは永続化せず git に含めないため
/var/www/htmlに相当する部分は docker コンテナにまかせて git 管理しない - wp-content は永続化しないとデフォルトテンプレートのインストールが毎回走ってしまって無駄なテンプレートがインストールされてしまうので永続化し、git 管理の対象にする
- wp-uploads は当然永続化が必要だが、git 管理からは除し、他の手段で外部にバックアップする
- docker 設定などは基本的に git で管理するが、コンテナのビルドで自動的に展開されるものは永続化せず git に含めないため
- MySQL は現状では WordPress しか使っておらず、 docker コンテナとするメリットがほとんど思いつかなかったので、ホストサーバで直接稼働させることに
- 将来的に複数の MySQL を使う必要が出てきたら、改めてコンテナ化を考える
- ついでに、MySQL は WordPress コンテナからしか接続されない想定なので、TCP での接続は無しとして 、UNIX ドメインソケットのみ有効とした
結果として docker-compose.yml は下記のようにかなりシンプルな内容になった。
services:
wordpress:
build: docker
container_name: wp
ports:
- 127.0.0.1:9000:80
volumes:
- ./wp-content:/var/www/html/wp-content
- ./uploads:/var/www/html/wp-content/uploads
- /var/lib/mysql:/var/lib/mysql
- ./docker/php.ini:/usr/local/etc/php/php.ini
- ./logs/apache:/var/log/apache2
environment:
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: XXX
WORDPRESS_DB_PASSWORD: XXX
WORDPRESS_DB_HOST: localhost:/var/lib/mysql/mysql.sock
restart: always
いろいろと細かい調整が必要だったので、docker/Dockerfile は下記のようになった
FROM wordpress:php8.3-apache
# www-data の UID をホストの UID とあわせる
RUN usermod -u 500 www-data && groupmod -g 500 www-data
# 既存の Apache のログ設定をコメントアウト
RUN sed -i 's|^\s*CustomLog|#CustomLog|g' /etc/apache2/sites-available/000-default.conf \
&& sed -i 's|^\s*ErrorLog|#ErrorLog|g' /etc/apache2/apache2.conf
# Apache のログ設定を追加
RUN echo 'CustomLog "|/usr/bin/rotatelogs /var/log/apache2/access_log.%Y%m%d 86400 540" combined' >> /etc/apache2/sites-available/000-default.conf \
&& echo 'ErrorLog "|/usr/bin/rotatelogs /var/log/apache2/error_log.%Y%m%d 86400 540"' >> /etc/apache2/apache2.conf
# other_vhosts_access.log の出力をしない
RUN a2disconf other-vhosts-access-log
# ServerName警告対策
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf
しれっと、ついでに PHP-8.3 を使うようにして WordPress でサジェスチョンされる更新をすべて実施。
体感でも分かるくらい速くなったw
コメント