deploy-auto.sh 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #!/bin/bash
  2. # 自动部署脚本 - 由 webhook 触发
  3. set -e
  4. DEPLOY_LOG="/tmp/deploy-auto.log"
  5. PROJECT_DIR="/data/ai/audio_codebuddy"
  6. BACKEND_PORT="3100"
  7. FRONTEND_DIR="/data/ai/frontend"
  8. log() {
  9. echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$DEPLOY_LOG"
  10. }
  11. log "========== 开始自动部署 =========="
  12. # 切换到项目目录
  13. cd "$PROJECT_DIR"
  14. # Git pull
  15. log "执行 git pull..."
  16. git pull origin master 2>&1 | tee -a "$DEPLOY_LOG"
  17. # ========== 构建前端 ==========
  18. log "构建前端..."
  19. cd "$PROJECT_DIR/my-uniapp-vue3"
  20. npm install 2>&1 | tee -a "$DEPLOY_LOG"
  21. npm run build:h5 2>&1 | tee -a "$DEPLOY_LOG"
  22. # 复制前端文件到部署目录
  23. log "部署前端..."
  24. # 移除 immutable 属性(BT 面板的 .user.ini 是 immutable 的)
  25. chattr -i "$FRONTEND_DIR/build/h5/.user.ini" 2>/dev/null || true
  26. # 使用 rsync 同步文件,避免嵌套目录问题
  27. rsync -a --delete "$PROJECT_DIR/my-uniapp-vue3/dist/build/h5/" "$FRONTEND_DIR/build/h5/"
  28. log "前端部署完成"
  29. # ========== 构建后端 ==========
  30. log "构建后端..."
  31. cd "$PROJECT_DIR/server"
  32. npm install 2>&1 | tee -a "$DEPLOY_LOG"
  33. npm run build 2>&1 | tee -a "$DEPLOY_LOG"
  34. cp src/config/models.json dist/config/models.json 2>&1 | tee -a "$DEPLOY_LOG"
  35. # 重启后端服务
  36. log "重启后端服务..."
  37. if command -v pm2 &> /dev/null; then
  38. pm2 delete server 2>/dev/null || true
  39. SERVER_PORT=3100 pm2 start dist/app.js --name server 2>&1 | tee -a "$DEPLOY_LOG"
  40. pm2 save 2>&1 | tee -a "$DEPLOY_LOG"
  41. else
  42. log "PM2 未安装,跳过进程管理"
  43. fi
  44. log "========== 部署完成 =========="