この手順で構築したWEBサーバーを使用する。
・ ディストリビューション: Amazon Linux 2023.1.20230825 ・ インスタンスタイプ: t3a.nano ・ ボリュームサイズ: 20GB
python3の仮想環境を使用してcertbotをインストールする。
※この手順作成時はpython3.9だった
# dnf install pip # mkdir /opt/certbot # python3 -m venv /opt/certbot # /opt/certbot/bin/pip install --upgrade pip # /opt/certbot/bin/pip install certbot
ACMEチャレンジのための設定を追加する。
server { listen 80; listen [::]:80; server_name _; location = /.well-known/acme-challenge/ { root /usr/share/nginx/html/.well-known/acme-challenge/; } }
証明書を取得する。
※何度も失敗すると制限がかかるので予め--dry-run
オプションを指定してテストした方が良い
/opt/certbot/bin/certbot certonly --webroot -w /usr/share/nginx/html/ -d testapp.example.com
Nginxの設定ファイルを変更する。
server { listen 443 ssl; listen [::]:443 ssl; server_name testapp.example.com; ssl_certificate /etc/letsencrypt/live/testapp.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/testapp.example.com/privkey.pem; location / { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://localhost:3000/; } }
Nginxの設定をリロードしてhttpsでの接続を確認する。
# systemctl reload nginx
cronに証明書を更新するジョブを追加する。
0 4 * * * /opt/certbot/bin/certbot renew --deploy-hook "systemctl reload nginx"