22.14-多环境配置
要点
- 多环境配置解决「开发、测试、生产用不同配置」的问题
- Workers 用 wrangler.jsonc 的
env字段定义命名环境 - Vercel 用环境变量分 Production / Preview / Development
- 核心原则:环境隔离,数据不互通
内容
1. 为什么需要多环境
一个典型的问题:你在本地开发时连的是本地数据库,但部署到生产后,代码要连生产数据库。如果代码里硬编码了数据库连接字符串,就会出问题。
多环境配置解决的就是这个问题:
// 代码里不关心当前是什么环境
const db = connect(process.env.DATABASE_URL)
// 不同环境自动使用不同的 DATABASE_URL
// local: postgresql://localhost:5432/mydb_dev
// staging: postgresql://staging-db:5432/mydb_staging
// production: postgresql://prod-db:5432/mydb_prod2. Workers 的多环境
wrangler.jsonc 的 env 字段定义命名环境:
// wrangler.jsonc
{
"name": "api",
"main": "src/index.ts",
// 默认环境(local)
"d1_databases": [
{
"binding": "DB",
"database_name": "ai-agent-local-auth",
"database_id": "91e63d07-..."
}
],
"vars": {
"APP_ENV": "development",
"WEB_ORIGIN": "http://localhost:3005"
},
// 命名环境
"env": {
"staging": {
"d1_databases": [
{
"binding": "DB",
"database_name": "ai-agent-staging-auth",
"database_id": "staging-uuid-...",
"remote": true
}
],
"vars": {
"APP_ENV": "staging",
"WEB_ORIGIN": "https://staging.aistudy8.com"
}
},
"production": {
"d1_databases": [
{
"binding": "DB",
"database_name": "ai-agent-production-auth",
"database_id": "a01ab065-..."
}
],
"vars": {
"APP_ENV": "production",
"WEB_ORIGIN": "https://aistudy8.com"
}
}
}
}3. 切换环境
// terminal
# 默认环境(local)
npx wrangler dev
# staging 环境
npx wrangler dev --env staging
# production 环境(本地模拟,一般不用)
npx wrangler dev --env production
# 部署到 staging
npx wrangler deploy --env staging
# 部署到 production
npx wrangler deploy --env production4. Vercel 的多环境
Vercel 的环境变量分三档:
| 环境 | 说明 |
|---|---|
| Production | 生产环境(main 分支) |
| Preview | 预览环境(PR 部署) |
| Development | 本地开发(vercel dev) |
在 Dashboard 设置环境变量时,可以选择生效的环境。
5. 环境隔离的原则
- 数据隔离:不同环境用不同的数据库
- 配置隔离:不同环境用不同的环境变量
- 部署隔离:不同环境独立部署,互不影响
6. 典型的环境划分
| 环境 | 用途 | 触发方式 |
|---|---|---|
| local | 本地开发 | wrangler dev |
| dev / staging | 联调、测试 | push 到 develop |
| production | 生产 | push 到 main |
7. 小结
多环境配置的核心:
- Workers 用
wrangler.jsonc的env字段 - Vercel 用环境变量分 Production / Preview / Development
- 环境隔离:数据、配置、部署都要隔离
- 典型划分:local → staging → production