#!/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 验证失败,请手动检查"