start-backend.sh 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. #!/bin/bash
  2. # =====================================================
  3. # 芋道后端开发模式启动脚本
  4. # 使用方法: ./start-backend.sh [profile]
  5. # profile: local(默认), dev, test
  6. # =====================================================
  7. set -e
  8. # 颜色定义
  9. GREEN='\033[0;32m'
  10. YELLOW='\033[1;33m'
  11. BLUE='\033[0;34m'
  12. RED='\033[0;31m'
  13. NC='\033[0m'
  14. # 项目根目录
  15. PROJECT_ROOT="$(cd "$(dirname "$0")" && pwd)"
  16. # 默认配置
  17. PROFILE="${1:-dev}"
  18. JAVA_OPTS="-Xms512m -Xmx1024m"
  19. echo -e "${BLUE}========================================${NC}"
  20. echo -e "${BLUE} 芋道后端 - 开发模式启动${NC}"
  21. echo -e "${BLUE}========================================${NC}"
  22. echo ""
  23. # 检查Redis服务状态
  24. check_redis() {
  25. if redis-cli ping > /dev/null 2>&1; then
  26. return 0
  27. else
  28. return 1
  29. fi
  30. }
  31. # 启动Redis服务
  32. start_redis() {
  33. echo -e "${YELLOW}正在启动Redis服务...${NC}"
  34. if [[ "$OSTYPE" == "darwin"* ]]; then
  35. # macOS
  36. if command -v brew &> /dev/null; then
  37. brew services start redis 2>/dev/null || redis-server --daemonize yes
  38. elif command -v redis-server &> /dev/null; then
  39. redis-server --daemonize yes
  40. else
  41. echo -e "${RED}错误: 未找到Redis,请先安装: brew install redis${NC}"
  42. exit 1
  43. fi
  44. elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
  45. # Linux
  46. if command -v systemctl &> /dev/null; then
  47. sudo systemctl start redis 2>/dev/null || sudo systemctl start redis-server 2>/dev/null || redis-server --daemonize yes
  48. elif command -v service &> /dev/null; then
  49. sudo service redis-server start 2>/dev/null || redis-server --daemonize yes
  50. elif command -v redis-server &> /dev/null; then
  51. redis-server --daemonize yes
  52. else
  53. echo -e "${RED}错误: 未找到Redis,请先安装${NC}"
  54. echo -e "${YELLOW}Ubuntu/Debian: sudo apt-get install redis-server${NC}"
  55. echo -e "${YELLOW}CentOS/RHEL: sudo yum install redis${NC}"
  56. exit 1
  57. fi
  58. else
  59. if command -v redis-server &> /dev/null; then
  60. redis-server --daemonize yes
  61. else
  62. echo -e "${RED}错误: 未找到Redis,请手动安装并启动${NC}"
  63. exit 1
  64. fi
  65. fi
  66. # 等待Redis启动
  67. for i in {1..10}; do
  68. if check_redis; then
  69. echo -e "${GREEN}✓ Redis服务启动成功${NC}"
  70. return 0
  71. fi
  72. sleep 1
  73. done
  74. echo -e "${RED}错误: Redis服务启动超时${NC}"
  75. exit 1
  76. }
  77. # 检查并确保Redis运行
  78. ensure_redis() {
  79. echo -e "${YELLOW}检查Redis服务...${NC}"
  80. if check_redis; then
  81. echo -e "${GREEN}✓ Redis服务已运行${NC}"
  82. else
  83. echo -e "${YELLOW}✗ Redis服务未运行${NC}"
  84. start_redis
  85. fi
  86. echo ""
  87. }
  88. # 检查本地模块是否已安装
  89. check_local_modules() {
  90. # 检查 yudao-common 是否存在于本地仓库
  91. if [ ! -d ~/.m2/repository/cn/iocoder/boot/yudao-common ]; then
  92. echo -e "${YELLOW}检测到首次运行,需要先编译安装本地模块...${NC}"
  93. echo -e "${YELLOW}这可能需要几分钟时间,请耐心等待...${NC}"
  94. echo ""
  95. cd "$PROJECT_ROOT"
  96. mvn clean install -DskipTests
  97. echo ""
  98. echo -e "${GREEN}✓ 本地模块安装完成${NC}"
  99. echo ""
  100. fi
  101. }
  102. # 启动服务
  103. start_server() {
  104. echo -e "${YELLOW}配置环境: ${PROFILE}${NC}"
  105. echo -e "${YELLOW}JVM 参数: ${JAVA_OPTS}${NC}"
  106. echo ""
  107. echo -e "${GREEN}========================================${NC}"
  108. echo -e "${GREEN} 后端服务启动中...${NC}"
  109. echo -e "${GREEN} 访问地址: http://localhost:48080${NC}"
  110. echo -e "${GREEN} API 文档: http://localhost:48080/doc.html${NC}"
  111. echo -e "${GREEN} 按 Ctrl+C 停止服务${NC}"
  112. echo -e "${GREEN}========================================${NC}"
  113. echo ""
  114. cd "$PROJECT_ROOT/yudao-server"
  115. mvn spring-boot:run \
  116. -Dspring-boot.run.profiles="$PROFILE" \
  117. -Dspring-boot.run.jvmArguments="$JAVA_OPTS"
  118. }
  119. # 主流程
  120. ensure_redis
  121. check_local_modules
  122. start_server