#!/bin/bash # ===================================================== # 芋道后端开发模式启动脚本 # 使用方法: ./start-backend.sh [profile] # profile: local(默认), dev, test # ===================================================== set -e # 颜色定义 GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' RED='\033[0;31m' NC='\033[0m' # 项目根目录 PROJECT_ROOT="$(cd "$(dirname "$0")" && pwd)" # 默认配置 PROFILE="${1:-dev}" JAVA_OPTS="-Xms512m -Xmx1024m" echo -e "${BLUE}========================================${NC}" echo -e "${BLUE} 芋道后端 - 开发模式启动${NC}" echo -e "${BLUE}========================================${NC}" echo "" # 检查Redis服务状态 check_redis() { if redis-cli ping > /dev/null 2>&1; then return 0 else return 1 fi } # 启动Redis服务 start_redis() { echo -e "${YELLOW}正在启动Redis服务...${NC}" if [[ "$OSTYPE" == "darwin"* ]]; then # macOS if command -v brew &> /dev/null; then brew services start redis 2>/dev/null || redis-server --daemonize yes elif command -v redis-server &> /dev/null; then redis-server --daemonize yes else echo -e "${RED}错误: 未找到Redis,请先安装: brew install redis${NC}" exit 1 fi elif [[ "$OSTYPE" == "linux-gnu"* ]]; then # Linux if command -v systemctl &> /dev/null; then sudo systemctl start redis 2>/dev/null || sudo systemctl start redis-server 2>/dev/null || redis-server --daemonize yes elif command -v service &> /dev/null; then sudo service redis-server start 2>/dev/null || redis-server --daemonize yes elif command -v redis-server &> /dev/null; then redis-server --daemonize yes else echo -e "${RED}错误: 未找到Redis,请先安装${NC}" echo -e "${YELLOW}Ubuntu/Debian: sudo apt-get install redis-server${NC}" echo -e "${YELLOW}CentOS/RHEL: sudo yum install redis${NC}" exit 1 fi else if command -v redis-server &> /dev/null; then redis-server --daemonize yes else echo -e "${RED}错误: 未找到Redis,请手动安装并启动${NC}" exit 1 fi fi # 等待Redis启动 for i in {1..10}; do if check_redis; then echo -e "${GREEN}✓ Redis服务启动成功${NC}" return 0 fi sleep 1 done echo -e "${RED}错误: Redis服务启动超时${NC}" exit 1 } # 检查并确保Redis运行 ensure_redis() { echo -e "${YELLOW}检查Redis服务...${NC}" if check_redis; then echo -e "${GREEN}✓ Redis服务已运行${NC}" else echo -e "${YELLOW}✗ Redis服务未运行${NC}" start_redis fi echo "" } # 检查本地模块是否已安装 check_local_modules() { # 检查 yudao-common 是否存在于本地仓库 if [ ! -d ~/.m2/repository/cn/iocoder/boot/yudao-common ]; then echo -e "${YELLOW}检测到首次运行,需要先编译安装本地模块...${NC}" echo -e "${YELLOW}这可能需要几分钟时间,请耐心等待...${NC}" echo "" cd "$PROJECT_ROOT" mvn clean install -DskipTests echo "" echo -e "${GREEN}✓ 本地模块安装完成${NC}" echo "" fi } # 启动服务 start_server() { echo -e "${YELLOW}配置环境: ${PROFILE}${NC}" echo -e "${YELLOW}JVM 参数: ${JAVA_OPTS}${NC}" echo "" echo -e "${GREEN}========================================${NC}" echo -e "${GREEN} 后端服务启动中...${NC}" echo -e "${GREEN} 访问地址: http://localhost:48080${NC}" echo -e "${GREEN} API 文档: http://localhost:48080/doc.html${NC}" echo -e "${GREEN} 按 Ctrl+C 停止服务${NC}" echo -e "${GREEN}========================================${NC}" echo "" cd "$PROJECT_ROOT/yudao-server" mvn spring-boot:run \ -Dspring-boot.run.profiles="$PROFILE" \ -Dspring-boot.run.jvmArguments="$JAVA_OPTS" } # 主流程 ensure_redis check_local_modules start_server