refactor(api-gateway): 将 Kong 独立为解耦模块
- 将 Kong 从 services/docker-compose.yml 移到 api-gateway/docker-compose.yml - 添加 api-gateway/deploy.sh 一键部署脚本 - 完善 api-gateway/README.md 文档,包含完整架构图和部署流程 - Kong 使用外部网络连接 services,实现解耦部署 架构变更: - services: 只包含微服务,不依赖 Kong - api-gateway: 独立的 Kong 网关,可选部署 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
7d9d5eeffe
commit
de2e2d0428
|
|
@ -2,133 +2,231 @@
|
|||
|
||||
RWADurian 项目的 API 网关,基于 Kong 实现。
|
||||
|
||||
## 架构
|
||||
## 架构概览
|
||||
|
||||
```
|
||||
用户请求
|
||||
↓
|
||||
Nginx (SSL/负载均衡)
|
||||
↓ rwaapi.szaiai.com:443
|
||||
Kong API Gateway
|
||||
↓ :8000
|
||||
各微服务
|
||||
├── identity-service :3000
|
||||
├── wallet-service :3001
|
||||
├── backup-service :3002
|
||||
├── planting-service :3003
|
||||
├── referral-service :3004
|
||||
├── reward-service :3005
|
||||
├── mpc-service :3006
|
||||
├── leaderboard-service:3007
|
||||
├── reporting-service :3008
|
||||
├── authorization-service:3009
|
||||
├── admin-service :3010
|
||||
└── presence-service :3011
|
||||
┌─────────────────────────────────────┐
|
||||
│ RWA Backend │
|
||||
└─────────────────────────────────────┘
|
||||
│
|
||||
┌───────────────────────────────┼───────────────────────────────┐
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐
|
||||
│ rwaadmin.szaiai │ │ rwaapi.szaiai │ │ update.szaiai │
|
||||
│ (Admin Web) │ │ (API Gateway) │ │ (Mobile Upgrade) │
|
||||
│ :443 │ │ :443 │ │ :443 │
|
||||
└─────────┬─────────┘ └─────────┬─────────┘ └─────────┬─────────┘
|
||||
│ │ │
|
||||
│ Nginx │ Nginx │ Nginx
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐
|
||||
│ Admin Web │ │ Kong Gateway │ │ Mobile Upgrade │
|
||||
│ (Next.js) │ │ │ │ (Next.js) │
|
||||
│ :3000 │ │ :8000 │ │ :3020 │
|
||||
└───────────────────┘ └─────────┬─────────┘ └───────────────────┘
|
||||
│
|
||||
┌─────────────────────────────┼─────────────────────────────┐
|
||||
│ │ │
|
||||
▼ ▼ ▼
|
||||
┌───────────────────┐ ┌───────────────────┐ ┌───────────────────┐
|
||||
│ identity-service │ │ admin-service │ │ presence-service │
|
||||
│ :3000 │ │ :3010 │ │ :3011 │
|
||||
└───────────────────┘ └───────────────────┘ └───────────────────┘
|
||||
│ │ │
|
||||
└───────────────────────────┼───────────────────────────┘
|
||||
│
|
||||
┌─────────────┴─────────────┐
|
||||
│ Infrastructure │
|
||||
│ PostgreSQL / Redis / │
|
||||
│ Kafka / Zookeeper │
|
||||
└───────────────────────────┘
|
||||
```
|
||||
|
||||
## 文件结构
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
api-gateway/
|
||||
├── kong.yml # Kong 声明式配置
|
||||
├── README.md # 本文档
|
||||
├── docker-compose.yml # Kong Docker Compose 配置
|
||||
├── deploy.sh # 一键部署脚本
|
||||
├── kong.yml # Kong 声明式路由配置
|
||||
├── README.md # 本文档
|
||||
└── nginx/
|
||||
├── rwaapi.szaiai.com.conf # Nginx 配置
|
||||
└── install.sh # 一键安装脚本
|
||||
├── rwaapi.szaiai.com.conf # Nginx 配置 (SSL)
|
||||
└── install.sh # Nginx 安装脚本
|
||||
```
|
||||
|
||||
## API 路由
|
||||
## 快速开始
|
||||
|
||||
| 路径 | 服务 | 说明 |
|
||||
|------|------|------|
|
||||
| `/api/v1/auth/*` | identity-service | 认证相关 |
|
||||
| `/api/v1/users/*` | identity-service | 用户管理 |
|
||||
| `/api/v1/wallets/*` | wallet-service | 钱包管理 |
|
||||
| `/api/v1/backups/*` | backup-service | 备份服务 |
|
||||
| `/api/v1/plantings/*` | planting-service | 种植管理 |
|
||||
| `/api/v1/trees/*` | planting-service | 树木管理 |
|
||||
| `/api/v1/referrals/*` | referral-service | 推荐系统 |
|
||||
| `/api/v1/rewards/*` | reward-service | 奖励系统 |
|
||||
| `/api/v1/mpc/*` | mpc-service | 多方计算 |
|
||||
| `/api/v1/leaderboard/*` | leaderboard-service | 排行榜 |
|
||||
| `/api/v1/reports/*` | reporting-service | 报表统计 |
|
||||
| `/api/v1/statistics/*` | reporting-service | 数据统计 |
|
||||
| `/api/v1/authorization/*` | authorization-service | 授权管理 |
|
||||
| `/api/v1/permissions/*` | authorization-service | 权限管理 |
|
||||
| `/api/v1/roles/*` | authorization-service | 角色管理 |
|
||||
| `/api/v1/versions/*` | admin-service | 版本管理 |
|
||||
| `/api/v1/admin/*` | admin-service | 后台管理 |
|
||||
| `/api/v1/presence/*` | presence-service | 在线状态 |
|
||||
|
||||
## 部署
|
||||
|
||||
### 1. 启动 Kong (包含在 services 的 docker-compose.yml 中)
|
||||
### 1. 先启动后端微服务
|
||||
|
||||
```bash
|
||||
cd backend/services
|
||||
./deploy.sh up
|
||||
```
|
||||
|
||||
### 2. 配置 Nginx + SSL
|
||||
### 2. 启动 Kong API Gateway
|
||||
|
||||
```bash
|
||||
cd backend/api-gateway/nginx
|
||||
cd backend/api-gateway
|
||||
chmod +x deploy.sh
|
||||
./deploy.sh up
|
||||
```
|
||||
|
||||
### 3. 配置 Nginx + SSL (生产环境)
|
||||
|
||||
```bash
|
||||
cd nginx
|
||||
sudo chmod +x install.sh
|
||||
sudo ./install.sh
|
||||
```
|
||||
|
||||
### 3. 验证
|
||||
## 部署脚本命令
|
||||
|
||||
```bash
|
||||
# 检查 Kong 状态
|
||||
curl http://localhost:8001/status
|
||||
./deploy.sh up # 启动 Kong 网关
|
||||
./deploy.sh down # 停止 Kong 网关
|
||||
./deploy.sh restart # 重启 Kong 网关
|
||||
./deploy.sh logs # 查看日志
|
||||
./deploy.sh status # 查看状态
|
||||
./deploy.sh health # 健康检查
|
||||
./deploy.sh reload # 重载 Kong 配置
|
||||
./deploy.sh routes # 查看所有路由
|
||||
./deploy.sh services # 查看所有服务
|
||||
./deploy.sh test # 测试 API 路由
|
||||
./deploy.sh clean # 清理容器和数据
|
||||
```
|
||||
|
||||
# 测试 API 路由
|
||||
## API 路由表
|
||||
|
||||
| 路径 | 目标服务 | 端口 | 说明 |
|
||||
|------|----------|------|------|
|
||||
| `/api/v1/auth/*` | identity-service | 3000 | 认证登录 |
|
||||
| `/api/v1/users/*` | identity-service | 3000 | 用户管理 |
|
||||
| `/api/v1/wallets/*` | wallet-service | 3001 | 钱包管理 |
|
||||
| `/api/v1/backups/*` | backup-service | 3002 | 备份服务 |
|
||||
| `/api/v1/plantings/*` | planting-service | 3003 | 种植管理 |
|
||||
| `/api/v1/trees/*` | planting-service | 3003 | 树木管理 |
|
||||
| `/api/v1/referrals/*` | referral-service | 3004 | 推荐系统 |
|
||||
| `/api/v1/rewards/*` | reward-service | 3005 | 奖励系统 |
|
||||
| `/api/v1/mpc/*` | mpc-service | 3006 | 多方计算 |
|
||||
| `/api/v1/leaderboard/*` | leaderboard-service | 3007 | 排行榜 |
|
||||
| `/api/v1/reports/*` | reporting-service | 3008 | 报表 |
|
||||
| `/api/v1/statistics/*` | reporting-service | 3008 | 统计 |
|
||||
| `/api/v1/authorization/*` | authorization-service | 3009 | 授权 |
|
||||
| `/api/v1/permissions/*` | authorization-service | 3009 | 权限 |
|
||||
| `/api/v1/roles/*` | authorization-service | 3009 | 角色 |
|
||||
| `/api/v1/versions/*` | admin-service | 3010 | 版本管理 |
|
||||
| `/api/v1/admin/*` | admin-service | 3010 | 后台管理 |
|
||||
| `/api/v1/presence/*` | presence-service | 3011 | 在线状态 |
|
||||
|
||||
## Kong 端口说明
|
||||
|
||||
| 端口 | 说明 |
|
||||
|------|------|
|
||||
| 8000 | Proxy HTTP - API 请求入口 |
|
||||
| 8443 | Proxy HTTPS - API 请求入口 (SSL) |
|
||||
| 8001 | Admin API - 管理接口 |
|
||||
| 8002 | Admin GUI - 管理界面 |
|
||||
|
||||
## 全局插件
|
||||
|
||||
| 插件 | 说明 |
|
||||
|------|------|
|
||||
| cors | 跨域支持,允许前端访问 |
|
||||
| rate-limiting | 请求限流 (100/分钟, 5000/小时) |
|
||||
| file-log | 请求日志记录 |
|
||||
| request-size-limiting | 请求大小限制 (50MB) |
|
||||
|
||||
## 生产环境部署
|
||||
|
||||
### 完整部署流程
|
||||
|
||||
```bash
|
||||
# 1. 克隆代码到服务器
|
||||
git clone <repo> /opt/rwadurian
|
||||
cd /opt/rwadurian
|
||||
|
||||
# 2. 配置环境变量
|
||||
cp backend/services/.env.example backend/services/.env
|
||||
# 编辑 .env 文件,设置数据库密码、JWT 密钥等
|
||||
|
||||
# 3. 启动基础设施和微服务
|
||||
cd backend/services
|
||||
./deploy.sh up
|
||||
|
||||
# 4. 启动 Kong API Gateway
|
||||
cd ../api-gateway
|
||||
./deploy.sh up
|
||||
|
||||
# 5. 配置 Nginx + SSL
|
||||
cd nginx
|
||||
sudo ./install.sh
|
||||
|
||||
# 6. 验证
|
||||
curl https://rwaapi.szaiai.com/api/v1/versions
|
||||
```
|
||||
|
||||
## Kong 管理
|
||||
### 服务依赖关系
|
||||
|
||||
### 查看配置
|
||||
```
|
||||
1. Infrastructure (PostgreSQL, Redis, Kafka)
|
||||
↓
|
||||
2. Application Services (identity, wallet, admin, etc.)
|
||||
↓
|
||||
3. Kong API Gateway
|
||||
↓
|
||||
4. Nginx (SSL 终结)
|
||||
```
|
||||
|
||||
## 管理命令
|
||||
|
||||
### 查看 Kong 状态
|
||||
|
||||
```bash
|
||||
# 查看所有服务
|
||||
curl http://localhost:8001/services
|
||||
# 查看运行中的容器
|
||||
docker ps | grep kong
|
||||
|
||||
# 查看 Kong 健康状态
|
||||
curl http://localhost:8001/status
|
||||
|
||||
# 查看所有路由
|
||||
curl http://localhost:8001/routes
|
||||
|
||||
# 查看所有服务
|
||||
curl http://localhost:8001/services
|
||||
|
||||
# 查看所有插件
|
||||
curl http://localhost:8001/plugins
|
||||
```
|
||||
|
||||
### 重新加载配置
|
||||
### 重载配置
|
||||
|
||||
```bash
|
||||
# 进入 Kong 容器
|
||||
docker exec -it rwa-kong sh
|
||||
# 编辑 kong.yml 后重载
|
||||
docker exec rwa-kong kong reload
|
||||
|
||||
# 重载配置
|
||||
kong reload
|
||||
# 或使用部署脚本
|
||||
./deploy.sh reload
|
||||
```
|
||||
|
||||
## 插件
|
||||
### 查看日志
|
||||
|
||||
已启用的全局插件:
|
||||
```bash
|
||||
# Kong 日志
|
||||
docker logs -f rwa-kong
|
||||
|
||||
| 插件 | 功能 |
|
||||
|------|------|
|
||||
| cors | 跨域支持 |
|
||||
| rate-limiting | 请求限流 (100/分钟, 5000/小时) |
|
||||
| file-log | 请求日志 |
|
||||
| request-size-limiting | 请求大小限制 (50MB) |
|
||||
# 或使用部署脚本
|
||||
./deploy.sh logs
|
||||
```
|
||||
|
||||
## 故障排除
|
||||
|
||||
### 1. Kong 无法连接数据库
|
||||
### 1. Kong 无法启动
|
||||
|
||||
```bash
|
||||
# 检查 kong-db 状态
|
||||
# 检查数据库连接
|
||||
docker logs rwa-kong-db
|
||||
|
||||
# 手动运行迁移
|
||||
|
|
@ -139,7 +237,7 @@ docker exec -it rwa-kong kong migrations bootstrap
|
|||
|
||||
```bash
|
||||
# 检查 kong.yml 语法
|
||||
docker exec -it rwa-kong kong config parse /etc/kong/kong.yml
|
||||
docker exec rwa-kong kong config parse /etc/kong/kong.yml
|
||||
|
||||
# 重启 Kong
|
||||
docker restart rwa-kong
|
||||
|
|
@ -147,5 +245,24 @@ docker restart rwa-kong
|
|||
|
||||
### 3. 502 Bad Gateway
|
||||
|
||||
- 检查目标服务是否运行: `docker ps`
|
||||
- 检查服务网络连通性: `docker exec rwa-kong curl http://admin-service:3010/api/v1/health`
|
||||
```bash
|
||||
# 检查目标服务是否运行
|
||||
docker ps | grep rwa-
|
||||
|
||||
# 检查网络连通性
|
||||
docker exec rwa-kong curl http://admin-service:3010/api/v1/health
|
||||
|
||||
# 检查 Kong 日志
|
||||
docker logs rwa-kong --tail 100
|
||||
```
|
||||
|
||||
### 4. 跨域问题
|
||||
|
||||
检查 kong.yml 中的 cors 插件配置,确保 origins 包含前端域名。
|
||||
|
||||
## 安全建议
|
||||
|
||||
1. **生产环境**: 不要暴露 8001 (Admin API) 到公网
|
||||
2. **HTTPS**: 使用 Nginx 做 SSL 终结
|
||||
3. **限流**: 根据实际流量调整 rate-limiting 配置
|
||||
4. **日志**: 定期清理 /tmp/kong-access.log
|
||||
|
|
|
|||
|
|
@ -0,0 +1,253 @@
|
|||
#!/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 "$@"
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
# =============================================================================
|
||||
# Kong API Gateway - Docker Compose
|
||||
# =============================================================================
|
||||
# Usage:
|
||||
# ./deploy.sh up # 启动 Kong 网关
|
||||
# ./deploy.sh down # 停止 Kong 网关
|
||||
# ./deploy.sh logs # 查看日志
|
||||
# ./deploy.sh status # 查看状态
|
||||
# =============================================================================
|
||||
|
||||
services:
|
||||
# ===========================================================================
|
||||
# Kong Database
|
||||
# ===========================================================================
|
||||
kong-db:
|
||||
image: postgres:16-alpine
|
||||
container_name: rwa-kong-db
|
||||
environment:
|
||||
POSTGRES_USER: kong
|
||||
POSTGRES_PASSWORD: ${KONG_PG_PASSWORD:-kong_password}
|
||||
POSTGRES_DB: kong
|
||||
volumes:
|
||||
- kong_db_data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U kong"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- rwa-network
|
||||
|
||||
# ===========================================================================
|
||||
# Kong Migrations (只运行一次)
|
||||
# ===========================================================================
|
||||
kong-migrations:
|
||||
image: kong:3.5-alpine
|
||||
container_name: rwa-kong-migrations
|
||||
command: kong migrations bootstrap
|
||||
environment:
|
||||
KONG_DATABASE: postgres
|
||||
KONG_PG_HOST: kong-db
|
||||
KONG_PG_USER: kong
|
||||
KONG_PG_PASSWORD: ${KONG_PG_PASSWORD:-kong_password}
|
||||
KONG_PG_DATABASE: kong
|
||||
depends_on:
|
||||
kong-db:
|
||||
condition: service_healthy
|
||||
restart: on-failure
|
||||
networks:
|
||||
- rwa-network
|
||||
|
||||
# ===========================================================================
|
||||
# Kong API Gateway
|
||||
# ===========================================================================
|
||||
kong:
|
||||
image: kong:3.5-alpine
|
||||
container_name: rwa-kong
|
||||
environment:
|
||||
KONG_DATABASE: postgres
|
||||
KONG_PG_HOST: kong-db
|
||||
KONG_PG_USER: kong
|
||||
KONG_PG_PASSWORD: ${KONG_PG_PASSWORD:-kong_password}
|
||||
KONG_PG_DATABASE: kong
|
||||
KONG_PROXY_ACCESS_LOG: /dev/stdout
|
||||
KONG_ADMIN_ACCESS_LOG: /dev/stdout
|
||||
KONG_PROXY_ERROR_LOG: /dev/stderr
|
||||
KONG_ADMIN_ERROR_LOG: /dev/stderr
|
||||
KONG_ADMIN_LISTEN: 0.0.0.0:8001
|
||||
KONG_ADMIN_GUI_URL: http://localhost:8002
|
||||
KONG_DECLARATIVE_CONFIG: /etc/kong/kong.yml
|
||||
ports:
|
||||
- "8000:8000" # Proxy HTTP
|
||||
- "8443:8443" # Proxy HTTPS
|
||||
- "8001:8001" # Admin API
|
||||
- "8002:8002" # Admin GUI
|
||||
volumes:
|
||||
- ./kong.yml:/etc/kong/kong.yml:ro
|
||||
depends_on:
|
||||
kong-db:
|
||||
condition: service_healthy
|
||||
kong-migrations:
|
||||
condition: service_completed_successfully
|
||||
healthcheck:
|
||||
test: ["CMD", "kong", "health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- rwa-network
|
||||
|
||||
# ===========================================================================
|
||||
# Volumes
|
||||
# ===========================================================================
|
||||
volumes:
|
||||
kong_db_data:
|
||||
driver: local
|
||||
|
||||
# ===========================================================================
|
||||
# Networks - 使用外部网络连接到 services
|
||||
# ===========================================================================
|
||||
networks:
|
||||
rwa-network:
|
||||
external: true
|
||||
name: services_rwa-network
|
||||
|
|
@ -93,83 +93,6 @@ services:
|
|||
networks:
|
||||
- rwa-network
|
||||
|
||||
# ===========================================================================
|
||||
# API Gateway - Kong
|
||||
# ===========================================================================
|
||||
|
||||
kong-db:
|
||||
image: postgres:16-alpine
|
||||
container_name: rwa-kong-db
|
||||
environment:
|
||||
POSTGRES_USER: kong
|
||||
POSTGRES_PASSWORD: ${KONG_PG_PASSWORD:-kong_password}
|
||||
POSTGRES_DB: kong
|
||||
volumes:
|
||||
- kong_db_data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U kong"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- rwa-network
|
||||
|
||||
kong-migrations:
|
||||
image: kong:3.5-alpine
|
||||
container_name: rwa-kong-migrations
|
||||
command: kong migrations bootstrap
|
||||
environment:
|
||||
KONG_DATABASE: postgres
|
||||
KONG_PG_HOST: kong-db
|
||||
KONG_PG_USER: kong
|
||||
KONG_PG_PASSWORD: ${KONG_PG_PASSWORD:-kong_password}
|
||||
KONG_PG_DATABASE: kong
|
||||
depends_on:
|
||||
kong-db:
|
||||
condition: service_healthy
|
||||
restart: on-failure
|
||||
networks:
|
||||
- rwa-network
|
||||
|
||||
kong:
|
||||
image: kong:3.5-alpine
|
||||
container_name: rwa-kong
|
||||
environment:
|
||||
KONG_DATABASE: postgres
|
||||
KONG_PG_HOST: kong-db
|
||||
KONG_PG_USER: kong
|
||||
KONG_PG_PASSWORD: ${KONG_PG_PASSWORD:-kong_password}
|
||||
KONG_PG_DATABASE: kong
|
||||
KONG_PROXY_ACCESS_LOG: /dev/stdout
|
||||
KONG_ADMIN_ACCESS_LOG: /dev/stdout
|
||||
KONG_PROXY_ERROR_LOG: /dev/stderr
|
||||
KONG_ADMIN_ERROR_LOG: /dev/stderr
|
||||
KONG_ADMIN_LISTEN: 0.0.0.0:8001
|
||||
KONG_ADMIN_GUI_URL: http://localhost:8002
|
||||
KONG_DECLARATIVE_CONFIG: /etc/kong/kong.yml
|
||||
ports:
|
||||
- "8000:8000" # Proxy HTTP
|
||||
- "8443:8443" # Proxy HTTPS
|
||||
- "8001:8001" # Admin API
|
||||
- "8002:8002" # Admin GUI
|
||||
volumes:
|
||||
- ../api-gateway/kong.yml:/etc/kong/kong.yml:ro
|
||||
depends_on:
|
||||
kong-db:
|
||||
condition: service_healthy
|
||||
kong-migrations:
|
||||
condition: service_completed_successfully
|
||||
healthcheck:
|
||||
test: ["CMD", "kong", "health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- rwa-network
|
||||
|
||||
# ===========================================================================
|
||||
# Application Services
|
||||
# ===========================================================================
|
||||
|
|
@ -619,8 +542,6 @@ volumes:
|
|||
driver: local
|
||||
redis_data:
|
||||
driver: local
|
||||
kong_db_data:
|
||||
driver: local
|
||||
|
||||
# ===========================================================================
|
||||
# Networks
|
||||
|
|
|
|||
Loading…
Reference in New Issue