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