WordPress@docker-composeサブドメイン対応

前回は自宅サーバーのVMWare ESXiにインストールしたUbuntu VMにDockerをインストール、Wordpressで通販サイトをリファクタリングしました。今回は同一VMにサブドメインを追加してdocker-composeで複数のWordpressサイトをデプロイしてみました。

前回の記事は以下リンクから参照することができます。

サブドメインとしては(store.stuffy.site)をUbuntuホスト(shop.stuffy.site)のCNAMEでネームサーバーに登録しました。また、前回デプロイに成功したコンテナイメージと永続ボリュームに加えて mysqlデータベースとWordpressコンテナの対をもう一つ用意しました。

external.zoneファイル

vi stuffy.site.zone
shop IN A 116.58.163.7 store IN A 116.58.163.7

.

internal.zoneファイル

vi in-stuffy.site.zone
shop IN A 192.168.1.230 store IN CNAME shop.stuffy.site.

.

ディレクトリ構成を紹介します。追加したのは mysql2 と data2でファイル構成は mysql dataディレクトリと同じです。

[home]
 [gusachan]
  [wordpress]
    docker-compose.yml
    ・[certs]
    ・[mysql]
      Dockerfile
    ・[data]
       my.cnf
       php.ini
       wp-config.php
      ・[html]
      ・[mysql]
    ・[mysql2]
      Dockerfile
    ・[data2]
       my.cnf
       php.ini
       wp-config.php
      ・[html]
      ・[mysql]

Dockerfile

Dockerfile
FROM mysql:8.0-debian RUN apt-get update && \ apt-get install -y locales RUN locale-gen ja_JP.UTF-8 RUN localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 ENV LANG=ja_JP.UTF-8 ENV TZ=Asia/Tokyo
my.cnf
[mysqld]
skip-name-resolve
datadir=/var/lib/mysql
socket=/var/run/mysql/mysql.sock
secure-file-priv=/var/lib/mysql-files
user=mysql
character-set-server=utf8mb4
mysql_native_password=ON    # MySQL8.0.40 以前のバージョンではエラーが出るのでコメントアウト削除
[client]
socket=/var/run/mysql/mysql.sock
default-character-set=utf8mb4
php.ini
↓(以下を追記)
upload_max_filesize = 128M
post_max_size = 128M
memory_limit = 128M
max_execution_time 300
max_input_time 300

wp-config.php

./data/wp-config.php
define( 'DB_NAME', getenv_docker('WORDPRESS_DB_NAME', 'wordpress000db') ); define( 'DB_USER', getenv_docker('WORDPRESS_DB_USER', 'wordpressuser') ); define( 'DB_PASSWORD', getenv_docker('WORDPRESS_DB_PASSWORD', 'wpuserpass') ); define( 'DB_HOST', getenv_docker('WORDPRESS_DB_HOST', 'mysql000ex1') ); define( 'REDIS_HOST', '172.18.0.5') );
define( 'REDIS_PORT', '6379') );
./data2/wp-config.php define( 'DB_NAME', getenv_docker('WORDPRESS_DB_NAME', 'wordpress000db2') ); define( 'DB_USER', getenv_docker('WORDPRESS_DB_USER', 'wordpressuser2') ); define( 'DB_PASSWORD', getenv_docker('WORDPRESS_DB_PASSWORD', 'wpuserpass2') ); define( 'DB_HOST', getenv_docker('WORDPRESS_DB_HOST', 'mysql000ex2') ); define( 'REDIS_HOST', '172.18.0.6') );
define( 'REDIS_PORT', '6379') );

一度作成したWordpressコンテナはdocker compose down で取り除いても永続ボリュームがあるので消えません。そこに追加のWordpressマニフェストを書き足して docker compose up -d します。

