refactor: simplify docker-compose deploy script for direct Spug execution

This commit is contained in:
2026-02-28 16:23:28 +08:00
parent e31c946f94
commit dd1b67958b

View File

@@ -1,5 +1,5 @@
#!/bin/bash #!/bin/bash
# Spug Docker Compose 自动部署脚本 # Spug Docker Compose 自动部署脚本 - 直接粘贴到 Spug 执行
# 用途:使用 docker-compose 快速部署医院绩效考核系统 # 用途:使用 docker-compose 快速部署医院绩效考核系统
set -e set -e
@@ -26,40 +26,24 @@ export FRONTEND_PORT="${FRONTEND_PORT:-80}"
export DOCKER_TAG="${DOCKER_TAG}" export DOCKER_TAG="${DOCKER_TAG}"
# 日志配置 # 日志配置
LOG_FILE="${LOG_FILE:-/var/log/spug/deploy-docker-compose.log}" LOG_FILE="/tmp/spug-deploy-$(date +%Y%m%d_%H%M%S).log"
mkdir -p /var/log/spug 2>/dev/null || true
# ==================== 工具函数 ==================== echo "========================================"
log() { echo "Spug Docker Compose 自动部署开始"
local level=$1 echo "项目目录:${PROJECT_DIR}"
shift echo "Git 分支:${GIT_BRANCH}"
local timestamp=$(date '+%Y-%m-%d %H:%M:%S') echo "========================================"
echo "[${timestamp}] [${level}] $*" | tee -a "${LOG_FILE}"
}
info() { log "INFO" "$@"; } # ================= Step 1: 更新代码 =================
error() { log "ERROR" "$@"; } echo "========== 更新代码 =========="
success() { log "SUCCESS" "$@"; }
# ==================== 主流程 ====================
main() {
info "========================================"
info "Spug Docker Compose 自动部署开始"
info "项目目录:${PROJECT_DIR}"
info "Git 分支:${GIT_BRANCH}"
info "========================================"
# 进入项目目录
cd "${PROJECT_DIR}" cd "${PROJECT_DIR}"
# 更新代码
info "========== 更新代码 =========="
if [ ! -d ".git" ]; then if [ ! -d ".git" ]; then
info "首次部署,克隆仓库..." echo "首次部署,克隆仓库..."
git clone "${GIT_REPO}" . git clone "${GIT_REPO}" .
git checkout "${GIT_BRANCH}" git checkout "${GIT_BRANCH}"
else else
info "更新现有代码..." echo "更新现有代码..."
git fetch origin "${GIT_BRANCH}" git fetch origin "${GIT_BRANCH}"
git reset --hard "origin/${GIT_BRANCH}" git reset --hard "origin/${GIT_BRANCH}"
git clean -fd git clean -fd
@@ -67,63 +51,63 @@ main() {
commit_hash=$(git rev-parse --short HEAD) commit_hash=$(git rev-parse --short HEAD)
commit_msg=$(git log -1 --pretty=format:"%s") commit_msg=$(git log -1 --pretty=format:"%s")
success " 代码更新完成,当前版本:${commit_hash} - ${commit_msg}" echo " 代码更新完成,当前版本:${commit_hash} - ${commit_msg}"
# 停止旧容器 # ================= Step 2: 停止旧容器 =================
info "========== 停止旧服务 ==========" echo "========== 停止旧服务 =========="
if docker-compose ps &>/dev/null; then if docker-compose ps &>/dev/null; then
docker-compose down || true docker-compose down || true
success " 旧服务已停止" echo " 旧服务已停止"
else else
info "未发现运行中的服务" echo "未发现运行中的服务"
fi fi
# 构建镜像 # ================= Step 3: 构建 Docker 镜像 =================
info "========== 构建 Docker 镜像 ==========" echo "========== 构建 Docker 镜像 =========="
docker-compose build --no-cache docker-compose build --no-cache
echo "✅ Docker 镜像构建完成"
# 启动服务 # ================= Step 4: 启动新容器 =================
info "========== 启动服务 ==========" echo "========== 启动新容器 =========="
docker-compose up -d docker-compose up -d
echo "✅ 容器启动成功"
# 等待服务启动 # ================= Step 5: 等待并健康检查 =================
info "等待服务启动..." echo "========== 执行健康检查 =========="
echo "等待服务启动..."
sleep 15 sleep 15
# 健康检查
info "========== 执行健康检查 =========="
max_attempts=10 max_attempts=10
attempt=1 attempt=1
while [ $attempt -le $max_attempts ]; do while [ $attempt -le $max_attempts ]; do
if curl -f -s "http://localhost:${BACKEND_PORT}/api/v1/health" > /dev/null 2>&1; then if curl -f -s "http://localhost:${BACKEND_PORT}/api/v1/health" > /dev/null 2>&1; then
success " 后端 API 健康检查通过" echo " 后端 API 健康检查通过"
break break
else else
if [ $attempt -eq $max_attempts ]; then if [ $attempt -eq $max_attempts ]; then
error " 后端 API 健康检查失败" echo " 后端 API 健康检查失败"
docker-compose logs backend echo "最近日志如下:"
docker-compose logs backend | tail -n 50
exit 1 exit 1
fi fi
info "后端服务未就绪,等待... (${attempt}/${max_attempts})" echo "后端服务未就绪,等待... (${attempt}/${max_attempts})"
sleep 5 sleep 5
attempt=$((attempt + 1)) attempt=$((attempt + 1))
fi fi
done done
# 查看状态 # ================= Step 6: 查看状态 =================
info "========== 服务状态 ==========" echo "========== 服务状态 =========="
docker-compose ps docker-compose ps
# 清理旧镜像 # ================= Step 7: 清理 =================
info "========== 清理旧镜像 ==========" echo "========== 清理旧镜像 =========="
docker image prune -f docker image prune -f
echo "✅ 清理完成"
info "========================================" echo "========================================"
success "🎉 Docker Compose 部署成功完成!" echo "🎉 Docker Compose 部署成功完成!"
info "后端地址http://localhost:${BACKEND_PORT}" echo "后端地址http://localhost:${BACKEND_PORT}"
info "前端地址http://localhost:${FRONTEND_PORT}" echo "前端地址http://localhost:${FRONTEND_PORT}"
info "========================================" echo "========================================"
}
main "$@"