94 lines
3.8 KiB
Bash
94 lines
3.8 KiB
Bash
|
|
#!/usr/bin/env bash
|
|||
|
|
# ══════════════════════════════════════════════════
|
|||
|
|
# 03_start_infra.sh
|
|||
|
|
# 分步启动基础设施(含健康等待),顺序:
|
|||
|
|
# PostgreSQL + Redis → etcd + MinIO → Milvus → Neo4j
|
|||
|
|
# 用法:bash scripts/03_start_infra.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; }
|
|||
|
|
|
|||
|
|
# 等待服务健康的函数
|
|||
|
|
wait_healthy() {
|
|||
|
|
local service=$1
|
|||
|
|
local max_wait=${2:-120}
|
|||
|
|
local interval=5
|
|||
|
|
local elapsed=0
|
|||
|
|
|
|||
|
|
info "等待 $service 健康就绪..."
|
|||
|
|
while [[ $elapsed -lt $max_wait ]]; do
|
|||
|
|
local status
|
|||
|
|
status=$(docker compose ps --format json "$service" 2>/dev/null | \
|
|||
|
|
python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('Health','unknown'))" 2>/dev/null || echo "unknown")
|
|||
|
|
|
|||
|
|
if [[ "$status" == "healthy" ]]; then
|
|||
|
|
ok "$service 已就绪"
|
|||
|
|
return 0
|
|||
|
|
fi
|
|||
|
|
|
|||
|
|
echo -n "."
|
|||
|
|
sleep $interval
|
|||
|
|
elapsed=$((elapsed + interval))
|
|||
|
|
done
|
|||
|
|
echo ""
|
|||
|
|
error "$service 等待超时(${max_wait}s),请检查:docker compose logs $service"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
info "══════════════════════════════════════════"
|
|||
|
|
info " 启动基础设施层"
|
|||
|
|
info "══════════════════════════════════════════"
|
|||
|
|
|
|||
|
|
# ── Step 1:PostgreSQL + Redis ──────────────────
|
|||
|
|
info "Step 1/4:启动 PostgreSQL 和 Redis..."
|
|||
|
|
docker compose up -d postgres redis
|
|||
|
|
|
|||
|
|
wait_healthy postgres 90
|
|||
|
|
wait_healthy redis 30
|
|||
|
|
ok "数据层就绪"
|
|||
|
|
|
|||
|
|
# ── Step 2:etcd + MinIO(Milvus 依赖)─────────
|
|||
|
|
info "Step 2/4:启动 etcd 和 MinIO(Milvus 依赖)..."
|
|||
|
|
docker compose up -d etcd minio
|
|||
|
|
|
|||
|
|
wait_healthy etcd 60
|
|||
|
|
wait_healthy minio 60
|
|||
|
|
ok "对象存储层就绪"
|
|||
|
|
|
|||
|
|
# ── Step 3:Milvus ──────────────────────────────
|
|||
|
|
info "Step 3/4:启动 Milvus(向量数据库)..."
|
|||
|
|
docker compose up -d milvus
|
|||
|
|
|
|||
|
|
info "Milvus 初始化需要约 60 秒,请耐心等待..."
|
|||
|
|
wait_healthy milvus 180
|
|||
|
|
ok "Milvus 就绪"
|
|||
|
|
|
|||
|
|
# ── Step 4:Neo4j ───────────────────────────────
|
|||
|
|
info "Step 4/4:启动 Neo4j(知识图谱)..."
|
|||
|
|
docker compose up -d neo4j
|
|||
|
|
|
|||
|
|
wait_healthy neo4j 120
|
|||
|
|
ok "Neo4j 就绪"
|
|||
|
|
|
|||
|
|
# ── 汇总 ────────────────────────────────────────
|
|||
|
|
echo ""
|
|||
|
|
echo -e "${GREEN}══════════════════════════════════════════${NC}"
|
|||
|
|
echo -e "${GREEN} 基础设施启动完成!${NC}"
|
|||
|
|
echo -e "${GREEN}══════════════════════════════════════════${NC}"
|
|||
|
|
echo ""
|
|||
|
|
echo " PostgreSQL : localhost:5432"
|
|||
|
|
echo " Redis : localhost:6379"
|
|||
|
|
echo " Milvus : localhost:19530 (gRPC), localhost:9091 (HTTP)"
|
|||
|
|
echo " Neo4j : localhost:7474 (Browser), localhost:7687 (Bolt)"
|
|||
|
|
echo " MinIO 控制台: localhost:9001 (admin/minioadmin)"
|
|||
|
|
echo ""
|
|||
|
|
echo "下一步:bash scripts/04_build_services.sh"
|