refactor(deploy): 重构部署脚本架构

- 删除旧的宝塔 Webhook 脚本 (`bt_webhook.sh`) 和 H5 部署脚本 (`deploy_h5.sh`)
- 新增本地构建脚本 (`build_local.sh`),支持 Flutter Web 和 Vue Admin 的独立或联合构建
- 新增服务器部署脚本 (`deploy_server.sh`),整合前端文件同步与后端 Java 服务构建部署
- 优化部署流程,分离本地构建与服务器部署职责,提高部署效率和可维护性
This commit is contained in:
2026-03-22 19:11:18 +08:00
parent 11eb7e5790
commit 77f4fb1586
4 changed files with 176 additions and 112 deletions

View File

@@ -1,83 +0,0 @@
#!/bin/bash
# ============================================
# 宝塔 Webhook 自动部署脚本 - Monisuo
# ============================================
# 配置项 - 请根据实际情况修改
PROJECT_PATH="/opt/monisuo" # 项目部署路径
GIT_REPO="http://sion:woshisaw.@8.155.172.147:3001/sion/monisuo.git" # Git仓库地址
JAR_NAME="monisuo-1.0.jar" # JAR包名称
LOG_FILE="/opt/monisuo/deploy.log" # 部署日志文件
# 记录日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> $LOG_FILE
}
log "========== 开始部署 =========="
# 进入项目目录
cd $PROJECT_PATH || {
log "错误: 无法进入目录 $PROJECT_PATH"
exit 1
}
# 拉取最新代码
log "正在拉取最新代码..."
git pull origin main >> $LOG_FILE 2>&1
if [ $? -ne 0 ]; then
log "错误: Git pull 失败"
exit 1
fi
log "代码拉取成功"
# 检查是否有更新
CHANGED=$(git diff --name-only HEAD~1 HEAD)
log "变更文件: $CHANGED"
# 如果有Java代码变更重新打包
if echo "$CHANGED" | grep -q "src/"; then
log "检测到Java代码变更开始重新打包..."
# Maven打包
mvn clean package -DskipTests >> $LOG_FILE 2>&1
if [ $? -ne 0 ]; then
log "错误: Maven打包失败"
exit 1
fi
log "Maven打包成功"
fi
# 重启后端服务
log "正在重启后端服务..."
# 停止旧服务
pkill -f $JAR_NAME
sleep 2
# 启动新服务
nohup java -jar $PROJECT_PATH/target/$JAR_NAME --spring.profiles.active=dev > $PROJECT_PATH/app.log 2>&1 &
if [ $? -eq 0 ]; then
log "后端服务启动成功"
else
log "错误: 后端服务启动失败"
exit 1
fi
# 检查服务是否启动成功
sleep 5
if pgrep -f $JAR_NAME > /dev/null; then
log "服务运行正常"
else
log "错误: 服务启动后未运行"
exit 1
fi
log "========== 部署完成 =========="
echo "Deploy Success!"

66
deploy/build_local.sh Normal file
View File

@@ -0,0 +1,66 @@
#!/bin/bash
# ============================================
# 本地构建脚本 - 构建 Flutter + Vue Admin
# ============================================
set -e
# ==================== 工具函数 ====================
log() {
echo "[$(date '+%H:%M:%S')] $1"
}
PROJECT_ROOT="$(dirname "$0")/.."
# ==================== 1. 构建 Flutter Web ====================
build_flutter() {
log "🚀 [Flutter] 开始构建..."
cd $PROJECT_ROOT/flutter_monisuo
log "1.1 获取依赖..."
flutter pub get
log "1.2 构建 Web..."
flutter build web --release
if [ ! -d "build/web" ]; then
log "❌ Flutter 构建失败"
exit 1
fi
log "✅ Flutter 构建完成: flutter_monisuo/build/web/"
}
# ==================== 2. 构建 Vue Admin ====================
build_admin() {
log "🚀 [Vue Admin] 开始构建..."
cd $PROJECT_ROOT/monisuo-admin
log "2.1 安装依赖..."
pnpm install
log "2.2 构建..."
pnpm build
if [ ! -d "dist" ]; then
log "❌ Vue Admin 构建失败"
exit 1
fi
log "✅ Vue Admin 构建完成: monisuo-admin/dist/"
}
# ==================== 主流程 ====================
case "$1" in
flutter)
build_flutter
;;
admin)
build_admin
;;
*)
build_flutter
build_admin
;;
esac
log "🏁 构建完成!"

View File

@@ -1,29 +0,0 @@
#!/bin/bash
# H5前端部署脚本
PROJECT_PATH="/opt/monisuo/h5"
GIT_REPO="http://sion:woshisaw.@8.155.172.147:3001/sion/monisuo.git"
echo "开始部署H5前端..."
# 创建目录
mkdir -p $PROJECT_PATH
# 拉取代码(如果已存在)
if [ -d "$PROJECT_PATH/.git" ]; then
cd $PROJECT_PATH
git pull origin main
else
git clone $GIT_REPO $PROJECT_PATH
cd $PROJECT_PATH/app
fi
# 注意H5需要通过HBuilderX构建
# 构建后的文件在 dist/build/h5 目录
# 将构建好的文件上传到服务器即可
echo "请先在本地使用HBuilderX构建H5"
echo "1. 发行 → 网站-H5手机版"
echo "2. 构建完成后将 dist/build/h5 目录上传到服务器"
echo "3. Nginx配置指向该目录"

110
deploy/deploy_server.sh Normal file
View File

@@ -0,0 +1,110 @@
#!/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
FLUTTER_BUILD_DIR="$PROJECT_DIR/flutter_monisuo/build/web"
if [ -d "$FLUTTER_BUILD_DIR" ]; then
log "4.1 同步 Flutter Web..."
mkdir -p $FLUTTER_WEB_DIR
rm -rf $FLUTTER_WEB_DIR/*
cp -r $FLUTTER_BUILD_DIR/* $FLUTTER_WEB_DIR/
log "✅ Flutter Web 同步完成"
else
log "⚠️ 未找到 Flutter 构建文件,跳过"
fi
# Vue Admin
ADMIN_BUILD_DIR="$PROJECT_DIR/monisuo-admin/dist"
if [ -d "$ADMIN_BUILD_DIR" ]; then
log "4.2 同步 Vue Admin..."
mkdir -p $ADMIN_DIR
rm -rf $ADMIN_DIR/*
cp -r $ADMIN_BUILD_DIR/* $ADMIN_DIR/
log "✅ Vue Admin 同步完成"
else
log "⚠️ 未找到 Vue Admin 构建文件,跳过"
fi
}
# ==================== 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_HOME/bin/java -Xms512m -Xmx1024m -jar $BACKEND_JAR_NAME --spring.profiles.active=prd --server.port=$BACKEND_PORT > ./logs/console.log 2>&1 &
log "✅ 后端启动成功 (PID: $!)"
}
# ==================== 6. 执行主流程 ====================
case "$1" in
frontend)
sync_frontend
;;
backend)
deploy_backend
;;
*)
sync_frontend
deploy_backend
;;
esac
log "🏁 [$(date '+%H:%M:%S')] 部署完成!"