新增分拆文件、SOP 與 Caddy SSL 憑證更新紀錄

- 將 hospital_media_antmedia.md 分拆為 docs/ 下五份主題文件
  (host.md, caddy.md, antmedia.md, ssl.md, maintenance.md)
- 新增 README.md / QUICKSTART.md / SUMMARY.md 作為文件入口
- 新增 SOP:Caddy SSL 憑證更新流程 (docs/sop-update-caddy-ssl.md)
  含 2026-04-16 實戰踩坑紀錄(.cer 副檔名、私鑰不匹配、sudo、防火牆 TLS 終端)
- 更新各文件中 tel.tpech.gov.tw 憑證資訊:HiPKI → TWCA,到期 2026-10-30
- 新增 .gitignore 排除 ssl-staging/(含私鑰,不可進 git)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-16 10:54:47 +08:00
parent 7d6a7ef848
commit 97fd841a0c
10 changed files with 1013 additions and 0 deletions

79
docs/caddy.md Normal file
View File

@@ -0,0 +1,79 @@
# Caddy 反向代理
- 部署路徑:`/opt/caddy`
- 使用 `docker-compose.yaml` 管理,`--network host` 模式
- Volume 掛載:`Caddyfile``caddy_data`、SSL 憑證、`tel-server` 靜態檔案
## 操作腳本
```bash
./run.sh # docker-compose up -d
./stop.sh # docker-compose down
./restart.sh # stop + run
./shell.sh # docker exec -it caddy sh
./list-containers.sh # docker-compose ps
./view-output-from-containers.sh # docker-compose logs -f
```
## 路由規則Caddyfile
| 入口 | 後端 | 說明 |
|------|------|------|
| `tel.tpech.gov.tw:443` | `127.0.0.1:8888`php 容器) | 正式環境HTTPS |
| `tel.tpech.gov.tw:443/phpmyadmin/*` | `10.200.251.40:1888` | phpMyAdminstrip prefix 後轉發) |
| `tel.tpech.gov.tw:80` | `127.0.0.1:8888` | 正式環境HTTP |
| `:1443` | `127.0.0.1:6666`php-staging 容器) | 測試環境ISO27001 |
| `tel-server.tpech.gov.tw:80/443` | `/srv/tel-server` | 靜態檔案服務(用於 PKI 驗證 `.well-known` |
| `:443` / `:80` | `127.0.0.1:8888` | 其他網域的 fallback |
| `:8081` | — | 健康檢查(回傳 "I am 8081" |
- `auto_https off`:不使用 Caddy 自動 HTTPS手動管理憑證
## Caddy SSL 憑證
| 項目 | 值 |
|------|-----|
| 網域 | `tel.tpech.gov.tw` |
| 簽發者 | TWCA Secure SSL Certification Authority2026-04-16 起) |
| 有效期 | 2026-04-15 ~ **2026-10-30**(僅半年) |
| 憑證路徑(主機) | `/opt/caddy/fullchain.pem``/opt/caddy/privkey.pem` |
| 憑證路徑(容器內) | `/etc/caddy/ssl/fullchain.pem``/etc/caddy/ssl/privkey.pem` |
> 前一張為中華電信 HiPKI2025-04-23 ~ 2026-04-23已備份至 `/opt/caddy/hospital/ssl_tel_tpech_gov_tw_pre_2026_10_backup/`。
## 更新 Caddy 憑證
完整 SOP 見 [sop-update-caddy-ssl.md](sop-update-caddy-ssl.md)。快速摘要:
```bash
# 1. 上傳新憑證到主機(經 /tmp 中轉避免權限問題)
scp fullchain.pem privkey.pem hospital_media:/tmp/
ssh hospital_media "sudo mv /tmp/fullchain.pem /tmp/privkey.pem /opt/caddy/ && \
sudo chmod 644 /opt/caddy/fullchain.pem && \
sudo chmod 600 /opt/caddy/privkey.pem"
# 2. 重啟 Caddy需要 sudo
ssh hospital_media "cd /opt/caddy && sudo ./restart.sh"
# 3. 驗證(本地連線最可靠,外部可能被防火牆/WAF 攔截)
ssh hospital_media "openssl s_client -connect 127.0.0.1:443 \
-servername tel.tpech.gov.tw </dev/null 2>/dev/null \
| openssl x509 -noout -issuer -dates"
```
> **注意**:醫院前端有防火牆做 TLS 終端,外部 `openssl s_client` 可能看到舊憑證。須另外通知網管更新。
## 憑證備份(`/opt/caddy/hospital/`
| 目錄 | 內容 |
|------|------|
| `hospital/ssl_tel_tpech_gov_tw_2026_10/` | `tel.tpech.gov.tw` 2026 TWCA 憑證cert.zip + fullchain + key |
| `hospital/ssl_tel_tpech_gov_tw_pre_2026_10_backup/` | 更新前的舊 HiPKI 憑證備份 |
| `hospital/ssl_tel_tpech_gov_tw_2025/` | `tel.tpech.gov.tw` 2025 年 HiPKI 憑證key + csr + fullchain |
| `hospital/ssl_tel_server_tpech_gov_tw_2025/` | `tel-server.tpech.gov.tw` 2025 年憑證key + csr + fullchain |
## 相關文件
- [SOP更新 Caddy SSL 憑證](sop-update-caddy-ssl.md)
- [SSL 憑證管理](ssl.md)
- [主機與容器總覽](host.md)