部署流程
安全发布到生产环境的部署原则与决策方法。
学会思考,而不是死记脚本。
⚠️ 如何使用本技能
本技能教你的是部署原则,而不是可以照抄的 bash 脚本。
- 每次部署都是独特的
- 理解每一步背后的原因(WHY)
- 根据你的平台调整流程
1. 平台选择
决策树
What are you deploying?
│
├── Static site / JAMstack
│ └── Vercel, Netlify, Cloudflare Pages
│
├── Simple web app
│ ├── Managed → Railway, Render, Fly.io
│ └── Control → VPS + PM2/Docker
│
├── Microservices
│ └── Container orchestration
│
└── Serverless
└── Edge functions, Lambda
各平台的流程不同
| 平台 | 部署方式 |
|---|
| Vercel/Netlify | Git push,自动部署 |
| Railway/Render | Git push 或命令行 |
| VPS + PM2 | SSH + 手动步骤 |
| Docker | 推送镜像 + 编排 |
| Kubernetes | kubectl apply |
2. 部署前原则
4 个验证类别
| 类别 | 需要检查的内容 |
|---|
| 代码质量 | 测试通过、lint 无问题、已评审 |
| 构建 | 生产构建成功、无警告 |
| 环境 | 环境变量已设置、密钥未过期 |
| 安全 | 已完成备份、回滚方案就绪 |
部署前检查清单
3. 部署工作流原则
5 阶段流程
1. PREPARE
└── Verify code, build, env vars
2. BACKUP
└── Save current state before changing
3. DEPLOY
└── Execute with monitoring open
4. VERIFY
└── Health check, logs, key flows
5. CONFIRM or ROLLBACK
└── All good? Confirm. Issues? Rollback.
各阶段原则
| 阶段 | 原则 |
|---|
| 准备 | 绝不部署未经测试的代码 |
| 备份 | 没有备份就无法回滚 |
| 部署 | 全程盯着,不要走开 |
| 验证 | 信任但要核实 |
| 确认 | 准备好回滚触发条件 |
4. 部署后验证
需要验证的内容
| 检查项 | 原因 |
|---|
| 健康检查端点 | 服务正在运行 |
| 错误日志 | 没有新的错误 |
| 关键用户流程 | 核心功能正常工作 |
| 性能 | 响应时间可接受 |
验证时间窗口
- 前 5 分钟:主动监控
- 15 分钟:确认稳定
- 1 小时:最终验证
- 第二天:复查指标
5. 回滚原则
何时回滚
| 症状 | 操作 |
|---|
| 服务宕机 | 立即回滚 |
| 严重错误 | 回滚 |
| 性能下降 >50% | 考虑回滚 |
| 小问题 | 如果能快速修复,则向前修复 |
各平台的回滚策略
| 平台 | 回滚方式 |
|---|
| Vercel/Netlify | 重新部署上一个提交 |
| Railway/Render | 在控制台中回滚 |
| VPS + PM2 | 恢复备份,重启 |
| Docker | 使用上一个镜像标签 |
| K8s | kubectl rollout undo |
回滚原则
- 速度优先于完美:先回滚,后调试
- 不要叠加错误:一次回滚,而不是多次变更
- 沟通:告诉团队发生了什么
- 事后复盘:稳定之后再了解原因
6. 零停机部署
策略
| 策略 | 工作原理 |
|---|
| 滚动 | 逐一替换实例 |
| 蓝绿 | 在环境之间切换流量 |
| 金丝雀 | 逐步切换流量 |
选择原则
| 场景 | 策略 |
|---|
| 标准发布 | 滚动 |
| 高风险变更 | 蓝绿(易于回滚) |
| 需要验证 | 金丝雀(用真实流量测试) |
7. 应急流程
服务宕机时的优先级
- 评估:症状是什么?
- 快速修复:如果不清楚原因,先重启
- 回滚:如果重启没有帮助
- 排查:稳定之后再调查
排查顺序
| 检查项 | 常见问题 |
|---|
| 日志 | 错误、异常 |
| 资源 | 磁盘满、内存 |
| 网络 | DNS、防火墙 |
| 依赖项 | 数据库、API |
8. 反模式
| ❌ 不要 | ✅ 应该 |
|---|
| 周五部署 | 在一周较早的时候部署 |
| 仓促部署 | 按流程操作 |
| 跳过预发布环境 | 务必先测试 |
| 不备份就部署 | 部署前备份 |
| 部署后就离开 | 至少监控 15 分钟 |
| 一次进行多项更改 | 一次只进行一项更改 |
9. 决策检查清单
部署前:
10. 最佳实践
- 小规模、频繁部署,而不是大型版本发布
- 对高风险更改使用功能开关
- 自动化重复性步骤
- 记录每次部署
- 出现问题后复盘问题原因
- 在需要回滚之前测试回滚
**请记住:**每次部署都有风险。通过做好准备而非追求速度来降低风险。