feat: enhance Spug deployment scripts with better error handling and auto-fix

This commit is contained in:
2026-02-28 16:01:59 +08:00
parent 13badac2dc
commit 5b45bf86a2
4 changed files with 511 additions and 13 deletions

View File

@@ -7,14 +7,27 @@ set -e
# ==================== 配置参数 ====================
# 这些参数可以在 Spug 中通过环境变量传入
# 如果 SPUG_DEPLOY_DIR 为空,则使用默认值
if [ -z "${SPUG_DEPLOY_DIR}" ]; then
PROJECT_DIR="/var/www/hospital-performance"
else
PROJECT_DIR="${SPUG_DEPLOY_DIR}"
fi
PROJECT_NAME="${SPUG_APP_NAME:-hospital-performance}"
PROJECT_DIR="${SPUG_DEPLOY_DIR:-/var/www/hospital-performance}"
BACKUP_DIR="${PROJECT_DIR}/backups"
FRONTEND_DIR="${PROJECT_DIR}/frontend"
BACKEND_DIR="${PROJECT_DIR}/backend"
# Git 配置
GIT_REPO="${SPUG_GIT_REPO:-https://gitea.gentronhealth.com/chenqi/hospital_performance.git}"
# Git 配置Spug 会自动设置 SPUG_GIT_URL
if [ -n "${SPUG_GIT_URL}" ]; then
GIT_REPO="${SPUG_GIT_URL}"
elif [ -n "${SPUG_GIT_REPO}" ]; then
GIT_REPO="${SPUG_GIT_REPO}"
else
GIT_REPO="https://gitea.gentronhealth.com/chenqi/hospital_performance.git"
fi
GIT_BRANCH="${SPUG_GIT_BRANCH:-main}"
# Python 虚拟环境
@@ -30,7 +43,11 @@ BACKEND_PORT="${BACKEND_PORT:-8000}"
FRONTEND_SERVICE="${FRONTEND_SERVICE:-nginx}"
# 日志配置
LOG_FILE="${LOG_FILE:-/var/log/spug/deploy.log}"
if [ -z "${LOG_FILE}" ]; then
LOG_FILE="/var/log/spug/deploy.log"
# 确保日志目录存在
mkdir -p /var/log/spug 2>/dev/null || true
fi
DEPLOY_TIME=$(date +"%Y%m%d_%H%M%S")
# ==================== 工具函数 ====================
@@ -71,11 +88,19 @@ pre_check() {
check_command node
check_command npm
# 检查磁盘空间
local available_space=$(df -P "${PROJECT_DIR}" | awk 'NR==2 {print $4}')
if [ "${available_space}" -lt 1048576 ]; then
error "磁盘空间不足 1GB当前可用${available_space}KB"
exit 1
# 检查部署目录
if [ ! -d "${PROJECT_DIR}" ]; then
info "创建部署目录:${PROJECT_DIR}"
mkdir -p "${PROJECT_DIR}"
fi
# 检查磁盘空间(如果目录存在)
if [ -d "${PROJECT_DIR}" ]; then
local available_space=$(df -P "${PROJECT_DIR}" 2>/dev/null | awk 'NR==2 {print $4}')
if [ -n "${available_space}" ] && [ "${available_space}" -lt 1048576 ]; then
error "磁盘空间不足 1GB当前可用${available_space}KB"
exit 1
fi
fi
info "✓ 前置检查通过"
@@ -89,6 +114,12 @@ update_code() {
if [ ! -d ".git" ]; then
info "首次部署,克隆仓库..."
# 确保目录为空或不存在
if [ "$(ls -A ${PROJECT_DIR} 2>/dev/null)" ]; then
info "目录非空,先备份现有文件..."
mkdir -p "${PROJECT_DIR}/backup_$(date +%Y%m%d_%H%M%S)_non_git"
find "${PROJECT_DIR}" -maxdepth 1 -type f -o -type d ! -name '.' -exec mv {} "${PROJECT_DIR}/backup_$(date +%Y%m%d_%H%M%S)_non_git/" \; 2>/dev/null || true
fi
git clone "${GIT_REPO}" .
git checkout "${GIT_BRANCH}"
else