dockerコンテナとして起動しているWEBサーバーのLet's EncriptのSSL証明書を更新する

# はじめに
以前、下記URLの記事を書いてほぼ無料でhttpsで接続できるWEBサーバーを起動してから3か月が経過した。
SSL証明書にはLet's Encriptというサービスを使用しており、これは無料で使える利点がある反面、3か月で証明書の期限が切れるので3か月ごとに更新作業を行わなくてはならない。
そのため、今回はその更新作業手順を掲載する。
なおWEBサイトのダウンタイムは発生しない。

https://qiita.com/y-do/items/bd2db9fdd4e7b039da89

# 手順概要
おおまかな手順は以下の3点となる。

1. 更新前のSSL証明書の期限を確認
1. WEBサーバーに80番ポートでアクセスできるようにする
1. WEBサーバーが起動しているdockerコンテナに入る
1. SSL証明書更新コマンドを実行する
1. 更新後のSSL証明書の期限を確認

## 1. 更新前のSSL証明書の期限を確認
以下の通り、2021/02/18が期限となっているのを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273110/0f44b5e9-04a5-5ee7-96b4-0517bc9edc64.png)

## 2. WEBサーバーに80番ポートでアクセスできるようにする
SSL証明書の更新時に80番ポートにアクセスに来るので80番ポートを空けておく必要がある。
私の環境ではWEBサーバーはAWSのEC2で稼働しているので、AWSの画面を操作して80番ポートを開放する。

EC2の画面でセキュリティグループを押下する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273110/7e5b831a-019e-21f3-e874-20606b069ef9.png)

インバウンドルールにHTTPが存在しているか確認する。存在しなければ「インバウンドルールを編集」を押下して追加する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273110/b5d649c1-1dd7-2d09-7dd1-64926b56e48b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273110/c3fcb589-1478-36d1-3085-54afac366907.png)

## 3. WEBサーバーが起動しているdockerコンテナに入る
docker nameを確認

```bash
docker ps -a
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                                      NAMES
495abedbe13e        reverse-ploxy_reverse-proxy   "entrypoint.sh wait-…"   2 months ago        Up 2 months         0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   reverse-proxy
```

docker nameを指定してbashでログインする

```bash
docker exec -it reverse-proxy bash
root@495abedbe13e:/#
```

## 4. SSL証明書更新コマンドを実行する
下記コマンドを実行する

```bash
certbot-auto renew
```

実行結果

```bash
root@495abedbe13e:/# certbot-auto renew
Upgrading certbot-auto 1.9.0 to 1.12.0...
Replacing certbot-auto...
Your system is not supported by certbot-auto anymore.
certbot-auto and its Certbot installation will no longer receive updates.
You will not receive any bug fixes including those fixing server compatibility
or security problems.
Please visit https://certbot.eff.org/ to check for other alternatives.
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/y-do.tk.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator nginx, Installer nginx
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for y-do.tk
Waiting for verification...
Cleaning up challenges

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/y-do.tk/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/y-do.tk/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
root@495abedbe13e:/#

```
## 5. 更新後のSSL証明書の期限を確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273110/276dd814-3db9-989e-31a3-f976a1a9a952.png)

# まとめ
簡単な作業だけでSSL証明書を更新することが出来た。
しかし3か月ごとに更新をしないといけない。