Docker+Nginx+DjangoでLet’sEncryptを更新する

タグ: ,

ハマってしまったのでメモ。

Dockerで作った運用中の環境でLet’s encryptを更新する方法

certbot renewではstandaloneとwebrootの2種類の方法で更新できます。

standaloneを利用する場合はポート80と443を閉じる必要があり、nginxを止めないといけないため運用中の場合はこの方法は好ましくない

そのため、webrootを利用します。

webrootを使うと下記にファイルを作成しアクセスできると更新が可能となり、webサーバーを止める必要がありません。

http://domain/.well-known/acme-challenge/{適当な文字列}
今回の環境では、三つのコンテナがあります。
  • Djangoが動くコンテナ
  • nginxのコンテナ
  • mysqlのコンテナ

 

nginxの設定ファイルを更新

下記を追加。

location ^~ /.well-known/acme-challenge/ {
  default_type "text/plain";
  alias /.well-known/acme-challenge/;
}

docker-compose.ymlを修正

nginx:
  image: nginx
  volumes:
    ...
    - ./.well-known/acme-challenge/:/.well-known/acme-challenge/

プロジェクトの.well-known/acme-challengeとvolumeに追加nginxからアクセスできるようにします。

完了

あとは下記を実行

cert certonly --webroot -w /path/to/ -d example.com

certbot-autoかは環境に合わせて実行する

-wにはプロジェクトのルートのパスを指定

-dはドメイン

これでここにアクセスできるようになるので無事更新されます。

http://example.com/.well-known/acme-challenge/{適当な文字列}

お仕事の相談

フリーランスエンジニアをお探しでしたらこちらよりご連絡ください お仕事の相談