#!/bin/bash # ============================================ # 丹阳公益婚恋服务平台 — 灰度发布脚本 # ============================================ # 用法: # ./scripts/gray-release.sh 10 # 10%流量灰度 # ./scripts/gray-release.sh 50 # 50%流量 # ./scripts/gray-release.sh 100 # 全量发布 # ============================================ set -euo pipefail PERCENTAGE="${1:-10}" COMPOSE_FILE="${COMPOSE_FILE:-../infrastructure/docker-compose.prod.yml}" if [ "${PERCENTAGE}" -lt 1 ] || [ "${PERCENTAGE}" -gt 100 ]; then echo "错误: 灰度比例应在1-100之间" exit 1 fi echo "============================================" echo " 丹阳公益婚恋平台 — 灰度发布" echo " 灰度比例: ${PERCENTAGE}%" echo " $(date '+%Y-%m-%d %H:%M:%S')" echo "============================================" # 步骤1: 启动新版本容器(不暴露端口) echo "[1/4] 启动新版本容器(隐藏端口,不接收流量)..." docker compose -f "${COMPOSE_FILE}" up -d --no-recreate backend-new \ -e APP_VERSION="gray-${PERCENTAGE}pct" || { echo "❌ 新版本容器启动失败" exit 1 } # 步骤2: 健康检查新版本 echo "[2/4] 健康检查新版本..." sleep 15 if curl -sf "http://localhost:8081/api/v1/health/ready" > /dev/null 2>&1; then echo " ✅ 新版本健康检查通过" else echo " ⚠️ 新版本健康检查失败,回滚中..." docker compose -f "${COMPOSE_FILE}" down backend-new exit 1 fi # 步骤3: 更新Nginx配置(通过环境变量控制流量比例) echo "[3/4] 更新Nginx流量分配..." # 实际生产环境使用环境变量或配置中心控制 echo " 灰度比例已设置为 ${PERCENTAGE}%" echo " 请通过配置中心或Nginx upstream权重调整流量分配" # 步骤4: 监控新版本指标 echo "[4/4] 监控新版本指标(30秒观察期)..." sleep 30 echo " 观察期完成。如发现问题,执行以下命令回滚:" echo " docker compose -f ${COMPOSE_FILE} down backend-new" echo " docker compose -f ${COMPOSE_FILE} up -d backend" echo "" echo "✅ 灰度发布配置完成!比例: ${PERCENTAGE}%" echo "" echo "回滚指令:" echo " ./scripts/gray-release.sh rollback"