deploy-local.sh 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. #!/bin/bash
  2. # 本地编译 + 传送到线上部署脚本
  3. # 用法: bash deploy-local.sh
  4. set -e
  5. # ========== 配置 ==========
  6. SERVER_IP="8.159.134.106"
  7. SERVER_PORT="22622"
  8. SERVER_USER="root"
  9. SERVER_PATH="/data/ai/audio_codebuddy"
  10. FRONTEND_PATH="/data/ai/frontend"
  11. SSH_OPTS="-p $SERVER_PORT -o StrictHostKeyChecking=no"
  12. # ========== 颜色输出 ==========
  13. RED='\033[0;31m'
  14. GREEN='\033[0;32m'
  15. YELLOW='\033[1;33m'
  16. NC='\033[0m'
  17. log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
  18. log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
  19. log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
  20. # ========== 检查 ==========
  21. if ! command -v rsync &> /dev/null; then
  22. log_warn "rsync 未安装,尝试安装..."
  23. if [[ "$OSTYPE" == "darwin"* ]]; then
  24. brew install rsync
  25. else
  26. sudo apt-get install -y rsync
  27. fi
  28. fi
  29. # ========== 1. 提交代码 ==========
  30. log_info "========== 1. 提交代码 =========="
  31. git status --short
  32. read -p "是否提交所有改动? (y/n): " confirm
  33. if [[ "$confirm" == "y" ]]; then
  34. git add -A
  35. read -p "输入提交信息: " commit_msg
  36. git commit -m "$commit_msg"
  37. git push git@git.rrbrr.com:caojunfei/audio_codebuddy.git master
  38. fi
  39. # ========== 2. 构建前端 ==========
  40. log_info "========== 2. 构建前端 =========="
  41. cd my-uniapp-vue3
  42. npm install
  43. npm run build:h5
  44. cd ..
  45. # ========== 3. 构建后端 ==========
  46. log_info "========== 3. 构建后端 =========="
  47. cd server
  48. npm install
  49. npm run build
  50. cd ..
  51. # ========== 4. 同步到服务器 ==========
  52. log_info "========== 4. 同步到服务器 =========="
  53. # 同步前端
  54. log_info "同步前端..."
  55. ssh $SSH_OPTS $SERVER_USER@$SERVER_IP "mkdir -p $FRONTEND_PATH/build/h5"
  56. rsync -avz --delete \
  57. -e "ssh $SSH_OPTS" \
  58. --exclude='node_modules' \
  59. --exclude='.git' \
  60. my-uniapp-vue3/dist/build/h5/ \
  61. $SERVER_USER@$SERVER_IP:$FRONTEND_PATH/build/h5/
  62. # 同步后端源码
  63. log_info "同步后端..."
  64. rsync -avz --delete \
  65. -e "ssh $SSH_OPTS" \
  66. --exclude='node_modules' \
  67. --exclude='.git' \
  68. --exclude='dist' \
  69. --exclude='coverage' \
  70. --exclude='*.log' \
  71. server/ \
  72. $SERVER_USER@$SERVER_IP:$SERVER_PATH/server/
  73. # ========== 5. 线上安装依赖并构建 ==========
  74. log_info "========== 5. 线上安装依赖并构建 =========="
  75. ssh $SSH_OPTS $SERVER_USER@$SERVER_IP << 'ENDSSH'
  76. set -e
  77. cd /data/ai/audio_codebuddy/server
  78. echo "[INFO] 安装后端依赖..."
  79. npm install
  80. echo "[INFO] 生成 Prisma Client..."
  81. npx prisma generate
  82. echo "[INFO] 构建后端..."
  83. npm run build
  84. echo "[INFO] 重启 PM2 服务..."
  85. pm2 delete server 2>/dev/null || true
  86. SERVER_PORT=3100 pm2 start dist/app.js --name server
  87. pm2 save
  88. echo "[INFO] 检查服务状态..."
  89. pm2 status
  90. ENDSSH
  91. # ========== 6. 完成 ==========
  92. log_info "========== 部署完成 =========="
  93. log_info "前端: https://book.rrbrr.com"
  94. log_info "后端: https://bookapi.rrbrr.com"
  95. # 验证服务
  96. log_info "验证服务..."
  97. curl -s --connect-timeout 5 http://bookapi.rrbrr.com/health && echo "" || log_warn "API 验证失败,请手动检查"