From 77f4fb1586575b855d8ad01eed08c72d3ac69da0 Mon Sep 17 00:00:00 2001 From: sion123 <450702724@qq.com> Date: Sun, 22 Mar 2026 19:11:18 +0800 Subject: [PATCH] =?UTF-8?q?refactor(deploy):=20=E9=87=8D=E6=9E=84=E9=83=A8?= =?UTF-8?q?=E7=BD=B2=E8=84=9A=E6=9C=AC=E6=9E=B6=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除旧的宝塔 Webhook 脚本 (`bt_webhook.sh`) 和 H5 部署脚本 (`deploy_h5.sh`) - 新增本地构建脚本 (`build_local.sh`),支持 Flutter Web 和 Vue Admin 的独立或联合构建 - 新增服务器部署脚本 (`deploy_server.sh`),整合前端文件同步与后端 Java 服务构建部署 - 优化部署流程,分离本地构建与服务器部署职责,提高部署效率和可维护性 --- deploy/bt_webhook.sh | 83 ------------------------------ deploy/build_local.sh | 66 ++++++++++++++++++++++++ deploy/deploy_h5.sh | 29 ----------- deploy/deploy_server.sh | 110 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 176 insertions(+), 112 deletions(-) delete mode 100644 deploy/bt_webhook.sh create mode 100644 deploy/build_local.sh delete mode 100644 deploy/deploy_h5.sh create mode 100644 deploy/deploy_server.sh diff --git a/deploy/bt_webhook.sh b/deploy/bt_webhook.sh deleted file mode 100644 index a96ba00..0000000 --- a/deploy/bt_webhook.sh +++ /dev/null @@ -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!" diff --git a/deploy/build_local.sh b/deploy/build_local.sh new file mode 100644 index 0000000..7e0d0cb --- /dev/null +++ b/deploy/build_local.sh @@ -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 "🏁 构建完成!" diff --git a/deploy/deploy_h5.sh b/deploy/deploy_h5.sh deleted file mode 100644 index bb523a9..0000000 --- a/deploy/deploy_h5.sh +++ /dev/null @@ -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配置指向该目录" diff --git a/deploy/deploy_server.sh b/deploy/deploy_server.sh new file mode 100644 index 0000000..6c108d8 --- /dev/null +++ b/deploy/deploy_server.sh @@ -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')] 部署完成!"