#!/bin/bash # ============================================================ # Spring AI Alibaba 全功能平台 — 一键启动脚本 # 环境:WSL2 Debian · 本地内网 # 用法:bash start.sh # ============================================================ set -e RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; BLUE='\033[0;34m'; NC='\033[0m' log() { echo -e "${BLUE}[INFO]${NC} $1"; } ok() { echo -e "${GREEN}[OK]${NC} $1"; } warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } err() { echo -e "${RED}[ERR]${NC} $1"; } echo "==============================================" echo " Spring AI Alibaba 全功能平台 — 启动脚本" echo "==============================================" echo "" # ---- 1. 环境检查 ---- log "Step 1/5: 检查运行环境..." if ! command -v docker &>/dev/null; then err "Docker 未安装。请先执行 Docker 安装步骤。" echo " 参考: https://docs.docker.com/engine/install/debian/" exit 1 fi ok "Docker $(docker --version | awk '{print $3}' | tr -d ',')" if ! docker compose version &>/dev/null; then err "Docker Compose 未安装。" exit 1 fi ok "Docker Compose 已就绪" if ! command -v java &>/dev/null; then err "Java 未安装。需要 JDK 17+。" exit 1 fi ok "Java $(java -version 2>&1 | head -1 | awk -F'"' '{print $2}')" # ---- 2. 检查端口占用 ---- log "Step 2/5: 检查端口占用..." PORTS=(5432 8848 9848 9000 9001 8080) OCCUPIED="" for p in "${PORTS[@]}"; do if ss -tlnp | grep -q ":$p "; then OCCUPIED="$OCCUPIED $p" fi done if [ -n "$OCCUPIED" ]; then warn "以下端口已被占用:$OCCUPIED" echo " 请先释放这些端口,或修改 docker-compose.yml 中的端口映射。" echo " 查看占用进程: ss -tlnp | grep -E ':(5432|8848|9000|9001|8080) '" read -p "是否继续? [y/N] " -n 1 -r; echo [[ ! $REPLY =~ ^[Yy]$ ]] && exit 1 else ok "所有端口空闲" fi # ---- 3. 启动中间件 ---- log "Step 3/5: 启动中间件 (PostgreSQL + Nacos + MinIO)..." SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" cd "$SCRIPT_DIR" docker compose up -d echo " 等待 PostgreSQL 就绪..." until docker compose exec -T postgres pg_isready -U sa_agent &>/dev/null; do sleep 1; done ok "PostgreSQL 就绪 (5432)" echo " 等待 Nacos 就绪..." until curl -s http://localhost:8848/nacos/v1/console/health/readiness &>/dev/null; do sleep 1; done ok "Nacos 就绪 (8848)" ok " Nacos 控制台: http://localhost:8848/nacos (nacos/nacos)" echo " 等待 MinIO 就绪..." until curl -s http://localhost:9000/minio/health/live &>/dev/null; do sleep 1; done ok "MinIO 就绪 (9000)" ok " MinIO 控制台: http://localhost:9001 (minioadmin/minioadmin)" # ---- 4. Nacos 命名空间初始化 ---- log "Step 4/5: 初始化 Nacos 命名空间..." NACOS_AUTH="nacos:nacos" for ns in sa-agent-mcp sa-agent-config sa-agent-a2a; do curl -s -X POST \ "http://localhost:8848/nacos/v1/console/namespaces" \ -u "$NACOS_AUTH" \ -d "customNamespaceId=$ns&namespaceName=$ns&namespaceDesc=$ns" \ &>/dev/null && ok " 命名空间 $ns 已创建" || warn " 命名空间 $ns 可能已存在" done # ---- 5. 应用构建提示 ---- log "Step 5/5: 应用构建..." echo "" echo " 中间件已全部就绪!接下来需要构建 Spring AI Alibaba 应用:" echo "" echo " cd spring-ai-alibaba-platform" echo " export DASHSCOPE_API_KEY=sk-your-key-here" echo " mvn spring-boot:run" echo "" echo " 启动后访问: http://localhost:8080/chatui" echo "" echo "==============================================" echo " 服务状态一览" echo "==============================================" echo " PostgreSQL : localhost:5432 (sa_agent / agent_2026)" echo " Nacos : localhost:8848 (nacos / nacos)" echo " MinIO : localhost:9001 (minioadmin / minioadmin)" echo " Agent平台 : localhost:8080 启动后可用" echo "=============================================="