Skills
多环境配置
在 dev、staging 和 prod 之间安全切换 API key、base URL 和模型。
概述
多环境配置的目标是避免把测试流量打到生产项目,也避免把生产 key 放进本地设备。
推荐把 base URL、API key、默认模型和项目预算按环境拆开。
本文适合本地开发、CI、staging 和 prod 同时存在的团队。
环境变量命名
推荐使用统一前缀:
UOUODUO_BASE_URL=https://api.example.com/v1
UOUODUO_API_KEY=sk-xxx...
UOUODUO_MODEL=gpt-4o-mini
UOUODUO_ENV=dev不要混用多个 provider 的变量名。
如果第三方 SDK 只识别 `OPENAI_API_KEY`,可以在启动脚本里映射。
dev 环境
dev 环境用于本地测试。
建议:
- 使用个人或项目 dev key
- 设置较低预算
- 默认模型使用便宜模型
- 允许较详细日志
- 不处理真实用户数据
`.env.local` 示例:
UOUODUO_ENV=dev
UOUODUO_BASE_URL=https://api.example.com/v1
UOUODUO_API_KEY=sk-xxx...
UOUODUO_MODEL=gpt-4o-ministaging 环境
staging 用于上线前验证。
建议:
- 使用团队 staging 项目
- 模型尽量接近生产
- 预算低于生产但高于 dev
- 开启和生产一致的日志字段
- 使用脱敏数据
staging 的主要目标是发现配置和路由问题,而不是压测全部容量。
prod 环境
prod 环境只使用生产 key。
建议:
- 密钥只存放在部署平台 secret 中
- 不允许开发机直接读取
- 每个服务单独 key
- 每个项目配置预算
- 定期轮换密钥
生产配置变更应走审查流程。
一键切换脚本
可以写一个本地脚本:
#!/usr/bin/env bash
set -euo pipefail
case "${1:-dev}" in
dev)
export UOUODUO_API_KEY="$UOUODUO_DEV_KEY"
export UOUODUO_MODEL="gpt-4o-mini"
;;
staging)
export UOUODUO_API_KEY="$UOUODUO_STAGING_KEY"
export UOUODUO_MODEL="claude-3-5-haiku"
;;
prod)
echo "prod key must be loaded by deployment secrets"
exit 1
;;
esac
export UOUODUO_BASE_URL="https://api.example.com/v1"本地脚本不要自动加载生产 key。
CI 配置
CI 建议使用 staging key。
只跑轻量 smoke:
- `/v1/models`
- 一次短 chat completions
- 一次 embeddings
不要在每次 PR 上跑长文本生成。
模型切换
把模型 ID 放进环境变量:
UOUODUO_MODEL=gpt-4o-mini应用里读取:
const model = process.env.UOUODUO_MODEL ?? 'gpt-4o-mini';这样切换模型不需要改代码。
日志标记
建议在请求 metadata 或业务日志里记录环境:
{
"environment": "staging",
"service": "worker",
"feature": "summary"
}不要把用户敏感信息放进 metadata。
成本隔离
按环境创建独立项目:
- `dev`
- `staging`
- `prod-web`
- `prod-worker`
每个项目绑定独立 API key 和预算。
这样可以快速定位是哪一类流量造成费用变化。
轮换策略
密钥轮换建议:
- 创建新 key。
- 部署新 key。
- 确认 Logs 中新 key 有流量。
- 等待旧请求自然结束。
- 撤销旧 key。
不要先撤销旧 key 再部署新 key。
常见错误
- 本地 `.env` 被提交到 Git。
- staging 使用了生产 key。
- SDK 读取了 `OPENAI_API_KEY`,但没有映射到 UOUODUO key。
- base URL 缺少 `/v1`。
- CI 并发过高导致 429。
这些问题都可以通过独立项目、低预算和启动前自检降低风险。