花了两周时间,我把这套《云上OpenClaw实操视频教程合集》完整的录制和整理了一遍。整件事的核心只有一句话:在一台云服务器上从零部署 OpenClaw,让它既能跑 ROS2 和 Gazebo 仿真,又能接入本地大模型,最后还要能从 Windows、手机等多端远程控制。很多朋友跟我说,自己电脑上装 OpenClaw 的时候折腾半天,要么是 WSL2 环境报“无法安全验证”,要么是仿真一开内存就爆,再要么是模型推理慢得没法忍。把这些环境问题扔到云上之后,反而清爽很多:机器规格可以随时升级,系统可以随时重置,多个设备共享同一个运行环境,录视频的时候也不会被风扇噪音打扰。这篇博文会尽量还原我在整个实操过程中的完整步骤,包括云服务器选型、Node.js 和 Ollama 的安装、ROS2 Humble 与 Gazebo 联动、Windows Companion 和 Termux 手机端接入,以及我在录制视频时实际踩过的坑。
如果你正准备接触 OpenClaw,或者已经在本地装到一半但没有搞定,这篇内容可以作为你跟着视频一起操作的图文版笔记。适合的人群主要是三波:想用低成本方式体验机器人仿真和智能体调度的开发者、需要在团队里共享一套 OpenClaw 环境的协作小组、以及和我一样要给学员或同事做操作演示的人。
1. 项目概况与云端部署思路
1.1 OpenClaw 是什么,这次教程解决什么问题
OpenClaw 目前在开源社区里热度不低,它本质上是一个将智能体控制、技能调度和机器人中间件整合到一起的框架。通俗一点说,你可以把它理解成一个“机器人管家的大脑”:上面可以挂 ROS2 来接收传感器和运动指令,可以挂 Gazebo 做虚拟仿真,可以挂 Ollama 这类本地模型来做语义理解和决策,再通过 skill 把一连串动作组合成一个可复用的技能。
我这次选择“云上”而不是“本地”录制,核心原因是 OpenClaw 的运行链路比很多人想象中要长。你以为只是跑一个进程,实际上它可能同时要拉起 ROS2 节点、仿真环境、模型推理服务、以及一个给 Web 面板或 Companion 用的服务端口。这些服务叠加在一起,8G 内存的本地笔记本就有点吃力了,更别提在视频演示过程中一旦卡顿,整个操作节奏都会被打乱。云服务器就像给这套框架提供了一个干净的“宿舍”,系统不合适了直接重装,内存不够了关机加配置,不用动自己电脑上的任何东西。
这套视频合集在规划时拆成了六个部分:云环境准备、依赖安装、OpenClaw 本体部署、Ollama 模型接入、ROS2 和 Gazebo 仿真联动、多端远程控制。每一部分都留了一个可验证的里程碑,比如“能打开 Web 面板”“能从手机发一条指令让 Gazebo 里的机械臂动起来”。这样看视频的人不会觉得每个步骤是散的,而是知道当前做这一步到底是为了什么。
1.2 视频合集的整体规划与学习路径
我深知新手打开一个开源项目时最容易出现的状态:跟着命令行一步一步敲,但完全不知道自己身处哪个环节。所以我在视频里会把每个阶段的输入和输出讲清楚,而在后续章节的实操中也会沿用同样的路径。
- 第一阶段:拿到一台干净的 Ubuntu 云服务器,配置 SSH 和基础依赖。
- 第二阶段:安装 Node.js,拉取 OpenClaw 仓库,跑通配置和启动。
- 第三阶段:接入 Ollama 本地推理,让 OpenClaw 具备“对话和决策”能力。
- 第四阶段:安装 ROS2 Humble 与 Gazebo,通过 ROS2 话题把仿真环境接进 OpenClaw。
- 第五阶段:配置 Windows Companion、手机 Termux,实现多端控制。
这个顺序是我反复调整过的。最初我想把 ROS2 放在 OpenClaw 本体之前,结果发现很多学员在还没搞懂 OpenClaw 配置的情况下就去装一堆机器人中间件,遇到问题根本分不清是框架的问题还是 ROS2 的问题。现在调整为“先跑通框架,再谈仿真联动”,实际学习效率高很多。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与基础依赖安装
2.1 云服务器选型:别只看配置,还要看带宽和系统
很多人以为“上云”就是把电脑配置堆高一点,其实云服务器选型有几个更容易被忽略的地方。我录制这套视频时用的是 4 核 8G 内存的规格,系统选择 Ubuntu 22.04 LTS。这个选择不是拍脑袋定的:ROS2 Humble 在 Ubuntu 22.04 上有最成熟的二进制包支持,OpenClaw 社区里最常见的部署环境也是这一组合。
下表是我根据自己的使用场景整理的参考规格:
| 使用场景 | CPU | 内存 | 系统盘 | 带宽 | 备注 |
|---|---|---|---|---|---|
| 只跑 OpenClaw 本体和控制面板 | 2 核 | 4G | 40G | 5Mbps | 勉强能用,模型只能用小参数 |
| 跑 OpenClaw + Ollama 小模型 | 4 核 | 8G | 60G | 5Mbps | 推荐入门配置,qwen2.5:7b 可以跑 |
| 跑 OpenClaw + ROS2 + Gazebo 仿真 | 4 核 | 16G | 80G | 10Mbps | 需要同时开多个 ROS2 节点时用 |
| 跑大模型 + 完整仿真 | 8 核以上 | 32G 以上 | 100G+ | 10Mbps以上 | 最好有独立 GPU 或考虑 GPU 实例 |
录视频时我用的 4 核 8G 版本,内存确实有些紧张,后面专门加了一个 8G 的 swap 分区才好一些。所以你千万不要只看 CPU,内存和 swap 对稳定性影响很大。
网络方面,尽量选择离你经常访问区域较近的可用区。这是为了降低 SSH 操作时的延迟感。真正常用的就是输入命令和看反馈,如果延时超过 80ms,操作会明显变肉,录视频时每一秒都很难受。带宽不一定非要很高,因为 Web 面板传输的大多是文本和状态数据,真正占带宽的是将来你要传 Gazebo 的视频流,那是另一个话题。
2.2 WSL2 与 Windows Companion 的坑
我注意到最近很多人搜“OpenClaw 无法安全验证”和“请在 PowerShell 中运行 wsl --status”。这个错误我录制时也专门复现过。现象往往发生在 Windows 环境:当你从 Windows 端去连接云端 OpenClaw,或者想在本地用 WSL2 拉一套调试环境时,系统提示当前环境无法通过安全验证,并建议去 PowerShell 里检查 WSL 状态。
这个问题的根源,大多不是 OpenClaw 本身,而是 WSL2 没就绪。WSL2 是 Windows 下跑 Linux 子系统的关键组件,ROS2 和很多 OpenClaw 的依赖在 Windows 原生下装不起来,需要靠 WSL2 提供 Linux 运行环境。当 Hyper-V 虚拟化没开启,或者 WSL 内核版本太旧,就会出现类似的安全验证错误。
解决方法很固定,你就在 PowerShell(管理员模式)里先看状态:
powershell复制wsl --status
如果你看到的是默认版本为 1,或者根本没有已安装的内核,就继续执行:
powershell复制wsl --set-default-version 2
wsl --install
执行完重启 Windows,再重新打开终端确认状态。这一步做完,很多报错会自己消失。如果你只是做云端部署,其实 Windows 本地不一定非要装完整 WSL2,但如果你的 Windows Companion 客户端的连接过程依赖这套底层环境,那还是提前装好,别等到报错再补。
2.3 Node.js 与 OpenClaw 的关系
OpenClaw 的 CLI 和客户端大部分基于 Node.js,所以安装 OpenClaw 之前必须先有 Node.js 运行环境。这也是最近很多人搜“node.js官网下载openclaw”的原因,本质上是要去 Node.js 官网下载安装包。
我的建议是不要直接在官网下载 deb 包,除非你特别清楚自己在干什么。我习惯用 nvm 来装 Node.js,因为后面换版本很方便。在 Ubuntu 云服务器上可以这样:
bash复制curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install 20
nvm alias default 20
node -v
npm -v
我在视频里用的 Node.js 20 LTS,这是一个非常稳妥的选择。如果你的云服务器上已经装了旧版 Node.js,建议至少到 18 以上,否则有些依赖安装时会直接报错。装完 Node.js 之后不要急着高兴,先顺手把 build 工具链也装齐,不然后面 npm 编译原生模块会缺 python 和 make:
bash复制sudo apt update
sudo apt install -y git curl build-essential python3
2.4 给云服务器加交换分区
这个问题我觉得应该在环境准备部分说,因为它确实太重要了。OpenClaw 启动后,再叠加 Ollama 加载模型,4G 内存根本不够用,8G 内存也可能会在模型加载瞬间卡顿。在视频里,我专门演示了怎么添加 swap,其实命令就那么几行:
bash复制sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
加了 swap 之后,系统不会因为内存瞬间不够而直接被杀进程。需要注意 swap 不等于内存,它只是兜底,不能指望 swap 解决大模型推理的性能问题。但至少它能让你的 OpenClaw 服务在低配云服务器上稳定运行,不至于录到一半服务突然消失。
3. 云服务器上安装 OpenClaw 的完整流程
3.1 从 SSH 登录到代码克隆,别用 root 一条路走到黑
很多培训机构喜欢直接让你用 root 登录服务器然后开始敲命令,但我实际操作时发现这非常不利于维护。我建议第一步就创建一个专门用户,并把 SSH 公钥配置好。这样哪怕将来 OpenClaw 出现问题,也不至于把整个系统搞乱。
bash复制ssh root@你的服务器IP
adduser deploy
usermod -aG sudo deploy
su - deploy
mkdir -p ~/.ssh
echo "你的公钥内容" >> ~/.ssh/authorized_keys
后续所有操作都用 deploy 用户完成。拿到干净的 Ubuntu 环境后,先安装 Git 和基础工具,然后克隆 OpenClaw 项目仓库:
bash复制sudo apt update
sudo apt install -y git curl
git clone https://github.com/你的OpenClaw仓库地址.git
cd OpenClaw
npm install
这里要特别说明:由于 OpenClaw 的版本迭代很快,具体仓库地址以你视频发布时对应的版本为准。我录制时用的是一套社区稳定版,npm install 大概会拉几百个依赖包,耗时几分钟。如果中间报错,多半是 Node.js 版本太低,或者是网络源问题。用 nvm 切到 Node.js 20 之后基本都能解决。
3.2 配置文件:模型、端口和技能
OpenClaw 装上以后,真正让人头疼的不是安装,而是配置。它的配置文件一般在用户目录下的 .openclaw/ 文件夹里,核心文件是 config.yaml 或者 .env,具体取决于你下载的版本。我习惯把关键参数集中放在 config.yaml,这样后续改模型、改端口都很方便。
yaml复制server:
host: 0.0.0.0
port: 8080
model:
backend: ollama
url: http://127.0.0.1:11434
name: qwen2.5:7b
ros2:
enabled: true
workspace: ~/ros2_ws
skill:
directory: ~/.openclaw/skills
重点解释几个字段:
server.host设为0.0.0.0,是为了让局域网或公网其他设备能访问面板。如果只在本机访问,可以改成 127.0.0.1。model.backend控制 OpenClaw 到底用哪一路模型接口。你既可以选择 Ollama,也可以使用云 API,这是完全可配置的。ros2.enabled决定是否启用 ROS2 能力。如果你前期只做对话测试,这里可以先关闭,等环境装好了再打开。skill.directory是 OpenClaw 从哪个目录加载技能文件。这个目录非常重要,后面机器人仿真联动的自定义技能都会放进来。
配置好之后,可以先启动一次看看日志。如果启动成功,Web 面板可以直接访问;如果起不来,先把 ros2.enabled 改成 false,排除是 ROS2 环境导致的问题。
3.3 用 Ollama 给 OpenClaw 提供一个本地推理后端
OpenClaw 本身并不包含模型推理能力,它需要接一个模型服务。很多人问“OpenClaw 只能用接入 API 的方式使用算力吗”,当然不是。用 Ollama 部署一个本地模型是完全可行的,而且特别适合云服务器上没有独立 GPU 但内存比较大的场景。
安装 Ollama 就一行命令:
bash复制curl -fsSL https://ollama.com/install.sh | sh
安装完成后,先拉一个不大不小的模型。我推荐从 qwen2.5:7b 开始,因为它对中文理解好,显存和内存压力也比动辄几十B的模型小很多。
bash复制ollama pull qwen2.5:7b
ollama serve
默认情况下,Ollama 会监听 11434 端口。你可以在另一终端窗口验证一下:
bash复制curl http://127.0.0.1:11434/api/tags
如果返回一串 JSON,说明 Ollama 已经就绪。此时把 OpenClaw 的 model.backend 配成 ollama,再填上 http://127.0.0.1:11434,就能让 OpenClaw 使用本地算力来完成对话和决策。
算力问题我多说两句。如果你本地的 CPU 和内存扛得住,Ollama 完全免费,适合学习和开发调试;如果你追求更高推理速度,可以考虑后接 GPU 实例,或者在云平台上直接开带 GPU 的节点。OpenClaw 的设计本来就把模型层做成了可替换的接口,所以后期从 Ollama 切到云端 API 也就改几行配置的事。
3.4 ROS2 Humble 和 Gazebo 仿真联动
OpenClaw 和 ROS2 的结合,才是很多人对这项目感兴趣的原因。ROS2 负责机器人系统的通信,Gazebo 负责物理仿真,OpenClaw 则把“自然语言指令”翻译成 ROS2 的 action 或 topic 消息。为了把这部分演示清楚,我选了 ROS2 Humble,和 Ubuntu 22.04 是长期支持组合。
安装 ROS2 Humble 的桌面版是这一步的主流选择,因为 Gazebo 相关的插件基本包含在套件里。具体命令如下:
bash复制sudo apt install -y ros-humble-desktop python3-rosdep python3-colcon-common-extensions
sudo rosdep init
rosdep update
安装完成后,先把环境变量加进 shell 配置文件,避免每次开终端都要手动 source:
bash复制echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc
为了能让 OpenClaw 控制 Gazebo 里的机器人,我通常会额外安装 gazebo-ros 相关包,然后在 OpenClaw 的技能目录里写一个简单的技能文件。比如创建一个 pick_place.yaml,内容大致是:当用户说“把方块放到指定区域”,OpenClaw 就会调用 ROS2 的 action client,向 Gazebo 中的机械臂模型发送目标位姿。
这种联动的写法在每版 OpenClaw 里略有不同,但整体思路都是:OpenClaw 收到自然语言指令,解析成技能名和参数,然后通过 ROS2 中间件把指令发到仿真环境。视频教程里我会专门把这三层关系画出来,因为一旦理解了“OpenClaw 只负责决策,ROS2 只负责通信,Gazebo 只负责物理仿真”,后面排查问题就非常快。
4. 多端访问与远程管理实操
4.1 Windows Companion 配置方法
很多人拿着 OpenClaw 的 Windows 客户端不知道填什么。这里我建议把它当做一个“远程遥控器”,而不是把整套 OpenClaw 全部装到 Windows。Companion 只需要知道云服务器的地址和端口,就能通过 WebSocket 或 HTTP 和服务端通信。
在 Windows 客户端配置界面里,你需要填三样东西:
- 服务地址:
ws://你的服务器IP:8080 - 身份密钥:通常来自服务端配置里的 token
- 是否允许不安全连接:如果是局域网内测试或刚买完云服务器忙着跑通,可以先打开跳过证书校验
如果你配置完后提示“OpenClaw 无法安全验证”之类的报错,不要急着怀疑服务端配置。先在 PowerShell 里按前面说的检查 WSL2 状态,再检查服务端是否真的监听在 0.0.0.0 上:
bash复制ss -lntp | grep 8080
如果监听地址是 127.0.0.1,说明配置文件的 server.host 没有生效,改成 0.0.0.0 后重启 OpenClaw。如果监听没问题还是连不上,那就可能是云厂商控制台的安全组没有放行 8080 端口,这个也需要检查。
4.2 用 Termux 把手机变成移动控制台
安卓手机部署 OpenClaw 这个话题,我录制时也专门做了一期。严格来说,手机跑完整 OpenClaw 服务不太现实,尤其是 ROS2 和 Gazebo 仿真,性能根本不够。更实用的方式是让手机通过 Termux 充当远程客户端,而不是代替服务器。
Termux 安装起来不复杂,在手机上装好应用后,打开终端执行:
bash复制pkg update
pkg install -y nodejs git openssh
然后用 git clone 把 OpenClaw 的轻量客户端仓库拉下来,配置好服务端地址和密钥,就能用手机向云上 OpenClaw 发送指令。如果你不希望折腾客户端,直接在 Termux 里用 SSH 登录云服务器是最快的方式:
bash复制ssh deploy@服务器IP
登录以后,你能看到 OpenClaw 的日志,执行 openclaw-cli 命令,甚至手动调用技能。手机端的意义在于“随时能看一眼系统状态”,真正跑仿真和训练模型的事情还是交给云服务器。录视频时我会特意演示手机发消息、云端执行、Gazebo 里机械臂响应,这个链路会让人非常有成就感。
4.3 用 SSH 隧道安全地暴露 Web 面板
很多第一次接触云服务器的朋友喜欢直接把 8080 端口安全组全部放开,图省事。但公网环境下裸奔一个未加密的管理面板,是一件非常危险的事。我自己录视频时采用的方式是用 SSH 隧道把远程端口映射到本地,这样浏览器访问的是 localhost:8080,实际上是经过加密通道连到云服务器的。
本地执行:
bash复制ssh -N -L 8080:127.0.0.1:8080 deploy@服务器IP
然后打开本地浏览器访问 http://localhost:8080 即可。这个方式的好处是不需要在云服务器的安全组里暴露 8080 端口,只需要保留 SSH 的 22 端口就够了。对于没有固定公网 IP 的家庭用户,这个思路也完全适用。
我在视频里还演示了另一种方式:云服务器本身用防火墙只开放 22 端口,所有内部服务都监听在 127.0.0.1 上,再通过 SSH 隧道访问。这个方法相当于把所有敏感端口全部藏了起来,是这套合集里我最推荐的安全姿势。
5. 典型问题与排查记录
5.1 提示“无法安全验证”且 WSL 状态异常怎么办
这个报错出现频率非常高,所以我把它单独列为最常见的坑。报错文案里往往会带一句类似“请在 PowerShell 中运行 wsl --status”的提示。你在 Windows 上打开 PowerShell(管理员),先执行:
powershell复制wsl --status
正常的输出会显示“默认版本:2”,并且有内核信息。如果显示“未安装”,或者默认版本是 1,就按下面的顺序处理:
powershell复制wsl --set-default-version 2
wsl --update
如果执行 wsl --update 提示功能不支持,那基本上是因为没有开启“适用于 Linux 的 Windows 子系统”这个 Windows 功能。到“控制面板 - 程序和功能 - 启用或关闭 Windows 功能”里勾选“虚拟机平台”和“适用于 Linux 的 Windows 子系统”,重启后重新安装 WSL2。
5.2 ROS2 环境变量不生效
很多人在云服务器上装完 ROS2,然后执行 ros2 topic list,结果提示找不到命令。这几乎都是因为没有 source 环境变量。Linux 的当前 Shell 会话不会自动带上 ROS2 路径,所以需要在 ~/.bashrc 里加上:
bash复制source /opt/ros/humble/setup.bash
加完以后执行 source ~/.bashrc 或者重新登录。如果是在脚本里调用 ros2,脚本可能需要先 source 一次。另一个高频问题是 rosdep 提示权限不足,出现这种情况多半是因为你用了 sudo rosdep init,后面 rosdep update 却用了普通用户。保持交钥匙操作的话,建议在同一用户下执行,并确保该用户有 sudo 权限。
5.3 Ollama 连不上或模型推理很慢
我在录视频时遇到最多的其实是 Ollama 模型加载很慢。现象是:OpenClaw 界面能打开,但对话要等很久才回复。排查第一步是确认本机 Ollama 服务是否正常:
bash复制curl http://127.0.0.1:11434/api/tags
如果返回为空或连接失败,先确认 Ollama 是否启动。如果你把 Ollama 和 OpenClaw 都跑在同一台云服务器上,可以用 ollama ps 查看当前模型是否已加载。模型被加载过一次之后再次推理会快很多,所以如果服务运行了一段时间没响应,可能是模型被卸载了。解决办法是在 OpenClaw 的配置里设置一个预热请求,让模型常驻内存,或者把模型换成更小的参数版本。
内存不足是另一个大问题。如果你运行 free -h 看到内存几乎用满,而且 swap 也在持续增长,那就要考虑升级内存或换小模型。我自己录制时从 7B 模型降到 3B 模型之后,整个链路明显流畅很多。
5.4 Termux 或 Windows 客户端连接超时
多端接入时最典型的场景是:客户端配置都正确,但就是连不上。先别急着改配置,按我下面的顺序来查:
bash复制# 服务端查看端口是否监听
ss -lntp | grep 8080
# 查看防火墙
sudo ufw status
# 本地测试远程端口
curl http://127.0.0.1:8080
如果服务端口监听在 0.0.0.0,但外部访问不了,基本可以确定是云厂商的安全组规则没有放行对应端口。这时去云控制台把 8080 端口加入入方向规则。如果不想开放公网端口,就用前面提到的 SSH 隧道方式,本地转发过去。
Termux 在安卓上连接超时还有一个特有问题:Termux 的后台进程容易被系统杀死。所以如果用 Termux 做长时间监听,最好在系统设置里允许 Termux 后台运行,否则锁屏后连接也会断。
6. 录这套合集时踩过的坑与建议
视频挂出去之后,很多留言问我为什么考虑这么细。其实不是因为我一开始就很懂,而是在录制的过程中真的踩了好几次坑。最深刻的一次是录到模型接入部分,OpenClaw 突然无法响应,我整整查了一个小时,最后发现是 swap 没配,内存耗尽后进程被系统杀掉了。从那次以后,我每一台新服务器开箱都会先检查 free -h,再决定要不要补 swap。
还有一个很实用的建议:每次在云服务器上跑了重要的环境变更,就顺手打一个快照或镜像。录视频过程中要反复改配置,改坏是常事。有了快照,出问题三分钟就能回滚,不用从头装 ROS2,能省下大把时间。这是我个人强烈建议的内容,哪怕视频里不展示,你自己做实验时也要养成这个习惯。
录制过程中,我还会刻意把 API Key、服务器 IP、登录密码等敏感信息从画面上避开,因为一旦视频发出来,这些信息就收不回来了。如果一定要展示,建议用假的或已注销的测试凭证。另外,OpenClaw 的版本更新非常快,有些命令后面可能会变,但只要理解了“框架负责决策、模型负责推理、ROS2 负责通信、Gazebo 负责仿真”这层架构,换版本后无非是换个写法,思路不会过时。
把这套环境跑通之后,你还可以继续往下扩展,比如把多模态模型接进来,让 OpenClaw 能“看见”Gazebo 里摄像头的画面;或者把技能库越做越丰富,让机器人完成更复杂的连续任务。这些内容我后续也会加进视频合集里,但基础一定是先把今天这篇里的部署链路稳稳跑通。
