PRODUCTION_ROLLOUT.md 1.9 KB

server.yuban.co 生产发布清单

当前 DNS 指向华为云公网地址 121.37.7.67。本清单只描述发布和验证步骤,不包含任何账号、密钥或自动登录脚本。

发布前

  1. 备份 /etc/yuban-server.env 和持久任务目录。
  2. 确认服务器为 Node.js 22+,并能执行 ffmpeg、ffprobe。
  3. 配置持久绝对路径 JOB_STORE_DIR;不能放在版本发布时会被替换的目录中。
  4. 设置 MAX_JOB_CONCURRENCY=2、MAX_JOB_ATTEMPTS=5、JOB_RETENTION_MS=2592000000。
  5. 设置 CANONICAL_PERSISTENCE_ENABLED=true,并在服务器环境变量中提供 PARSE_MASTER_KEY;该密钥不得进入 Git、网页或日志。
  6. 记录本次 SERVICE_VERSION 和 GIT_SHA,便于从 /health 确认实际运行版本。

灰度发布

  1. 先执行 npm test 和 npm run check。
  2. 发布新版本,但保留上一版本镜像或目录以便快速回滚。
  3. 重启服务后确认 GET https://server.yuban.co/health 返回新版本、workerReady=true、storeReady=true。
  4. 用测试账号提交一条短录音,验证 queued → running → completed,以及 ChatVoice 回读的 hash、字数和 long_complete 一致。
  5. 人工模拟一次可重试失败,验证任务进入 retry_wait 并自动增加 attempt;模拟永久失败后调用 /retry,必须得到新的 jobId。
  6. 再用 30 分钟录音验收,确认页面离开后任务仍继续、故事任务从 waiting_for_transcript 自动推进。

观察与回滚

  • 至少观察 24 小时:任务成功率、retry_wait 数量、最终失败码、平均排队时间、任务目录磁盘占用、Parse 回读失败率。
  • 日志只记录 jobId、attempt、stage、错误码和耗时,不得记录音频 URL、Session Token、逐字稿或 Parse Master Key。
  • 若权威落库异常,可先关闭 CANONICAL_PERSISTENCE_ENABLED 并回滚服务版本;持久任务目录不可删除,前端仍可通过已有 jobId 恢复查询。