114 lines
3.7 KiB
Bash
114 lines
3.7 KiB
Bash
#!/bin/bash
|
||
# Spug Docker Compose 自动部署脚本 - 直接粘贴到 Spug 执行
|
||
# 用途:使用 docker-compose 快速部署医院绩效考核系统
|
||
|
||
set -e
|
||
|
||
# ==================== 配置参数 ====================
|
||
PROJECT_DIR="${SPUG_DEPLOY_DIR:-/var/www/hospital-performance}"
|
||
GIT_REPO="${SPUG_GIT_URL:-https://gitea.gentronhealth.com/chenqi/hospital_performance.git}"
|
||
GIT_BRANCH="${SPUG_GIT_BRANCH:-main}"
|
||
|
||
# Docker 配置
|
||
DOCKER_TAG="${DOCKER_TAG:-latest}"
|
||
COMPOSE_PROJECT_NAME="${COMPOSE_PROJECT_NAME:-hospital-performance}"
|
||
|
||
# 环境变量
|
||
export DATABASE_HOST="${DATABASE_HOST:-192.168.110.252}"
|
||
export DATABASE_PORT="${DATABASE_PORT:-15432}"
|
||
export DATABASE_USER="${DATABASE_USER:-postgresql}"
|
||
export DATABASE_PASSWORD="${DATABASE_PASSWORD:-Jchl1528}"
|
||
export DATABASE_NAME="${DATABASE_NAME:-hospital_performance}"
|
||
export SECRET_KEY="${SECRET_KEY:-change-this-secret-key-in-production}"
|
||
export DEBUG="${DEBUG:-False}"
|
||
export BACKEND_PORT="${BACKEND_PORT:-8000}"
|
||
export FRONTEND_PORT="${FRONTEND_PORT:-80}"
|
||
export DOCKER_TAG="${DOCKER_TAG}"
|
||
|
||
# 日志配置
|
||
LOG_FILE="/tmp/spug-deploy-$(date +%Y%m%d_%H%M%S).log"
|
||
|
||
echo "========================================"
|
||
echo "Spug Docker Compose 自动部署开始"
|
||
echo "项目目录:${PROJECT_DIR}"
|
||
echo "Git 分支:${GIT_BRANCH}"
|
||
echo "========================================"
|
||
|
||
# ================= Step 1: 更新代码 =================
|
||
echo "========== 更新代码 =========="
|
||
cd "${PROJECT_DIR}"
|
||
|
||
if [ ! -d ".git" ]; then
|
||
echo "首次部署,克隆仓库..."
|
||
git clone "${GIT_REPO}" .
|
||
git checkout "${GIT_BRANCH}"
|
||
else
|
||
echo "更新现有代码..."
|
||
git fetch origin "${GIT_BRANCH}"
|
||
git reset --hard "origin/${GIT_BRANCH}"
|
||
git clean -fd
|
||
fi
|
||
|
||
commit_hash=$(git rev-parse --short HEAD)
|
||
commit_msg=$(git log -1 --pretty=format:"%s")
|
||
echo "✅ 代码更新完成,当前版本:${commit_hash} - ${commit_msg}"
|
||
|
||
# ================= Step 2: 停止旧容器 =================
|
||
echo "========== 停止旧服务 =========="
|
||
if docker-compose ps &>/dev/null; then
|
||
docker-compose down || true
|
||
echo "✅ 旧服务已停止"
|
||
else
|
||
echo "未发现运行中的服务"
|
||
fi
|
||
|
||
# ================= Step 3: 构建 Docker 镜像 =================
|
||
echo "========== 构建 Docker 镜像 =========="
|
||
docker-compose build --no-cache
|
||
echo "✅ Docker 镜像构建完成"
|
||
|
||
# ================= Step 4: 启动新容器 =================
|
||
echo "========== 启动新容器 =========="
|
||
docker-compose up -d
|
||
echo "✅ 容器启动成功"
|
||
|
||
# ================= Step 5: 等待并健康检查 =================
|
||
echo "========== 执行健康检查 =========="
|
||
echo "等待服务启动..."
|
||
sleep 15
|
||
|
||
max_attempts=10
|
||
attempt=1
|
||
|
||
while [ $attempt -le $max_attempts ]; do
|
||
if curl -f -s "http://localhost:${BACKEND_PORT}/api/v1/health" > /dev/null 2>&1; then
|
||
echo "✅ 后端 API 健康检查通过"
|
||
break
|
||
else
|
||
if [ $attempt -eq $max_attempts ]; then
|
||
echo "❌ 后端 API 健康检查失败"
|
||
echo "最近日志如下:"
|
||
docker-compose logs backend | tail -n 50
|
||
exit 1
|
||
fi
|
||
echo "后端服务未就绪,等待... (${attempt}/${max_attempts})"
|
||
sleep 5
|
||
attempt=$((attempt + 1))
|
||
fi
|
||
done
|
||
|
||
# ================= Step 6: 查看状态 =================
|
||
echo "========== 服务状态 =========="
|
||
docker-compose ps
|
||
|
||
# ================= Step 7: 清理 =================
|
||
echo "========== 清理旧镜像 =========="
|
||
docker image prune -f
|
||
echo "✅ 清理完成"
|
||
|
||
echo "========================================"
|
||
echo "🎉 Docker Compose 部署成功完成!"
|
||
echo "后端地址:http://localhost:${BACKEND_PORT}"
|
||
echo "前端地址:http://localhost:${FRONTEND_PORT}"
|
||
echo "========================================"
|