Clawdbot部署教程:Qwen3-32B与Ollama分离部署时的跨主机API认证与网络策略
1. 为什么需要分离部署与跨主机认证
在实际AI应用开发中,我们常常遇到这样的现实问题:模型推理服务和管理平台不能挤在同一台机器上。比如,Qwen3-32B这类大模型需要独占高性能GPU资源(至少24G显存),而Clawdbot作为网关与管理平台,更适合运行在轻量级、高可用的CPU服务器上。这时候,把Ollama部署在GPU节点、Clawdbot部署在另一台控制节点,就成了最合理的选择。
但问题随之而来——两台机器之间如何安全通信?默认情况下,Ollama只监听本地回环地址(127.0.0.1:11434),外部主机根本连不上;即使开放了端口,Clawdbot发起请求时还会被Ollama拒绝,报错“unauthorized”;更别说生产环境中还要考虑防火墙、反向代理、Token校验等层层关卡。
本教程不讲抽象概念,只带你一步步完成三件事:
让Ollama真正对外提供服务(不只是localhost)
让Clawdbot跨主机调用Ollama API时通过身份认证
配置最小必要网络策略,既保障通信又不暴露风险
整个过程无需修改源码、不依赖Docker Compose编排、不引入额外中间件,全部使用原生Ollama + Clawdbot能力实现。
2. 前置准备与环境确认
2.1 硬件与网络拓扑说明
我们假设有两台Linux主机(可为物理机或云服务器),已通过内网互通:
| 主机角色 | IP地址示例 | 关键要求 |
|---|---|---|
| GPU节点(运行Ollama) | 192.168.1.10 | 安装NVIDIA驱动 + CUDA + Ollama v0.4.5+,显存≥24G |
| 控制节点(运行Clawdbot) | 192.168.1.20 | 安装Node.js 20+、Git、curl,能ping通GPU节点 |
注意:请将文中所有
192.168.1.10替换为你实际的GPU节点内网IP;不要使用公网IP直连,避免安全风险。
2.2 验证基础连通性
在控制节点(192.168.1.20)上执行:
# 检查是否能到达GPU节点的11434端口(此时应失败,因为Ollama默认不监听外网) nc -zv 192.168.1.10 11434 # 预期输出:Connection refused # 检查基础网络连通 ping -c 3 192.168.1.10如果ping不通,请先排查防火墙、VPC安全组或网络配置。这是后续一切的前提。
3. GPU节点:Ollama服务改造与安全加固
3.1 修改Ollama监听地址与启用API密钥
Ollama默认只绑定127.0.0.1,我们需要让它监听内网地址,并开启基础认证。
步骤一:创建Ollama配置文件
在GPU节点上,创建配置目录并写入设置:
mkdir -p ~/.ollama cat > ~/.ollama/config.json << 'EOF' { "host": "192.168.1.10:11434", "allowed_origins": ["http://192.168.1.20:3000", "http://192.168.1.20"], "cors_allow_origins": ["http://192.168.1.20:3000", "http://192.168.1.20"], "api_key": "ollama-clawdbot-secret-2024" } EOF关键说明:
"host"指定为具体内网IP(非0.0.0.0!最小权限原则)"allowed_origins"和"cors_allow_origins"明确限定Clawdbot前端来源(Clawdbot默认前端端口是3000)"api_key"是Ollama内置的简单Token机制,Clawdbot调用时需携带
步骤二:重启Ollama服务
# 如果是systemd服务(推荐) sudo systemctl restart ollama # 或直接前台启动验证(调试用) OLLAMA_HOST=192.168.1.10:11434 ollama serve步骤三:验证Ollama已对外提供服务
在控制节点(192.168.1.20)上测试:
# 发送带API Key的请求(注意Header格式) curl -X POST "http://192.168.1.10:11434/api/chat" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer ollama-clawdbot-secret-2024" \ -d '{ "model": "qwen3:32b", "messages": [{"role": "user", "content": "你好"}], "stream": false }' | jq '.message.content'成功时会返回“你好”相关的回复;❌ 失败则检查配置路径、端口、密钥是否一致。
3.2 配置系统级防火墙(以UFW为例)
仅放行必要端口,拒绝其他所有连接:
# 在GPU节点执行 sudo ufw allow from 192.168.1.20 to any port 11434 sudo ufw enable sudo ufw status verbose输出应包含类似:
Anywhere on 11434 ALLOW FWD 192.168.1.20🛡 安全提示:切勿执行
ufw allow 11434(开放给所有人),必须精确限制来源IP。
4. 控制节点:Clawdbot配置跨主机模型接入
4.1 初始化Clawdbot并定位配置文件
Clawdbot的模型配置统一存放在~/.clawdbot/config.json。首次运行后该文件自动生成:
# 在控制节点执行(确保已安装Clawdbot CLI) clawdbot onboard # 等待初始化完成,然后停止服务(Ctrl+C)此时配置文件已生成,我们直接编辑它:
nano ~/.clawdbot/config.json4.2 修改模型配置为跨主机Ollama地址
找到providers部分,将原本的http://127.0.0.1:11434/v1替换为GPU节点地址,并补充API Key:
"my-ollama": { "baseUrl": "http://192.168.1.10:11434/v1", "apiKey": "ollama-clawdbot-secret-2024", "api": "openai-completions", "models": [ { "id": "qwen3:32b", "name": "Local Qwen3 32B (GPU Node)", "reasoning": false, "input": ["text"], "contextWindow": 32000, "maxTokens": 4096, "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 } } ] }关键变更点:
baseUrl→ 改为http://192.168.1.10:11434/v1(不是localhost)apiKey→ 必须与Ollama配置中的api_key完全一致name→ 建议加上位置标识,避免混淆
保存退出。
4.3 启动Clawdbot并验证模型可用性
# 启动服务 clawdbot start # 查看日志确认连接状态 clawdbot logs --tail 20日志中应出现类似信息:
[INFO] Provider 'my-ollama' connected successfully [INFO] Model 'qwen3:32b' registered and ready若出现connection refused或unauthorized,请按以下顺序排查:
1⃣ GPU节点Ollama是否正在运行(systemctl status ollama)
2⃣config.json中的IP、端口、apiKey是否与Ollama配置100%一致
3⃣ 控制节点能否curl -v http://192.168.1.10:11434/health(应返回JSON健康状态)
5. 网关层认证:解决Clawdbot控制台Token缺失问题
你可能已经注意到,浏览器访问Clawdbot控制台时会弹出“gateway token missing”错误。这不是Ollama的问题,而是Clawdbot自身的网关鉴权机制——它要求所有HTTP请求必须携带有效Token,否则拒绝响应。
5.1 生成并注入Clawdbot网关Token
Clawdbot使用JWT Token进行网关层认证。Token由Clawdbot内部生成,但需手动注入到URL或配置中。
方法一:URL参数方式(快速验证)
如你描述中所示,原始URL:
https://gpu-pod6978c4fda2b3b8688426bd76-18789.web.gpu.csdn.net/chat?session=main→ 删除/chat?session=main
→ 添加?token=csdn(此处csdn是Clawdbot默认内置Token,可自定义)
→ 最终URL为:
https://gpu-pod6978c4fda2b3b8688426bd76-18789.web.gpu.csdn.net/?token=csdn提示:
csdn是Clawdbot安装时默认写死的Token,位于~/.clawdbot/config.json的gateway.token字段。你也可以修改它:"gateway": { "token": "my-super-secure-token-2024" }
方法二:配置文件固化(推荐用于生产)
编辑~/.clawdbot/config.json,确保包含:
"gateway": { "token": "csdn", "corsOrigins": ["http://192.168.1.20:3000"] }, "providers": { ... }然后重启Clawdbot:
clawdbot stop && clawdbot start5.2 验证完整链路:从浏览器到GPU显卡
打开浏览器,访问:
http://192.168.1.20:3000/?token=csdn正确情况:进入Clawdbot控制台,左下角显示“Connected to my-ollama (qwen3:32b)”
❌ 错误情况:仍提示unauthorized → 检查gateway.token是否与URL中一致,且corsOrigins是否包含当前域名
在聊天界面输入任意问题(如“用Python写一个快速排序”),观察响应时间与内容质量。Qwen3-32B在24G显存上虽非极致流畅,但已能稳定输出高质量代码。
6. 进阶建议:提升稳定性与可观测性
6.1 设置Ollama开机自启(GPU节点)
避免每次重启后手动启动Ollama:
# 创建systemd服务(如尚未存在) sudo tee /etc/systemd/system/ollama.service << 'EOF' [Unit] Description=Ollama Service After=network-online.target [Service] Type=simple ExecStart=/usr/bin/ollama serve Restart=always RestartSec=3 User=ollama Environment="OLLAMA_HOST=192.168.1.10:11434" Environment="OLLAMA_ORIGINS=http://192.168.1.20:3000,http://192.168.1.20" [Install] WantedBy=default.target EOF sudo systemctl daemon-reload sudo systemctl enable ollama sudo systemctl start ollama6.2 为Clawdbot添加反向代理(Nginx示例)
若需通过域名访问(如https://ai-gateway.example.com),在控制节点配置Nginx:
server { listen 443 ssl; server_name ai-gateway.example.com; ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/privkey.pem; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Authorization "Bearer csdn"; # 透传Token proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; } }这样用户只需访问https://ai-gateway.example.com,无需手动加?token=参数。
6.3 监控关键指标(简易方案)
在GPU节点定期检查Ollama内存与GPU占用:
# 每5秒查看一次 watch -n 5 'nvidia-smi --query-gpu=memory.used,memory.total --format=csv,noheader,nounits && curl -s http://127.0.0.1:11434/health | jq .status'正常输出应为:
3254,24576 "ok"表示显存使用约3.2G(Qwen3-32B加载后典型值),服务健康。
7. 总结:分离部署的核心要点回顾
你已经完成了Qwen3-32B与Clawdbot的跨主机生产级部署。整个过程看似步骤较多,但核心逻辑非常清晰,只需牢牢把握三个“唯一性”:
- 唯一监听地址:Ollama必须明确绑定GPU节点内网IP,而非0.0.0.0或localhost
- 唯一认证密钥:Ollama的
api_key与Clawdbot配置中的apiKey必须一字不差 - 唯一信任来源:Ollama的
allowed_origins和Clawdbot的corsOrigins必须双向匹配,形成闭环信任
这不仅是技术配置,更是一种安全思维——不开放、不猜测、不妥协。当你下次需要接入Llama-3-70B或Qwen2-VL多模态模型时,只需复用同一套网络与认证模式,替换IP和模型ID即可。
最后提醒一句:Qwen3-32B在24G显存上确实存在推理延迟,如需更高响应速度,建议升级至48G显存或改用Qwen2.5-14B(精度损失极小,速度提升2倍以上)。但无论模型如何迭代,这套跨主机部署范式始终适用。
--- > **获取更多AI镜像** > > 想探索更多AI镜像和应用场景?访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_source=mirror_blog_end),提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。