# 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` | phpMyAdmin(strip prefix 後轉發) | | `tel.tpech.gov.tw:80` | `127.0.0.1:8888` | 正式環境,HTTP | | `:1443` | `127.0.0.1:6666`(php-staging 容器,網站根目錄 `/opt/php-staging/www`) | 測試環境(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 Authority(2026-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` | > 前一張為中華電信 HiPKI(2025-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 \ | 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)