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