我第一次把 OpenClaw 部署到一台 Ubuntu 22.04 的小主机上,跑通的那一刻,说实话有点意外——因为整个过程并没有网上一些文章写的那么玄乎,真正卡住我的反而是几个藏在细节里的环境问题,比如 Node.js 版本太低、Ollama 进程没监听对端口。这篇教程我会完全按我实际操作的顺序来,把每一步为什么要这么做、不做会踩什么坑都说明白。
如果你是第一次接触这类 AI Agent 框架,不需要被“部署”两个字吓住。简单理解,OpenClaw 是一个提供“大脑接线板”角色的服务端程序:它负责跟各类大模型对话、处理请求、决定是否调用外部工具,最后把任务结果返回给你。部署它的目的,就是让你在本机或内网服务器上拥有一个可以随时调用、不依赖特定云厂商聊天网页的 AI 代理能力。后续想切换本地模型和 API 模型,也只需要改配置重启。
这篇教程默认你的机器已经装好了 Ubuntu 22.04,可以是物理机、虚拟机或者 WSL2 环境里的 Ubuntu,操作逻辑基本一致。我会把环境准备、源码安装、模型接入、Skill 扩展和常见排错全部串起来讲,保证你照着走完能跑起来,而不是只给一堆不知道干嘛的命令。
1. 部署前必知:OpenClaw 到底解决什么问题
1.1 它和普通聊天机器人的本质区别
在动手之前,先花两分钟想清楚你要部署的是什么。OpenClaw 和以网页聊天为主的 AI 工具有本质差别:它把“对话”和“行动”做成了两条相互独立的链路。你向它提需求,它负责拆解需求,决定调用哪个模型、执行哪些工具、按什么顺序把结果拼成回复。也就是说,它是一个能自主决策的任务协调器,而不只是一个生成文本的接口。
举个例子,我让它“把某个目录下的 Markdown 摘要整理成周报,并保存成文件”,它不会只输出一段文字,而是会去调用文件读取、文本处理、文件写入这三类工具,再把结果落盘。这个能力的核心在于开发者或使用者可以扩展 Agent 的“工具库”,也就是后面会讲到的 Skill 机制。对于新手来说,理解这一点很重要:你部署的不是一个聊天窗,而是一个可以“替你干活”的执行框架。
1.2 部署前必须想清楚的三个问题
在敲第一条命令之前,我建议你先回答三个问题,否则很容易装到一半放弃。
第一,模型从哪来?OpenClaw 本身不包含大模型,它更像一辆留好了发动机舱的车,引擎要你自己配。可选方案基本是两条线:一是接入本地推理服务,比如 Ollama、vLLM 这类,模型权重完全在你自己机器上,数据不出内网;二是走云端 API,按量付费,日常使用比较省心。你不需要现在就定死,因为配置都是可以随时改的,但心里要有数。
第二,算力够不够?如果你有 NVIDIA 显卡,本地推理体验会好很多;如果只有 CPU,建议优先选 3B、7B 量级的小模型,虽然生成速度慢一点,但跑通流程完全足够。这一步决定了你初始化配置后能不能顺利跑起测试对话。
第三,部署在哪里?是常驻的 Linux 服务器,还是日常用的桌面机?如果是 WSL2 环境,要注意 Ubuntu 的版本和 Windows 侧的资源配置,尤其是内存分配,默认给少了可能导致服务启动后频繁卡死。后面我会专门说。
2. Ubuntu 22.04 基础环境准备
2.1 硬件需求的务实建议
很多教程张口就是“建议 64GB 内存、8 张显卡”,这种配置对新手来说基本没有参考价值。我实际测下来,一台 4 核 8GB 内存的机器,跑 OpenClaw 本体加上一个 3B 量化模型,日常对话和简单工具调用是能用的,只是首字生成会慢个几秒。如果你打算跑 7B 或更大的模型,内存建议 16GB 以上,显卡显存最好不低于 8GB。
磁盘方面,OpenClaw 本体加依赖占的空间不大,给 10GB 就绰绰有余,但如果你还要拉 Ollama 模型,就得按模型大小预留空间了。一个 7B 的量化模型通常要 4GB 到 6GB,十几个模型下来就是几十 GB。我建议系统盘预留至少 50GB,省得到时候为了挪模型文件头疼。
2.2 安装 Node.js、Git 和构建工具链
OpenClaw 是基于 Node.js 生态的,所以 Node 版本直接决定你能不能装得上依赖。Ubuntu 22.04 系统自带的 Node.js 版本往往偏老,我建议直接用 NodeSource 源装 Node.js 20 LTS,这是目前兼容性和稳定性都比较好的版本。
先更新系统软件包列表,然后一次性把工具装齐:
sudo apt update sudo apt install -y git curl build-essential接着安装 Node.js 20:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install -y nodejs装完确认一下版本,node 版本要是 v20 以上,npm 版本正常显示即可:
node -v npm -v这里有个容易踩的坑:安装完成后当前终端的 PATH 可能没刷新,直接输入 node -v 会提示找不到命令。重新打开一个终端窗口,或者执行 source /etc/profile 刷新一下环境变量,一般就能解决。
2.3 网络与防火墙设置
Ubuntu 22.04 默认没开几个端口,但 OpenClaw 作为服务端要提供给客户端访问,端口开放是必须的。我用的端口是 3000,前端和 API 都走这个口。如果你的机器有 UFW 防火墙,记得放行:
sudo ufw allow 3000/tcp sudo ufw status如果你是在内网服务器部署,还要确认服务器安全组和物理防火墙规则,别只开完 UFW 就不管了。我见过太多人 UFW 开着没用,最后发现是云平台安全组没放行,请求一直超时。
另外,如果你打算接 Ollama 本地模型,还需要留意 Ollama 的默认端口 11434。OpenClaw 要访问它,至少需要确保 127.0.0.1:11434 能通,如果是跨机器访问,就得放行对应的网络端口。我自己为了方便排查,习惯把这两个端口的监听状态打印出来:
ss -tlnp | grep -E '3000|11434'看到 LISTEN 状态且 IP 地址符合预期,才说明端口层面没问题。
3. 核心部署流程:从源码安装 OpenClaw 到跑通服务
3.1 克隆项目与安装依赖
环境准备好了以后,开始拉源码。这里建议不要下载压缩包,直接用 git clone,后面想要更新代码或者切换分支会方便很多。我用的是官方仓库默认分支,具体地址以你实际获取到的项目地址为准:
git clone <openclaw 官方仓库地址> cd openclaw进入项目目录后,先看看里面的 package.json,确认需要的 Node 版本范围,再安装依赖。OpenClaw 的依赖量不小,npm install 可能要等几分钟,耐心等它跑完。如果是国内网络环境,建议先切换 npm 镜像,不然很容易卡在某些包上下载超时:
npm config set registry https://registry.npmmirror.com npm install安装过程中如果报 node-gyp 相关的编译错误,多半是缺少 Python 或 C++ 编译工具。执行之前那步 build-essential 的安装就能解决大部分问题。还有个更隐蔽的坑:npm 缓存目录权限不对会导致安装静默失败,此时可以清理一下缓存再重试:
npm cache clean --force npm install3.2 配置文件里的关键参数
依赖安装完成后,项目根目录一般会有一个 .env.example 之类的模板文件,拷贝成 .env 再编辑:
cp .env.example .env我用 vim 打开的配置,里面最核心的就这几项:
# 服务监听端口 PORT=3000 # 模型接入方式:本地 ollama 或云端 API MODEL_PROVIDER=ollama # Ollama 服务地址 OLLAMA_BASE_URL=http://127.0.0.1:11434 # 默认使用的大语言模型 MODEL_NAME=qwen2.5:3b # 如果需要接入云端 API,配置对应的 Key 和 Endpoint # OPENAI_API_KEY=sk-xxxx # OPENAI_BASE_URL=https://api.example.com/v1这里我说说为什么选了几项这么配。PORT 用 3000,是因为它是 Node 生态里最常见的默认端口,后续接 Nginx 反代也方便。MODEL_PROVIDER 先选 ollama,是因为对于新手来说,本地跑模型能避免很多 API 鉴权和网络问题,先把链路打通再说。
OLLAMA_BASE_URL 这个东西,我遇到过不少人照抄 127.0.0.1 但是代理没起,或者写成了 localhost 导致 IPv6 解析异常。如果你 Ollama 跑在另一台机器上,这里一定要改成实际地址,比如 http://192.168.1.10:11434,否则怎么调都不通。
3.3 启动服务与健康检查
配置改完之后,就是见证奇迹的时刻。我用的是 npm run dev 启动开发模式,它会监听文件变化,适合前期修改配置后频繁重启;正式使用则建议 npm start 或者用 pm2 守护进程。如果你是 ssh 登录服务器部署,千万别直接用 npm start 挂着,终端一关服务就没了。用 nohup 或者 pm2 都行,我习惯用 pm2:
npm install -g pm2 pm2 start npm --name openclaw -- start pm2 save启动后先看日志,确认服务确实跑起来了:
pm2 logs openclaw看到类似 “server listening on port 3000” 的输出后,再用 curl 验证接口是否响应:
curl http://127.0.0.1:3000/health如果返回 JSON 格式的状态信息,说明服务本身没问题。接下来就可以进入模型接入环节,这部分也是新手翻车的高发区。
4. 大模型接入:本地推理和 API 两条路怎么配
4.1 用 Ollama 接入 Qwen、DeepSeek 等本地模型
OpenClaw 本身只起调度作用,真正“会说话”的是背后的大模型。本地推理我用的是 Ollama,安装脚本一句命令搞定:
curl -fsSL https://ollama.com/install.sh | sh启动 Ollama 服务后,拉一个模型试试。我这里以通义千问的 qwen2.5:3b 为例,这个尺寸对 CPU 机器比较友好,新手入门不容易被速度劝退:
systemctl start ollama ollama pull qwen2.5:3b拉完后确认模型已经在本地列表里:
ollama list然后别急着去 OpenClaw 里发消息,先在命令行里试一下模型本身能不能正常回复:
ollama run qwen2.5:3b "你好,请简单介绍一下你自己"能正常回复,再回到 OpenClaw 配置里确认 MODEL_NAME 要和 ollama list 里的名字完全一致。比如有些版本显示的是 qwen2.5:3b,有些是 qwen2.5:3b-instruct-q4_K_M,名字对不上就会报模型不存在。
这里有个我在实际使用中很在意的点:如果 Ollama 和 OpenClaw 在同一台机器上,OLLAMA_HOST 保持默认的 127.0.0.1:11434 就好;如果你是 Windows 上用 WSL2 跑 Ubuntu,里面起的 Ollama,外面浏览器访问不到,那就要检查 WSL2 的端口转发和防火墙,别把时间花在反复改 OpenClaw 配置上。
4.2 走 API 方式接入云端大模型
本地模型适合折腾和离线场景,但如果你要的是高智商模型处理复杂任务,API 方式更省心。OpenClaw 兼容 OpenAI 格式的 API 接口,基本上你只要在 .env 里把 MODEL_PROVIDER 改成 openai,填上 Base URL 和 Key 就能用。
以我接 DeepSeek 的实践为例:
MODEL_PROVIDER=openai OPENAI_BASE_URL=https://api.deepseek.com/v1 OPENAI_API_KEY=sk-你的密钥 MODEL_NAME=deepseek-chat注意这里有个关键细节:Base URL 一定不能漏掉末尾的 /v1。有些 API 服务商的地址是带 /v1 的,有些要你自己拼,填错会直接报 404 或者认证失败。我第一次接的时候少写了个 /v1,排查了半天才发现。
API 方式的好处是不占用本地算力,模型更新也及时。坏处是每次调用都要消耗额度,如果 OpenClaw 被某个循环任务卡住了,token 会像流水一样哗啦啦地花出去。所以我建议你在配置文件里看有没有调用限额的选项,或者在外部做好监控,别等月底账单出来才肉疼。
4.3 Skill 扩展机制:给代理装上“手脚”
模型接入只能让 OpenClaw 会“说话”,要让它会“干活”,就得靠 Skill。Skill 是 OpenClaw 里非常核心的机制,相当于给代理装上了手和脚,让它能真正操作外部环境。安装和开发 Skill 的一般流程是:在项目指定的 skills 目录下新建一个子目录,每个 Skill 包含描述文件、元信息和执行脚本。
我以我自己写的一个“定时检查磁盘空间并推送报告”的 Skill 为例,它的目录结构长这样:
skills/ └── disk-space-monitor/ ├── SKILL.md ├── skill.yaml └── scripts/ └── check_disk.sh其中 skill.yaml 里声明技能名字、描述和入参,SKILL.md 告诉 OpenClaw 什么时候该调用这个技能,scripts 下面放真正的执行脚本。SKILL.md 别写得太含糊,AI Agent 会根据你的文字描述来决定是否触发这个 Skill,描述越精确,触发判断越准。
我当时踩过一个很典型的坑:描述里写“检查磁盘”,结果 OpenClaw 在聊到文件备份时也把 Skill 调起来,白跑了一堆没用的命令。后来我改成“检查 / 分区磁盘空间并在超过 80% 时输出告警”,触发准确率一下就上来了。这说明给 Agent 写工具说明,跟给同事写交接文档是一个道理,信息粒度越清晰越好。
5. 常见坑与排错实录
5.1 高频问题速查表
下面的表格是我在部署过程中真实遇到过的几个典型问题,按出现频率排序,并附上解决方向,可以当索引用:
| 症状 | 可能原因 | 解决思路 |
|---|---|---|
| npm install 报 node-gyp 编译失败 | 缺少编译工具链或 Python | 安装 build-essential,确认 python3 可用 |
| 服务启动后访问 3000 端口超时 | 防火墙或安全组未放行 | 检查 UFW、云平台安全组,用 ss -tlnp 查看监听地址 |
| 对话时提示 model not found | 配置里的模型名与本地不一致 | 用 ollama list 核对准确名称,注意量化后缀 |
| 接入 API 后报 401 或 404 | Base URL 少了 /v1 或者密钥错误 | 检查 Base URL 结尾路径,确认密钥没有多余空格 |
| 回答速度特别慢,CPU 飙满 | CPU 推理小模型也吃力 | 换更小量化模型,或者调低生成参数长度 |
| WSL2 里部署后宿主机无法访问 | WSL2 网络转发或防火墙问题 | 检查 Windows 防火墙,确认服务监听 0.0.0.0 而非仅 127.0.0.1 |
这个表覆盖了我自己遇到的八成问题。剩下的两成,基本都跟环境有关,比如内存不够导致进程被杀,或者 npm 镜像源不稳定导致依赖装不全。遇到这种问题,先看日志,不要瞎猜,pm2 logs 和 journalctl 都能给出很明确的线索。
5.2 排错思路与高效部署小技巧
排错这件事,最重要的不是背命令,而是建立一套顺序化的排查思路。我的习惯是:先看服务活没活,再看端口通没通,接着看模型在不在,最后看配置对不对。这个顺序能帮你快速缩小问题范围,而不是东翻翻西找找。
多提几个我试下来很顺手的技巧:
第一,日志一定要结构化地看。pm2 logs openclaw --lines 100 可以看到最近 100 行日志。报错信息里一旦出现 ECONNREFUSED,十有八九是对接的服务没启动或者地址不对;出现 ETIMEDOUT,再往网络层查。
第二,改完配置务必重启服务。OpenClaw 不少配置是启动时加载的,改 .env 后不重启等于白改。而且重启后一定要看一眼日志开头,确认它加载的确实是改动后的值。
第三,磁盘空间要留够。Node 生态的项目日志很容易膨胀,再加上模型文件,磁盘满了以后服务会出现各种奇怪现象,比如写文件失败、缓存异常。我吃过一次亏,后来直接把日志轮转打开,并且每周检查一次磁盘占用。
第四,如果你想省内存,可以给 Node 进程设置内存上限。我用的启动命令是:
NODE_OPTIONS="--max-old-space-size=4096" npm start这个参数会限制 Node 堆内存上限,避免 OpenClaw 在长时间运行时把内存吃满,导致整个系统变得卡顿。根据你机器内存大小调整数值,一般 2GB 到 4GB 比较合适。
结尾:折腾之后的一点实在体会
跑通 OpenClaw 之后,我最大的感受是:这类 AI Agent 框架真正考验人的不是安装,而是“配置思维”的转变。你必须先想清楚它要扮演什么角色、需要哪些工具、接哪个模型,然后才会发现配置文件里每一行都不是多余的。不要一开始就追求完美,先拿默认配置跑一个最小闭环,再慢慢加 Skill、换模型、调参数,这样每一步出问题都容易定位。
后续你还可以在这个基础上做很多扩展,比如接 Nginx 反向代理开放给局域网内的其他设备访问,或者写一个定时任务让它凌晨自动整理日报。架构上无非还是那几件事:服务活着、模型能答、Skill 会调用。把这几个基础环节稳住,OpenClaw 能玩出什么花样,就完全看你的想象力了。