OpenVPN + Let's Encrypt を順調に入れることが出来たので、調子に乗って NGINX + Let's Encrypt + WordPress にチャレンジしてみる。

Nginx + Let's Encrypt
NGINX はもともと導入されていて Docker 上の WordPress へと転送されている。びっくりするほど重要なサイトじゃなかったが、やはりユーザがいるのでとめたくない。Let's Encrypt の certbot は --standalone で起動すると80 のポートを使用しようとする。
動作中の NGINX と共存させるためには NGINX の機能を間借りすることになる。といっても NGINX には plug-in などは必要ない。certbot の --webroot と --webroot-path オプションを使えば、NGINX の機能を間借りすることが可能だ。
その前に NGINX で特別な location を設定しておく。それ以外は Docker のWordPress に転送される。
さらに certbot 用のシェルプロを書いておく。シェルプロは最終的にsudo で実行される。セキュリティ上危ないのでシェルプロの中身にsudo は書いていない。最初は --dry-run にした方がよいでしょう。
生成された fullchain.pem と privkey.pem を NGINX の設定ファイルから参照するようにする。意外と簡単。NGINX の reload を忘れずに。
WordPress 側の設定(未完)
さて、WordPress 側を設定しましょう。とWordPress の設定を変えた瞬間に WordPress 見えなくなりました。変えたのは WordPress アドレスとサイトアドレス。復旧には 30 分かかりました。
wp-config.php をアドホックに修正
ええ、これ前やったよね。通常は MySQL を見るみたいですがwp-config.php に書いておくと強制的に修正できます。とりあえず復旧するためにアドホックに修正を加えます。運よく Docker の Volume をホストのディレクトリにしてあったので簡単に修正できました。
MySQL のデータベースの中身を変更
不幸なことに MySQL のデータのボリュームは分離していたもののDocker のイメージ内でした。しかたがないので docker exec -it で Docker に入り込みmysql コマンドで wordpress データベースの wp_options のsiteurl と home を元に戻しました。select と update を屈指します。これ where とか間違えて全書き換えしちゃうと元に戻りませんから。作業の前にバックアップしておきましょう。
アドホックな修正は元に戻しておきます。
redirect loop とか
作業していると redirect loop 発生しちゃいました。解決してません。
443
そもそも Docker 構築時に 443 をあけてませんでした。もうだめぽ。Docker ってたぶんセキュリティ上の問題なんだろうけど、あとからポート空けられないんだよね(たぶん)。そのうち、データベース事コピーして Docker のイメージを再度構築しなおします。