
Dockerで動かしているMattermostのSSL証明書ってどうやって更新するんでしょうか。
MattermostはDocker上で動かすことができます。
公式の手順に沿って進めるだけで、数分もあればLet’s Encryptを使ってSSLに対応させた状態で立ち上げることができます。
そのLet’s Encrypt発行のSSL証明書を更新する場合、どうするのが確実か悩むところだと思います。
この記事を読めばその解決策が分かります。
先に結論を申しますと……

ホストマシンでコマンドを使って更新することになります。
私の環境においてちょうどSSL証明書が期限切れになっていたので試してみたところうまく更新されたので動作確認も済んでいます。
ぜひ試してみてください。
実行するコマンド
ホストマシンで実行するコマンドは下記になります。
コマンドを実行する前にMattermost用のディレクトリに移動しておいてください。
いきなり更新するのは怖いのでまずはdry-runしてみます。
sudo docker run --rm --name certbot --network mattermost \
-v "${PWD}/certs/etc/letsencrypt:/etc/letsencrypt" \
-v "${PWD}/certs/lib/letsencrypt:/var/lib/letsencrypt" \
-v shared-webroot:/usr/share/nginx/html \
certbot/certbot renew --webroot-path /usr/share/nginx/html --dry-run
dry-runで問題ないことが確認できたら更新します。
sudo docker run --rm --name certbot --network mattermost \
-v "${PWD}/certs/etc/letsencrypt:/etc/letsencrypt" \
-v "${PWD}/certs/lib/letsencrypt:/var/lib/letsencrypt" \
-v shared-webroot:/usr/share/nginx/html \
certbot/certbot renew --webroot-path /usr/share/nginx/html
更新が問題なく終わったらコンテナを再起動して更新されたSSL証明書を反映させます。
sudo docker-compose -f docker-compose.yml -f docker-compose.nginx.yml restart
参考にしたサイト
実際の結果
うちの環境で実行した際の結果です。
一部、伏せ字や画像処理をしております。
予めご了承ください。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/xxxxx.xxxxx.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Simulating renewal of an existing certificate for xxxxx.xxxxx.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
/etc/letsencrypt/live/xxxxx.xxxxx.com/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
問題なく有効期限が更新されました。


まとめ
Docker版Mattermostを構築する際に使うSSL証明書取得用のスクリプトはスタンドアローンモードで証明書を取得します。
その後、同スクリプト内でウェブルートモードで更新ができるように設定ファイルを書き換えています。
ウェブルートのディレクトリはdocker volumeとして複数のコンテナで使い回せるようにしているので今回のようなことができるみたいです。
なかなか奥深いですね。
当ブログでは他にもMattermost関連の記事を公開しています。
こちらもあわせてご覧ください。





コメント