LoginSignup
39
40

More than 5 years have passed since last update.

Docker + nginxでLet's Encrypt

Last updated at Posted at 2017-08-22

合同会社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化を行うことができました。

以上になります。

39
40
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
40