Files
sionrui/script/deploy/deploy-all.sh

105 lines
3.4 KiB
Bash
Raw Normal View History

2026-03-21 21:05:33 +08:00
#!/bin/bash
# ============================================
# 芋道 (Yudao) 全量部署脚本 - 生产增强版
2026-03-21 21:05:33 +08:00
# ============================================
set -e
# ==================== 1. 核心路径配置 ====================
PROJECT_DIR="/www/wwwroot/sionrui" # 源码目录
BACKEND_DIR="/www/wwwroot/yudao-server" # 运行目录
FRONTEND_DIR="/www/wwwroot/muyetools.cn" # 前端静态目录
2026-03-21 21:05:33 +08:00
BACKEND_JAR_NAME="sion-rui.jar"
BUILD_LOG="/tmp/gitea_build_$(date +%Y%m%d).log"
2026-03-21 21:05:33 +08:00
# ==================== 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 用户权限问题)
2026-03-21 23:50:11 +08:00
MAVEN_REPO="$PROJECT_DIR/.m2_repo"
mkdir -p $MAVEN_REPO && chmod -R 777 $MAVEN_REPO
2026-03-21 21:05:33 +08:00
# ==================== 3. 工具函数 ====================
2026-03-21 21:05:33 +08:00
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $BUILD_LOG
2026-03-21 21:05:33 +08:00
}
# ==================== 4. 后端部署逻辑 ====================
2026-03-21 21:05:33 +08:00
deploy_backend() {
log "🚀 [后端] 开始部署流程..."
2026-03-21 21:05:33 +08:00
cd $PROJECT_DIR
log "1.1 同步最新代码..."
2026-03-21 21:05:33 +08:00
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
2026-03-21 21:05:33 +08:00
log "1.4 复制 JAR 包 (安全覆盖)..."
2026-03-21 23:50:11 +08:00
SOURCE_JAR="$PROJECT_DIR/yudao-server/target/$BACKEND_JAR_NAME"
if [ ! -f "$SOURCE_JAR" ]; then
log "❌ 编译失败:未在 $SOURCE_JAR 找到文件!请检查 $BUILD_LOG"
2026-03-21 23:50:11 +08:00
exit 1
fi
mkdir -p $BACKEND_DIR/logs
2026-03-21 23:50:11 +08:00
rm -f "$BACKEND_DIR/$BACKEND_JAR_NAME"
cp -f "$SOURCE_JAR" "$BACKEND_DIR/"
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: $!)"
2026-03-21 21:05:33 +08:00
}
# ==================== 5. 前端部署逻辑 ====================
2026-03-21 21:05:33 +08:00
deploy_frontend() {
log "🚀 [前端] 开始部署流程..."
2026-03-21 21:05:33 +08:00
cd $PROJECT_DIR/frontend
2026-03-21 23:50:11 +08:00
log "2.1 安装依赖 (pnpm)..."
pnpm install >> $BUILD_LOG 2>&1
log "2.2 构建生产文件..."
pnpm build >> $BUILD_LOG 2>&1
log "2.3 刷新 Web 目录..."
2026-03-21 21:05:33 +08:00
rm -rf $FRONTEND_DIR/*
cp -r $PROJECT_DIR/frontend/app/web-gold/dist/* $FRONTEND_DIR/
log "✅ 前端部署完成"
2026-03-21 21:05:33 +08:00
}
# ==================== 6. 执行主流程 ====================
# 清理可能残留的构建进程
2026-03-21 23:50:11 +08:00
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')] 部署流水线全部执行完毕!"