Files
AIRegulation-Deployment/scripts/06_start_all.sh

99 lines
4.1 KiB
Bash
Raw Normal View History

2026-04-23 09:58:47 +08:00
#!/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 KeyLLM 功能将不可用"
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"