Dockerコンテナ越しのSSL/TLS証明書の自動更新

2019年5月に、ブログをマイグレーションしたのですが、SSL/TLS証明書の自動更新設定をまだしていなかったので、先日実施しました。

手順を簡単にまとめます。

SSL/TLS証明書の取得

このブログはdocker composeを使って下記3つのコンテナが動いています。

  • WordPressのコンテナ
  • Nginxのコンテナ
  • MySQLのコンテナ

CertbotをNginxのコンテナにインストールしてあり、証明書の取得と更新はこのコンテナで実行します。

Certbotのインストール方法や使い方は割愛しますが、取り急ぎ証明書のみの取得は下記のコマンドで行えます。

certbot certonly

あまりコンテナの中に入ってコマンドを打ちたくない場合は下記

docker container exec -it NGINX_CONTAINER_NAME certbot certonly

自動更新の設定

Certbotでの証明書更新は下記のコマンドで行います。

certbot renew

ホスト側から実行する場合は下記↓

docker container exec -it NGINX_CONTAINER_NAME certbot renew

自動更新の設定はホスト側のCronで行います。

# Cronの編集
crontab -e

# 下記のような感じで追記
30 4 * * * docker container exec -it NGINX_CONTAINER_NAME certbot renew > /var/log/certbot_job.log 2>&1

毎日AM4:30にNginxのコンテナに対して certbot renew コマンドを実行。実行結果は /var/log/certbot_job.log へログファイルとして書き出すようにしています。こうしてロギングしていれば、万が一エラーが発生した場合の調査に役立ちます。

まとめ

そろそろ静的ジェネレータに移行するか、少なくとも固定額制のVPSに移りたいですね。。今は現プロジェクトで手一杯なので、そのうちがんばります。