Skip to content

生产环境检查表

上线前逐项确认。没有完成密钥、网络和备份部分时,不建议开放注册或充值。

发布信息

先记录这次部署的可追溯信息:

项目记录
应用版本 / 镜像 digest
Git commit
发布时间
发布人
PostgreSQL 版本
Redis 版本
配置备份位置
数据库备份位置
回退版本
验收负责人

密钥与账号

  • [ ] POSTGRES_PASSWORD 是独立随机密码。
  • [ ] JWT_SECRET 已固定,不会随容器重启变化。
  • [ ] TOTP_ENCRYPTION_KEY 已固定并安全备份。
  • [ ] 管理员使用独立邮箱和强密码。
  • [ ] 已启用管理员 TOTP。
  • [ ] .envconfig.yaml 和备份文件不在 Git 中。
  • [ ] 只有应用和必要运维账号能读取数据库。

数据库属于敏感凭证库

上游 OAuth token 和 API Key 会保存在账号数据中。必须限制数据库、备份和只读副本的访问,并对备份实施加密。

网络与 SSRF 防护

默认配置为了兼容自定义上游而比较宽松。公网运营时建议显式设置:

dotenv
SECURITY_URL_ALLOWLIST_ENABLED=true
SECURITY_URL_ALLOWLIST_ALLOW_INSECURE_HTTP=false
SECURITY_URL_ALLOWLIST_ALLOW_PRIVATE_HOSTS=false
SECURITY_URL_ALLOWLIST_UPSTREAM_HOSTS=api.openai.com,api.anthropic.com,generativelanguage.googleapis.com,cloudcode-pa.googleapis.com,*.openai.azure.com
  • [ ] URL allowlist 已开启。
  • [ ] allowlist 包含实际使用的全部上游域名。
  • [ ] 不允许任意私网地址和非 HTTPS 上游。
  • [ ] PostgreSQL、Redis 和应用管理端口不直接暴露公网。
  • [ ] 账号代理失败时不会静默回退到真实出口。
  • [ ] 防火墙只开放 80/443 和受限 SSH。

HTTPS 与反向代理

  • [ ] 域名证书有效并自动续期。
  • [ ] HTTP 自动跳转 HTTPS。
  • [ ] SSE 响应缓冲关闭。
  • [ ] WebSocket Upgrade 头正确转发。
  • [ ] 反向代理读写超时能够覆盖长模型请求。
  • [ ] Nginx 已设置 underscores_in_headers on
  • [ ] CDN 不缓存 API、鉴权和支付回调路径。
  • [ ] 真实客户端 IP 只从可信代理读取。

PostgreSQL

  • [ ] 使用支持的 PostgreSQL 版本。
  • [ ] 磁盘空间和 inode 有监控。
  • [ ] 数据库连接数大于所有应用实例连接池总和,并保留余量。
  • [ ] 已配置自动备份。
  • [ ] 已在隔离环境完成恢复演练。
  • [ ] 升级前会创建额外备份。

Redis

  • [ ] Redis 只允许内网访问。
  • [ ] 跨主机连接启用认证,必要时启用 TLS。
  • [ ] 已启用 AOF 或符合需求的持久化策略。
  • [ ] 设置合理的内存上限和淘汰策略。
  • [ ] 监控内存、连接数、延迟和 key 淘汰。

应用运行

  • [ ] RUN_MODE=standard,除非明确使用内部简单模式。
  • [ ] 时区在应用、PostgreSQL 和运维报表中一致。
  • [ ] /health 有外部健康检查。
  • [ ] 日志有轮转、保留和集中检索。
  • [ ] 告警覆盖错误率、延迟、无可用账号、余额异常和数据库容量。
  • [ ] 已测试一个非流式请求和一个流式请求。
  • [ ] 已验证请求产生正确用量与扣费。

支付与商业运营

  • [ ] 支付回调只使用 HTTPS。
  • [ ] 支付平台签名密钥没有出现在日志或前端。
  • [ ] 回调重复发送不会导致重复入账。
  • [ ] 订单对账和异常退款流程已有负责人。
  • [ ] 已确认项目许可证、上游服务条款和当地合规要求。
  • [ ] 对用户明确披露计费规则、退款政策和服务可用性边界。

发布流程

  • [ ] 镜像使用固定版本,而不是不可追踪的 latest
  • [ ] 发布前查看迁移内容与版本说明。
  • [ ] 已完成数据库备份。
  • [ ] 有可执行的应用回退和数据库恢复方案。
  • [ ] 发布后检查健康、日志、登录、API、用量和支付。

首次上线验收

基础设施

  • [ ] 应用、PostgreSQL、Redis 容器/服务状态正常。
  • [ ] 重启应用后 JWT 会话行为符合预期。
  • [ ] 重启 Redis 后普通请求能够恢复。
  • [ ] 磁盘、连接数和文件描述符有充足余量。
  • [ ] NTP 正常,所有实例时间一致。

