feat: 完善网关容器化与限流监控
This commit is contained in:
@@ -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 /`:返回服务元信息,可作为简易诊断接口。
|
||||
|
||||
Reference in New Issue
Block a user