# 📦 環境說明:Docker + Nginx 容器版
本教學適用於:
- ✅ Nginx **不是安裝在宿主機(Ubuntu/CentOS)**,而是
- ✅ **跑在 Docker 容器中(使用 `docker run` 或 `docker-compose` 部署)**。
在這種情況下:
- 憑證與 Nginx 設定檔都在 **容器內部**。
- 需要用 `docker cp`、`docker exec` 操作容器內部的檔案。
- 重啟 Nginx 時要用 `docker restart 容器名`。
> ⚠️ 如果 Nginx 是直接安裝在宿主機,這套流程不適用!
---
[toc]
# ✨ Docker + Nginx 換憑證步驟
## 1. 確認 Nginx 在哪個容器
```bash
sudo docker ps
```

> ✅ 這邊可以看到Nginx 的容器是nginx_nginx_1
## 2. 進入 Nginx 容器
```bash=
sudo docker exec -it nginx_nginx_1 bash
```

> ✅ 有出現root跟對應的docker container ID代表正確進入容器
## 3. 找出 Nginx 設定檔
```bash=
find / -name nginx.conf
```

找不到沒關係,一般來說 Nginx 設定檔會放在
- `/etc/nginx/nginx.conf`
- `/etc/nginx/conf.d/default.conf`
下一步可以從常見位置去搜尋

> ✅ 在這裡 是使用 `/etc/nginx/conf.d/default.conf` 作為主要的設定檔
## 4. 確認 SSL 設定使用的檔案
```bash=
cat /etc/nginx/conf.d/default.conf
```
在 server 區塊應該會看到:

```nginx=
ssl_certificate /etc/letsencrypt/live/aict.nkust.edu.tw/server.crt;
ssl_certificate_key /etc/letsencrypt/live/aict.nkust.edu.tw/server.key;
```
> ✅ 這邊可以得知SSL憑證是放在 `/etc/letsencrypt/live/aict.nkust.edu.tw` 底下,這是要換的新憑證目標位置。
## 5. (在宿主機)合併 server.cer + uca.cer (!!重要)
首先你會拿到電算中心給的檔案

| 檔案 | 類別 |
| -------- | -------- |
| root.cer(或 .crt、.pem) | 根憑證(Root Certificate) |
| uca.cer(或 .crt、.pem) | 中繼憑證(Intermediate Certificate)|
| server.cer(或 .crt、.pem) | 你的伺服器憑證(Server Certificate) |
| server.key | 對應私鑰(Private Key) |
然後你要把檔案丟到小聯盟網頁的ubuntu上,並在上方合併 server.cer + uca.cer
> ⚠️ 注意順序是 server.cer 在前,uca.cer 在後
```bash=
cat server.cer uca.cer > server.crt
```

## 6. 把新的憑證複製進容器
> ⚠️ 記得在複製前要先把舊的進行備份,例如 `mv` 或 `cp` 指令
```bash=
sudo docker cp server.crt nginx_nginx_1:/etc/letsencrypt/live/aict.nkust.edu.tw/server.crt
sudo docker cp nkust.edu.tw.key nginx_nginx_1:/etc/letsencrypt/live/aict.nkust.edu.tw/server.key
sudo docker cp uca.cer nginx_nginx_1:/etc/letsencrypt/live/aict.nkust.edu.tw/uca.cer
sudo docker cp root.cer nginx_nginx_1:/etc/letsencrypt/live/aict.nkust.edu.tw/root.cer
```

> ✅ 有出現Successfully就代表成功了
## 7. reload nginx 或重啟容器
在容器內 reload Nginx:
```bash=
nginx -s reload
```

> ✅ 沒出現錯誤的話代表成功刷新了
如果 reload 有問題,從宿主機重啟容器:
```bash=
sudo docker restart nginx_nginx_1
```

> ✅ 沒出現錯誤的話代表成功刷新了
## 8. 檢查憑證是否成功更新

