|
|
@@ -0,0 +1,118 @@
|
|
|
+#!/bin/bash
|
|
|
+# 本地编译 + 传送到线上部署脚本
|
|
|
+# 用法: bash deploy-local.sh
|
|
|
+
|
|
|
+set -e
|
|
|
+
|
|
|
+# ========== 配置 ==========
|
|
|
+SERVER_IP="8.159.134.106"
|
|
|
+SERVER_PORT="22622"
|
|
|
+SERVER_USER="root"
|
|
|
+SERVER_PATH="/data/ai/audio_codebuddy"
|
|
|
+FRONTEND_PATH="/data/ai/frontend"
|
|
|
+SSH_OPTS="-p $SERVER_PORT -o StrictHostKeyChecking=no"
|
|
|
+
|
|
|
+# ========== 颜色输出 ==========
|
|
|
+RED='\033[0;31m'
|
|
|
+GREEN='\033[0;32m'
|
|
|
+YELLOW='\033[1;33m'
|
|
|
+NC='\033[0m'
|
|
|
+
|
|
|
+log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
|
|
|
+log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
|
|
|
+log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
|
|
|
+
|
|
|
+# ========== 检查 ==========
|
|
|
+if ! command -v rsync &> /dev/null; then
|
|
|
+ log_warn "rsync 未安装,尝试安装..."
|
|
|
+ if [[ "$OSTYPE" == "darwin"* ]]; then
|
|
|
+ brew install rsync
|
|
|
+ else
|
|
|
+ sudo apt-get install -y rsync
|
|
|
+ fi
|
|
|
+fi
|
|
|
+
|
|
|
+# ========== 1. 提交代码 ==========
|
|
|
+log_info "========== 1. 提交代码 =========="
|
|
|
+git status --short
|
|
|
+
|
|
|
+read -p "是否提交所有改动? (y/n): " confirm
|
|
|
+if [[ "$confirm" == "y" ]]; then
|
|
|
+ git add -A
|
|
|
+ read -p "输入提交信息: " commit_msg
|
|
|
+ git commit -m "$commit_msg"
|
|
|
+ git push git@git.rrbrr.com:caojunfei/audio_codebuddy.git master
|
|
|
+fi
|
|
|
+
|
|
|
+# ========== 2. 构建前端 ==========
|
|
|
+log_info "========== 2. 构建前端 =========="
|
|
|
+cd my-uniapp-vue3
|
|
|
+npm install
|
|
|
+npm run build:h5
|
|
|
+cd ..
|
|
|
+
|
|
|
+# ========== 3. 构建后端 ==========
|
|
|
+log_info "========== 3. 构建后端 =========="
|
|
|
+cd server
|
|
|
+npm install
|
|
|
+npm run build
|
|
|
+cd ..
|
|
|
+
|
|
|
+# ========== 4. 同步到服务器 ==========
|
|
|
+log_info "========== 4. 同步到服务器 =========="
|
|
|
+
|
|
|
+# 同步前端
|
|
|
+log_info "同步前端..."
|
|
|
+ssh $SSH_OPTS $SERVER_USER@$SERVER_IP "mkdir -p $FRONTEND_PATH/build/h5"
|
|
|
+rsync -avz --delete \
|
|
|
+ -e "ssh $SSH_OPTS" \
|
|
|
+ --exclude='node_modules' \
|
|
|
+ --exclude='.git' \
|
|
|
+ my-uniapp-vue3/dist/build/h5/ \
|
|
|
+ $SERVER_USER@$SERVER_IP:$FRONTEND_PATH/build/h5/
|
|
|
+
|
|
|
+# 同步后端源码
|
|
|
+log_info "同步后端..."
|
|
|
+rsync -avz --delete \
|
|
|
+ -e "ssh $SSH_OPTS" \
|
|
|
+ --exclude='node_modules' \
|
|
|
+ --exclude='.git' \
|
|
|
+ --exclude='dist' \
|
|
|
+ --exclude='coverage' \
|
|
|
+ --exclude='*.log' \
|
|
|
+ server/ \
|
|
|
+ $SERVER_USER@$SERVER_IP:$SERVER_PATH/server/
|
|
|
+
|
|
|
+# ========== 5. 线上安装依赖并构建 ==========
|
|
|
+log_info "========== 5. 线上安装依赖并构建 =========="
|
|
|
+
|
|
|
+ssh $SSH_OPTS $SERVER_USER@$SERVER_IP << 'ENDSSH'
|
|
|
+ set -e
|
|
|
+ cd /data/ai/audio_codebuddy/server
|
|
|
+
|
|
|
+ echo "[INFO] 安装后端依赖..."
|
|
|
+ npm install
|
|
|
+
|
|
|
+ echo "[INFO] 生成 Prisma Client..."
|
|
|
+ npx prisma generate
|
|
|
+
|
|
|
+ echo "[INFO] 构建后端..."
|
|
|
+ npm run build
|
|
|
+
|
|
|
+ echo "[INFO] 重启 PM2 服务..."
|
|
|
+ pm2 delete server 2>/dev/null || true
|
|
|
+ SERVER_PORT=3100 pm2 start dist/app.js --name server
|
|
|
+ pm2 save
|
|
|
+
|
|
|
+ echo "[INFO] 检查服务状态..."
|
|
|
+ pm2 status
|
|
|
+ENDSSH
|
|
|
+
|
|
|
+# ========== 6. 完成 ==========
|
|
|
+log_info "========== 部署完成 =========="
|
|
|
+log_info "前端: https://book.rrbrr.com"
|
|
|
+log_info "后端: https://bookapi.rrbrr.com"
|
|
|
+
|
|
|
+# 验证服务
|
|
|
+log_info "验证服务..."
|
|
|
+curl -s --connect-timeout 5 http://bookapi.rrbrr.com/health && echo "" || log_warn "API 验证失败,请手动检查"
|