#!/bin/bash # ============================================ # 服务器部署脚本 - 同步前端 + 构建 Java + 启动 # ============================================ set -e # ==================== 1. 核心路径配置 ==================== PROJECT_DIR="/www/wwwroot/monisuo" # 源码目录 BACKEND_DIR="/www/wwwroot" # 后端运行目录 FLUTTER_WEB_DIR="/www/wwwroot/monisuo-h5" # Flutter Web 目录 ADMIN_DIR="/www/wwwroot/monisuo-admin" # Vue Admin 目录 BACKEND_JAR_NAME="monisuo-1.0.jar" BACKEND_PORT="5010" BUILD_LOG="/tmp/monisuo_build_$(date +%Y%m%d).log" # ==================== 2. 环境配置 ==================== export JAVA_HOME="/www/server/java/jdk1.8.0_371" export PATH=$JAVA_HOME/bin:$PATH # Maven 配置 MVN_EXEC=$(which mvn || find /www/server -name "mvn" | head -n 1 || echo "mvn") export MAVEN_OPTS="-Xms512m -Xmx1024m" # Maven 本地仓库 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. 构建并同步前端 ==================== sync_frontend() { log "📂 [前端] 开始构建..." # Flutter Web 构建 # log "4.1 构建 Flutter Web..." # cd $PROJECT_DIR/flutter_monisuo # flutter build web --release --dart-define=ENV=prod >> $BUILD_LOG 2>&1 # if [ $? -eq 0 ]; then # log "✅ Flutter Web 构建完成" # else # log "❌ Flutter Web 构建失败" # exit 1 # fi # 同步 Flutter Web FLUTTER_BUILD_DIR="$PROJECT_DIR/flutter_monisuo/build/web" mkdir -p $FLUTTER_WEB_DIR rm -rf $FLUTTER_WEB_DIR/* cp -r $FLUTTER_BUILD_DIR/* $FLUTTER_WEB_DIR/ log "✅ Flutter Web 同步完成" # Vue Admin 构建 log "4.2 构建 Vue Admin..." cd $PROJECT_DIR/monisuo-admin pnpm install >> $BUILD_LOG 2>&1 pnpm run build >> $BUILD_LOG 2>&1 if [ $? -eq 0 ]; then log "✅ Vue Admin 构建完成" else log "❌ Vue Admin 构建失败" exit 1 fi # 同步 Vue Admin ADMIN_BUILD_DIR="$PROJECT_DIR/monisuo-admin/dist" mkdir -p $ADMIN_DIR rm -rf $ADMIN_DIR/* cp -r $ADMIN_BUILD_DIR/* $ADMIN_DIR/ log "✅ Vue Admin 同步完成" } # ==================== 5. 后端构建与部署 ==================== deploy_backend() { log "🚀 [后端] 开始部署..." cd $PROJECT_DIR log "5.1 同步代码..." git fetch origin git reset --hard origin/main log "5.2 Maven 构建..." $MVN_EXEC clean package -DskipTests -Dmaven.repo.local=$MAVEN_REPO >> $BUILD_LOG 2>&1 log "5.3 停止旧进程..." OLD_PID=$(ps -ef | grep "$BACKEND_JAR_NAME" | grep -v "grep" | awk '{print $2}') [ -z "$OLD_PID" ] || kill -9 $OLD_PID sleep 2 log "5.4 部署 JAR 包..." SOURCE_JAR="$PROJECT_DIR/target/$BACKEND_JAR_NAME" if [ ! -f "$SOURCE_JAR" ]; then log "❌ 构建失败:未找到 $SOURCE_JAR" exit 1 fi mkdir -p $BACKEND_DIR/logs cp -f "$SOURCE_JAR" "$BACKEND_DIR/" log "5.5 启动服务..." cd $BACKEND_DIR nohup java -jar \ -Xms256m \ -Xmx512m \ -XX:+UseG1GC \ $BACKEND_JAR_NAME \ --spring.profiles.active=dev \ --server.port=$BACKEND_PORT \ > ./logs/app.log 2>&1 & # 等待并检查启动状态 sleep 5 if pgrep -f $BACKEND_JAR_NAME > /dev/null; then PID=$(pgrep -f $BACKEND_JAR_NAME) log "✅ 后端启动成功 (PID: $PID)" else log "❌ 后端启动失败,查看日志:" tail -50 ./logs/app.log >> $BUILD_LOG exit 1 fi } # ==================== 6. 执行主流程 ==================== case "$1" in frontend) sync_frontend ;; backend) deploy_backend ;; *) sync_frontend deploy_backend ;; esac log "🏁 [$(date '+%H:%M:%S')] 部署完成!"