feat: 完善网关容器化与限流监控

This commit is contained in:
2025-12-03 14:49:33 +08:00
parent 5361451140
commit 6b5da04751
8 changed files with 332 additions and 37 deletions

View File

@@ -1009,3 +1009,50 @@ docker-compose up -d --force-recreate --no-deps api
docker pull takeout-saas-api:previous-version
docker-compose up -d
```
## 13. 网关 TakeoutSaaS.ApiGateway 部署
1. **部署拓扑**
- Nginx 负责域名 `kjkj.qiyuesns.cn`(含后续 HTTPS 证书),并将所有流量反代到本机 `http://127.0.0.1:5000`
- .NET 网关容器TakeoutSaaS.ApiGateway负责 YARP 路由、限流、日志与 OpenTelemetry 埋点,向下游 49.7.179.246 的 Admin/User/Mini API 转发。
2. **构建与运行**
```bash
# 构建镜像
docker build -f src/Gateway/TakeoutSaaS.ApiGateway/Dockerfile -t takeoutsaas/apigateway:latest .
# 启动容器(生产环境建议挂载独立配置)
docker run -d --name takeout-gateway -p 5000:5000 ^
-e ASPNETCORE_ENVIRONMENT=Production ^
-v /opt/takeoutsaas/gateway/appsettings.Production.json:/app/appsettings.Production.json ^
takeoutsaas/apigateway:latest
```
- `appsettings.json` 默认将 `/api/admin|mini|user/**` 指向主应用服务器7801/7701/7901 端口)。
- `appsettings.Development.json` 可在本地覆盖为 `localhost:5001/5002/5003`,无需改代码。
3. **Nginx 参考配置**
```nginx
server {
listen 80;
server_name kjkj.qiyuesns.cn;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
- 后续启用 HTTPS 时,将 `listen 443 ssl` 与证书配置加入同一 `server`,其余保持不变。
4. **关键配置项说明**
- `Gateway:RateLimiting`:按客户端 IP 固定窗口限流(默认 300 次/60 秒),可通过配置文件调整或关闭。
- `ReverseProxy`:集中声明路由规则(`/api/{service}/**`),后端地址变更时只需改配置即可。
- `OpenTelemetry`:默认开启 OTLP 导出Collector 地址通过 `OpenTelemetry:OtlpEndpoint` 指定。
- `Serilog`:统一输出到控制台,日志采集器可以直接收集 Docker stdout。
5. **健康检查**
- `GET /healthz`:基础健康,用于探活或监控告警。
- `GET /`:返回服务元信息,可作为简易诊断接口。