76380477a0
Co-Authored-By: Claude Code <noreply@anthropic.com>
4.8 KiB
4.8 KiB
正式环境双地域部署 验收记录(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. 与准备件的偏差(实际落地)
- compose 自管 mysql:8.4 + redis:7(两机 1Panel MySQL 均为 5.7.44 不满足基线), 独立桥网络 photo-net,与机上既有项目(tracker/cc-ai-kefu/cms-cj/loan-reminder 等)零接触。
- web 回环端口 18089(ov)/18088(cn)——8089 两机都被 1Panel phpMyAdmin 占用。
- cn mysql 调优:performance-schema=OFF + innodb-buffer-pool-size=128M (cn 仅 3.5G 内存,栈占用实测 ~495M,available ~1.0G)。
- ov mysql 公网映射 0.0.0.0:13306(sync 直连读库:对账+统计回传;安全组未放行前 这两循环持续幂等重试,内容推送走 API 443 不受影响)。
docker/web.Dockerfile正式化 entrypoint ipv6 脚本移除(commit 30a3520;钉版本仍待办)。- 嵌入组件源修正(用户问询触发):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 一次成型)。