Web 与身份

  • [ ] 首页和登录页通过 HTTPS 打开。
  • [ ] 管理员登录、刷新 token、退出正常。
  • [ ] TOTP 启用和恢复流程已经测试。
  • [ ] 找回密码邮件中的 URL 使用正确域名。
  • [ ] 开启的每个 OAuth 回调都完成真实登录测试。
  • [ ] 被禁用用户不能继续登录或请求。

网关

  • [ ] /v1/models 使用测试 Key 返回正确模型。
  • [ ] Anthropic 非流式请求成功。
  • [ ] Anthropic SSE 逐事件返回。
  • [ ] OpenAI Responses 非流式请求成功。
  • [ ] 使用的客户端协议和工具调用已验证。
  • [ ] 客户端断开后并发槽位会释放。
  • [ ] 主账号故障时可以切换备用账号。
  • [ ] 所有账号不可用时错误格式符合客户端预期。

计费

  • [ ] 成功请求产生且只产生一条有效计费记录。
  • [ ] requested/upstream/billing model 正确。
  • [ ] 输入、输出和缓存 Token 正确。
  • [ ] 用户费用与账号成本符合倍率。
  • [ ] 余额、订阅、API Key quota 与平台配额更新正确。
  • [ ] 定价缺失会告警,而不是静默错误扣费。
  • [ ] Usage worker 没有 dropped/failed 异常。

账号与调度

  • [ ] 每种账号类型都完成账号测试。
  • [ ] 代理出口 IP/区域符合预期。
  • [ ] 账号并发达到上限时会等待或切换。
  • [ ] 粘性会话能够复用账号。
  • [ ] 限流账号在冷却后能恢复。
  • [ ] OAuth token 刷新不会在多实例重复竞争失败。

运维

  • [ ] Ops 页面有实时指标和历史聚合。
  • [ ] 错误详情不泄漏完整凭证或 prompt。
  • [ ] Token refresh、aggregation、cleanup 等 job 有 heartbeat。
  • [ ] 告警渠道已真实触发一条测试告警。
  • [ ] 日志可以按 Request ID 检索。
  • [ ] 数据保留和 cleanup 周期符合业务要求。

备份恢复验收

  • [ ] PostgreSQL 逻辑备份命令定时执行。
  • [ ] 备份文件大小和校验值有监控。
  • [ ] 备份加密并复制到独立位置。
  • [ ] 已恢复到隔离 PostgreSQL 实例。
  • [ ] 恢复库可以登录并查询账号、分组和历史用量。
  • [ ] .env、YAML、TOTP/JWT secret 有独立备份。
  • [ ] 明确 RPO(允许丢多少数据)与 RTO(多久恢复)。
  • [ ] 回退应用时知道新数据库迁移是否兼容。

容量验收

  • [ ] 应用 CPU/内存在预期并发下有 30% 以上余量。
  • [ ] PostgreSQL 没有持续连接等待或慢查询。
  • [ ] Redis 没有 evicted keys、blocked clients 或高延迟。
  • [ ] 用量 worker 队列不会持续增长。
  • [ ] 反向代理活跃连接和 fd 有余量。
  • [ ] 上游账号池总并发大于目标用户并发。
  • [ ] 代理出口没有成为所有账号的单点。

变更管理

每次修改以下内容,都按一次小型发布处理:

  • [ ] 分组 platform、倍率、模型映射或 fallback。
  • [ ] 大批量账号、代理或凭证。
  • [ ] JWT/TOTP/OAuth/支付 secret。
  • [ ] PostgreSQL/Redis endpoint 或连接池。
  • [ ] URL allowlist 与真实 IP 信任。
  • [ ] 用量 worker、调度器和 WebSocket 模式。

变更前导出配置,变更后执行最小 smoke test,并观察错误率、用量和费用。

开放注册前

  • [ ] 默认用户余额为 0。
  • [ ] 默认分组是低风险、有限额度分组。
  • [ ] 邮箱验证和 Turnstile 正常。
  • [ ] 注册、登录、找回密码有速率限制。
  • [ ] 用户协议、隐私政策、计费规则和退款政策可访问。
  • [ ] 用户无法看到管理员备注、上游凭证和内部错误。
  • [ ] 有用户 Key 泄漏和滥用处置流程。

开放支付前

  • [ ] 先在沙箱完成成功、取消、超时、重复回调测试。
  • [ ] 回调金额、币种、订单号和签名都会验证。
  • [ ] 同一订单重复 webhook 不会重复加余额。
  • [ ] 本地 pending 订单可以主动 reconcile。
  • [ ] 支付 provider 限额与负载均衡符合预期。
  • [ ] 管理员人工补单、退款和调账都有审计。
  • [ ] 每日自动对账和异常通知已配置。

最终 Go / No-Go

可以上线必须同时满足:

text
安全基线通过
AND 数据可恢复
AND 非流式/流式请求通过
AND 用量与扣费通过
AND 告警可到达
AND 有明确回退负责人

任何一项不满足,都应选择 No-Go,而不是依赖上线后观察。

本文档用于帮助你理解、部署和运维 Sub2API。使用前请确认上游服务条款与当地法律要求。