---
# System prepended metadata

title: 實驗室系網及雙週報網頁TLS憑證更新流程

---

# 📦 環境說明：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
```

![圖片1](https://hackmd.io/_uploads/S1SIQTTkxl.png)

> ✅ 這邊可以看到Nginx 的容器是nginx_nginx_1

## 2. 進入 Nginx 容器

```bash=
sudo docker exec -it nginx_nginx_1 bash
```

![圖片2](https://hackmd.io/_uploads/HygcySap1lg.png)

> ✅ 有出現root跟對應的docker container ID代表正確進入容器

## 3. 找出 Nginx 設定檔

```bash=
find / -name nginx.conf
```

![圖片3](https://hackmd.io/_uploads/rysuSpp1lg.png)

找不到沒關係，一般來說 Nginx 設定檔會放在

- `/etc/nginx/nginx.conf`
- `/etc/nginx/conf.d/default.conf`

下一步可以從常見位置去搜尋

![圖片4](https://hackmd.io/_uploads/S11nHTayex.png)

> ✅ 在這裡 是使用 `/etc/nginx/conf.d/default.conf` 作為主要的設定檔

## 4. 確認 SSL 設定使用的檔案

```bash=
cat /etc/nginx/conf.d/default.conf
```

在 server 區塊應該會看到：

![圖片5](https://hackmd.io/_uploads/B1ErIaaygx.png)


```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 (!!重要)

首先你會拿到電算中心給的檔案

![圖片6](https://hackmd.io/_uploads/rydcIa6yel.png)

| 檔案 | 類別 |
| -------- | -------- |
| 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
```

![圖片7](https://hackmd.io/_uploads/B1iFwppyxg.png)

## 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
```

![圖片8](https://hackmd.io/_uploads/rJH7dpakgl.png)


> ✅ 有出現Successfully就代表成功了

## 7. reload nginx 或重啟容器

在容器內 reload Nginx：

```bash=
nginx -s reload
```

![圖片9](https://hackmd.io/_uploads/r11SuTTylx.png)

> ✅ 沒出現錯誤的話代表成功刷新了

如果 reload 有問題，從宿主機重啟容器：

```bash=
sudo docker restart nginx_nginx_1
```

![圖片10](https://hackmd.io/_uploads/r1HKOapJxg.png)

> ✅ 沒出現錯誤的話代表成功刷新了

## 8. 檢查憑證是否成功更新

![圖片11](https://hackmd.io/_uploads/SyBod6Tkex.png)

![圖片12](https://hackmd.io/_uploads/BJ2a_apJxl.png)
