用 Unraid 搭一套 24/7 本地 Agent:Ollama + OpenClaw 一键复刻

2026-02-12 12:26:28 4点赞 8收藏 1评论

【省 Token + 数据不出网】

用 Unraid 搭一套 24/7 本地 Agent:Ollama + OpenClaw 一键复刻

适用人群:有显卡、有 NAS/服务器、长期在线、不想把数据交给外网、还想把 Agent 玩明白的人。
目标:在 内网 跑起一个“能执行任务”的本地 Agent:

  • 推理走本地 GPU(Ollama)

  • 执行与编排走本地网关(OpenClaw)

  • 让你从此不再被“云端 token 账单”和“外泄风险”牵着走


1)背景:为什么 OpenClaw 这么香,也这么容易翻车?

先说一句大实话:OpenClaw 的魅力不在“它会聊天”,而在于——它能动手做事

你可以把它理解成“一个有手有脚的 AI”:

  • 能读写工作区文件(workspace)

  • 能跑命令行(shell)

  • 能控浏览器做自动化

  • 能挂定时任务(cron)

  • 能把能力接到各种聊天入口(可选)

但问题也来自这里:一旦它动起来,就很容易出现两类争议:

争议 A:烧 Token(甚至免费额度也能被跑光)

Agent 不是“一问一答”,而是“计划→执行→校验→修正”的多轮循环;再叠加浏览器、工具调用、定时任务,很容易把云端推理消耗推高。

争议 B:数据外泄(更多是“误配置”导致)

真正危险的往往不是软件本身,而是:

  • 网关暴露到公网(或弱 token / 错误绑定)

  • 目录挂载过大(把整个 NAS 根目录丢给 Agent)

  • 技能/脚本来源不明(供应链风险)

  • 网页/文档里的提示注入(诱导 Agent 执行危险动作)

结论:想享受 Agent 的效率,最好把它“圈”在内网里,把推理也尽量本地化。


2)本地化方案:让推理回到你的 GPU,让 Agent 只活在内网

这篇的方案很简单、很工程化:

  • Ollama:负责本地推理(走你 Unraid 的 NVIDIA GPU)

  • OpenClaw:负责执行与编排(网关 + 控制台,只在局域网访问)

架构一句话:

浏览器(内网) → OpenClaw(18789) → 调用 Ollama(11434/v1) → GPU 本地推理

你得到的结果是:

  • 日常推理成本“可控”(不再依赖云端 token)

  • 数据默认不出内网(除非你自己开放)

  • 你的 Agent 变成“自有基础设施”(能长期跑、能审计、能备份)


3)一键部署:把模板丢进 U 盘目录,Unraid 下拉就能装

我把我自己跑通的 Unraid 模板整理出来了(已脱敏):
你只要把两个模板文件放到 Unraid 的 Flash 里:

  • 路径:/boot/config/plugins/dockerMan/templates-user/
    (也可以在 Unraid WebUI 里进入 Flash 对应目录上传)

然后:
Docker → Add Container → Template 下拉选择 → Apply
就能一键创建容器。

国内常见 ghcr.io 拉不动:你可以把镜像域名替换成可用镜像源(我这里已经在模板里替换好了)。


4)部署顺序:先 Ollama,后 OpenClaw(别反)

Step 1:先装 Ollama

装好后进容器 Console(或 SSH 到 Unraid)执行:

ollama list ollama pull qwen3:8b # 或者:拉取并立即对话验证 ollama run qwen3:8b

能正常对话 = 本地推理层 OK。

小提示:如果你要确认 GPU UUID,可在 Unraid 执行:

nvidia-smi -L


Step 2:再装 OpenClaw(并生成你的网关 token)

OpenClaw 的访问一般是这样的(局域网):

http://:18789/?token=

token 建议用随机 32 字节(64 hex):

openssl rand -hex 32


5)验证:5 分钟确认你真的“全本地跑起来了”

按这个清单打勾:

  • ollama run qwen3:8b 能对话

  • 浏览器能打开 http://:18789/?token=...

  • OpenClaw 控制台里对话不再提示缺某云厂商 API Key(说明走本地模型)

  • Unraid Docker 页面端口映射正常:11434 / 18789


6)FAQ:最常见的三个坑

Q1:为什么很多教程要起两个容器:gateway 和 cli?

简单说:

  • gateway 容器:一直跑着的服务(你打开网页、对话、执行任务,全靠它)

  • cli 容器:只用来跑管理命令(例如 status / setup / update),跑完就退出

用 docker-compose 的人常这么分,是为了“管理命令更干净”。
但在 Unraid 单容器玩法里,你通常直接:

docker exec -it <你的_openclaw_容器名> openclaw status

就够了。


Q2:页面提示 disconnected (1008): device identity required 怎么办?

这通常是因为 Control UI 需要“安全上下文”生成 device identity(常见是 HTTPS/localhost 才算安全上下文),而你在内网用纯 HTTP 打开时触发了要求。

