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(智元界) 原创发布