部署、回滚与故障恢复
预发布部署闸门
先为 PostgreSQL 与 Artifact Store 创建一致恢复点,记录 Release 和 Contract 版本,并确保只有一个迁移 Job。进入 gamex-panel 目录执行:
npm ci
npm test
npm run typecheck
npm run lint
npm run format:check
npm run build
npm run db:status
npm run db:migrate
npm run db:checkdb:check 用于确认当前 Schema 已完整应用。首个稳定版发布前,Panel 与 Registry 只支持全新安装:Setup 会拒绝任何非空数据库,Daemon 注册也只接受当前 v1 Contract。不要直接改数据库来“修复”失败检查。
先启动一个 Panel Canary,验证 readiness、Panel-only Chat、任务 SSE 回放、一次无副作用 Workspace 读取和一次 Daemon 重连,再逐个滚动副本。
回滚决策
预发布阶段回滚应用时,必须同时恢复与该应用版本匹配的数据库和 Artifact Store 恢复点。数据库回滚是独立决策,不能自动触发:
- 停止全部 Panel Writer,并让 Daemon 与恢复控制面断开。
- 创建新的协调备份。
- 在隔离环境恢复副本并执行 Down Migration。
- 执行
npm run db:check,核对历史任务数量与内容。 - 演练成功后,才可在目标停写环境执行
npm run db:rollback。
恢复完成后,逐条核对 Automation 的 Owner、Workspace assignment 和固定动作,再决定是否启用 Schedule。
Redis 故障与多 Panel
PostgreSQL 始终是 Agent Turn、Schedule、命令、事件、Worker Lease 和 Outbox 的事实库。Redis 故障会使 readiness 失败,负载均衡器应停止向该副本送入新流量。数据库围栏 Worker 继续保护持久状态,但登录刷新、共享速率限制、单例维护和唤醒提示会降级。不要临时把各副本切成彼此独立的内存 Cache。恢复 Redis 后,等 readiness 正常并检查任务 SSE 游标与 Worker backlog,再恢复流量。
同一个逻辑 Panel 的全部副本共用 deployment UUID,但 Gateway instance ID 必须唯一。把数据库复制到不同 marker 下会 Fail Closed。只有明确创建独立环境时才使用 PANEL_IDENTITY_RESEED=true;它会创建新的私有数据 namespace,不能作为普通重启修复。
Daemon 离线与重连
Daemon 离线时不要复制命令。新的 Gateway Owner 会取得更高 Connection Epoch;Daemon Journal 会返回已记录结果,不会重复副作用。先在主机检查:
sudo gamex doctor
sudo curl --unix-socket /run/gamex-daemon/admin.sock http://localhost/status
sudo systemctl status gamex-daemon@gamex.servicePanel 或 Daemon 重启后,允许旧默认 Lease 最多约 45 秒到期;90 秒内仍未恢复 controlConnected: true 才按故障处理。客户端身份只能用管理员签发的一次性轮换 Link 配合 sudo gamex rotate 更新。
备份与恢复
PostgreSQL 与不可变 Artifact 对象必须作为同一恢复点备份。单 Panel SQLite 部署应停止 Panel 后一起复制数据库、WAL 和共享内存文件,或使用 SQLite 在线备份命令。逻辑 Panel identity marker 与 Gateway 信任材料应单独受限备份。复制 Daemon Journal 的数据库、WAL 和共享内存文件前先停止 Daemon;Journal 备份不是 Workspace Volume 备份。
按以下顺序恢复到隔离环境:PostgreSQL/SQLite、Artifact Store、逻辑 Panel 身份、新 Redis、Gateway 材料。启动前运行 npm run db:check、抽样 Artifact 摘要检查和 Audit/Event 连续性检查。只启动一个 Panel,连接一个 Canary Daemon 并确认 Snapshot/Event 对账后再扩大流量。除非明确做环境 Reseed,否则不能用新生成的 Panel identity 启动恢复数据库。
产品上限调优
agent-product-limits/v1 编译目录定义任务、Item、上下文、SSE、搜索、Plan/Input、Memory 与 Review 导出的默认值和硬上限。运维可用 AGENT_PRODUCT_LIMIT_OVERRIDES 提供 JSON 对象;Key 必须已存在,值必须是正的安全整数且不大于编译默认值。Override 只能收紧限制,修改后需要重启。
AGENT_PRODUCT_LIMIT_OVERRIDES='{"sse.connections_per_user":4,"search.results":25}'启动校验报告未知 Key、非整数或上调时必须拒绝配置。生产修改前应对代表性任务与搜索负载做 Soak,测试多标签页重连,并确认达到收紧边界时 Reset/Snapshot 恢复正常。