個人サーバーなどのHTTPS化やなんかに便利なLet's Encryptですが、
Docker環境ならインストールレスでサクッとwebroot認証して証明書取得できたのでメモします。
条件
- Dockerインストール済み
- DNS設定済み
- 外部から80番ポートで到達可能
スクリプト
以下、foo.example.comの80番にアクセス可能な状態のサーバー上で実行する例です。
ついでにbar.example.comという別名も付けています。
#!/bin/sh docker run -d --name tmp-nginx \ -v /tmp/webroot:/usr/share/nginx/html \ -p 80:80 \ nginx:alpine docker run -it --rm --name certbot \ -v /etc/letsencrypt:/etc/letsencrypt \ -v /tmp/webroot:/tmp/webroot \ certbot/certbot certonly \ --email hoge@example.com \ --agree-tos \ --webroot \ -w /tmp/webroot \ -d foo.example.com \ -d bar.example.com docker rm $(docker stop tmp-nginx)
成功したら
ホスト側の /etc/letsencrypt 下に証明書が作成されるので、
そのままメインのnginxコンテナにマウントするなりすればOKです。
証明書の更新も同じスクリプトを再実行するだけでOKだと思います。
まとめ
certbotのコンテナ使うのは職場の先輩から教えてもらったのですが、
webroot認証用のnginxも一時コンテナで立ててしまえば良いのではと思った次第でした。