上周心血来潮,想在自己的 Ubuntu 机器上跑个 OpenClaw 玩玩,结果这一折腾就是两小时。中间踩了无数坑,从 nvm 装不上、配置文件报错,到局域网死活连不上……现在终于跑通了,赶紧把过程记下来,希望能帮到和我一样的新手。
第一步:装 nvm 就卡住了
按照官方文档,第一行 curl -o- https://raw.githubusercontent.com/... 直接就超时了。国内这网络你懂的,raw.githubusercontent.com 经常抽风。
试了试网上说的用 jsDelivr 镜像,居然成功了:
curl -o- https://cdn.jsdelivr.net/gh/nvm-sh/nvm@v0.40.4/install.sh | bash
如果镜像也不行,其实还有个笨办法:在浏览器里打开那个地址,把脚本内容全选复制下来,在服务器上新建个 install.sh 贴进去,然后 bash install.sh 一样能装。我就是这么干的。
装完 nvm 记得 source ~/.bashrc 一下,然后用 nvm install 22 装 Node.js,这一步倒挺顺利。
第二步:装 OpenClaw 倒是一路绿灯
curl -fsSL https://openclaw.ai/install.sh | bash
这个命令跑完,openclaw --version 能输出版本号,说明装上了。这时候我天真地以为马上就能用了。
第三步:配置模型 API,踩了第一个坑
运行 openclaw onboard,让我选模型提供商。我用的是阿里云百炼,想着国内服务延迟低。结果填完 API Key 和 Base URL 后,一直报 401 错误。
查了半天才发现,百炼的 API Key 分地域!我创建 key 时选的是北京节点,但 Base URL 填成了新加坡的 dashscope-intl.aliyuncs.com。改成北京的 https://dashscope.aliyuncs.com/compatible-mode/v1 后立马好了。
教训: API Key 和 Base URL 的地域必须一致,北京对北京,新加坡对新加坡。
第四步:启动网关,又报错
配置完模型,运行 openclaw gateway start,结果告诉我 gateway.mode 没设置。这个 mode 是啥?文档里也没细说。
试了试 openclaw config set gateway.mode local,然后再重启网关,终于不报这个错了。但紧接着又提示配置有问题,让我运行 openclaw doctor --fix。
第五步:doctor --fix 也没完全搞定
doctor 倒是自动修了一些东西,但最后留了个 gateway.port 类型错误的提示。打开 ~/.openclaw/openclaw.json 一看,原来 "port": "18789" 写成了字符串,应该是数字。手动把引号去掉,保存,再重启网关,这次终于 openclaw status 显示网关 running 了。
第六步:想从笔记本访问,结果连不上
服务器上 curl http://127.0.0.1:18789 正常,但在同一局域网的笔记本上访问 http://192.168.1.100:18789 死活打不开。
先想到的是防火墙,检查了一下:
sudo ufw status
果然没开放 18789 端口,赶紧加上:
sudo ufw allow 18789/tcp
加了之后笔记本还是连不上。用 ss -tlnp | grep 18789 一看,服务只监听了 127.0.0.1,没监听 0.0.0.0。也就是说它只接受本机访问。
第七步:修改监听地址,又踩了新坑
按照直觉,我应该在配置文件里把 bind 改成 0.0.0.0。结果改完一重启网关,直接报错说 0.0.0.0 是 legacy 用法,现在要用 lan、loopback 这些模式。
查了下文档,原来新版 OpenClaw 引入了“绑定模式”的概念。改成 "bind": "lan" 后,网关重启,再用 ss 看,终于变成 0.0.0.0:18789 了。
第八步:CORS 和 token 的问题
以为万事大吉,结果笔记本浏览器访问时,控制台报错 origin not allowed。这又是浏览器的跨域保护。需要在配置里把笔记本访问的地址加到 allowedOrigins 里。
我的服务器 IP 是 192.168.1.100,所以在 gateway.controlUi.allowedOrigins 里加上 "http://192.168.1.100:18789"。重启后,不报 origin 了,但弹出了 unauthorized: gateway token missing。
原来 OpenClaw 默认需要设备认证,首次访问必须带 token。在服务器上运行 openclaw dashboard,会输出一个类似 http://127.0.0.1:18789/?token=abc123... 的地址。把 127.0.0.1 换成 192.168.1.100,在笔记本浏览器里打开,终于进去了!
第九步:为了省事,我把设备认证关了(风险自担)
每次都要找 token 挺麻烦的,反正是家里局域网,我就把两个安全选项关了:
openclaw config set gateway.controlUi.allowInsecureAuth true
openclaw config set gateway.controlUi.dangerouslyDisableDeviceAuth true
systemctl --user restart openclaw-gateway.service
这下直接在笔记本浏览器里输 http://192.168.1.100:18789 就能进,不需要 token 了。不过要提醒自己:如果家里有客人用 Wi-Fi,或者电脑中病毒,别人也能访问我的 OpenClaw,所以平时用完后最好再把这两个选项关掉。
总结
折腾下来,最深的体会是:OpenClaw 的安全机制设计得很严,虽然对新手不太友好,但确实是为了防止配置不当导致的安全问题。尤其是那个“绑定模式”的引入,一开始觉得多此一举,后来想想,强制用户明确服务暴露范围,其实是好事。
如果你也想部署,这里有几个小建议:
- 网络问题:提前准备好 nvm 安装脚本的镜像或离线包,省得卡在第一关。
- API Key 地域:务必和 Base URL 匹配,百炼用户特别留意。
- 配置文件:直接改 JSON 比用命令行快,但改完记得用
openclaw config get检查一下。 - 局域网访问:如果只是自己用,SSH 隧道是最简单安全的方法,不用折腾这些 CORS 和认证。命令只有一行:
ssh -L 18789:localhost:18789 用户名@服务器IP,然后在浏览器里打开http://localhost:18789就行。
最后,OpenClaw 跑起来后,真的挺有意思的。可以让它帮我总结网页、写邮件,还能接入飞书当机器人。虽然配置过程有点折腾,但看到它跑起来那一刻,还是很有成就感的。希望这篇记录能帮你少踩几个坑。