feat: enhance Spug deployment scripts with better error handling and auto-fix
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user