継続的デプロイと継続認証のコンテナ

 DockerコンテナでLet's Encryptと継続的デプロイをなにも考えずに組み合わせたら大失敗だった。Let's Encryptには証明書取得数の上限があった。
https://absurd.azurewebsites.net/Article/118

 上記の問題を、証明書を外部ボリュームに入れて運用するDockerイメージを作ることで解決した。
https://github.com/hMatoba/cdcc

 下記はコンテナホスティングサービスHyper.sh上で、このDockerイメージを作って運用するときのdocker-compose。証明書を自動で取りに行って、WebアプリをHTTPS運用するコンテナとしてよしなにやってくれる。
docker-compose.yml

version: '2'

services:
cdcc:
image: matoba/cdcc
ports:
- '80:80'
- '443:443'
fip: 199.245.56.122
size: s4
links:
- webapp:webapp1
volumes:
- cdcc:/etc/letsencrypt
environment:
DOMAIN: 'example.com'
E_MAIL: 'foobar@example.com'
LINK_NAME: 'webapp1'
webapp:
image: some_webapp
ports:
- '80:80'
comment: 0

Let's Encryptで証明書を取ってみた(DockerのNginXコンテナ(Alpine)から)

 タイトルの通り、Let's Encryptで証明書を取ってみた。DockerのNginXコンテナ(Alpine)から。メモ。ちなみにHyper.shでコンテナのホスティングは行っている。なのでコンテナを動かすコマンド体系はHyper.sh準拠。ほぼDockerコマンドのまんま。

 まずコンテナを用意。
hyper run -d --name foo -p 80:80 -p 443:443 nginx:alpine


 IPをつける。DNS設定はしてあるものとする。
hyper fip attach xxx.xxx.xxx.xxx foo


 NginXコンテナが動いていて、そこへDNS設定してあるIPをつけたのだからアクセスできるはず。URLを入れてアクセスできるか確認しておく。



 コンテナへ入る。
hyper exec -it foo /bin/sh


 認証を実行してくれるライブラリを入れる。
apk update

apk add certbot


 下記でヘルプが表示される。
certbot -h


 すでにこのコンテナではNginXが動いている。デフォルトの設定で。だからcertbotには、NginXを使った認証コマンドを実行してもらう。
certbot certonly --webroot -w /usr/share/nginx/html -d hmatoba.net

これでインストラクションに従って入力していくだけ。成功すれば発行されたというメッセージとともにファイルが出力される。


 自動化のために、インストラクションで進める形はやめて、オプションを与えていかなければならない。しかしまあ証明書は取れた。めでたしめでたし。
comment: 0