Files
monisuo/deploy/deploy_server.sh
sion 31dd44b202 build: 添加 Flutter Web 构建产物 + 修复部署脚本
- 本地构建 Flutter Web (flutter build web --release)
- 服务器无需 Flutter 环境,直接复制 build/web
- 修复 403 错误(build/web 目录为空导致)
2026-03-26 09:20:38 +08:00

134 lines
3.8 KiB
Bash
Raw Permalink 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
# ============================================
# 服务器部署脚本 - 同步前端 + 构建 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 - 从 Git 拉取的 build/web 复制(服务器无 Flutter 环境)
# 本地需先构建flutter build web --release --dart-define=ENV=prod
# 然后 git add flutter_monisuo/build/web/ && git commit && git push
# 同步 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')] 部署完成!"