diff --git a/scripts/init-kong.sh b/scripts/init-kong.sh new file mode 100644 index 0000000..77872cf --- /dev/null +++ b/scripts/init-kong.sh @@ -0,0 +1,113 @@ +#!/bin/bash +#=============================================================================== +# Kong API Gateway 初始化脚本 +# 配置所有微服务的路由 +#=============================================================================== + +KONG_ADMIN_URL="${KONG_ADMIN_URL:-http://localhost:8001}" + +echo "Waiting for Kong to be ready..." +until curl -s "$KONG_ADMIN_URL/status" > /dev/null 2>&1; do + echo "Kong is not ready yet, waiting..." + sleep 2 +done +echo "Kong is ready!" + +# 函数: 创建服务和路由 +create_service_and_route() { + local service_name=$1 + local service_url=$2 + local route_name=$3 + shift 3 + local paths=("$@") + + echo "Creating service: $service_name -> $service_url" + + # 检查服务是否已存在 + if curl -s "$KONG_ADMIN_URL/services/$service_name" | grep -q '"id"'; then + echo " Service $service_name already exists, updating..." + curl -s -X PATCH "$KONG_ADMIN_URL/services/$service_name" \ + -d "url=$service_url" > /dev/null + else + curl -s -X POST "$KONG_ADMIN_URL/services" \ + -d "name=$service_name" \ + -d "url=$service_url" > /dev/null + fi + + echo "Creating route: $route_name" + + # 构建路径参数 + local path_args="" + for path in "${paths[@]}"; do + path_args="$path_args -d paths[]=$path" + done + + # 检查路由是否已存在 + if curl -s "$KONG_ADMIN_URL/routes/$route_name" | grep -q '"id"'; then + echo " Route $route_name already exists, updating..." + curl -s -X PATCH "$KONG_ADMIN_URL/routes/$route_name" \ + $path_args \ + -d "strip_path=false" > /dev/null + else + curl -s -X POST "$KONG_ADMIN_URL/services/$service_name/routes" \ + -d "name=$route_name" \ + $path_args \ + -d "strip_path=false" > /dev/null + fi + + echo " Done!" +} + +#=============================================================================== +# 配置各服务路由 +#=============================================================================== + +# User Service - 用户认证和管理 +create_service_and_route \ + "user-service" \ + "http://user-service:3001" \ + "user-routes" \ + "/api/v1/users" "/api/v1/auth" + +# Payment Service - 支付处理 +create_service_and_route \ + "payment-service" \ + "http://payment-service:3002" \ + "payment-routes" \ + "/api/v1/payments" "/api/v1/subscriptions" + +# Knowledge Service - 知识库 +create_service_and_route \ + "knowledge-service" \ + "http://knowledge-service:3003" \ + "knowledge-routes" \ + "/api/v1/knowledge" + +# Conversation Service - 对话服务 +create_service_and_route \ + "conversation-service" \ + "http://conversation-service:3004" \ + "conversation-routes" \ + "/api/v1/conversations" "/api/v1/messages" + +# Evolution Service - 进化服务 +create_service_and_route \ + "evolution-service" \ + "http://evolution-service:3005" \ + "evolution-routes" \ + "/api/v1/evolution" + +#=============================================================================== +# 显示配置结果 +#=============================================================================== + +echo "" +echo "==========================================" +echo "Kong configuration completed!" +echo "==========================================" +echo "" +echo "Services:" +curl -s "$KONG_ADMIN_URL/services" | jq -r '.data[] | " - \(.name): \(.host):\(.port)"' +echo "" +echo "Routes:" +curl -s "$KONG_ADMIN_URL/routes" | jq -r '.data[] | " - \(.name): \(.paths | join(", "))"'