【教程】Ollama2API 从 0 部署 + 接入 OpenClaw(本地大模型也能像 OpenAI 一样用)

一句话:如果你本地/内网有 Ollama(跑 llama、qwen、deepseek 之类),但又想让各种工具“像用 OpenAI 一样用”,那就需要一个 OpenAI 兼容的网关。

这篇写的是 ollama2api:把多个 Ollama 实例聚合成统一的 OpenAI API(/v1/chat/completions/v1/models),还能做健康检查和简单负载均衡。最后再把它接进 OpenClaw,让你在 Telegram/Control UI 里直接用本地大模型。


🧾 你需要什么

  • 一台 Linux 服务器(Ubuntu/Debian 都行)
  • Docker(推荐)
  • 一台(或多台)已经装好 Ollama 的机器(同机也可以)
  • (可选)OpenClaw:如果你想从 Telegram/控制台调用模型

⚠️ 注意注意注意(重要)

  • 默认不要把 ollama2api 直接暴露公网。建议先只监听 127.0.0.1,需要外网访问再走 Nginx 反代 + 认证。
  • 仓库里提到的“扫描发现/masscan”属于网络扫描工具。只允许用于你自己或已授权的主机/网段。

🚀 第一部分:部署 Ollama2API(Docker Compose)

1)装 Docker(Ubuntu/Debian 简单版)

你已经有 Docker 就跳过。

apt update -y
apt install -y docker.io git
systemctl enable docker --now

docker version

2)拉代码

cd /root

git clone https://github.com/xiaolajiaoyyds/ollama2api
cd ollama2api

3)改一下端口绑定(强烈建议:先只监听本机)

仓库的 docker-compose.yml 默认是 8001:8001,这会把端口暴露到 0.0.0.0。建议改成只监听回环:

# 把 ports 这一行改成:
# - "127.0.0.1:8001:8001"

sed -i 's/- "8001:8001"/- "127.0.0.1:8001:8001"/g' docker-compose.yml

grep -n "8001" -n docker-compose.yml

补充:compose 里有 cap_add: NET_RAW(通常用于扫描/探测之类功能)。如果你明确不需要扫描能力,也可以先去掉它,减少权限暴露面。

4)启动

docker compose up -d

docker ps --format 'table {{.Names}}	{{.Status}}	{{.Ports}}'

docker logs -n 50 ollama2api --tail 50

5)验证服务

# 健康检查
curl -sS http://127.0.0.1:8001/health

# 模型列表(可能为空/或默认)
curl -sS http://127.0.0.1:8001/v1/models | jq .

6)管理后台

后台入口通常是:

  • http://127.0.0.1:8001/admin

首次部署后建议第一时间修改管理员密码(仓库说明支持通过环境变量 ADMIN_PASSWORD 或在后台修改,按你实际版本为准)。


🧠 第二部分:把 Ollama 节点接进来(不扫网段,手动添加最稳)

我建议 0 基础就走“手动添加后端”,别先碰扫描功能。

1)先确认你的 Ollama 正常

在 Ollama 那台机器上:

ollama --version
ollama list

确认 Ollama API 可访问(默认 11434)。如果你是在同一台机器上跑 ollama2api:

curl -sS http://127.0.0.1:11434/api/tags | head

2)在 ollama2api 后台添加后端

/admin,找到后端管理(节点/Backends),把你的 Ollama 地址加进去,例如:

  • http://127.0.0.1:11434(同机)
  • http://192.168.1.10:11434(内网 Ollama)

加完后,再回到终端看 /v1/models 有没有出现你的模型名(例如 qwen2.5:latest、llama3:latest 这种)。


🦞 第三部分:把 Ollama2API 接入 OpenClaw(重点:baseUrl 指向 /v1)

1)先确认 ollama2api 是 OpenAI 兼容的

curl -sS http://127.0.0.1:8001/v1/models | jq .

2)OpenClaw 配置(示意模板)

编辑 OpenClaw 配置文件(例如 root):/root/.openclaw/openclaw.json

最关键的只有两点:

  • providers.XXX.baseUrl 必须写到 .../v1
  • 模型 id 以 /v1/models 返回为准
{
  "models": {
    "mode": "merge",
    "providers": {
      "ollama2api": {
        "baseUrl": "http://127.0.0.1:8001/v1",
        "apiKey": "", 
        "api": "openai-completions",
        "models": [
          {"id": "qwen2.5:latest", "name": "Qwen2.5", "contextWindow": 8192, "maxTokens": 2048}
        ]
      }
    }
  },
  "agents": {
    "defaults": {
      "model": {
        "primary": "ollama2api/qwen2.5:latest"
      },
      "timeoutSeconds": 1800
    }
  }
}

说明:如果你的 ollama2api 启用了 API Key 鉴权,就把 apiKey 填上;如果没启用,就留空即可。

改完验证配置:

openclaw config validate

重启 Gateway 后生效:

systemctl restart openclaw-gateway
systemctl status openclaw-gateway --no-pager

🌐 第四部分:(可选)反代到域名,给后台加个门

如果你要从外网打开 ollama2api 的后台或 API,建议:

  • 继续保持容器只监听 127.0.0.1:8001
  • Nginx 反代到域名,并加 BasicAuth/IP 白名单

示例(只做思路):

location / {
  auth_basic "ollama2api";
  auth_basic_user_file /path/to/htpasswd;
  proxy_pass http://127.0.0.1:8001;
}

🧯 最后:我建议你按这个顺序排障

  1. curl http://127.0.0.1:8001/health 是否通
  2. curl http://127.0.0.1:8001/v1/models 是否能看到模型
  3. Ollama 节点本身是否可达(11434)
  4. OpenClaw provider 的 baseUrl 是否写成 .../v1

按这个顺序基本能很快定位问题。