docker-compose.yml
services: wordpress: image: wordpress:latest
#image: gusachan/wordpress:shop hostname: shop.stuffy.site extra_hosts: - "shop.stuffy.site:116.58.163.7" links: - mysql000ex1:mysql - redis ports: - 8080-8084:80 networks: wp000net1: volumes: - ${PWD}/data/html:/var/www/html - ${PWD}/data/php.ini:/usr/local/etc/php/php.ini # 2回目以降docker cpコマンドで持ってきてコメント外す - ${PWD}/data/wp-config.php:/var/www/html/wp-config.php # 2回目以降docker cpコマンドで持ってきてコメント外す depends_on: - mysql000ex1 - redis restart: always environment: WORDPRESS_DB_HOST: mysql000ex1 WORDPRESS_DB_NAME: wordpress000db WORDPRESS_DB_USER: wordpressuser WORDPRESS_DB_PASSWORD: wpuserpass REDIS_HOST: 172.18.0.5 REDIS_PORT: 6379 wordpress2: image: wordpress:latest
#image: gusachan/wordpress:store hostname: store.stuffy.site extra_hosts: - "store.stuffy.site:116.58.163.7" links: - mysql000ex2:mysql
- redis2 ports: - 8085-8089:80 networks: wp000net1: volumes: - ${PWD}/data2/html:/var/www/html - ${PWD}/data2/php.ini:/usr/local/etc/php/php.ini # 2回目以降docker cpコマンドで持ってきてコメント外す - ${PWD}/data2/wp-config.php:/var/www/html/wp-config.php # 2回目以降docker cpコマンドで持ってきてコメント外す depends_on: - mysql000ex2
- redis2 restart: always environment: WORDPRESS_DB_HOST: 172.18.0.4 WORDPRESS_DB_NAME: wordpress000db2 WORDPRESS_DB_USER: wordpressuser2 WORDPRESS_DB_PASSWORD: wpuserpass2 REDIS_HOST: 172.18.0.6 REDIS_PORT: 6379
mysql000ex1: build: context: . dockerfile: ./mysql/Dockerfile #image: gusachan/mysql:shop hostname: mysql000ex1 networks: wp000net1: ipv4_address: 172.18.0.3 ports: - 33006-33010:3306 volumes: - ${PWD}/data/mysql:/var/lib/mysql - ${PWD}/data/my.cnf:/etc/mysql/conf.d/my.cnf restart: always environment: MYSQL_ROOT_PASSWORD: mysqlPassword MYSQL_DATABASE: wordpress000db MYSQL_USER: wordpressuser MYSQL_PASSWORD: wpuserpass TZ: Asia/Tokyo command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci cap_add: # 追加 - SYS_NICE mysql000ex2: build: context: . dockerfile: ./mysql2/Dockerfile #image: gusachan/mysql:store hostname: mysql000ex2 networks: wp000net1: ipv4_address: 172.18.0.4 ports: - 33011-33015:3306 volumes: - ${PWD}/data2/mysql:/var/lib/mysql - ${PWD}/data2/my.cnf:/etc/mysql/conf.d/my.cnf restart: always environment: MYSQL_ROOT_PASSWORD: mysqlPassword2 MYSQL_DATABASE: wordpress000db2 MYSQL_USER: wordpressuser2 MYSQL_PASSWORD: wpuserpass2 TZ: Asia/Tokyo command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci cap_add: # 追加 - SYS_NICE redis: image: redis:latest container_name: redis ports: - "63790:6379" networks: wp000net1: ipv4_address: 172.18.0.5 redis2: image: redis:latest container_name: redis2 ports: - "63791:6379" networks: wp000net1: ipv4_address: 172.18.0.6 https-portal: image: steveltn/https-portal:1 container_name: https-portal ports: - '80:80' - '443:443' links: - mysql000ex1:mysql - wordpress - redis - mysql000ex2:mysql - wordpress2 - redis2 networks: wp000net1: ipv4_address: 172.18.0.100 restart: always volumes: - ${PWD}/certs:/var/lib/https-portal environment: DOMAINS: 'shop.stuffy.site -> http://wordpress:80, shop.stuffy.site -> http://redis:6379, store.stuffy.site -> http://wordpress2:80, store.stuffy.site -> http://redis2:6379' CLIENT_MAX_BODY_SIZE: 16M STAGE: 'production' # 初回'staging'起動以降、本番をするときは'production'にする networks: wp000net1: ipam: driver: default config: - subnet: 172.18.0.0/24 gateway: 172.18.0.1

.

前回からの変更点は、MySQLコンテナ起動後、「mbind: Operation not permitted」が出たので cap_add: – SYS_NICEを追加したことと、https-portal にサブドメインのリバースプロキシ設定を追加したことです。サブドメインのWordpress初回インストールをパスしたら2回目以降、接続エラーが出る前にMySQLコンテナを一旦、docker commit してカスタムイメージを作っておくと楽かもしれません。

今回の成果物は Fujiyama – wooseum | WooCommerce日本語対応テーマ を使って作りました。

https://store.stuffy.site – SHOPレガシー

.

今回は、docker-composeで複数のWordpressコンテナをサブドメインで起動することができました。
まさに「一点突破 全面展開」ですね。こんな所もDockerの可用性の高さ、柔軟性の利点と感じた次第です。では。

同じカテゴリーの記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です