合同会社kumanoteのTanakaです。
今回は自社HPをLet's Encryptを使ってHTTPS化したので、そのメモになります。
オープンソースのため、無料で実施できます。
docker で全自動 Let's encrypt - Qiitaこれとかすごいんですが・・・
後々のことを考えて、自分でcertbot使ってやってみることにしました。
nginxのDockerfile
ポイントとしては以下です。
- certbot をインストール
- cron を使って
certbot renew
を行い、証明書のリフレッシュ
FROM debian:jessie
MAINTAINER kumanote,LLC.
RUN apt-get update && \
apt-get install -y apt-transport-https nginx
RUN echo "deb http://ftp.debian.org/debian jessie-backports main" >> /etc/apt/sources.list
RUN apt-get update && \
apt-get install -y certbot -t jessie-backports
RUN mkdir -p /var/www/kumano-te.com
RUN apt-get update && apt-get install -y cron
RUN echo '00 0 * * 6 root /usr/bin/certbot renew >> /var/log/cron.log 2>&1' >> /etc/cron.d/certbot-cron
RUN chmod 0644 /etc/cron.d/certbot-cron
RUN touch /var/log/cron.log
EXPOSE 80 443
CMD cron && nginx -g 'daemon off;'
docker-compose.yml
container内の/var/www/kumano-te.com
フォルダと/etc/letsencrypt
フォルダをマウント(volume)しておきます。
その状態で、nginxのコンテナを立ち上げます。
この際、nginxのhttpのconfファイルに以下を記載しておきます。(/.well-known/acme-challenge/
配下を読み取れるようにするため)
location ^~ /.well-known/acme-challenge/ {
root /var/www/kumano-te.com;
}
そのコンテナに/bin/bash
で接続します。
docker exec -it XXXXX /bin/bash
その後、以下を実行して鍵を作成します。
certbot certonly --webroot -w /var/www/kumano-te.com -d kumano-te.com -d www.kumano-te.com
ここまでで、コンテナ内の/etc/letsencrypt
フォルダにわらわらとファイルが作成されています。
sslのnginx.confの作成とコンテナ再起動
最後に、以下のように、ssl用のnginxのconfファイルに追記して、コンテナを再起動します。
上の手順で作成された、鍵を利用します。
- /etc/letsencrypt/live/kumano-te.com/fullchain.pem
- /etc/letsencrypt/live/kumano-te.com/privkey.pem
ssl on;
ssl_certificate /etc/letsencrypt/live/kumano-te.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/kumano-te.com/privkey.pem;
ssl_prefer_server_ciphers on;
ssl_ciphers 'ECDH !aNULL !eNULL !SSLv2 !SSLv3';
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";
これで、はれてhttps化を行うことができました。
以上になります。