build_release.sh 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #!/bin/bash
  2. # 遇到错误立即退出
  3. set -e
  4. echo "========================================================"
  5. echo " ShuDao SafeAI 生产环境一键部署脚本 (Linux)"
  6. echo "========================================================"
  7. echo ""
  8. # 设置路径变量
  9. ROOT_DIR=$(pwd)
  10. FRONTEND_DIR="$ROOT_DIR/shudao-vue-frontend"
  11. BACKEND_DIR="$ROOT_DIR/shudao-go-backend"
  12. DEPLOY_DIR="/opt/www/shudao-go-backend"
  13. SERVICE_NAME="shudao-go-backend"
  14. SERVICE_PORT=22001
  15. # 1. 前端构建
  16. echo "[1/8] 正在构建前端项目 (Vue)..."
  17. cd "$FRONTEND_DIR"
  18. npm run build
  19. if [ $? -ne 0 ]; then
  20. echo "[ERROR] 前端构建失败!请检查错误信息。"
  21. exit 1
  22. fi
  23. echo "[SUCCESS] 前端构建完成。"
  24. echo ""
  25. # 2. 清理后端旧资源
  26. echo "[2/8] 清理后端旧资源..."
  27. cd "$ROOT_DIR"
  28. rm -rf "$BACKEND_DIR/assets" 2>/dev/null || true
  29. rm -f "$BACKEND_DIR/views/index.html" 2>/dev/null || true
  30. echo "[SUCCESS] 清理完成。"
  31. echo ""
  32. # 3. 复制新资源
  33. echo "[3/8] 整合前端资源到后端..."
  34. mkdir -p "$BACKEND_DIR/assets"
  35. mkdir -p "$BACKEND_DIR/views"
  36. cp -r "$FRONTEND_DIR/dist/assets/"* "$BACKEND_DIR/assets/"
  37. cp "$FRONTEND_DIR/dist/index.html" "$BACKEND_DIR/views/index.html"
  38. echo "[SUCCESS] 资源整合完成。"
  39. echo ""
  40. # 4. 复制生产环境配置
  41. echo "[4/8] 复制生产环境配置..."
  42. mkdir -p "$BACKEND_DIR/conf"
  43. cp "$BACKEND_DIR/conf/app.conf.prod" "$BACKEND_DIR/conf/app.conf"
  44. echo "[SUCCESS] 配置文件已更新为生产环境。"
  45. echo ""
  46. # 5. 后端编译 (Linux amd64)
  47. echo "[5/8] 正在编译后端 (Target: Linux/amd64)..."
  48. cd "$BACKEND_DIR"
  49. GOOS=linux GOARCH=amd64 go build -o $SERVICE_NAME main.go
  50. if [ $? -ne 0 ]; then
  51. echo "[ERROR] 后端编译失败!"
  52. exit 1
  53. fi
  54. chmod +x $SERVICE_NAME
  55. echo "[SUCCESS] 后端编译完成。"
  56. echo ""
  57. # 6. 停止旧服务
  58. echo "[6/8] 停止旧服务..."
  59. pkill -f $SERVICE_NAME 2>/dev/null || true
  60. sleep 1
  61. # 确认服务已停止
  62. if pgrep -f $SERVICE_NAME > /dev/null 2>&1; then
  63. echo "[WARNING] 服务未完全停止,强制终止..."
  64. pkill -9 -f $SERVICE_NAME 2>/dev/null || true
  65. sleep 1
  66. fi
  67. echo "[SUCCESS] 旧服务已停止。"
  68. echo ""
  69. # 7. 部署到目标目录
  70. echo "[7/8] 部署到 $DEPLOY_DIR..."
  71. mkdir -p "$DEPLOY_DIR"
  72. cp "$BACKEND_DIR/$SERVICE_NAME" "$DEPLOY_DIR/"
  73. cp -r "$BACKEND_DIR/conf" "$DEPLOY_DIR/"
  74. cp -r "$BACKEND_DIR/assets" "$DEPLOY_DIR/"
  75. cp -r "$BACKEND_DIR/views" "$DEPLOY_DIR/"
  76. cp -r "$BACKEND_DIR/static" "$DEPLOY_DIR/" 2>/dev/null || true
  77. echo "[SUCCESS] 部署完成。"
  78. echo ""
  79. # 8. 启动新服务
  80. echo "[8/8] 启动新服务..."
  81. cd "$DEPLOY_DIR"
  82. nohup ./$SERVICE_NAME > nohup.out 2>&1 &
  83. sleep 3
  84. # 检查服务状态
  85. if pgrep -f $SERVICE_NAME > /dev/null 2>&1; then
  86. echo "[SUCCESS] 服务已启动!"
  87. echo ""
  88. echo "========================================================"
  89. echo " 生产环境部署完成!"
  90. echo "========================================================"
  91. echo ""
  92. echo "服务状态: 运行中"
  93. echo "服务端口: $SERVICE_PORT"
  94. echo "部署目录: $DEPLOY_DIR"
  95. echo "日志文件: $DEPLOY_DIR/nohup.out"
  96. echo ""
  97. echo "查看日志: tail -f $DEPLOY_DIR/nohup.out"
  98. echo ""
  99. else
  100. echo "[ERROR] 服务启动失败!"
  101. echo "请检查日志:"
  102. tail -20 "$DEPLOY_DIR/nohup.out"
  103. exit 1
  104. fi