Dockerでフル(ドメイン、SSL対応)のWordPress環境を構築
この記事は前回からの続きとなります。
前回では、サーバーに「Docker」と「docker-compose」を使用出来る状態までにしました。
今回は実際に「docker-compose」のyamlを記述してコンテナを作成します。
この記事の対象者
前回も記載しましたが、Dockerについての詳細な説明はしておりません。
なので、以下の内容はある程度知識として持っておくと理解出来ると思います。
- Linuxサーバーを自分で用意できる
- ドメイン(ホスト)を取得できる
- サーバーに「SSH」でアクセス出来る
- Docker(docker-compose)の簡単な知識がある
- サーバーは「IntelCPU」を想定して、CPUが「Arm」の場合は別の設定となります
「docker-compose.yml」の設定
「Docker」のコンテナイメージを管理する「docker-compose.yml」を作成します。
「docker-compose.yml」とは、Dockerのコンテナの設定を記述して、コマンドを実行すると記述した内容のコンテナが一気に作成されるようになります。
これの利点はどのサーバーでも同じものが作成されるようになるため、使い回しが出来てサーバー構築の工数が短縮されます。
ただしサーバーのCPUが異なる場合は動作しない事もあるため、そのCPU専用の設定記述が存在します。
今回は「IntelCPU」を想定した設定で解説します。
まずは「docker-compose.yml」を作成して以下の内容を記述します。
version: "3.8"
services:
# NginxProxy 以下がバーチャルホストを管理するコンテナとなります。
nginx-proxy:
image: jwilder/nginx-proxy:latest
container_name: nginx-proxy
privileged: true
ports:
- "80:80"
- "443:443"
environment:
- DEFAULT_HOST=example.com # デフォルトでアクセスするホスト名を記述します
volumes:
- proxy:/etc/nginx/vhost.d
- proxy:/usr/share/nginx/html
- ./nginx-proxy/conf.d/custom_proxy_settings.conf:/etc/nginx/conf.d/custom_proxy_settings.conf # nginxの設定ファイルをマウントします。
- ./nginx-proxy/logs:/var/log/nginx # Dockerのapacheの設定ファイルをマウントします。
- /var/run/docker.sock:/tmp/docker.sock:ro
- ./certs:/etc/nginx/certs:ro
restart: always
networks:
- app-net
- default
labels:
com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: ""
# SSL証明書を管理するコンテナとなります。(Let's Encrypt)
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: lets-encrypt
restart: always
depends_on:
- nginx-proxy
volumes:
- proxy:/etc/nginx/vhost.d
- proxy:/usr/share/nginx/html
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./certs:/etc/nginx/certs:rw
environment:
- NGINX_PROXY_CONTAINER=nginx-proxy
networks:
- app-net
- default
# WordPressのコンテナとなります。
wordpress:
build:
context: ./Php
dockerfile: Dockerfile
container_name: wordpress
depends_on:
- wordpressdb
restart: always
expose:
- 80
- 443
environment:
WORDPRESS_DB_HOST: wordpressdb
WORDPRESS_DB_USER: wp_user
WORDPRESS_DB_PASSWORD: password # データベースのパスワードを設定します。
WORDPRESS_DB_NAME: wordpress
VIRTUAL_HOST: example.com # このWordPressにアクセスするホスト名を設定します。
VIRTUAL_PORT: 80
LETSENCRYPT_HOST: example.com # このWordPressにアクセスするホスト名を設定します。
LETSENCRYPT_EMAIL: info@example.com
volumes:
- ./wordpress/html:/var/www/html # ここにWordPressのソースコードのフォルダのマウントとなります。
- ./wordpress/log:/var/log/apache2 # Dockerのapacheの設定ファイルをマウントします。
- ./Php/php.ini:/usr/local/etc/php/php.ini # PHPの設定ファイルをマウントします。
networks:
- app-net
- default
# WordPressで使用するデータベースのコンテナ
wordpressdb:
image: mariadb
restart: always
volumes:
- ./wp_mariadb/db_data:/docker-entrypoint-initdb.d
- ./wp_mariadb/data:/var/lib/mysql
- ./wp_mariadb/logs:/var/log/mysql
- ./wp_mariadb/conf.d/my.cnf:/etc/mysql/conf.d/my.cnf
expose:
- 3306
ports:
- 3306:3306
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wp_user
MYSQL_PASSWORD: password # データベースのパスワードを設定します。
MYSQL_ROOT_PASSWORD: root_password # データベースのRootパスワードを設定します。
TZ: Asia/Tokyo
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
networks:
- app-net
- default
# phpMyAdminのコンテナ
phpmyadmin:
image: phpmyadmin/phpmyadmin
depends_on:
- wordpressdb
restart: always
expose:
- 88
ports:
- 88:80
volumes:
- ./wp_phpmyadmin/sessions:/sessions
environment:
PMA_ARBITRARY: 1
PMA_HOST: wordpressdb
PMA_USER: root
PMA_PASSWORD: root_password # データベースのRootパスワードを設定します。
networks:
- app-net
- default
# 共有ネットワーク
networks:
app-net:
driver: bridge
# マウントボリューム
volumes:
db_data:
proxy:
上記について解説します。
「nginx-proxy」では、バーチャルホストの管理を行います。
ここで「example.com」にアクセスした場合に「wordpress」のコンテナにアクセスするようになります。
「letsencrypt」では、SSL証明書を管理し、WordPressのサイトが「https」でアクセスできるようになります。
「wordpress」は、そのままWordPressのイメージとなります。
接続するデータベースの設定やアクセスするドメインやSSLのドメインを設定します。 Dockerイメージを作成すると「wordpress/html」にWordPressのソースファイル一式が作成されます。
「wordpressdb」はWordPressで使用するデータベースのコンテナとなります。
接続するデータベースのパスワードとRootのパスワードを設定しておいてください。
「phpmyadmin」は、「phpMyAdmin」というツールのコンテナとなります。
これを使用する場合はサーバーのポートの「88」を開けておく必要があります。
また以下のファイルをそれぞれ作成しておきます。
「Dockerfile」の設定
FROM wordpress:6.1.1-php8.2-apache
# Run apt command
RUN apt-get update \
&& apt-get install -y \
g++ \
libicu-dev \
libpq-dev \
libzip-dev \
unzip \
zip \
zlib1g-dev \
libonig-dev \
vim
# CP php.ini
RUN cp /usr/local/etc/php/php.ini-development /usr/local/etc/php/php.ini
CMD ["apache2-foreground"]
「wordpress:6.1.1-php8.2-apache」のイメージファイル名は、こちらを元に最新の情報を確認してください。
「custom_proxy_settings.conf」の設定
client_max_body_size 10g;
proxy_request_buffering off;
proxy_buffers 8 32K;
proxy_buffer_size 32k;
proxy_busy_buffers_size 64k;
設定としてはファイルのアップロードのサイズを変更して、セッションを保持して画面遷移する場合にヘッダーのサイズが大きい場合にエラーが表示される事があるため、サイズを変更して対処しております。
「php.ini」の設定
「php.ini」はデフォルトのものから必要に応じて変更したファイルを用意します。
ファイルの内容が長いため、ここからダウンロードしてください。
※上記の「php.ini」はアップロードできるファイルサイズを変更してるものとなります。
ファイル構成
上記作成設定したファイルは以下のファイル構成にします。
docker-compose.yml
nginx-proxy/
conf.d/
custom_proxy_settings.conf
Php/
Dockerfile
php.ini
サーバーへアップロード
上記で用意したファイル一式をサーバーにアップロードします。
WinSCPやFileZiila等のアップロードツールでサーバーに接続して、適当な場所にフォルダを作成します。
例えば「/home/{ログインユーザー}/docker」などとします。
そこに上記のファイル一式をアップロードします。
「Docker」の起動
SSHでサーバーに接続して、上記作成したフォルダに移動します。
$ cd /home/{ログインユーザー}/docker
以下のコマンドを入力することでDockerイメージが作成して起動します。
$ docker-compose up -d
これでブラウザでドメインにアクセスするとWordPressの初期化画面が表示されたら成功となります。
エラーが発生した場合はエラー内容を確認して対応をしてください。
サーバーのログ
このDockerには「wordpress/log」と「nginx-proxy/logs」にそれぞれのログを出力するようにしております。
これによりサーバーのエラー時にログで確認する事ができます。
保守などで使用してください。