目標
docker-composeでnginx:alpineでwebサーバーを構築している。letsencryptでSSL化しているが、サーバー証明書が3か月しか持たない。これを自動更新することを目標とする。
- docker-composeでnginx:alpineを起動
- certbot をインストールしてSSL証明書を自動更新
コード
#/mnt/disk/server/www/docker/cron.sh
#!/bin/bash
docker exec -it <nginxコンテナ名> apk add certbot
docker exec -it <nginxコンテナ名> certbot certonly --webroot -w /var/www/certbot -d <ドメイン名> -n
$ crontab -e
0 9 * * * /mnt/disk/server/www/docker/cron.sh
certbotをインストールしようと、DockerfileにRUN apk add certbotとしてみたり、スクリプトを書いて/docker-entrypoint.d/に配置してみたりしたがうまくいかず、最終的にdockerの外から更新する上記に落ち着いた。
証明書は/etc/letsencryptで管理されているので、これをnginxでvolumeマウントするようにすればOK。
なお、証明書を更新したらサーバーの再起動をお忘れなく。