From 2b7e56b9b38e59c9a8594d3d3828ea13985176ea Mon Sep 17 00:00:00 2001 From: "34047007@qq.com" <34047007@qq.com> Date: Mon, 10 Aug 2026 07:11:08 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20prod=20compose=20=E5=90=8C=E6=AD=A5=20?= =?UTF-8?q?TLS/Caddy=20+=20gitea=20=E5=9F=9F=E5=90=8D=EF=BC=88=E5=9B=9E?= =?UTF-8?q?=E6=B5=81=E6=9C=8D=E5=8A=A1=E5=99=A8=E6=9C=AC=E5=9C=B0=E6=94=B9?= =?UTF-8?q?=E5=8A=A8=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 服务器 8-09 直接手改的 TLS/Caddy 改动从未提交 gitea,git-ify checkout 会覆盖丢失 HTTPS。回流 3 处差异: - frontend 宿主端口 80:80 → 127.0.0.1:8080:80(8080 收紧) - gitea 域名 123.207.9.209 → gitea.oncolit.gonsun.com - 新增 caddy 服务(80/443 + Caddyfile 卷)+ caddy_data/caddy_config 卷 Caddyfile 加入仓库根;docs/16 记 v17 回流规则。 --- Caddyfile | 7 +++++++ docker-compose.prod.yml | 35 ++++++++++++++++++++++++++++------- docs/16-部署运维方案.md | 6 ++++-- 3 files changed, 39 insertions(+), 9 deletions(-) create mode 100644 Caddyfile diff --git a/Caddyfile b/Caddyfile new file mode 100644 index 0000000..34ce92f --- /dev/null +++ b/Caddyfile @@ -0,0 +1,7 @@ +oncolit.gonsun.com { + reverse_proxy frontend:80 +} + +gitea.oncolit.gonsun.com { + reverse_proxy gitea:3000 +} diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index 6922ba4..0277bbc 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -246,7 +246,7 @@ services: environment: VITE_API_BASE: /api/v1 ports: - - "80:80" + - "127.0.0.1:8080:80" volumes: - /var/log/scilit/nginx:/var/log/nginx depends_on: @@ -272,18 +272,39 @@ services: GITEA__database__NAME: gitea GITEA__database__USER: gitea GITEA__database__PASSWD: gitea_pass_2026 - GITEA__server__DOMAIN: 123.207.9.209 + GITEA__server__DOMAIN: gitea.oncolit.gonsun.com GITEA__server__HTTP_PORT: 3000 - GITEA__server__ROOT_URL: http://123.207.9.209:3000 - GITEA__server__START_SSH_SERVER: "true" - GITEA__server__SSH_DOMAIN: 123.207.9.209 + GITEA__server__ROOT_URL: https://gitea.oncolit.gonsun.com/ + GITEA__server__START_SSH_SERVER: true + GITEA__server__SSH_DOMAIN: gitea.oncolit.gonsun.com GITEA__server__SSH_PORT: 2222 GITEA__server__SSH_LISTEN_PORT: 22 ports: - - "3000:3000" - - "2222:22" + - 3000:3000 + - 2222:22 + + + caddy: + image: caddy:2-alpine + networks: + - scilit + ports: + - "80:80" + - "443:443" + volumes: + - ./Caddyfile:/etc/caddy/Caddyfile:ro + - caddy_data:/data + - caddy_config:/config + restart: unless-stopped + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "3" volumes: + caddy_data: + caddy_config: pgdata: redisdata: esdata: diff --git a/docs/16-部署运维方案.md b/docs/16-部署运维方案.md index abc521b..120e837 100644 --- a/docs/16-部署运维方案.md +++ b/docs/16-部署运维方案.md @@ -1,10 +1,11 @@ # 部署运维方案:生产工程化(一期 + 二期) -> **日期:** 2026-08-08(v16 更新于 2026-08-10) -> **版本:** v16.0(当前) **状态:** 一期 3 项已执行(磁盘/备份/TLS)+ 构建加速(Dockerfile 卫生)+ gitea TLS,其余待执行 +> **日期:** 2026-08-08(v17 更新于 2026-08-10) +> **版本:** v17.0(当前) **状态:** 一期 3 项已执行(磁盘/备份/TLS)+ 构建加速(Dockerfile 卫生)+ gitea TLS,其余待执行 > **关联:** [docs/10-生产部署文档.md](10-生产部署文档.md)、[docs/11-20260717部署事故分析.md](11-20260717部署事故分析.md)、[docs/12-部署实际操作记录.md](12-部署实际操作记录.md)、[docs/17-生产数据迁移.md](17-生产数据迁移.md)(24 迁移专项,2026-08-09) > > **版本记录:** +> - **v17** — 2026-08-10:§7 补「服务器本地改动必须回流 gitea」环节(TLS/Caddy 改动从未提交,git-ify checkout 会丢 HTTPS——回流后服务器 git pull 才安全,与 §2 闭环) > - **v16** — 2026-08-10:§3 补批量迁移执行序 + destructive ordering(批次 1 日期收窄须与发代码同窗口);§7 补 gitea TLS 落地;§6 补构建加速落地(腾讯 pip/npm 源 + BuildKit,详见记忆 docker_build_optimization) > - **v1** — 初稿(生产工程化框架,一期 + 二期) > - **v2** — 吸收三档补强:破坏性迁移硬判定、backup.sh 上机查清、扩对盘、compose 范围澄清、挂卷后 logrotate、pre-deploy 快照留存、registry token 轮换、alembic head 采集、增强级 @@ -130,6 +131,7 @@ - **验证**:`curl -k https://oncolit.gonsun.com` → 200 + 前端 HTML;`/health` 经 Caddy→nginx→backend 返回 `db: ok`;证书 CN=oncolit.gonsun.com,90 天自动续期 - **⚠️ frontend 宿主 8080 已收紧(2026-08-09)**:`8080:80` → **`127.0.0.1:8080:80`**(只绑回环,公网无法直连绕过 Caddy;排障时本机 `curl 127.0.0.1:8080` 仍可用;Caddy 经 Docker 网络走 `frontend:80` 不受影响)。安全组仍建议只放行 80/443(禁 3000/2222 对公网),在腾讯云控制台配置 - **✅ gitea TLS 已落地(2026-08-09)**:DNS 已加 `gitea.oncolit.gonsun.com` → `123.207.9.209`;Caddyfile gitea 子站块已启用(`gitea.oncolit.gonsun.com { reverse_proxy gitea:3000 }`),证书经 tls-alpn-01 自动签发;gitea `ROOT_URL`/`DOMAIN`/`SSH_DOMAIN` 已改 `https://gitea.oncolit.gonsun.com`。**⚠️ 本地 git remote 需同步改 https**:`http://123.207.9.209:3000/scilit/backend` → `https://gitea.oncolit.gonsun.com/scilit/backend`;SSH clone 地址变为 `gitea.oncolit.gonsun.com:2222` +- **⚠️ 服务器本地改动必须回流 gitea(v17 补,2026-08-10)**:TLS/Caddy 全链路改动(compose frontend→8080、caddy 服务+卷、Caddyfile、gitea 域名、`127.0.0.1:8080` 收紧)是 **2026-08-09 直接在服务器上手改的,从未提交到 gitea**(实测:服务器 `docker-compose.prod.yml` 与仓库版 diff 35 行,仓库版还是 `80:80` + `123.207.9.209` + 无 caddy 服务;`Caddyfile` 服务器 8-09 版也不在仓库根)。**后果**:服务器一旦 git-ify checkout 仓库版,这些改动被覆盖 → **HTTPS/Caddy/gitea 域名全丢**。**环节(v17 新增,与 §2"服务器 git pull"闭环)**:①把服务器 `docker-compose.prod.yml`(TLS 版)取回本地覆盖仓库版、`Caddyfile` 加入仓库根 → 提交 `chore: prod compose 同步 TLS/Caddy + gitea 域名` → `git push`(gitea 成为权威,含 TLS);②服务器 git-ify:`yum install git` + `git init -b main` + `remote add origin` + `git fetch && git checkout --force origin/main`(被跟踪文件覆盖为最新,未跟踪的 `.env`/`tmp_*.py` 保留)→ `docker compose config --quiet` 验证 caddy 服务仍在。**此后日常更新 = `git pull`,杜绝手工改与仓库不一致**(对齐 hotfix.sh 的"强制回流"纪律) - **未做**:registry 的 TLS(二期 §2——registry 走明文 HTTP,公网 IP 下 token 有嗅探面,须监听内网或加 TLS)。前端 nginx 容器内直接终止的路线①未采用 - **⚠️ 域名前提**:Caddy 自动 HTTPS 要求域名 DNS 已解析到本机(oncolit.gonsun.com → 123.207.9.209 ✓)