【Docker】Nginx + WordPress FPM で簡単にブログを建てる

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】を入れました。
プラグインから検索→インストール→有効化するだけなので簡単でした。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする