标准三环境

环境 用途 数据 谁能改
dev 开发 / 调试 假数据或脱敏小集 任何工程师
staging 上线前演练 / QA 准生产(脱敏后的 prod 拷贝) 受控(CI/CD 自动)
prod 真实用户 真数据 极少数人,或仅 CI

部分公司还会加:

  • preview / PR env:每个 PR 一个临时环境(Vercel / Render 自带)
  • canary:小流量真实环境,验证新版本
  • DR:灾备,平时不用

隔离的几个层次

环境之间应该隔离到什么程度?三档:

浅隔离 · 同账号不同命名

  • 都在一个 AWS 账号 / 阿里云账号下
  • 用 tag / 子网 / 命名前缀分
  • 易出问题:误操作可能影响全部

中等隔离 · 同账号不同 VPC

  • 各环境独立 VPC、独立网段
  • 网络级别不通(除非显式打通)
  • 用 IAM 限制人员权限

强隔离 · 完全独立账号

  • prod 一个 AWS 账号、staging 一个、dev 一个
  • 账单分开,权限分开,资源完全分开
  • AWS Organizations / Control Tower / 阿里资源目录管理

生产推荐至少中等隔离;监管行业(金融、医疗)通常要强隔离。

一致性:三环境应该多像

理想:只有数据和容量不同,配置一致

现实:

维度 应该一致 可以不一致
操作系统 / 运行时版本
应用配置文件 ✓(差异由环境变量驱动)
服务部署方式
网络拓扑
资源规模(CPU/内存) dev < staging < prod
数据量 各环境不同
第三方服务的环境 dev 用 sandbox,prod 用真账号

配置怎么管

环境差异不要 hardcode 在代码里。三层:

1. 默认值        写在代码里(dev 友好的最小默认)
2. 环境变量      .env / dotenv / SystemD Environment / K8s ConfigMap
3. Secret        Vault / AWS Secrets Manager / K8s Secret(不要 .env)

12-Factor App 第 3 条:Config in environment

数据流向:永远 prod → 下游

prod →(脱敏后)→ staging →(截取小集)→ dev

反方向是禁忌:dev 数据不能混进 prod,否则就是数据污染(GDPR / 个保法风险也来自这)。

脱敏方案:

  • 替换姓名 / 手机号为伪造(faker 库)
  • 删除支付字段 / 身份证号
  • 时间字段保持相对关系

部署顺序

通用:

任何代码变更
    ↓
PR:自动跑 CI(build + test + lint)
    ↓
PR Review:人工
    ↓
merge 到 main:自动部署到 staging
    ↓
QA / 自动回归 / 业务验收
    ↓
打 release tag:触发部署到 prod(可能要审批)

这条流水线越自动,发布越敢。详细见 ops-corp/14–17(CI/CD 与发布)。

反模式

  • "我们没 staging,直接 dev → prod":小项目可以;团队项目早晚被坑
  • "prod 数据直接 dump 到 dev":合规炸弹
  • "staging 和 prod 完全不同的配置":staging 通过不代表 prod 通过
  • "环境变量都 hardcode 在 docker-compose.yml":换环境 = 改文件 = 出错

推荐阅读

至此完成"序章 + IaC"基础(01–07)。 下一批进入容器化与编排:Docker 生产级实践 → K8s 核心概念 → Helm。