# 正式环境双地域部署 验收记录(2026-09-24) > 对应计划:docs/plans/2026-09-24-正式环境双地域部署.md(用户确认后执行)。 > 版本:`photo-live-server:30a3520-20260924`(commit 30a3520,含 nginx entrypoint 补丁正式化); > web 双版本 `photo-live-web:30a3520-20260924-ov` / `-cn`(VITE_VIEWER_BASE 分域构建)。 ## 1. 部署形态(结果) | 机 | 域名 | 栈 | 外网验证 | | --- | --- | --- | --- | | cn 101.37.116.184(Rocky 9.6, 2C/3.5G) | live-album.inside.hnxinyouhe.com | photo-live-cn:api-cn/worker/sync/web + 自管 mysql:8.4(调优)/redis:7,web@127.0.0.1:18088 | `/v1/health` ok;`/admin/` 200 | | ov 47.254.176.10(Debian 13, 2C/7.4G) | live-album.outside.hnxinyouhe.com | photo-live-ov:api-ov/web-ov + 自管 mysql:8.4/redis:7,web@127.0.0.1:18089,mysql 公网映射 13306(等安全组) | `/v1/health` ok;根 302 | 入口:两机 1Panel OpenResty 站点(用户自建)+ Let's Encrypt 证书 + 强制 HTTPS; 反代配置确认含 Upgrade/Connection 头。SSH 通道:`photo-ov` 走 ProxyJump 跳板 8.152.213.143(ov 安全组白名单了它;cn→ov 22/443 亦可达);`photo-cn` 直连。 均用 `~/.ssh/id_ed25519`(cms-cj-deploy)。 ## 2. 验证结果(全部通过) - **prod-smoke 四点冒烟 9/9 PASS**:双端 health、真实密码登录、建时间戳相册 → OSS presign PUT(3118B 真实上传,G1 桶凭证复用)→ complete → worker 处理 → **cn 公开 0s 可见 → ov 公开 0s 可见(跨境 HMAC 推送端到端)**;清理软删 ✓。 - WS:`/v1/realtime` 经 OpenResty→web→api-ov 升级 101 ✓。 - CORS:第三方 Origin 无 Access-Control-Allow-Origin(收窄生效)✓。 - sync 日志:outbox batch pushed(acceptedEventIds 落 ov inbox)✓。 - 迁移:cn/ov 两库 migrate deploy 全量应用;seed-admin created admin (active) ✓。 - NTP:两机均同步(阿里云内部 NTP,HMAC ±300s 前提)✓。 ## 3. 与准备件的偏差(实际落地) 1. compose 自管 mysql:8.4 + redis:7(两机 1Panel MySQL 均为 5.7.44 不满足基线), 独立桥网络 photo-net,与机上既有项目(tracker/cc-ai-kefu/cms-cj/loan-reminder 等)零接触。 2. web 回环端口 18089(ov)/18088(cn)——8089 两机都被 1Panel phpMyAdmin 占用。 3. cn mysql 调优:performance-schema=OFF + innodb-buffer-pool-size=128M (cn 仅 3.5G 内存,栈占用实测 ~495M,available ~1.0G)。 4. ov mysql 公网映射 0.0.0.0:13306(sync 直连读库:对账+统计回传;**安全组未放行前 这两循环持续幂等重试**,内容推送走 API 443 不受影响)。 5. `docker/web.Dockerfile` 正式化 entrypoint ipv6 脚本移除(commit 30a3520;钉版本仍待办)。 6. **嵌入组件源修正(用户问询触发)**:cn 后台镜像的 `VITE_EMBED_ORIGIN` 初版误配 cn 域名(嵌入代码会让国外站从国内机加载 loader + 轮询数据,跨境慢)——重构建 `photo-live-web:30a3520-20260924-cn2` 改指 `https://live-album.outside.hnxinyouhe.com` 并热切 cn web 容器(仅 web、~10s,用户确认后执行)。嵌入架构口径:**嵌入代码一律 引用 ov 域名**(公开读归 ov;loader.js ov 200/9.4KB 实测)。 ## 4. 遗留与待办 - **[用户操作] ov 安全组放行 TCP/13306 ← 101.37.116.184**——放行后 sync 的 reconcile(5min 对账)与 stat return(60s 统计回传)即自愈(幂等重试中)。 - **[用户决策] cn 机 2G swap**:机器级改动经用户确认后再做(当前 1.0G available 无 swap,worker sharp 峰值有 OOM 风险;建议做)。 - **[用户操作] uniservice 首批用户同步**:12h 间隔下重启后首批要等——后台「手动同步」 按钮触发(或等定时)。 - gitea push 待令牌(本会话推送认证失败;commit 30a3520 未推送,镜像已直传服务器)。 - 服务器无源码 clone(部署走镜像传输);后续更新流程待 gitea 令牌后补 `git pull` 工作流。 - 磁盘两机均 ~85%(cn 5.6G/ov 5.7G 余)——长期扩容建议已登记。 - 既有风险提醒(未动):cn 机 1Panel MySQL 5.7 绑 0.0.0.0:3306 公网暴露,建议收口。 - 密钥管理:全部新生成(SYNC_INTERNAL_KEY/mysql×4/ADMIN_PASSWORD),本地 `.env.prod-secrets/`(gitignore)+ 两机 `.env*`(600)。ADMIN 密码建议首次登录后 经后台修改(env 值仅 seed 用)。 ## 5. 运维备忘(本次新增坑位) - cn/ov 入口均为 1Panel OpenResty 站点(用户面板管理,续期由 1Panel 负责); 容器操作走 `docker compose -f /opt/photo-live/deploy/docker-compose-{cn,ov}.yml`。 - 本机→ov 文件传输走 `scp photo-ov:`(自动过跳板);226MB 镜像包约 4 分钟。 - 重建 api 容器后 web 需一并 restart(既有坑位,本次未触发——首装 up 一次成型)。