干し石榴長文用

長文以外はTumblrへ徐々に移します。

DockerでLet's Encryptの証明書を取得するスクリプト

個人サーバーなどの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も一時コンテナで立ててしまえば良いのではと思った次第でした。