chore: establish V1.1 recovery baseline
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
#!/bin/bash
|
||||
# ============================================
|
||||
# 丹阳公益婚恋服务平台 — 一键部署脚本
|
||||
# ============================================
|
||||
# 用法:
|
||||
# ./scripts/deploy.sh # 部署最新镜像
|
||||
# ./scripts/deploy.sh v1.2.3 # 部署指定版本
|
||||
# ./scripts/deploy.sh --rollback # 回滚到上一版本
|
||||
# ============================================
|
||||
set -euo pipefail
|
||||
|
||||
VERSION="${1:-latest}"
|
||||
ACTION="${2:-deploy}"
|
||||
COMPOSE_FILE="${COMPOSE_FILE:-../infrastructure/docker-compose.prod.yml}"
|
||||
GIT_REPO="${GIT_REPO:-https://github.com/danyang-match/platform.git}"
|
||||
|
||||
echo "============================================"
|
||||
echo " 丹阳公益婚恋服务平台 — 部署脚本"
|
||||
echo " 版本: ${VERSION} | 动作: ${ACTION}"
|
||||
echo "============================================"
|
||||
|
||||
# 检查环境变量
|
||||
if [ -z "${DOCKER_REGISTRY:-}" ]; then
|
||||
echo "警告: DOCKER_REGISTRY 未设置,将使用本地构建"
|
||||
fi
|
||||
|
||||
# 进入基础设施目录
|
||||
cd "$(dirname "$0")/.."
|
||||
|
||||
case "${ACTION}" in
|
||||
deploy)
|
||||
echo "[1/4] 拉取最新代码..."
|
||||
if [ -d ".git" ]; then
|
||||
git fetch origin
|
||||
git checkout main || git checkout master
|
||||
git pull --ff-only
|
||||
fi
|
||||
|
||||
echo "[2/4] 构建并启动服务..."
|
||||
# 设置版本号
|
||||
export APP_VERSION="${VERSION}"
|
||||
docker compose -f "${COMPOSE_FILE}" up -d --build --pull always
|
||||
|
||||
echo "[3/4] 等待服务健康检查..."
|
||||
sleep 10
|
||||
docker compose -f "${COMPOSE_FILE}" ps | grep -E "backend|postgres|redis" || true
|
||||
|
||||
echo "[4/4] 验证健康状态..."
|
||||
curl -sf "http://localhost/api/v1/health/live" && echo " ✅ 后端健康" || echo " ❌ 后端不健康"
|
||||
curl -sf "http://localhost/version" && echo " ✅ 版本信息" || echo " ❌ 版本接口失败"
|
||||
|
||||
echo ""
|
||||
echo "✅ 部署完成!版本: ${VERSION}"
|
||||
echo " 访问地址: https://match.danyang.gov.cn/admin/"
|
||||
;;
|
||||
|
||||
rollback)
|
||||
echo "[1/2] 回滚到上一版本..."
|
||||
# 查找上一个 image tag
|
||||
PREV_VERSION=$(docker images --format '{{.Tag}}' danyang-match-backend 2>/dev/null | grep -v "^latest$" | sort -V | tail -2 | head -1)
|
||||
if [ -z "${PREV_VERSION}" ]; then
|
||||
echo "错误: 找不到可回滚的镜像版本"
|
||||
exit 1
|
||||
fi
|
||||
echo " 回滚版本: ${PREV_VERSION}"
|
||||
|
||||
export APP_VERSION="${PREV_VERSION}"
|
||||
docker compose -f "${COMPOSE_FILE}" up -d --no-build backend
|
||||
|
||||
echo "[2/2] 验证回滚..."
|
||||
sleep 5
|
||||
curl -sf "http://localhost/api/v1/health/live" && echo " ✅ 回滚成功" || echo " ❌ 回滚后不健康"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "用法: $0 [version] [deploy|rollback]"
|
||||
echo "示例:"
|
||||
echo " $0 v1.2.3 deploy"
|
||||
echo " $0 rollback"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user