ハマってしまったのでメモ。
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/{適当な文字列}
フロントエンド開発でお困りのことはありませんか?
フロントエンドの開発支援を行っています。
・Reactの開発をお願いしたい
・コーディング作業を依頼したい
・javascriptライブラリを作って欲しい。
上記以外にも何かありましたらお気軽にお問い合わせください。