Files
hospital_performance/spug/deploy-docker-compose.sh

125 lines
4.1 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Spug Docker Compose 自动部署脚本 - 直接粘贴到 Spug 执行
# 用途:使用 docker-compose 快速部署医院绩效考核系统
set -e
# ==================== 配置参数 ====================
PROJECT_DIR="${SPUG_DEPLOY_DIR:-/data/spug/service/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 "========== 更新代码 =========="
# 确保目录存在
mkdir -p "${PROJECT_DIR}"
cd "${PROJECT_DIR}"
if [ ! -d ".git" ]; then
echo "首次部署,克隆仓库..."
# 检查目录是否为空,非空则备份
if [ "$(ls -A ${PROJECT_DIR} 2>/dev/null)" ]; then
echo "目录非空,备份现有文件..."
backup_dir="${PROJECT_DIR}_backup_$(date +%Y%m%d_%H%M%S)"
mkdir -p "${backup_dir}"
mv ${PROJECT_DIR}/* ${PROJECT_DIR}/.[!.]* ${backup_dir}/ 2>/dev/null || true
echo "已备份到:${backup_dir}"
fi
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 "========================================"