Skip to content

Repository files navigation

ModGate Logo ModGate

面向 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、运行脚本和本地开发方式

架构

ModGate 架构图

客户端通过 /v1/messages/v1/chat/completions 请求 ModGate。网关完成鉴权和路由后调用对应上游,并将用量、状态及审计数据写入存储;管理员通过 Web 控制台完成日常配置和监控。

快速开始

1. 准备环境

推荐安装:

  • Git
  • Docker 与 Docker Compose
  • 一个可用的上游模型 API Key(以下以 DeepSeek 为例)

克隆项目并进入目录:

git clone https://github.com/Stella-xixi/ModGate.git
cd ModGate

2. 创建配置

复制 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 中调整默认提供商、路由顺序和模型别名。

3. 启动 ModGate

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_USERNAMEMODGATE_ADMIN_PASSWORD 登录控制台。首次登录后,建议在“用户 / API Key”页面为实际客户端创建独立且权限受限的 API Key。

4. 验证服务

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 modgate

5. 接入客户端

Claude Code / Anthropic SDK

export 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":"你好,请介绍一下自己。"}]}'

OpenAI SDK / 兼容应用

将客户端的 Base URL 和 API Key 设置为:

export OPENAI_BASE_URL=http://127.0.0.1:38082/v1
export OPENAI_API_KEY=YOUR_MODGATE_API_KEY

Python 示例:

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 或其他客户端中。
  • 定期检查控制台中的请求日志、提供商健康状态和审计记录。

License

本项目采用 MIT License。

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages