AI 产品上线 checklist:从代码到生产环境要检查什么?

上线不是把代码推到服务器就完了。漏掉任何一个环节都可能在线上出问题。

本篇回答三个问题:
1. 上线前要检查什么?
2. 上线当天要做什么?
3. 上线后怎么确认没问题?

上线前 checklist

代码层面

□ 数据库迁移脚本已执行
□ 所有环境变量已配置(不要用默认值)
□ CORS 已限制到具体域名
□ 速率限制已启用(建议 30 次/分钟)
□ HTTPS 已配置(Let's Encrypt 自动续期)
□ 敏感信息(密码、Key)已从代码中移除
□ 日志级别设置为 WARNING(生产环境不要用 DEBUG)

安全层面

□ JWT Secret 已修改为随机字符串(不是默认值)
□ 数据库密码已修改
□ API Key 已轮换
□ SMTP 密码已配置
□ 容器以非 root 用户运行
□ .env 文件未提交到 Git

基础设施

□ Docker 镜像已用多阶段构建(减小体积)
□ 容器资源限制已设置(CPU/内存)
□ 数据卷持久化已配置
□ 健康检查接口已实现
□ 自动重启策略已配置(unless-stopped)
□ 日志轮转已配置

上线当天做这些

部署步骤

# 1. 备份数据库
docker exec know-postgres pg_dump -U know know > backup_$(date +%Y%m%d).sql

# 2. 拉取最新代码
git pull origin main

# 3. 构建并启动
docker compose up -d --build

# 4. 检查服务状态
docker compose ps
docker compose logs --tail 20

# 5. 检查健康检查接口
curl https://yourdomain.com/api/health
# 预期返回:{"status": "ok", "checks": {"database": "ok", "redis": "ok"}}

# 6. 测试核心功能
#   - 注册一个新账号
#   - 创建知识库
#   - 上传文档
#   - 发起一次对话

上线后怎么确认没问题?

观察期(24 小时)

□ 健康检查接口持续返回 ok
□ 错误日志无 5xx 异常
□ 核心功能可用(注册、登录、知识库、对话)
□ LLM 调用正常(无超时)
□ 数据库连接正常(无连接池溢出)

监控指标(持续观察)

API 层面:
  └─ 错误率应小于 1%
  └─ P95 延迟小于 3 秒
  └─ QPS 在预期范围内

AI 层面:
  └─ LLM 调用成功率大于 99%
  └─ 平均 Token 消耗在预算内

系统层面:
  └─ CPU 使用率小于 80%
  └─ 内存使用率小于 80%
  └─ 磁盘使用率小于 70%

常见上线问题

1. 数据库连接超时

# 症状:API 报错 "too many connections"
# 解决:增加连接池大小
pool_size=20, max_overflow=30

# 或者排查是否有连接泄漏
docker exec know-postgres psql -U know -c "SELECT count(*) FROM pg_stat_activity;"

2. LLM API 超时

# 症状:对话接口响应慢或超时
# 解决:增加超时时间 + 添加重试机制
client = OpenAI(timeout=30.0, max_retries=3)

3. 磁盘空间不足

# 症状:容器启动失败或写入报错
# 监控:配置磁盘告警(使用量超过 80% 时告警)
# 清理:定期清理日志和临时文件
docker system prune -f

总结

上线 checklist 的核心原则:宁可慢一点,不要漏一项。

阶段 重点 耗时
上线前 安全 + 配置 + 备份 30 分钟
上线中 部署 + 验证 10 分钟
上线后 监控 + 观察 24 小时

本文是 《AI 全栈开发实战——做一个真正的产品》 系列的第 14 篇。
下一篇(完结篇):15. 全系列总结与产品上线回顾
本文由 Zyentor(智元界) 原创发布