| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- #!/bin/bash
- # 快速部署:本地构建 → rsync → pm2 reload
- # 用法: bash deploy-fast.sh # 仅后端
- # bash deploy-fast.sh --all # 后端+前端
- # bash deploy-fast.sh --dry # 预览变更文件
- set -e
- HOST="root@8.159.134.106"
- PORT="22622"
- REMOTE_DIR="/data/ai/audio_codebuddy/server"
- LOCAL_DIR="c:/Users/caoyg/ai/audio-tts/audio_codebuddy/server"
- SSH_OPTS="-p $PORT -o StrictHostKeyChecking=no"
- DRY=false
- DEPLOY_ALL=false
- while [[ $# -gt 0 ]]; do
- case $1 in --dry) DRY=true; shift;; --all) DEPLOY_ALL=true; shift;; *) shift;;
- esac
- done
- # 1. 构建
- echo "=== 构建后端 ==="
- cd "$LOCAL_DIR"
- npm run build
- # 2. rsync(增量同步,只传变化的文件)
- SYNC_FILES=(
- "dist/"
- "prisma/schema.prisma"
- "src/config/models.json"
- "package.json"
- )
- RSYNC_ARGS="-avz --delete -e \"ssh $SSH_OPTS\""
- if [ "$DRY" = true ]; then
- RSYNC_ARGS="$RSYNC_ARGS --dry-run"
- fi
- echo "=== 同步文件 ==="
- for f in "${SYNC_FILES[@]}"; do
- echo " $f"
- rsync $RSYNC_ARGS "$LOCAL_DIR/$f" "$HOST:$REMOTE_DIR/$f"
- done
- # 3. 服务器操作
- if [ "$DRY" = true ]; then
- echo "=== DRY RUN 完成 ==="
- exit 0
- fi
- echo "=== 服务器部署 ==="
- ssh $SSH_OPTS $HOST << 'ENDSSH'
- cd /data/ai/audio_codebuddy/server
- # 只在新依赖变化时才 install
- if [ package.json -nt node_modules ]; then
- echo "依赖有更新,安装..."
- npm install --production
- touch node_modules # 更新时间戳
- fi
- # 复制 models.json 到 dist(确保运行时能读到)
- cp src/config/models.json dist/config/models.json 2>/dev/null || true
- # Prisma generate(只 schema 变化时才需要)
- if [ prisma/schema.prisma -nt node_modules/.prisma ]; then
- echo "Prisma schema 有更新,生成 Client..."
- npx prisma generate
- fi
- # 重启
- pm2 reload server
- echo ""
- echo "=== 部署完成 ==="
- pm2 status | grep server
- ENDSSH
- # 4. 验证
- echo ""
- echo "=== 验证部署 ==="
- sleep 3
- echo -n "API健康检查: "
- curl -s -o /dev/null -w "%{http_code}" http://book.rrbrr.com/api/health 2>/dev/null || echo "检查失败"
- echo ""
- echo "git commit: $(cd $LOCAL_DIR && git log --oneline -1)"
- echo "服务器版本: $(ssh $SSH_OPTS $HOST 'cd /data/ai/audio_codebuddy/server && git log --oneline -1')"
|