DockerでWordPressなうに使っていいよ。

#DockerのWordPressイメージを公開します。

もし有用なら、GitHub や Docker hub で星を付けて頂けると励みになります。
**※現在CentOSベースで作成していますが、Rocky Linuxに移行する予定です。**

https://github.com/takeyamajp/docker-wordpress
このDockerイメージを使って、いつでも完成度の高いWordPress環境を気軽に作り出す事ができます。

サイト構築やプラグインのテスト環境として最適です。
また、個人レベルの小規模サイトであれば実運用にも耐えられます。

関連するDockerイメージとして、データベース用のMySQL, MariaDB, phpMyAdminなどのイメージも公開しています。
https://github.com/takeyamajp/docker-mysql
https://github.com/takeyamajp/docker-mariadb
https://github.com/takeyamajp/docker-phpmyadmin

また、WordPressで使用する送信専用メールサーバーには以下のDockerイメージがお勧めです。
https://github.com/takeyamajp/docker-postfix
https://qiita.com/takeyamajp/items/be4ccc61862de3b121bf

#概要
このDockerイメージには、以下のような特徴があります。

・タイムゾーンを設定する事ができる。
・httpをhttpsに自動リダイレクトさせる事ができる。
・GZIP圧縮をサポートしている。
・BASIC認証をサポートしている。
・WordPressの基本設定を、このDockerイメージの変数から行う事ができる。
・php-fpmで動作する。

```Dockerfile
FROM centos:centos8
...

ENV TIMEZONE Asia/Tokyo

ENV FORCE_SSL true  
ENV GZIP_COMPRESSION true

ENV BASIC_AUTH false  
ENV BASIC_AUTH_USER user  
ENV BASIC_AUTH_PASSWORD password

ENV HTTPD_SERVER_ADMIN root@localhost  
ENV HTTPD_LOG true  
ENV HTTPD_LOG_LEVEL warn  
ENV HTTPD_PHP_ERROR_LOG true

ENV WORDPRESS_DB_HOST mysql  
ENV WORDPRESS_DB_NAME db  
ENV WORDPRESS_DB_USER user  
ENV WORDPRESS_DB_PASSWORD password  
ENV WORDPRESS_TABLE_PREFIX wp_  
ENV WORDPRESS_DEBUG false  
ENV WORDPRESS_CONFIG_EXTRA param1,param2  
ENV WORDPRESS_CONFIG_EXTRA_VALUE \'string\',true

VOLUME /wordpress

EXPOSE 80  
EXPOSE 443
```
#実行方法
最もシンプルな実行方法を紹介します。

以下の`yml`ファイルを作成してDocker-Composeで実行してください。
（`takeyamajp/mysql`の部分は、`takeyamajp/mariadb`に置き換えることができます。）

その後、任意のブラウザーから`http://localhost:8080/`、もしくは`http://サーバーのIPアドレス:8080/`にアクセスしてください。
（MySQLやMariaDBの初期化処理に数十秒～数分間待つ必要があります。）

```docker-compose.yml
version: '3.1'  
services:  
  wordpress:  
    image: takeyamajp/wordpress  
    ports:  
      - "8080:80"  
    environment:  
      FORCE_SSL: "false"  
  mysql:  
    image: takeyamajp/mysql  
```

#各種設定
##タイムゾーン（TIMEZONE）
サイトで扱われる日時のタイムゾーン設定です。
Linuxで設定可能なタイムゾーンをそのまま設定する事ができます。
日本国内で使用する場合は、設定を変更する必要はありません。

##SSL通信の強制（FORCE_SSL）
httpでアクセスした場合に、自動的にhttpsにリダイレクトする設定です。
簡易のテスト環境を用意する場合など、このDockerイメージを単体で動作させるときは、上記の`docker-compose.yml`ファイルのように`false`に設定してください。

リバースプロキシのバックエンドとして動作させる場合は`true`に設定してください。
（リバースプロキシとhttps通信するためにイメージ内に自己署名のSSL証明書を自動作成します。）

