Files

83 lines
2.6 KiB
Bash

#!/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