名称: 部署程序
描述: 生产部署原则和决策制定。安全部署工作流、回滚策略和验证。教授思考,而非脚本。
允许工具: Read, Glob, Grep, Bash
部署程序
安全生产发布的部署原则和决策制定。
学会思考,而非记忆脚本。
⚠️ 如何使用此技能
此技能教授部署原则,而非复制bash脚本。
- 每个部署都是独特的
- 理解每个步骤背后的原因
- 根据平台调整程序
1. 平台选择
决策树
你在部署什么?
│
├── 静态网站 / JAMstack
│ └── Vercel, Netlify, Cloudflare Pages
│
├── 简单Web应用
│ ├── 托管 → Railway, Render, Fly.io
│ └── 控制 → VPS + PM2/Docker
│
├── 微服务
│ └── 容器编排
│
└── 无服务器
└── 边缘函数, Lambda
每个平台有不同的程序
| 平台 |
部署方法 |
| Vercel/Netlify |
Git推送,自动部署 |
| Railway/Render |
Git推送或CLI |
| VPS + PM2 |
SSH + 手动步骤 |
| Docker |
镜像推送 + 编排 |
| Kubernetes |
kubectl apply |
2. 部署前原则
4个验证类别
| 类别 |
需要检查的内容 |
| 代码质量 |
测试通过,代码规范整洁,已审查 |
| 构建 |
生产构建工作,无警告 |
| 环境 |
环境变量设置,密钥最新 |
| 安全 |
备份完成,回滚计划就绪 |
部署前清单
- [ ] 所有测试通过
- [ ] 代码审查并批准
- [ ] 生产构建成功
- [ ] 环境变量已验证
- [ ] 数据库迁移就绪(如有)
- [ ] 回滚计划文档化
- [ ] 团队已通知
- [ ] 监控就绪
3. 部署工作流原则
5阶段流程
1. 准备
└── 验证代码、构建、环境变量
2. 备份
└── 在更改前保存当前状态
3. 部署
└── 执行时保持监控开启
4. 验证
└── 健康检查、日志、关键流程
5. 确认或回滚
└── 一切正常?确认。有问题?回滚。
阶段原则
| 阶段 |
原则 |
| 准备 |
从不部署未测试的代码 |
| 备份 |
没有备份无法回滚 |
| 部署 |
观看执行过程,不要走开 |
| 验证 |
信任但要验证 |
| 确认 |
准备好回滚触发 |
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. 最佳实践
- 小而频繁的部署 优于大发布
- 功能标志 用于高风险更改
- 自动化 重复步骤
- 文档化 每次部署
- 审查 问题后原因
- 测试回滚 在需要前
记住: 每次部署都是风险。通过准备而非速度来最小化风险。