#!/usr/bin/env bash # ══════════════════════════════════════════════════ # 06_start_all.sh # 一键启动所有服务(完整流程) # 用法:bash scripts/06_start_all.sh # ══════════════════════════════════════════════════ set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" cd "$PROJECT_DIR" RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; BLUE='\033[0;34m'; NC='\033[0m' info() { echo -e "${BLUE}[INFO]${NC} $*"; } ok() { echo -e "${GREEN}[OK]${NC} $*"; } warn() { echo -e "${YELLOW}[WARN]${NC} $*"; } error() { echo -e "${RED}[ERROR]${NC} $*"; exit 1; } echo "" echo -e "${BLUE}╔══════════════════════════════════════════╗${NC}" echo -e "${BLUE}║ AI合规智能中枢 — 全服务启动 ║${NC}" echo -e "${BLUE}╚══════════════════════════════════════════╝${NC}" echo "" # ── 前置检查 ──────────────────────────────────── if [[ ! -f ".env" ]]; then error ".env 文件不存在,请先运行:bash scripts/01_setup_project.sh" fi source .env 2>/dev/null || true if [[ -z "${DEEPSEEK_API_KEY:-}" && -z "${DASHSCOPE_API_KEY:-}" ]]; then warn "⚠️ 未设置 LLM API Key,LLM 功能将不可用" warn "请在 .env 中设置 DEEPSEEK_API_KEY 或 DASHSCOPE_API_KEY" echo "" fi # ── Phase 1:基础设施 ──────────────────────────── info "Phase 1/4:启动基础设施..." bash "$SCRIPT_DIR/03_start_infra.sh" echo "" # ── Phase 2:构建服务镜像 ──────────────────────── info "Phase 2/4:构建服务镜像(首次较慢)..." docker compose build embedding-service mcp-server compliance-backend 2>&1 | \ grep -E "(Step|Successfully|=>|ERROR)" || true ok "镜像构建完成" echo "" # ── Phase 3:初始化数据库 ──────────────────────── info "Phase 3/4:初始化数据库..." bash "$SCRIPT_DIR/05_init_db.sh" echo "" # ── Phase 4:启动所有服务 ──────────────────────── info "Phase 4/4:启动 AI 模型服务和业务服务..." docker compose up -d embedding-service mcp-server info "等待 AI 模型加载(BGE-M3/MinerU 约需 2-3 分钟)..." sleep 30 # 等待嵌入服务就绪 for i in {1..20}; do if curl -sf http://localhost:8010/health > /dev/null 2>&1; then ok "embedding-service 就绪" break fi echo -n "." sleep 10 done docker compose up -d compliance-backend celery-worker celery-beat nginx info "等待业务服务启动..." sleep 15 for i in {1..12}; do if curl -sf http://localhost:8000/health > /dev/null 2>&1; then ok "compliance-backend 就绪" break fi echo -n "." sleep 5 done # ── 最终状态 ──────────────────────────────────── echo "" echo -e "${GREEN}╔══════════════════════════════════════════╗${NC}" echo -e "${GREEN}║ 所有服务启动完成! ║${NC}" echo -e "${GREEN}╚══════════════════════════════════════════╝${NC}" echo "" docker compose ps --format "table {{.Service}}\t{{.Status}}\t{{.Ports}}" echo "" echo -e "${BLUE}访问地址:${NC}" echo " API 网关 : http://localhost" echo " API 文档 : http://localhost/docs" echo " Neo4j 浏览器 : http://localhost:7474" echo " MinIO 控制台 : http://localhost:9001" echo "" echo -e "${YELLOW}运行冒烟测试:${NC}" echo " bash scripts/07_smoke_test.sh"