83 lines
2.6 KiB
Bash
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
|