部署前准备

  • 完成所有测试(单元测试、集成测试、压力测试)
  • 创建生产环境配置(数据库、API密钥等)
  • 准备部署清单和回滚计划
  • 设置监控和告警系统
  • 确保所有依赖项已锁定版本

环境配置

  • 使用基础设施即代码(IaC)管理环境
  • 配置负载均衡和自动扩展
  • 设置生产数据库(主从复制、分片)
  • 配置CDN和缓存策略
  • 设置防火墙和安全组规则

部署策略

  • 蓝绿部署(零停机更新)
  • 金丝雀发布(渐进式流量切换)
  • 滚动更新(逐步替换实例)
  • 功能开关(逐步启用新功能)
  • 暗启动(在生产环境测试新功能)

部署流程阶段

1. 代码构建

  • 从版本控制拉取代码
  • 安装依赖项
  • 运行测试套件
  • 构建可执行文件/容器镜像
  • 生成构建报告

2. 预发布测试

  • 部署到预生产环境
  • 执行端到端测试
  • 安全扫描和漏洞检测
  • 性能基准测试
  • 用户验收测试(UAT)

3. 生产部署

  • 选择部署策略(蓝绿/金丝雀)
  • 部署到生产环境
  • 逐步切换流量
  • 实时监控关键指标
  • 验证服务健康状态

4. 部署后验证

  • 自动化冒烟测试
  • 监控系统指标(CPU、内存、延迟)
  • 错误率监控
  • 日志分析
  • 用户行为分析

部署工作流

1
代码提交
2
CI构建
3
测试环境
4
预生产
5
生产部署
6
监控

部署最佳实践

CI/CD 流水线示例

使用GitHub Actions的部署流水线配置:

yaml
name: Production Deployment on: push: branches: [ main ] jobs: build-and-test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: 18.x - run: npm ci - run: npm run build - run: npm test deploy-to-staging: needs: build-and-test runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Deploy to Staging uses: azure/webapps-deploy@v2 with: app-name: 'my-app-staging' slot-name: 'staging' package: . deploy-to-production: needs: deploy-to-staging if: success() runs-on: ubuntu-latest steps: - name: Approve Production Deployment uses: trstringer/manual-approval@v1 with: secret: ${{ secrets.PRODUCTION_APPROVAL_TOKEN }} - name: Deploy to Production uses: azure/webapps-deploy@v2 with: app-name: 'my-app-production' slot-name: 'production' package: .

Docker 生产部署

优化生产环境的Dockerfile示例:

dockerfile
# 第一阶段:构建应用 FROM node:18-alpine as builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build # 第二阶段:生产环境 FROM node:18-alpine WORKDIR /app # 安装生产依赖 COPY package*.json ./ RUN npm ci --only=production # 从构建阶段复制构建结果 COPY --from=builder /app/dist ./dist # 设置非root用户 RUN addgroup -S appgroup && adduser -S appuser -G appgroup USER appuser # 健康检查 HEALTHCHECK --interval=30s --timeout=5s \ CMD curl -f http://localhost:3000/health || exit 1 # 暴露端口 EXPOSE 3000 # 启动应用 CMD ["node", "dist/main.js"]

生产环境安全配置

网络安全

  • 配置WAF(Web应用防火墙)
  • 启用DDoS防护
  • 使用私有子网隔离资源
  • 限制入站/出站流量
  • 实施安全组和网络ACL

访问控制

  • 使用最小权限原则
  • 配置RBAC(基于角色的访问控制)
  • 启用多因素认证(MFA)
  • 定期轮换凭证和密钥
  • 审计所有访问日志

数据安全

  • 启用数据库加密(静态和传输中)
  • 配置自动备份和恢复测试
  • 实施数据脱敏
  • 限制敏感数据访问
  • 定期进行安全扫描

应用安全

  • 启用CSP(内容安全策略)
  • 配置HSTS(HTTP严格传输安全)
  • 实施CSRF和XSS防护
  • 禁用不必要的HTTP方法
  • 使用安全标头(X-Content-Type-Options等)

监控与告警

关键监控指标

  • 应用性能:响应时间、错误率、吞吐量
  • 资源使用:CPU、内存、磁盘I/O
  • 数据库:连接数、查询性能、复制延迟
  • 网络:延迟、丢包率、带宽使用
  • 业务指标:交易量、转化率、用户活动

告警策略

  • 设置多级告警(警告、严重、灾难)
  • 基于SLO(服务级别目标)配置告警
  • 避免告警疲劳(合理设置阈值)
  • 实施告警升级策略
  • 定期审查和优化告警规则

灾难恢复

  • 定期备份和恢复测试
  • 多区域/多可用区部署
  • 定义RTO(恢复时间目标)和RPO(恢复点目标)
  • 自动化故障转移
  • 定期进行灾难恢复演练