# 環境構築
参考:
- [Dockerを使ってサクッとHTTPS対応WordPress環境を構築する | 気さくなエンジニ屋](https://4mo.co/start-wordpress-with-docker/#check-container-log)
- [Apacheでマルチドメイン証明書で複数のSSLサイトを構成する](https://ssl-process.com/support/etc/apache_multidomain/index.php)
- [proxies - Reverse proxy and auto_complete with mixed content - Drupal Answers](https://drupal.stackexchange.com/questions/309701/reverse-proxy-and-auto-complete-with-mixed-content)
##### 環境
- CentOS Stream 9 (ホスト環境)
- ホストに Apache 2.4.53をインストール済み
- SSL証明書として Let's Encrypt を利用
- ホストに対してhttps通信が可能
- ホストのグローバルIPアドレスに関連付けされたドメイン名を取得済み
- Docker 20.10.21 がインストール済み
##### 構成
```
--->[ホストのApache]--->[WordPressコンテナ]<---->[MYSQLコンテナ]
```
##### 方針
WordPress用に新しくサブドメインを登録する。
そのサブドメインにアクセスしてきたら、Apacheに設定したリバースプロキシでWordPressコンテナに通信を転送する。
また、SSL証明書はホスト上のApacheにて設定する。
##### サブドメイン登録
このページに書かれている方法でサブドメインを登録する。[[ネットワーク:サブドメイン|サブドメイン参考]]
以下では「abc.example.com」を例に記載する。
##### SSL証明書の発行
下記のコマンドを実行してSSL証明書を発行する。
```
$ certbot certonly --webroot -w <ドキュメントルート> -d abc.example.com
```
##### Apacheの設定
「/etc/httpd/conf.d/ssl.conf」に下記を追記する。
```
ServerName wp.sirokujira.com
SSLEngine on
SSLProtocol all
SSLCertificateFile <証明書の絶対パス>/cert.pem
SSLCertificateKeyFile <証明書の絶対パス>/privkey.pem
SSLCertificateChainFile <証明書の絶対パス>/chain.pem
ProxyPreserveHost On
ProxyPass / http://localhost:8082/
ProxyPassReverse / http://localhost:8082/
RequestHeader set X-Forwarded-Proto "https" ※1
RequestHeader set X-Forwarded-Port "443" ※1
※1. この設定がないと、混在コンテンツとなりjavascriptやcss等が正常に読み込まれない
```
設定ファイルを編集後、下記のApacheを再起動する。
```
$ sudo systemctl restart httpd
```
##### docker-compose.yml の作成
任意のディレクトリで下記内容の「docker-compose.yml」を作成する。
```
version: '3'
services:
wordpress:
image: wordpress:php8.0-apache
container_name: wordpress
ports:
- 8082:80
volumes:
- ./wp-data:/var/www/html
environment:
WORDPRESS_DB_HOST: wordpress-db
WORDPRESS_DB_USER: <ユーザ名>
WORDPRESS_DB_PASSWORD: <パスワード>
WORDPRESS_DB_NAME:
depends_on:
- wordpress-db
restart: always
wordpress-db:
image: mysql:8.0
container_name: wordpress-db
ports:
- 3308:3306
environment:
TZ: Asia/Tokyo
MYSQL_ROOT_PASSWORD: <ルートパスワード>
MYSQL_DATABASE:
MYSQL_USER: <ユーザ名>
MYSQL_PASSWORD: <パスワード>
volumes:
- ./db-data:/var/lib/mysql
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
restart: always
```
##### コンテナ作成
```
$ docker-compose up -d
```
コマンド実行後、WordPress と MySQL の接続に数十秒かかる。
その後、%%「https://abc.example.com」%%にアクセスして、WordPressのインストール画面が表示されること