docker
HTTPS
letsencrypt

docker で全自動 Let's encrypt

More than 1 year has passed since last update.

https-portal があまり知られてないようなので紹介記事だけ書いとく。

https://github.com/SteveLTN/https-portal

あなたがすでにhttpで動作するサービスのdockerコンテナを持ってるなら、こいつを docker-compose に加えるだけで https 対応は完了。

え?

加えるだけで完了。

まじです。


https-portal は何をするものか

基本的には https のリクエストを受け取り、他のコンテナの http へ転送するリバースプロキシとして動作する nginx である。

ところで https を提供するには証明書の取得、設定などが必要だが、こいつはそれを全自動でやってくれる。

え?

証明書の取得、設定を全自動でやってくれる。

まじです。

期間延長も自動でやってくれるらしい。

まあとにかく便利なので、 Let's encrypt したい人は使わない手はないですね。


設定方法

冒頭のURL見れば全部書いてあるので改めて書くこと何もないのだけど、 Quick Start のとこだけコピペしてざっくり解説しておくと、

https-portal:

image: steveltn/https-portal:1.0.0
ports:
- '80:80'
- '443:443'
links:
- wordpress
restart: always
environment:
DOMAINS: 'wordpress.example.com -> http://wordpress'
# STAGE: 'production'
# FORCE_RENEW: 'true'

wordpress:
image: wordpress
links:
- db:mysql

db:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: '<a secure password>'

という感じ。 wordpress と db のとこは、おのおの公開したいwebサービスの設定と置き換わる。ポイントとなるのは https-portal.environment のあたり。

    DOMAINS: 'wordpress.example.com -> http://wordpress'

左側が実際に公開したいドメイン名。 (当たり前だけどドメインは事前に取得しておく必要があり、 Let's encrypt が所有権を確認するためにはあらかじめDNSを設定しておく必要がある)

-> の右側は docker のコンテナ名。https-portal が受け取ったリクエストをこのURLへリダイレクトし、レスポンスをまたsslにして返却してくれるという感じ。

# STAGE: 'production'

これコメントアウトしておくと、Let's encrypt せずに、オレオレ証明書を用いたhttps プロキシとして動作してくれるのでまずはこれでローカル環境などで動作確認をする。うまくhttps通信ができることを確認できたら、コメントを外してパブリックな環境にデプロイし、DNSを向けると、自動的に証明書を取得、設定してくれる。