面向 Anthropic 与 OpenAI 兼容应用的自托管多模型 API 网关
ModGate 在客户端与上游模型服务之间提供统一接入层。Claude Code、Anthropic SDK、OpenAI SDK 及兼容应用可以继续使用熟悉的协议,由 ModGate 集中完成模型路由、身份认证、流量控制、用量记录和运行状态观测。
项目由 Rust/Axum 网关、React 管理控制台和 PostgreSQL 数据库组成,既可连接 DeepSeek、OpenAI、Anthropic 等云端服务,也可接入 Ollama 或其他 OpenAI 兼容的本地模型服务。
| 能力 | 说明 |
|---|---|
| 统一协议 | 提供 Anthropic Messages 与 OpenAI Chat Completions 接口 |
| 灵活路由 | 支持默认提供商、提供商顺序、模型别名和兼容服务 |
| 安全管控 | 支持网关令牌、控制台用户、作用域 API Key、限流和配额 |
| 管理控制台 | 管理提供商、模型、用户、密钥、配额及系统设置 |
| 可观测性 | 提供健康检查、请求日志、延迟、用量和审计信息 |
| 部署友好 | 提供 Docker Compose、运行脚本和本地开发方式 |
客户端通过 /v1/messages 或 /v1/chat/completions 请求 ModGate。网关完成鉴权和路由后调用对应上游,并将用量、状态及审计数据写入存储;管理员通过 Web 控制台完成日常配置和监控。
推荐安装:
- Git
- Docker 与 Docker Compose
- 一个可用的上游模型 API Key(以下以 DeepSeek 为例)
克隆项目并进入目录:
git clone https://github.com/Stella-xixi/ModGate.git
cd ModGate复制 Docker 环境变量模板和提供商配置:
cp .env.example .env
cp config.example.toml config.toml编辑 .env,至少替换以下占位值:
MODGATE_AUTH_TOKEN=请替换为一个长随机字符串
MODGATE_ADMIN_USERNAME=admin
MODGATE_ADMIN_PASSWORD=请替换为一个高强度密码
MODGATE_POSTGRES_PASSWORD=请替换为一个长随机字符串
DEEPSEEK_ANTHROPIC_AUTH_TOKEN=你的上游API密钥Important
.env 包含管理员密码、数据库密码和上游密钥,请勿提交到版本库或发送给客户端。客户端只应使用 MODGATE_AUTH_TOKEN 或控制台签发的 API Key。
如需使用其他提供商,请在 .env 中启用对应变量,并在 config.toml 中调整默认提供商、路由顺序和模型别名。
docker compose up -d --build默认访问地址:
| 服务 | 地址 |
|---|---|
| 管理控制台 | http://127.0.0.1:33002 |
| API 网关 | http://127.0.0.1:38082 |
| 存活检查 | http://127.0.0.1:38082/livez |
使用 .env 中的 MODGATE_ADMIN_USERNAME 和 MODGATE_ADMIN_PASSWORD 登录控制台。首次登录后,建议在“用户 / API Key”页面为实际客户端创建独立且权限受限的 API Key。
curl http://127.0.0.1:38082/livez
curl http://127.0.0.1:38082/readyz \
-H "x-api-key: YOUR_MODGATE_API_KEY"查看容器状态和日志:
docker compose ps
docker compose logs -f modgateexport ANTHROPIC_BASE_URL=http://127.0.0.1:38082
export ANTHROPIC_AUTH_TOKEN=YOUR_MODGATE_API_KEY
export ANTHROPIC_MODEL=deepseek-v4-flash也可以直接验证 Messages 接口:
curl http://127.0.0.1:38082/v1/messages \
-H "x-api-key: YOUR_MODGATE_API_KEY" \
-H "content-type: application/json" \
-d '{"model":"deepseek-v4-flash","max_tokens":256,"messages":[{"role":"user","content":"你好,请介绍一下自己。"}]}'将客户端的 Base URL 和 API Key 设置为:
export OPENAI_BASE_URL=http://127.0.0.1:38082/v1
export OPENAI_API_KEY=YOUR_MODGATE_API_KEYPython 示例:
from openai import OpenAI
client = OpenAI(
base_url="http://127.0.0.1:38082/v1",
api_key="YOUR_MODGATE_API_KEY",
)
response = client.chat.completions.create(
model="deepseek-v4-flash",
messages=[{"role": "user", "content": "你好,请介绍一下自己。"}],
)
print(response.choices[0].message.content)| 操作 | 命令 |
|---|---|
| 启动或更新 | docker compose up -d --build |
| 查看状态 | docker compose ps |
| 查看网关日志 | docker compose logs -f modgate |
| 重启网关 | docker compose restart modgate |
| 停止服务 | docker compose down |
| 停止并删除数据卷 | docker compose down -v(会删除本地数据,请谨慎使用) |
Linux/macOS 本地进程方式还可使用:
scripts/dev.sh # 前台开发运行
scripts/start.sh # 后台启动 release 版本
scripts/status.sh # 查看状态
scripts/stop.sh # 停止服务
scripts/doctor.sh # 环境诊断
scripts/smoke-test.sh --upstream # 验证真实上游请求后端需要 Rust 1.96,控制台需要 Node.js 与 npm。
# 后端
cargo run
# 控制台(另开终端)
cd dashboard
npm ci
npm run dev提交改动前可运行:
cargo test
cd dashboard && npm run check- 生产环境务必更换所有默认值和占位密钥,并通过密钥管理系统保存敏感信息。
- 默认端口仅监听
127.0.0.1;需要远程访问时,请使用 HTTPS 反向代理并配置可信代理与允许来源。 - 为不同用户或应用签发独立 API Key,并按需设置作用域、配额和限流策略。
- 不要把上游提供商密钥配置在 Claude Code、SDK 或其他客户端中。
- 定期检查控制台中的请求日志、提供商健康状态和审计记录。
本项目采用 MIT License。