你有三种思路(从更安全到更省事):

  1. 用 HTTPS(反向代理 / VPN / 仅内网证书)

  2. 本机打开localhost / 127.0.0.1)

  3. 允许不安全认证:在内网可信环境下,启用 allowInsecureAuth 让它回退到 token-only(这属于安全降级,只建议内网)


Q3:日志出现 EACCES: permission denied(mkdir /home/node/.openclaw/...)

本质是:容器内用户(常见是 node 用户)和宿主机目录权限/UID 不匹配。
解决方式一般就两类:

  • 把映射目录修改为容器用户可写

  • 或调整容器运行用户


7)安全硬化:别让“高权限 Agent”变成内网炸弹

一句话原则:高权限 Agent 不上公网;能最小权限就最小权限。

  1. 18789 不要暴露公网:只内网;远程访问走 VPN/反代 + HTTPS

  2. token 够长 + 定期轮换:别写进公开文章、别截图打码不全

  3. 目录最小挂载:不要把整个 NAS 根目录挂给容器

  4. 技能/脚本谨慎启用:来源不明的脚本不要直接执行

  5. 日志与更新:定期更新镜像;出问题先看日志、再看配置、再看挂载目录权限


8)复制区块——零理解成本一键复刻

你只需要替换占位符:

  • :你的 Unraid 内网 IP

  • :你自己生成的 token

  • :你的 GPU UUID(或直接改成 all)


8.1 复制区块:my-ollama.xml(Unraid 模板)

用途:一键创建 Ollama 容器(含 GPU runtime 与持久化目录)。
放置路径:/boot/config/plugins/dockerMan/templates-user/my-ollama.xml

<?xml version="1.0"?> ollamadocker.1ms.run/ollama/ollama:latesthttps://hub.docker.com/r/ollama/ollama/bridgebashfalsehttps://hub.docker.com/r/ollama/ollama/The easiest way to get up and running with large language models locally.AI: Other:http://[IP]:[PORT:11434]/https://raw.githubusercontent.com/Joly0/docker-templates/master/templates/ollama.xmlhttps://ollama.ai/public/ollama.png--runtime=nvidia --restart=always1770261903**Nvidia Driver plugin** (nVidia Support)/mnt/user/appdata/ollama11434*<GPU_UUID_1>,<GPU_UUID_2>2256h


8.2 复制区块:my-openclaw.xml(Unraid 模板)

用途:一键创建 OpenClaw 容器(含国内可用镜像、workspace/config 持久化、token 访问)。
放置路径:/boot/config/plugins/dockerMan/templates-user/my-openclaw.xml

<?xml version="1.0"?> OpenClawghcr.nju.edu.cn/openclaw/openclaw:latesthttps://github.com/openclaw/openclaw/pkgs/container/openclawbridgeshfalsehttps://forums.unraid.net/topic/196865-support-openclaw-ai-personal-assistanthttps://github.com/openclaw/openclawProductivity: Tools: AIhttp://[IP]:[PORT:18789]/--user root --hostname OpenClawsh -c "mkdir -p /root/.openclaw /home/linuxbrew; [ -s /root/.openclaw/openclaw.json ] || echo '{"gateway":{"mode":"local","bind":"lan","controlUi":{"allowInsecureAuth":true},"auth":{"mode":"token"}}}' &gt; /root/.openclaw/openclaw.json; exec node dist/index.js gateway --bind lan"18789/mnt/user/appdata/openclaw/config/mnt/user/appdata/openclaw/workspace<OPENCLAW_GATEWAY_TOKEN>


8.3 复制区块:openclaw.json(把默认模型指到本地 Ollama)

用途:让 OpenClaw 默认模型走本地 Ollama,避免云端 token。
你可以在 OpenClaw 控制台 Config 中直接粘贴保存(或编辑映射目录里的文件)。

{ "meta": { "lastTouchedVersion": "2026.2.6", "lastTouchedAt": "2026-02-10T03:47:35.508Z" }, "models": { "providers": { "ollama": { "baseUrl": "http://:11434/v1", "apiKey": "__OPENCLAW_REDACTED__", "models": [ { "id": "500a1f067a9f", "name": "qwen3:8b", "reasoning": false, "input": [ "text" ], "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 }, "contextWindow": 200000, "maxTokens": 8192 } ] } }, "bedrockDiscovery": { "providerFilter": [] } }, "agents": { "defaults": { "model": { "primary": "ollama/qwen3:8b" }, "maxConcurrent": 4, "subagents": { "maxConcurrent": 8 } } }, "messages": { "ackReactionScope": "group-mentions" }, "commands": { "native": "auto", "nativeSkills": "auto" }, "gateway": { "mode": "local", "bind": "lan", "controlUi": { "allowInsecureAuth": true }, "auth": { "mode": "token" } } }


作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起
1评论

  • 精彩
  • 最新
  • 想请问一下,感觉直接拷贝,粘贴生成xml文件好像不行啊。看格式有点不太规范啊

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
8
扫一下,分享更方便,购买更轻松