##GZIP圧縮（GZIP_COMPRESSION）
サイトの表示速度を向上させるために、GZIP圧縮を有効にする設定です。
通常は設定を変更する必要はありません。

##BASIC認証（BASIC_AUTH）
一部の人だけがサイトにアクセスできるようにBASIC認証をかける事ができます。
前述の`FORCE_SSL`が`true`になっている場合は、先にhttpsにリダイレクトされた後にBASIC認証が要求されるため、ネット上で認証情報を平文でやりとりする事はありません。

##サーバーの管理者情報（HTTPD_SERVER_ADMIN）
サーバー上でエラーが発生した場合に、エラーページに表示する問い合わせ先情報です。
本番運用する場合は、連絡先のメールアドレスを設定してください。
https://httpd.apache.org/docs/2.4/ja/mod/core.html#serveradmin

##サーバーのログ出力
このDockerイメージで出力されるログは、すべてDocker logsに出力します。
次のコマンド`docker logs -f wordpress`を実行すると、出力されるログをリアルタイムで確認する事ができます。

`HTTPD_LOG`
WEBサーバーのログ出力をするかどうかの設定です。
通常は変更する必要はありません。
出力内容を増減させたい場合は、後述する`HTTPD_LOG_LEVEL`を変更してください。

`HTTPD_LOG_LEVEL`
WEBサーバーのログ出力レベルを８段階で設定します。
通常は変更する必要はありません。
https://httpd.apache.org/docs/2.4/ja/mod/core.html#loglevel

`HTTPD_PHP_ERROR_LOG`
PHPプログラムでエラーが発生した場合にログ出力するかどうかの設定です。
WordPress、プラグインなどでエラーが発生した場合にログが出力されます。
通常は変更する必要はありません。

##WordPressのデータベース設定
ここで事前にデータベース設定をしておけば、初回起動時にデータベースの接続情報を手入力する必要はありません。

`WORDPRESS_DB_HOST`
データベースのホスト名（Dockerのコンテナ名）を設定します。

`WORDPRESS_DB_NAME`
データベース名を設定します。
データベースのコンテナと設定を合わせる必要があります。

`WORDPRESS_DB_USER`
データベースのユーザー名を設定します。
データベースのコンテナと設定を合わせる必要があります。

`WORDPRESS_DB_PASSWORD`
データベースユーザーのパスワードを設定します。
データベースのコンテナと設定を合わせる必要があります。

`WORDPRESS_TABLE_PREFIX`
データベースのテーブル名で使用される接頭辞です。
通常は設定を変更する必要はありません。
１つのデータベースに２つ以上のWordPressデータを保存するときに、WordPressのコンテナ毎に設定を変えてください。

##WordPressの追加設定
`wp-config.php`に自動追加される設定です。
多くの場合、手動でWordPressの設定ファイルを編集する必要は無いでしょう。

例えば、サンプルとして用意されているデフォルト設定では、`wp-config.php`の先頭に以下の行が自動追加されます。

```
// BEGIN CONFIG EXTRA
define('param1', 'string');
define('param2', true);
// END CONFIG EXTRA
```

`WORDPRESS_CONFIG_EXTRA`
カンマ区切りでパラメータ名を設定します。

`WORDPRESS_CONFIG_EXTRA_VALUE`
カンマ区切りでパラメータの値を設定します。
文字列を設定する場合は、カンマ文字をエスケープしてください。

##WordPressのデータを永続化する。
必要に応じて、任意のディレクトリをボリューム`/wordpress`にマウントしてください。

新規の環境を構築する場合は、空ディレクトリをマウントしてください。
既存のWordPressディレクトリをマウントする事で、他の環境からファイルデータを引き継ぐ事ができます。

##WordPressのデバッグ設定
`WORDPRESS_DEBUG`
WordPress自体のデバッグを行う場合に`true`に設定してください。
通常は使用しません。

—
以上です。
それでは良いWordPressライフを。