さくらVPSで独自ドメインをSSL化と更新の自動化をした。docker-composeのリバースプロキシにて。

この記事は約6分で読めます。

さくらVPS上で、DockerComposeにてリバースプロキシを立ち上げ、独自ドメインをSSL化および、自動更新されるように設定をしていきます。

本記事は、以下記事の摘要及び続きの自動化の部分を記します。

スポンサーリンク

前回までの記事

https://it.hasethblog.com/archives/267

https://it.hasethblog.com/archives/286

スポンサーリンク

①独自ドメインのDNS設定

取得したドメインのネームサーバをさくらで使われているネームサーバに向けます。

ドメインのゾーン情報を編集したい | さくらのサポート情報
前提条件ゾーン情報の新規登録さくらのレンタルサーバで利用する場合対象ドメインをさくらインターネットで契約されている場合対象ドメインを他社で契約されている場合さくらのレンタルサーバ以外(さくらのVPS、さくらの専用サーバPHY、他社サーバー等)で利用する場合対象ドメインをさくらイン

 

さくらのDNS設定

次にさくらの会員メニューから、ドメインコントロールセンターを開きます。
リストにあるネームサーバサービスから「ネームサーバ新規登録」をクリックします。

登録するドメイン名を入力します。
サブドメインであれば、サブドメインを入力しましょう。

以下の画像のように追加されました。
当該ドメインの右端にある「ゾーン」をクリックします。

次にDNSレコードを編集するため、「さくらのDNSに設定する(詳細設定)」にある「追加して設定」をクリックします。

Aレコードを追加します。
エントリ名は、ドメイン(サブドメイン等)を入力します。
IPアドレスは、さくらVPSの管理画面の当該サーバのリストにあるIPアドレスを入力します。

それぞれ入力したら、「追加」をクリックします。

追加されたのを確認できたら「保存」をクリックし完了です。

 

②HTTPアクセスさせる

リバースプロキシのnginx構成ファイルを編集します。
以下のようにserver_nameにドメインを取得して、プロキシパスに内部リソースを指定します。

server {
    listen 80;
    server_name example.com;
    location / {
         proxy_pass http://webapp01-web-1/;
         proxy_redirect off;
    }
}

構成やdocker-compose.ymlは前回までの記事と同様のため詳細は、以下よりご参照ください。

DockerコンテナでCertbotを使ってHTTP-01 チャレンジする方法(無停止更新の準備)
はじめに Dockerのコンテナにて、リバースプロキシを構築しましたが、次に Let's Encryptを利用し、外部・リバースプロキシ間をSSL化します。 Let's Encryptにて証明書の発行、更新できるように構築にはいくつかの方式...

confに上記記述をした後、リバースプロキシのnginxサービスを再起動すれば反映されます。
これでhttpにおいて指定のドメインでアクセスして期待するページが表示されれば成功です。

③証明書を発行・更新確認

以下の通りCertbotのインストールし、証明書をHTTP01チャレンジにて発行します。

https://it.hasethblog.com/archives/267

sudo certbot certonly --webroot -w /home/docker/reverse-proxy/certbot/www -d example.com

発行された証明書やシンボリックリンクが本来配置したい場所からズレてしまうので、それぞれバインドマウントしているホストディレクトリに移動させます。

そして、アクセス権限やrenewalにて証明書の設定を一部修正します。
詳細は以下ページにて記してあります。

Docker ComposeのリバースプロキシでHTTP-01 チャレンジからHTTPSでアクセスするまでの方法。
はじめに 本記事は、前記事の続きとなります。 前回は、DockerComposeを使用してリバプロを立てた後、Let's Encryptの証明書を発行し、CertBotを使用したHTTP-01チャレンジの認証から証明書の発行まで行いました。...

以下コマンドで更新処理を実行できます。更新は期限30日前以降しかできないため、その旨の警告が表示されるだけで実際は更新されません。

sudo certbot renew --cert-name example.com

 --force-renewal

オプションを使用することで強制的に更新します。
更新された後変更したパスにて処理が走れば成功です。

④HTTPSでアクセス

リバースプロキシのnginxのconfファイルにhttpsアクセスの記述を行います。
証明書の場所はリバースプロキシのコンテナ内でのパスを参照します。

server {
    listen 80;
    server_name example.com;
    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }
    location / {
        return 301 https://$host$request_uri;
    }
}
server {
    listen 443 ssl;
    server_name example.com;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location / {
        proxy_pass http://webapp02-web-1/;
        proxy_redirect off;
    }
}

これで、https:// example.com のようにアクセスすれば問題なくアクセスでき、

⑤自動更新の設定

Let’sEncryptは、90日毎に証明書有効期限があります。手動で更新は煩雑すぎるため自動にて設定します。

docker-composeにて、以下を記述します。
私は、リバースプロキシの記述のあるdocker-compose.ymlに追記しました。

  certbot:
    image: certbot/certbot
    volumes:
      - ./certbot/conf/live:/etc/letsencrypt/live
      - ./certbot/www:/var/www/certbot
      - ./certbot/conf/archive:/etc/letsencrypt/archive
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew --webroot -w /var/www/certbot; sleep 12h & wait $${!}; done;'"
    networks:
      - reverse-proxy-network
    restart: always

reverse-proxyと同様に、live及びarchive、acmeチャレンジ用のバインドマウントをします。

スクリプトの処理は、12時間毎にwebrootにて証明書更新を試みるようになっています。
(証明書更新の試行し、12時間スリープ、再度試行の無限ループ)

更新試行は証明書の有効期限30日前までは自動でキャンセルされ、30日前になると更新されるような仕組みです。

関連記事

 

DockerコンテナでCertbotを使ってHTTP-01 チャレンジする方法(無停止更新の準備)
はじめに Dockerのコンテナにて、リバースプロキシを構築しましたが、次に Let's Encryptを利用し、外部・リバースプロキシ間をSSL化します。 Let's Encryptにて証明書の発行、更新できるように構築にはいくつかの方式...
Docker ComposeのリバースプロキシでHTTP-01 チャレンジからHTTPSでアクセスするまでの方法。
はじめに 本記事は、前記事の続きとなります。 前回は、DockerComposeを使用してリバプロを立てた後、Let's Encryptの証明書を発行し、CertBotを使用したHTTP-01チャレンジの認証から証明書の発行まで行いました。...

コメント

スポンサーリンク
スポンサーリンク
タイトルとURLをコピーしました