rwadurian/backend/api-gateway/deploy.sh

254 lines
5.9 KiB
Bash

#!/bin/bash
# =============================================================================
# RWADurian API Gateway (Kong) - 部署脚本
# =============================================================================
# Usage:
# ./deploy.sh up # 启动网关
# ./deploy.sh down # 停止网关
# ./deploy.sh restart # 重启网关
# ./deploy.sh logs # 查看日志
# ./deploy.sh status # 查看状态
# ./deploy.sh health # 健康检查
# ./deploy.sh reload # 重载 Kong 配置
# ./deploy.sh routes # 查看所有路由
# =============================================================================
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
# 项目信息
PROJECT_NAME="rwa-api-gateway"
KONG_ADMIN_URL="http://localhost:8001"
KONG_PROXY_URL="http://localhost:8000"
# 切换到脚本所在目录
cd "$(dirname "$0")"
# 日志函数
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
# 检查 Docker
check_docker() {
if ! command -v docker &> /dev/null; then
log_error "Docker 未安装"
exit 1
fi
if ! docker info &> /dev/null; then
log_error "Docker 服务未运行"
exit 1
fi
}
# 检查 Docker Compose
check_docker_compose() {
if docker compose version &> /dev/null; then
COMPOSE_CMD="docker compose"
elif command -v docker-compose &> /dev/null; then
COMPOSE_CMD="docker-compose"
else
log_error "Docker Compose 未安装"
exit 1
fi
}
# 检查 services 网络是否存在
check_network() {
if ! docker network inspect services_rwa-network &> /dev/null; then
log_warn "services_rwa-network 网络不存在"
log_info "请先启动后端服务: cd ../services && ./deploy.sh up"
exit 1
fi
}
# 启动服务
cmd_up() {
log_info "启动 Kong API Gateway..."
check_network
$COMPOSE_CMD up -d
log_info "等待 Kong 启动..."
sleep 10
# 检查状态
if docker ps | grep -q rwa-kong; then
log_success "Kong API Gateway 启动成功!"
echo ""
echo "服务地址:"
echo " Proxy: http://localhost:8000"
echo " Admin API: http://localhost:8001"
echo " Admin GUI: http://localhost:8002"
echo ""
echo "查看路由: ./deploy.sh routes"
else
log_error "Kong 启动失败,查看日志: ./deploy.sh logs"
exit 1
fi
}
# 停止服务
cmd_down() {
log_info "停止 Kong API Gateway..."
$COMPOSE_CMD down
log_success "Kong 已停止"
}
# 重启服务
cmd_restart() {
log_info "重启 Kong API Gateway..."
$COMPOSE_CMD restart
log_success "Kong 已重启"
}
# 查看日志
cmd_logs() {
$COMPOSE_CMD logs -f
}
# 查看状态
cmd_status() {
log_info "Kong API Gateway 状态:"
$COMPOSE_CMD ps
}
# 健康检查
cmd_health() {
log_info "Kong 健康检查..."
# 检查 Kong 状态
response=$(curl -s $KONG_ADMIN_URL/status 2>/dev/null)
if [ $? -eq 0 ]; then
log_success "Kong Admin API 正常"
echo "$response" | python3 -m json.tool 2>/dev/null || echo "$response"
else
log_error "Kong Admin API 不可用"
exit 1
fi
}
# 重载配置
cmd_reload() {
log_info "重载 Kong 配置..."
docker exec rwa-kong kong reload
log_success "配置已重载"
}
# 查看所有路由
cmd_routes() {
log_info "Kong 路由列表:"
curl -s $KONG_ADMIN_URL/routes | python3 -m json.tool 2>/dev/null || curl -s $KONG_ADMIN_URL/routes
}
# 查看所有服务
cmd_services() {
log_info "Kong 服务列表:"
curl -s $KONG_ADMIN_URL/services | python3 -m json.tool 2>/dev/null || curl -s $KONG_ADMIN_URL/services
}
# 测试 API
cmd_test() {
log_info "测试 API 路由..."
echo ""
echo "测试 /api/v1/versions (admin-service):"
curl -s -o /dev/null -w " HTTP Status: %{http_code}\n" $KONG_PROXY_URL/api/v1/versions
echo ""
echo "测试 /api/v1/auth (identity-service):"
curl -s -o /dev/null -w " HTTP Status: %{http_code}\n" $KONG_PROXY_URL/api/v1/auth
}
# 清理
cmd_clean() {
log_info "清理 Kong 容器和数据..."
$COMPOSE_CMD down -v --remove-orphans
docker image prune -f
log_success "清理完成"
}
# 显示帮助
show_help() {
echo ""
echo "RWADurian API Gateway (Kong) 部署脚本"
echo ""
echo "用法: ./deploy.sh [命令]"
echo ""
echo "命令:"
echo " up 启动 Kong 网关"
echo " down 停止 Kong 网关"
echo " restart 重启 Kong 网关"
echo " logs 查看日志"
echo " status 查看状态"
echo " health 健康检查"
echo " reload 重载 Kong 配置"
echo " routes 查看所有路由"
echo " services 查看所有服务"
echo " test 测试 API 路由"
echo " clean 清理容器和数据"
echo " help 显示帮助"
echo ""
echo "注意: 需要先启动 backend/services 才能启动 Kong"
echo ""
}
# 主函数
main() {
check_docker
check_docker_compose
case "${1:-help}" in
up)
cmd_up
;;
down)
cmd_down
;;
restart)
cmd_restart
;;
logs)
cmd_logs
;;
status)
cmd_status
;;
health)
cmd_health
;;
reload)
cmd_reload
;;
routes)
cmd_routes
;;
services)
cmd_services
;;
test)
cmd_test
;;
clean)
cmd_clean
;;
help|--help|-h)
show_help
;;
*)
log_error "未知命令: $1"
show_help
exit 1
;;
esac
}
main "$@"