Ubuntu虚拟机部署OpenClaw全踩坑实录|本地访问+模型配置一站式解决

发布时间:2026/9/29 21:30:11
Ubuntu虚拟机部署OpenClaw全踩坑实录|本地访问+模型配置一站式解决 1. Ubuntu 虚拟机里跑 OpenClaw为什么本地浏览器就是打不开OpenClaw 是一个可以自己部署的智能体平台装好之后能在浏览器里对话、挂工具、跑自动化任务适合想把大模型能力落到本地环境、又不想被某个云端界面绑死的开发者。它的部署方式对机器要求不高一台 Ubuntu 虚拟机就够但真正卡人的从来不是安装本身而是装完之后那两步本地浏览器访问不进去以及模型配置怎么填都不生效。我这次的环境是 Windows 主机加 VMware 里的 Ubuntu 22.04目标很明确在 Windows 的浏览器里打开虚拟机中的 OpenClaw并且稳定接上大模型。整个过程里权限报错、端口不通、浏览器安全拦截、模型列表混乱、API Key 校验失败几乎全碰了一遍。下面按真实踩坑顺序拆开讲每一步都给可复制的命令和配置你照着走能少绕很多弯。需要先说明一个前提OpenClaw 的网关默认只监听 127.0.0.1也就是只有虚拟机自己能访问。你在 Windows 浏览器里敲虚拟机 IP 加端口大概率是连接超时。这不是 OpenClaw 坏了而是它的默认安全策略。理解这一点后面本地访问的坑就都能串起来。2. 前置准备TaoToken 统一 Key 与 API 通道模型配置这块我建议一开始就把通道理顺别等到 OpenClaw 里报No API key found for provider再回头折腾。我这次用的是 TaoToken 作为统一的模型接入通道好处是一个 Key 能覆盖多种模型BaseURL 固定省得在 OpenClaw 里为每个厂商单独配一套参数。TaoToken 的定位是给开发者和智能体应用提供统一的模型调用入口你可以在官网了解它的能力范围注册后在控制台生成 API Key。对 OpenClaw 这种需要频繁切换模型的平台来说统一通道能明显减少配置项也避免手动改 JSON 时格式出错。具体动作分三步。第一打开官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册账号。第二进入控制台 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 创建 API Key复制保存好这个 Key 后面要填进 OpenClaw。第三如果你不确定该选哪个模型可以先去模型对话页 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 试跑一下确认通道通不通再往 OpenClaw 里配。API 的基础地址是 https://taotoken.net/api 注意这个地址不带任何查询参数填进配置时保持干净。Key 的管理入口在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 如果后面发现 Key 失效或者想换一个回这里重新生成即可。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 遇到参数不确定时对照着看。提示Key 只生成一次就保存好页面刷新后不一定能再看到完整值。建议先复制到本地临时文件配完再删。3. 安装与启动权限报错和绑定地址3.1 安装阶段的 EACCES 权限报错官方给的安装命令是env SHARP_IGNORE_GLOBAL_LIBVIPS1 npm install -g openclawlatest普通用户直接跑大概率报EACCES: permission denied提示无法写入/usr/lib/node_modules/openclaw。原因是 npm 全局安装默认往系统目录写普通用户没这个权限。解决办法是提权但环境变量要保留所以不能简单在前面加 sudo 就完事得用sudo env把变量带进去sudo env SHARP_IGNORE_GLOBAL_LIBVIPS1 npm install -g openclawlatest装完验证一下openclaw -v能打印版本号就说明装好了。这一步的坑很典型很多人看到权限报错就去改 npm 全局路径其实没必要提权一次就解决。3.2 启动网关与绑定地址装好后启动网关openclaw gateway restart默认它绑定 127.0.0.1虚拟机内部能访问Windows 主机访问不了。如果你打算用 SSH 隧道方案后面会讲这是最稳的其实不用改绑定地址。但如果你想让局域网其他机器直接访问可以改成 0.0.0.0openclaw config set gateway.bind 0.0.0.0 openclaw gateway restart改完记得放行端口否则防火墙还是拦sudo ufw allow 18789 sudo ufw reload注意绑定 0.0.0.0 意味着同网段都能访问测试环境无所谓长期用建议还是走 SSH 隧道别把端口直接暴露出去。4. 本地访问打通SSH 隧道才是正解4.1 直接访问虚拟机 IP 为什么不通在 Windows 浏览器里输入http://虚拟机IP:18789页面打不开提示连接超时。原因通常有三个叠在一起Ubuntu 没开 SSH 服务、防火墙没放行 18789、OpenClaw 绑定在 127.0.0.1。前两个好解决第三个是根本原因。先把 SSH 装上并设为开机自启这既是端口转发的前提也方便你后续远程操作sudo apt update sudo apt install openssh-server -y sudo systemctl start ssh sudo systemctl enable ssh然后用hostname -I查一下虚拟机的内网 IP记下来比如192.168.222.128。4.2 浏览器安全拦截control ui requires device identity就算你把绑定改成 0.0.0.0、端口也放行了页面能打开登录后还是可能卡在control ui requires device identity (use HTTPS or localhost secure context)这是浏览器的安全策略在起作用。HTTP 协议加内网 IP 不属于安全上下文OpenClaw 前端会校验并拦截。你改配置文件加secure: false基本没用重启网关也不生效因为这是浏览器层面的限制不是应用能绕过的。4.3 SSH 本地隧道映射真正干净的解法是 SSH 隧道把虚拟机的 18789 映射到本地的 localhost。关键点是转发目标必须写localhost不能写虚拟机 IP否则会端口冲突或者依然触发安全校验。在 Windows 的 cmd 或 PowerShell 里执行ssh -L 18789:localhost:18789 用户名192.168.222.128拆开看18789:localhost:18789表示本地 18789 端口转发到虚拟机的 localhost:18789用户名是你的 Ubuntu 用户名后面是虚拟机 IP。连上后保持这个终端窗口不要关然后在 Windows 浏览器访问http://localhost:18789这时候就是 localhost 安全上下文浏览器不再拦截输入 token 就能进聊天页。我实测下来这个方案比改绑定地址加放行端口更省事也不用担心端口暴露。5. 模型配置别手改 JSON用命令行5.1 手动改 openclaw.json 为什么不生效网上不少教程让你直接编辑~/.openclaw/openclaw.json填 API Key 和模型信息。我试过重启网关后 WebUI 依然提示无 Key 或模型不存在。原因是这个文件的读取优先级低于命令行配置而且部分参数不支持热加载JSON 格式稍微错一点就整个不识别。手动改这条路坑比收益多。5.2 命令行配置模型正确姿势是用官方命令行openclaw configure --section models执行后按提示依次输入厂商名称、API Key、接口 BaseURL、模型 ID。这里就是 TaoToken 统一通道发挥作用的地方BaseURL 填https://taotoken.net/apiAPI Key 填你在控制台生成的那个模型 ID 填你想用的模型标识。因为走的是统一入口不用为每个厂商单独配一套参数。配置到模型选择那一步时只勾选你自己能用的模型把其他内置模型全部取消。这一步很关键OpenClaw 默认会加载一堆内置模型未配置的模型会触发校验报出类似No API key found for provider anthropic的错误。精简列表之后界面干净也不会误选导致报错。配完重启网关openclaw gateway restart5.3 一份可复制的 config.toml 骨架如果你更习惯用配置文件OpenClaw 也支持 TOML 格式。下面这份骨架可以直接改[gateway] bind 127.0.0.1 port 18789 [models.default] provider taotoken api_key 你的_TaoToken_API_Key base_url https://taotoken.net/api model 你的模型ID [models.default.params] temperature 0.7 max_tokens 4096把api_key和model换成你自己的值即可。base_url保持https://taotoken.net/api不要加多余路径。改完同样重启网关生效。提示TOML 里字符串用双引号别用单引号否则解析可能出错。改完先openclaw logs --follow看有没有报错再访问界面。6. 验证请求与成功结果配置完成后怎么确认真的通了分两步验证。第一步看日志。开一个终端跑openclaw logs --follow然后在 WebUI 里发一条消息比如「你好介绍一下你自己」。日志里应该能看到请求发出、模型返回的记录没有connection failed或invalid api key之类的报错。第二步直接看界面返回。如果模型配置正确聊天页会正常输出回复模型列表里只显示你勾选的那几个。我这边配好之后WebUI 里干干净净对话功能完全正常之前那些多余模型和报错全消失了。如果你想在配 OpenClaw 之前先确认通道本身没问题可以先去模型对话页 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 发一条测试消息通道通了再往 OpenClaw 里配能省掉排查到底是通道问题还是配置问题的麻烦。7. 本篇常见错误排查报错一EACCES: permission denied安装时没提权。用sudo env SHARP_IGNORE_GLOBAL_LIBVIPS1 npm install -g openclawlatest别漏掉env。报错二本地浏览器连接超时检查三件事SSH 服务是否启动、防火墙是否放行、是否用了 SSH 隧道加 localhost 访问。最稳的是隧道方案别直接怼 IP。报错三control ui requires device identityHTTP 加内网 IP 触发浏览器安全拦截。改用ssh -L 18789:localhost:18789 用户名虚拟机IP然后访问http://localhost:18789。报错四No API key found for provider anthropicOpenClaw 加载了未配置的内置模型。重新跑openclaw configure --section models只勾选自己配好的模型取消其余。报错五模型配置不生效别手改 JSON。用命令行配置或者用 TOML 骨架改完必须openclaw gateway restart。报错六端口冲突转发失败SSH 隧道里转发目标写成了虚拟机 IP。改成localhost即18789:localhost:18789。排查通用手段就是看实时日志openclaw logs --follow大部分问题日志里都有明确提示比瞎猜快得多。8. 后续接入与长期使用建议如果你只是偶尔用用按上面的步骤配好就能跑。但如果你打算把 OpenClaw 当成日常编码或跑 Agent 任务的平台建议把 Key 管理和模型切换固定下来。TaoToken 的 API Key 入口在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 需要换 Key 或者加权限时回这里操作。接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 参数细节对照着看能少踩坑。长期跑编码和 Agent 任务的话可以关注一下 Coding Plan 相关的入口 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 它更适合高频调用的场景。如果你用的是 Claude Code 这类工具Anthropic 兼容通道的说明在 https://taotoken.net/claudecode-anthropic?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 需要的时候可以对照配置。最后留一个我踩过的坑SSH 隧道那个终端窗口一关本地访问就断了。如果你嫌每次都要开窗口麻烦可以把它写成后台任务或者用 autossh 保持连接。但测试阶段手动开就行别一上来就搞复杂先把流程跑通再说。