# Gateway 部署指南

**更新日期：** 2026-03-04

## 文档维护规范

0. **先改文档，再动代码**
1. **文档分层，链接代码**
2. **简洁快照，日志分离**

---

## 部署方式

### 方式 1：单体部署（开发/小团队）

一个进程运行 Agent Core + Gateway。

```bash
# 启动
python main.py

# 配置
# config/gateway.yaml
gateway:
  enabled: true
  port: 8000
  heartbeat_timeout: 60
```

**适用场景**：
- 开发环境
- 小团队（< 10 个 Agent）
- 快速原型

### 方式 2：分离部署（生产环境）

两个独立进程。

```bash
# 终端 1：启动 Agent Core
python api_server.py

# 终端 2：启动 Gateway
python gateway_server.py
```

**配置**：

```yaml
# config/gateway.yaml
gateway:
  port: 8000
  agent_api: http://localhost:8001  # Agent Core API
  heartbeat_timeout: 60
```

**适用场景**：
- 生产环境
- 中等规模（10-1000 个 Agent）
- 需要独立扩展

### 方式 3：分层部署（大规模/企业）

三个独立进程。

```bash
# 终端 1：Agent Core
python api_server.py

# 终端 2：Gateway Core
python gateway_server.py

# 终端 3：Enterprise Gateway
python enterprise_gateway.py
```

**适用场景**：
- 大规模（> 1000 个 Agent）
- 企业部署
- 需要独立扩展各层

---

## Docker 部署

### 单容器部署

```dockerfile
# Dockerfile
FROM python:3.11-slim

WORKDIR /app
COPY . .
RUN pip install -r requirements.txt

CMD ["python", "gateway_server.py"]
```

```bash
# 构建
docker build -t a2a-gateway .

# 运行
docker run -p 8000:8000 a2a-gateway
```

### Docker Compose 部署

```yaml
# docker-compose.yml
version: '3.8'

services:
  agent-core:
    build: .
    command: python api_server.py
    ports:
      - "8001:8001"
    volumes:
      - ./.trace:/app/.trace

  gateway:
    build: .
    command: python gateway_server.py
    ports:
      - "8000:8000"
    environment:
      - AGENT_API=http://agent-core:8001
    depends_on:
      - agent-core
```

```bash
# 启动
docker-compose up -d

# 查看日志
docker-compose logs -f gateway
```

---

## 配置

### 基础配置

```yaml
# config/gateway.yaml
gateway:
  # 服务配置
  host: 0.0.0.0
  port: 8000

  # 注册表配置
  heartbeat_timeout: 60  # 心跳超时（秒）
  cleanup_interval: 30   # 清理间隔（秒）

  # Agent Core API
  agent_api: http://localhost:8001
```

### Enterprise 配置

```yaml
# config/gateway.yaml
gateway:
  # ... 基础配置

  # Enterprise 功能
  enterprise:
    enabled: true

    # 认证
    auth:
      provider: feishu_oauth
      feishu:
        app_id: xxx
        app_secret: xxx

    # 审计
    audit:
      enabled: true
      log_file: /var/log/gateway/audit.jsonl

    # 成本管理
    cost:
      enabled: true
      user_daily_limit: 1000  # Token 限额
```

---

## 监控

### 健康检查

```bash
# 检查 Gateway 状态
curl http://localhost:8000/health

# 返回
{
  "status": "ok",
  "agents_online": 5,
  "uptime": 3600
}
```

### 指标监控

```python
# 暴露 Prometheus 指标
from prometheus_client import Counter, Gauge

agents_online = Gauge('gateway_agents_online', 'Number of online agents')
messages_sent = Counter('gateway_messages_sent', 'Total messages sent')
```

### 日志

```python
# 配置日志
import logging

logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    handlers=[
        logging.FileHandler('/var/log/gateway/gateway.log'),
        logging.StreamHandler()
    ]
)
```

---

## 扩展

### 水平扩展

部署多个 Gateway 实例：

```bash
# 实例 1
python gateway_server.py --port 8000

# 实例 2
python gateway_server.py --port 8001

# 实例 3
python gateway_server.py --port 8002
```

使用负载均衡器：

```nginx
# nginx.conf
upstream gateway {
    server localhost:8000;
    server localhost:8001;
    server localhost:8002;
}

server {
    listen 80;
    location /gateway/ {
        proxy_pass http://gateway;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}
```

### 服务发现

使用 Consul 进行服务发现：

```python
# 注册到 Consul
import consul

c = consul.Consul()
c.agent.service.register(
    name='gateway',
    service_id='gateway-1',
    address='localhost',
    port=8000,
    check=consul.Check.http('http://localhost:8000/health', '10s')
)
```

---

## 故障排查

### 问题：Agent 无法连接

**症状**：PC Agent 连接失败

**排查**：
1. 检查 Gateway 是否启动：`curl http://localhost:8000/health`
2. 检查防火墙：`telnet localhost 8000`
3. 查看 Gateway 日志

### 问题：消息发送失败

**症状**：send_to_agent 返回错误

**排查**：
1. 检查目标 Agent 是否在线：`GET /gateway/status/{agent_uri}`
2. 检查 agent_uri 格式
3. 查看 Gateway 日志

### 问题：心跳超时

**症状**：Agent 频繁离线

**排查**：
1. 检查网络稳定性
2. 调整 heartbeat_timeout 配置
3. 检查 PC Agent 心跳逻辑

---

## 安全

### HTTPS/WSS

使用 SSL 证书：

```python
import ssl

ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_context.load_cert_chain('cert.pem', 'key.pem')

uvicorn.run(app, host="0.0.0.0", port=8000, ssl=ssl_context)
```

### 认证

添加 API Key 认证：

```python
from fastapi import Header, HTTPException

async def verify_api_key(x_api_key: str = Header(...)):
    if x_api_key not in valid_api_keys:
        raise HTTPException(401, "Invalid API Key")
```

---

## 相关文档

- [架构设计](./architecture.md)：Gateway 架构和设计决策
- [API 文档](./api.md)：完整的 API 参考
- [A2A IM 系统](../../docs/a2a-im.md)：完整的 A2A IM 文档
