Dockerの勉強も兼ねて、WordpressをDockerを使って動かしてみようと思考していて、Wordpressのコンテナイメージを用いれば手っ取り早いけど、SSL化しようとするとNginxなどでリバースプロキシを使わないといけなそうで、その場合はX-Forwarded-Protoヘッダを用いて...などとなると結構面倒そうだった。
ので、NginxとPHP(PHP-FPM)とMySQLのDockerイメージに加えて、Let's Encryptの証明書を追加できるようにしたdocker-composeを作ってみた。
NginxとPHP(PHP-FPM)とMySQLの3つのコンテナに分けたのは、1コンテナ1プロセスに則ってみただけ。これが良いのかはわからない。NginxとPHP-FPMは同居しても良かったかもしれない。
Wordpressは別途ホストOS側でシェルスクリプトを使ってダウンロードして、PHP(FPM)コンテナにボリュームマウントし、その領域をNginxコンテナにも共有するようにしている。
Nginxコンテナは、初回起動時は自己証明書を作成してLet's Encryptの証明書を配置するディレクトリへコピーしてボリュームマウントした状態で起動させておき、コンテナ起動後にホストOS側でシェルスクリプトを使ってLet's Encryptの証明書を取得して、差し替えるようにしている。 ホストOS側でLet's Encryptの証明書の更新してNignxコンテナを再起動するcronを登録しておく必要がある。
Nginxの設定ファイルserver_nameやLet's Encryptの証明書取得スクリプト内に記載されているドメインのところをうまく変数化したいがまだうまくいっていないので修正したいところ。
まとめ
Nginx+PHP(fpm)+MySQLのDockerコンテナイメージに、Let's Encryptの証明書を利用できるようにしたdocker-composeを作ってみた。 このやり方が良いのかはわからないけど、いろいろと機能を使いながらやってみたのでDockerの勉強にはなった。