Docker: Nginxを使ったWordPress開発環境の構築方法

DockerでNginxを使ったWordPressの開発環境を構築する方法を紹介します。

構成は次の通りですが、違うバージョンが欲しい場合は使用するイメージを変えればOKです。

  • WordPress 最新(5.1.1)
  • Nginx 安定版(1.15)
  • PHP7.3-FPM
  • MySQL5.7

使用するイメージ

全て安心と信頼のオフィシャルイメージを使います。

ファイル構成

今回のファイル構成は次の通りです。

  • 任意のフォルダ/
    • docker-compose.yml
    • .env
    • nginx/
      • nginx.conf
      • cond.d/
        • default.conf

ファイル作成

Docker-Compose.ymlの作成

./dokcer-compose.ymlは次のように作成します。

  • MySQL と WordPress はデータが消えないようにホストマシンにマウントして永続化します。
  • Nginx設定ファイルの nginx.conf と conf.d/*.conf は自前で用意したものをマウントします。
  • Nginxのログ・ディレクトリはデバッグしやすいようにホストマシンにマウントします。
##
# 構成: MySQL5.7 + WordPress + PHP7.3-fpm + Nginx
version: '3'
services:

# MySQLサービス
mysql:
image: mysql:5.7
volumes:
- ./mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
- MYSQL_USER=${MYSQL_USER}
- MYSQL_PASSWORD=${MYSQL_PASSWORD}
- MYSQL_DATABASE=${MYSQL_DATABASE}
restart: always

# WordPress+PHP7.3-FPMサービス
wordpress:
image: wordpress:php7.3-fpm
environment:
- WORDPRESS_DB_HOST=${WORDPRESS_DB_HOST}
- WORDPRESS_DB_USER=${WORDPRESS_DB_USER}
- WORDPRESS_DB_PASSWORD=${WORDPRESS_DB_PASSWORD}
- WORDPRESS_DB_NAME=${WORDPRESS_DB_NAME}
volumes:
- ./wordpress:/var/www/html
depends_on:
- mysql
restart: always

# Nginxサービス
nginx:
image: nginx:stable
ports:
- '${NGINX_HOST_PORT_80}:80'
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/log:/var/log/nginx
- ./wordpress:/var/www/html
depends_on:
- wordpress
restart: always

.envの作成

続いて設定値用の .env ファイルを同ディレクトリに作成します。

  • Nginxのホスト側のポートは、任意に変えてください。
# mysql
MYSQL_ROOT_PASSWORD=password
MYSQL_USER=root
MYSQL_PASSWORD=password
MYSQL_DATABASE=wordpress

# wordpress
WORDPRESS_DB_HOST=mysql
WORDPRESS_DB_USER=root
WORDPRESS_DB_PASSWORD=password
WORDPRESS_DB_NAME=wordpress

# nginx
NGINX_HOST_PORT_80=50080

nginx.confの作成

nginxの基本設定ファイルである nginx/nginx.conf を作成します。内容は下のような感じです。

user nginx;
worker_processes auto;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

include /etc/nginx/conf.d/*.conf;
}

default.confの作成

nginxのサーバー設定ファイルである nginx/conf.d/default.conf を作成します。内容は下のような感じです。

server {
listen 80;
server_name 127.0.0.1;

root /var/www/html;
index index.php;

access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

location / {
try_files $uri $uri/ /index.php?$args;
}

location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass wordpress:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}

起動

docker-compose.yml を配置したフォルダに移動して、docker composeを実行します。

$ docker-compose up

立ち上がったら、localhost:50080(ポートは.envで指定したもの) にアクセスして、WordPressが起動することを確認します。

永続化の確認

今回はMySQLとWordPressを永続化しているのでデータは消えないはずですが、一応確認します。

まず何か記事を追加します。

続いて、Docker Composeを終了します。

$ docker-compose down

再度立ち上げます。

$ docker-compose up

WordPressの記事が残っていれば、バッチリです。

参考

https://github.com/mjstealey/wordpress-nginx-docker

以上です。