From 94cd83ea2c640dc5b4d7d1384e317c6353776e27 Mon Sep 17 00:00:00 2001 From: chenqi Date: Sat, 28 Feb 2026 16:52:41 +0800 Subject: [PATCH] refactor: convert to traditional deployment without Docker --- spug/deploy-docker-compose.sh | 136 ++++++++++++++++++++++++++-------- 1 file changed, 104 insertions(+), 32 deletions(-) diff --git a/spug/deploy-docker-compose.sh b/spug/deploy-docker-compose.sh index 3eef77e..d42bc7d 100644 --- a/spug/deploy-docker-compose.sh +++ b/spug/deploy-docker-compose.sh @@ -1,6 +1,7 @@ #!/bin/bash -# Spug Docker Compose 自动部署脚本 - 直接粘贴到 Spug 执行 -# 用途:使用 docker-compose 快速部署医院绩效考核系统 +# Spug 自动部署脚本 - 直接粘贴到 Spug 执行 +# 用途:医院绩效考核系统传统部署(非 Docker) +# 适用:服务器无法访问 Docker Hub 的情况 set -e @@ -9,9 +10,9 @@ 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}" +# 服务配置 +BACKEND_PORT="${BACKEND_PORT:-8000}" +FRONTEND_PORT="${FRONTEND_PORT:-80}" # 环境变量 export DATABASE_HOST="${DATABASE_HOST:-192.168.110.252}" @@ -21,9 +22,6 @@ 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" @@ -64,29 +62,101 @@ commit_hash=$(git rev-parse --short HEAD) commit_msg=$(git log -1 --pretty=format:"%s") echo "✅ 代码更新完成,当前版本:${commit_hash} - ${commit_msg}" -# ================= Step 2: 停止旧容器 ================= +# ================= Step 2: 停止旧服务 ================= echo "========== 停止旧服务 ==========" -if docker compose ps &>/dev/null; then - docker compose down || true - echo "✅ 旧服务已停止" -else - echo "未发现运行中的服务" + +# 停止旧的后端进程 +OLD_BACKEND_PID=$(ps -ef | grep "uvicorn.*app.main:app" | grep -v grep | awk '{print $2}') +if [ -n "$OLD_BACKEND_PID" ]; then + echo "停止旧的后端进程 $OLD_BACKEND_PID" + kill -9 $OLD_BACKEND_PID || true fi -# ================= Step 3: 构建 Docker 镜像 ================= -echo "========== 构建 Docker 镜像 ==========" -docker compose build --no-cache -echo "✅ Docker 镜像构建完成" +echo "✅ 旧服务已停止" -# ================= Step 4: 启动新容器 ================= -echo "========== 启动新容器 ==========" -docker compose up -d -echo "✅ 容器启动成功" +# ================= Step 3: 安装依赖并部署后端 ================= +echo "========== 部署后端 ==========" +cd "${PROJECT_DIR}/backend" -# ================= Step 5: 等待并健康检查 ================= +# 创建虚拟环境 +if [ ! -d "venv" ]; then + echo "创建 Python 虚拟环境..." + python3 -m venv venv +fi + +# 激活虚拟环境 +source venv/bin/activate + +# 安装依赖 +echo "安装 Python 依赖..." +pip install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple +pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple + +# 数据库迁移 +echo "执行数据库迁移..." +alembic upgrade head || true + +# 启动后端 +echo "启动后端服务..." +mkdir -p logs +nohup venv/bin/uvicorn app.main:app --host 0.0.0.0 --port ${BACKEND_PORT} --workers 4 > logs/backend.log 2>&1 & +echo "✅ 后端服务已启动,端口 ${BACKEND_PORT}" + +# ================= Step 4: 构建前端 ================= +echo "========== 构建前端 ==========" +cd "${PROJECT_DIR}/frontend" + +# 检查 node_modules +if [ ! -d "node_modules" ]; then + echo "安装前端依赖..." + npm install --registry=https://registry.npmmirror.com +else + echo "更新前端依赖..." + npm update --registry=https://registry.npmmirror.com +fi + +# 构建前端 +echo "构建前端项目..." +npm run build +echo "✅ 前端构建完成" + +# ================= Step 5: 部署前端到 Nginx ================= +echo "========== 部署前端 ==========" +NGINX_HTML="/var/www/hospital_performance_html" +mkdir -p ${NGINX_HTML} +rm -rf ${NGINX_HTML}/* +cp -r ${PROJECT_DIR}/frontend/dist/* ${NGINX_HTML}/ + +# 创建 Nginx 配置 +cat > /etc/nginx/conf.d/hospital_performance.conf <