Let's Encryptを使ってhttpsを使えるようにする

# 概要
何番煎じだろうと思いながらLets Encrypt を使って証明書をセットアップする。
Ubuntu 20.04

# 管理ツールのインストール
`sudo apt -y install certbot`

# 証明書のインストール
【ドメインは自分のものにする】
`sudo certbot --nginx -d mattermost.example.com`

下記のメッセージがでたら今回は「2」を選択した。  
（httpのアクセスは許可せずhttpsにリダイレクトさせる）
```
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
```

# 確認
`/etc/nginx/sites-available/default` の中に `# managed by Certbot` というコメントがついて
設定が追加されていた。

# 設定にエラーが無いか確認
`sudo nginx -t`

以下のようにokが出ればよい。
```
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```

# 設定反映のためnginxの再起動
`sudo systemctl restart nginx `

# 更新のテスト
テスト用サーバを使うので、たまに失敗するみたい。
実際１回目は失敗したけど、２回目は大丈夫だった…
`sudo certbot renew --dry-run`

成功した場合
```
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/mattermost.example.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator nginx, Installer nginx
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for mattermost.example.com
Waiting for verification...
Cleaning up challenges

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/mattermost.example.com/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

``` 
失敗した場合はログを見る。
`sudo less /var/log/letsencrypt/letsencrypt.log`

```
2023-12-06 22:51:52,091:DEBUG:urllib3.connectionpool:https://acme-staging-v02.api.letsencrypt.org:443 "POST /acme/new-order HTTP/1.1" 201 355
2023-12-06 22:51:52,092:DEBUG:acme.client:Received response:
HTTP 201
(snip)
2023-12-06 22:51:52,228:DEBUG:urllib3.connectionpool:https://acme-staging-v02.api.letsencrypt.org:443 "POST /acme/authz-v3/********** HTTP/1.1" 404 106
2023-12-06 22:51:52,229:DEBUG:acme.client:Received response:
HTTP 404
```
認証部分で404エラーが出ていた。
ただ、もう一度実行したら成功したので、失敗した場合は落ち着いて時間をおいてから
再実行するのがよさそう。


# 更新スケジュールの確認
`sudo systemctl status certbot.timer`
```
● certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Mon 2022-11-14 00:09:43 JST; 1 years 0 months ago
    Trigger: Thu 2023-12-07 15:03:49 JST; 3h 40min left
   Triggers: ● certbot.service
```

とりあえずここまでで大丈夫そうなので様子見。

# 参考
[Let's Encrypt](https://letsencrypt.org/ja/)
[【Ubuntu+Nginx】Let's EncryptでSSL証明書を発行してhttps通信を行う](https://qiita.com/shin4488/items/8738e13b92143c88aab6)
[Mattermost の SSL 証明書の更新を Certbot タイマーで行う](https://note.com/hitoshiarakawa/n/nfb93e6dee429)