diff --git a/script/deploy/deploy-all.sh b/script/deploy/deploy-all.sh index 726bba5946..8cd665f911 100644 --- a/script/deploy/deploy-all.sh +++ b/script/deploy/deploy-all.sh @@ -1,102 +1,96 @@ #!/bin/bash # ============================================ -# 芋道源码全量部署脚本 - 生产环境专用版 +# 芋道 (Yudao) 全量部署脚本 - 生产增强版 # ============================================ set -e -# ==================== 配置区 ==================== -PROJECT_DIR="/www/wwwroot/sionrui" -BACKEND_DIR="/www/wwwroot/yudao-server" -FRONTEND_DIR="/www/wwwroot/muyetools.cn" +# ==================== 1. 核心路径配置 ==================== +PROJECT_DIR="/www/wwwroot/sionrui" # 源码目录 +BACKEND_DIR="/www/wwwroot/yudao-server" # 运行目录 +FRONTEND_DIR="/www/wwwroot/muyetools.cn" # 前端静态目录 BACKEND_JAR_NAME="yudao-server.jar" -BACKEND_PORT=9900 BUILD_LOG="/tmp/gitea_build_$(date +%Y%m%d).log" -# 强制指定 JDK 17 (根据你的截图路径) +# ==================== 2. 环境强制指定 ==================== +# 强制指定 JDK 17 (根据你的截图) export JAVA_HOME="/www/server/java/jdk-17.0.8" export PATH=$JAVA_HOME/bin:$PATH -# Maven 仓库与内存优化 +# 自动寻找 Maven 路径 +MVN_EXEC=$(which mvn || find /www/server -name "mvn" | head -n 1 || echo "mvn") + +# 限制内存防止 OOM,设置 Maven 多线程加速编译 +export MAVEN_OPTS="-Xms512m -Xmx1024m" +export NODE_OPTIONS="--max-old-space-size=2048" + +# 指定本地仓库(解决 www 用户权限问题) MAVEN_REPO="$PROJECT_DIR/.m2_repo" mkdir -p $MAVEN_REPO && chmod -R 777 $MAVEN_REPO -export MAVEN_OPTS="-Xms256m -Xmx512m" -# ==================== 工具函数 ==================== +# ==================== 3. 工具函数 ==================== log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $BUILD_LOG } -# ==================== 核心逻辑 ==================== - +# ==================== 4. 后端部署逻辑 ==================== deploy_backend() { - log "========== [后端] 开始部署 ==========" + log "🚀 [后端] 开始部署流程..." - # 1. 代码同步 cd $PROJECT_DIR - log "1.1 拉取最新代码..." + log "1.1 同步最新代码..." git fetch origin git reset --hard origin/main - # 2. 编译打包 - log "1.2 开始 Maven 编译 (详情见 $BUILD_LOG)..." - # 显式使用项目内的 yudao-server 模块进行构建 - mvn clean package -DskipTests -pl yudao-server -am -Dmaven.repo.local=$MAVEN_REPO >> $BUILD_LOG 2>&1 + log "1.2 开始多线程构建 (4核加速)..." + # -T 1C 表示每个 CPU 核心一个线程,显著缩短 99% CPU 占用的时长 + $MVN_EXEC clean package -DskipTests -pl yudao-server -am -T 1C -Dmaven.repo.local=$MAVEN_REPO >> $BUILD_LOG 2>&1 - # 3. 进程清理 (解决文件占用问题) - log "1.3 正在清理旧进程..." - # 强制杀掉占用 9900 端口或运行该 JAR 的进程 - PID=$(ps -ef | grep "$BACKEND_JAR_NAME" | grep -v "grep" | awk '{print $2}') - if [ -n "$PID" ]; then - kill -9 $PID || true - sleep 2 - fi + log "1.3 清理旧进程与文件锁..." + # 查找并强杀旧 JAR 进程 + OLD_PID=$(ps -ef | grep "$BACKEND_JAR_NAME" | grep -v "grep" | awk '{print $2}') + [ -z "$OLD_PID" ] || kill -9 $OLD_PID + sleep 2 - # 4. 安全复制 (先删再拷) - log "1.4 复制 JAR 包到运行目录..." - mkdir -p $BACKEND_DIR/logs - - # 检查源文件是否存在 + log "1.4 复制 JAR 包 (安全覆盖)..." SOURCE_JAR="$PROJECT_DIR/yudao-server/target/$BACKEND_JAR_NAME" if [ ! -f "$SOURCE_JAR" ]; then - log "❌ 错误:未找到生成的 JAR 包:$SOURCE_JAR" + log "❌ 编译失败:未在 $SOURCE_JAR 找到文件!请检查 $BUILD_LOG" exit 1 fi + mkdir -p $BACKEND_DIR/logs rm -f "$BACKEND_DIR/$BACKEND_JAR_NAME" cp -f "$SOURCE_JAR" "$BACKEND_DIR/" - log "JAR 包复制完成: $(ls -lh $BACKEND_DIR/$BACKEND_JAR_NAME | awk '{print $5}')" - - # 5. 启动服务 (完全脱离终端) - log "1.5 启动后端服务..." - cd $BACKEND_DIR - # 关键:通过重定向所有输出到 /dev/null 防止脚本挂起 - nohup java -Xms512m -Xmx512m -jar $BACKEND_JAR_NAME --spring.profiles.active=prod > ./logs/console.log 2>&1 & - log "✅ 后端启动指令已发送" + log "1.5 后台启动服务..." + cd $BACKEND_DIR + # 完全脱离终端重定向,防止脚本挂起 + nohup java -Xms512m -Xmx1024m -jar $BACKEND_JAR_NAME --spring.profiles.active=prod > ./logs/console.log 2>&1 & + + log "✅ 后端启动成功 (PID: $!)" } +# ==================== 5. 前端部署逻辑 ==================== deploy_frontend() { - log "========== [前端] 开始部署 ==========" + log "🚀 [前端] 开始部署流程..." cd $PROJECT_DIR/frontend log "2.1 安装依赖 (pnpm)..." pnpm install >> $BUILD_LOG 2>&1 - log "2.2 前端构建 (Build)..." + log "2.2 构建生产文件..." pnpm build >> $BUILD_LOG 2>&1 - log "2.3 部署静态文件..." - # 确保目标目录干净 + log "2.3 刷新 Web 目录..." rm -rf $FRONTEND_DIR/* cp -r $PROJECT_DIR/frontend/app/web-gold/dist/* $FRONTEND_DIR/ log "✅ 前端部署完成" } -# ==================== 主流程 ==================== - -# 运行前清理可能的构建残留 +# ==================== 6. 执行主流程 ==================== +# 清理可能残留的构建进程 pkill -f "maven" || true case "$1" in @@ -106,4 +100,6 @@ case "$1" in deploy_backend deploy_frontend ;; -esac \ No newline at end of file +esac + +log "🏁 [$(date '+%H:%M:%S')] 部署流水线全部执行完毕!" \ No newline at end of file