Files
sionrui/script/deploy/deploy-all.sh
2026-03-22 15:08:43 +08:00

106 lines
3.4 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# ============================================
# 芋道 (Yudao) 全量部署脚本 - 生产增强版
# ============================================
set -e
# ==================== 1. 核心路径配置 ====================
PROJECT_DIR="/www/wwwroot/sionrui" # 源码目录
BACKEND_DIR="/www/wwwroot/yudao-server" # 运行目录
FRONTEND_DIR="/www/wwwroot/muyetools.cn" # 前端静态目录
BACKEND_JAR_NAME="sion-rui.jar"
BUILD_LOG="/tmp/gitea_build_$(date +%Y%m%d).log"
# ==================== 2. 环境强制指定 ====================
# 强制指定 JDK 17 (根据你的截图)
export JAVA_HOME="/www/server/java/jdk-17.0.8"
export PATH=$JAVA_HOME/bin:$PATH
# 自动寻找 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
# ==================== 3. 工具函数 ====================
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $BUILD_LOG
}
# ==================== 4. 后端部署逻辑 ====================
deploy_backend() {
log "🚀 [后端] 开始部署流程..."
cd $PROJECT_DIR
log "1.1 同步最新代码..."
git fetch origin
git reset --hard origin/main
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
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
log "1.4 复制 JAR 包 (安全覆盖)..."
SOURCE_JAR="$PROJECT_DIR/yudao-server/target/$BACKEND_JAR_NAME"
if [ ! -f "$SOURCE_JAR" ]; then
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 "1.5 后台启动服务..."
cd $BACKEND_DIR
# 完全脱离终端重定向,防止脚本挂起
# 注意JVM参数(-Xms/-Xmx)必须在 -jar 之前
nohup $JAVA_HOME/bin/java -Xms512m -Xmx1024m -jar $BACKEND_JAR_NAME --server.port=9900 > ./logs/console.log 2>&1 &
log "✅ 后端启动成功 (PID: $!)"
}
# ==================== 5. 前端部署逻辑 ====================
deploy_frontend() {
log "🚀 [前端] 开始部署流程..."
cd $PROJECT_DIR/frontend
log "2.1 安装依赖 (pnpm)..."
pnpm install >> $BUILD_LOG 2>&1
log "2.2 构建生产文件..."
pnpm build:gold >> $BUILD_LOG 2>&1
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
backend-only) deploy_backend ;;
frontend-only) deploy_frontend ;;
*)
deploy_backend
deploy_frontend
;;
esac
log "🏁 [$(date '+%H:%M:%S')] 部署流水线全部执行完毕!"