deploy-fast.sh 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #!/bin/bash
  2. # 快速部署:本地构建 → rsync → pm2 reload
  3. # 用法: bash deploy-fast.sh # 仅后端
  4. # bash deploy-fast.sh --all # 后端+前端
  5. # bash deploy-fast.sh --dry # 预览变更文件
  6. set -e
  7. HOST="root@8.159.134.106"
  8. PORT="22622"
  9. REMOTE_DIR="/data/ai/audio_codebuddy/server"
  10. LOCAL_DIR="c:/Users/caoyg/ai/audio-tts/audio_codebuddy/server"
  11. SSH_OPTS="-p $PORT -o StrictHostKeyChecking=no"
  12. DRY=false
  13. DEPLOY_ALL=false
  14. while [[ $# -gt 0 ]]; do
  15. case $1 in --dry) DRY=true; shift;; --all) DEPLOY_ALL=true; shift;; *) shift;;
  16. esac
  17. done
  18. # 1. 构建
  19. echo "=== 构建后端 ==="
  20. cd "$LOCAL_DIR"
  21. npm run build
  22. # 2. rsync(增量同步,只传变化的文件)
  23. SYNC_FILES=(
  24. "dist/"
  25. "prisma/schema.prisma"
  26. "src/config/models.json"
  27. "package.json"
  28. )
  29. RSYNC_ARGS="-avz --delete -e \"ssh $SSH_OPTS\""
  30. if [ "$DRY" = true ]; then
  31. RSYNC_ARGS="$RSYNC_ARGS --dry-run"
  32. fi
  33. echo "=== 同步文件 ==="
  34. for f in "${SYNC_FILES[@]}"; do
  35. echo " $f"
  36. rsync $RSYNC_ARGS "$LOCAL_DIR/$f" "$HOST:$REMOTE_DIR/$f"
  37. done
  38. # 3. 服务器操作
  39. if [ "$DRY" = true ]; then
  40. echo "=== DRY RUN 完成 ==="
  41. exit 0
  42. fi
  43. echo "=== 服务器部署 ==="
  44. ssh $SSH_OPTS $HOST << 'ENDSSH'
  45. cd /data/ai/audio_codebuddy/server
  46. # 只在新依赖变化时才 install
  47. if [ package.json -nt node_modules ]; then
  48. echo "依赖有更新,安装..."
  49. npm install --production
  50. touch node_modules # 更新时间戳
  51. fi
  52. # 复制 models.json 到 dist(确保运行时能读到)
  53. cp src/config/models.json dist/config/models.json 2>/dev/null || true
  54. # Prisma generate(只 schema 变化时才需要)
  55. if [ prisma/schema.prisma -nt node_modules/.prisma ]; then
  56. echo "Prisma schema 有更新,生成 Client..."
  57. npx prisma generate
  58. fi
  59. # 重启
  60. pm2 reload server
  61. echo ""
  62. echo "=== 部署完成 ==="
  63. pm2 status | grep server
  64. ENDSSH
  65. # 4. 验证
  66. echo ""
  67. echo "=== 验证部署 ==="
  68. sleep 3
  69. echo -n "API健康检查: "
  70. curl -s -o /dev/null -w "%{http_code}" http://book.rrbrr.com/api/health 2>/dev/null || echo "检查失败"
  71. echo ""
  72. echo "git commit: $(cd $LOCAL_DIR && git log --oneline -1)"
  73. echo "服务器版本: $(ssh $SSH_OPTS $HOST 'cd /data/ai/audio_codebuddy/server && git log --oneline -1')"