最近我把OpenClaw这套开源的个人AI助理框架从头到尾部署了一遍,从Windows下的WSL2环境、Node.js运行时准备,到关联本地大模型、配置Windows Companion,再到折腾Skill扩展,前后花了一个晚上加一个下午。期间踩了不止一个坑,尤其是那个“无法安全验证WSL2环境、请在PowerShell中运行wsl --status”的报错,卡了我半个多小时。这篇就围绕“快速部署OpenClaw”这件事,把我实际操作的完整过程和排查思路都摊开讲,适合那些想在自己的电脑或云服务器上部署一套个人AI助理,又不愿意被各种云端服务绑定、想保持数据可控的朋友参考。
1. 快速部署OpenClaw之前,先搞清楚它到底是个什么东西
1.1 它不是又一个聊天机器人,而是一套“骨架”
很多人第一次听到OpenClaw,以为它跟那些网页版聊天助手一样,装个客户端就能聊。实际完全不是一回事。
OpenClaw是一个开源的AI助理框架,主打的是“给个人用户自己搭建智能助理”。你可以把它理解为一套搭好的骨架:它管理对话上下文、支持多轮会话、有任务编排能力、还能通过Skill机制扩展功能。你只需要接一个模型进去——不管是本地跑的Qwen、DeepSeek,还是各家云厂商的API——它就能变成一个能干活、能调用工具的助理,而不是只能陪聊的玩具。
我的理解是:OpenClaw把“模型会说话”这件事,向前推进到了“模型能做事”。比如写一个Skill,它就可以替你查本地笔记、整理Obsidian库、定时跑脚本、处理文件。继Clawdbot之后,这类开源智能体框架开始密集出现,很多后来的个人助手产品也确实参考过这类项目的思路。如果你想研究个人AI助理怎么做,OpenClaw是个非常合适的“母本”。
1.2 为什么说“快速部署”的核心在方案选型
我见过太多人卡在第一步就放弃了,原因不是命令不会敲,而是压根没想清楚自己到底要用哪条部署路线。
OpenClaw的运行环境是有前提的:它本质上是一个Node.js服务,官方推荐跑在Linux上。可大部分人日常主力机是Windows,这就涉及一个经典选择:原生跑Windows、还是走WSL2、还是干脆扔到Ubuntu服务器上。这三条路的复杂度、稳定性、后续维护成本差别很大。我自己的选择顺序是:先在Windows + WSL2里验证功能,再决定是不是要迁到云服务器长期跑。
所以说,“快速部署”这件事,快不快不取决于你手速,而是取决于你事前是否选对了路线。选错了,后面每一步都是坑。
2. 部署方案选型:三条路各有利弊,我劝你先走WSL2
2.1 Windows + WSL2:用户量最大的一条路,坑也最多
微软的Windows Subsystem for Linux 2,简单说就是Windows里跑了一个轻量级Linux虚拟机。OpenClaw跑在WSL2的Ubuntu环境里,既能享受Linux的稳定性,又能继续用Windows桌面上的工具。
为什么Windows用户要绕这一圈?因为OpenClaw的依赖项、脚本、文件路径处理都是按Linux习惯设计的,直接跑在Windows上会有一堆兼容性问题,比如路径分隔符、权限模型、信号处理。而WSL2提供了几乎原生的Linux内核,OpenClaw在里面跑,跟在真实Ubuntu服务器上没本质区别。
走这条路线,你本机需要有Windows 10 22H2或Windows 11,然后在PowerShell里启用WSL功能,装一个Ubuntu发行版。这也是我推荐的起步路线,因为你可以用Windows Companion这个桌面组件,把助理状态直接放在系统托盘里。
2.2 原生Ubuntu服务器:最省心的一条路
如果你手上有一台纯净的Ubuntu 22.04/24.04服务器,哪怕是个旧电脑装的,我都建议直接用原生环境部署OpenClaw。少掉WSL2这层封装,少掉Windows和Linux文件系统互通的麻烦,少掉一堆网络地址的混淆问题。
我后来把OpenClaw迁到云服务器上时,体感明显比在WSL2里顺:不用纠结localhost到底指Windows还是指WSL,不用处理虚拟内存占用,系统服务用systemd一管,自动重启、开机自启全都好说。
2.3 云服务器:适合7×24小时常驻运行
OpenClaw如果只是自己偶尔打开聊聊,跑在本地完全够。但如果你希望它像真正的助理一样,随时能处理任务、定时跑Skill,那本地电脑就太不合适了——关机就断,休眠就掉线。
这时候就该考虑云服务器。阿里云有免费试用活动,新用户可以领一台轻量应用服务器,配置虽然不高,但跑OpenClaw核心服务加一个小模型推理勉强够用。要注意的是,云服务器上部署要额外考虑安全组策略、端口只对必要来源开放、密钥登录这些基本操作,别把服务裸奔暴露在公网上。
3. 从零开始:OpenClaw在Windows + WSL2下的完整部署实录
这部分是我这篇的核心。我按实际操作顺序来,每步该干什么、为什么这么干,我都会说清楚。
3.1 第一步:准备好Node.js运行时
前面说了,OpenClaw是Node.js项目,所以第一步是装Node.js。这里有个非常重要的版本意识:不要随便apt install,因为Ubuntu官方源里的Node.js普遍偏旧,会导致OpenClaw运行时报语法错误或依赖安装失败。
我推荐的安装方式是使用NodeSource源,装Node.js 20 LTS版本。命令如下:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt-get install -y nodejs装完验证一下:
node -v npm -v我当时看到的是v20.11.1和10.5.0。如果npm报找不到命令,单独装一下npm包就行。还有个小建议:顺手把npm的registry切到国内镜像源,后续依赖安装速度会快非常多:
npm config set registry https://registry.npmmirror.com这一步不是必须的,但在国内网络环境下,它能让npm install从几分钟缩短到几十秒。我自己第一次没切换,卡在等待下载包的阶段足足五分钟。
3.2 第二步:获取OpenClaw核心程序
接下来就是把OpenClaw代码拿下来。用git拉取,这是最标准的做法:
git clone https://github.com/OpenClaw/OpenClaw.git cd OpenClaw npm installgit如果没装,先sudo apt install -y git。npm install这一步会下载全部依赖,耗时取决于网络,切换过镜像源的话一般一两分钟内能完成。
安装完成后,项目里会有一个命令行工具,通常是通过npx openclaw来调用。我建议先执行一下命令帮助确认安装完整:
npx openclaw --help如果命令找不到,检查当前目录是否在PATH中,或者直接用./bin/openclaw这种相对路径方式调用。这一步能提前暴露依赖缺失、权限不足的问题。
3.3 第三步:初始化项目配置
OpenClaw首次运行前需要生成一份配置文件。我执行的是:
npx openclaw init这个命令会在当前用户目录下生成一个.openclaw/配置目录,里面会有主配置文件、日志目录、Skill目录等。init过程会让你选一些基本项,比如默认语言、时区、日志级别。这里我踩了一个小坑:默认配置里日志级别是info,在调试阶段不够用,建议直接改成debug,能看到更详细的调用链信息。
初始化完成后,我建议先别急着配模型,先看一眼目录结构:
ls -la ~/.openclaw/正常你会看到config文件、logs目录、skills目录。确认这些目录在,再往下走。
3.4 第四步:通过Ollama关联本地Qwen模型
OpenClaw本身是不带模型的,它只是一个框架,需要外接模型服务。最省事的本地模型方案就是Ollama。
Ollama是一个极简的本地大模型运行工具,一条命令就能把开源模型拉下来跑。我这次用的是Qwen2.5 3B这个型号。为什么选它?因为在没有独立显卡的环境里,3B模型是功耗、显存占用、质量三者的平衡点。如果机器有16G内存以上且不要求太高并发,3B跑起来是流畅的,而7B则明显吃力。
安装Ollama并拉取模型:
curl -fsSL https://ollama.com/install.sh | sh ollama pull qwen2.5:3b ollama serveOllama默认监听在11434端口。启动后验证一下接口是否通了:
curl http://localhost:11434/api/tags能返回一个带models列表的JSON,就说明模型服务正常。
接下来要让OpenClaw连上这个模型服务。编辑OpenClaw的配置文件,把模型供应商指向本地的Ollama。配置片段大致长这样:
model: provider: ollama baseUrl: http://localhost:11434 modelName: qwen2.5:3b temperature: 0.7 maxTokens: 2048这里有个WSL2特有的网络坑:我在WSL2里跑Ollama时,OpenClaw也跑在WSL2里,所以baseUrl写localhost没问题。但如果把OpenClaw放在Windows侧跑,想连WSL2里的Ollama,就不能写localhost,得写WSL2虚拟机自己的IP。这正是很多人“模型连不上”的根源。
3.5 第五步:启动服务并跑通第一次对话
配置完成后,启动OpenClaw就是一个命令:
npx openclaw serve看到类似Server listening on 0.0.0.0:3000的日志,说明核心服务起来了。这时候可以在浏览器打开http://localhost:3000,进入Web交互界面。
第一次对话我建议问一个最基本的问题,比如“你是谁”,目的是确认模型链路通没通。如果卡住不动,大概率是模型那侧的地址问题,按第5节排查。如果模型返回了回答,恭喜你,OpenClaw的最小闭环已经跑起来了。
4. Windows Companion与Skill机制:让OpenClaw从“能用”到“好用”
4.1 Windows Companion的作用是什么
很多Windows用户会发现,OpenClaw核心是跑在WSL2里的Linux进程,跟Windows桌面交互不是很直接。Windows Companion就是来补这个缺口的。
它是一个运行在Windows侧的桌面伴侣程序,主要做三件事:在系统托盘常驻显示OpenClaw状态;通过本地回环地址把Windows端操作指令转发给WSL2里的服务;提供系统级快捷键唤起对话窗口。
配置Companion时,核心是让它找到WSL2里的OpenClaw服务地址。这里记得不要写localhost:3000就直接完事,因为不同WSL2版本、不同配置下,Windows访问WSL2服务的方式会变。最稳定的做法是在WSL2里把OpenClaw监听地址设为0.0.0.0,然后Companion里填WSL2的IP加端口。WSL2的IP可以用命令查:
hostname -I或者ip addr show eth0。把这个IP填进Companion的“服务器地址”字段,点连接,看到状态变成已连接就成功了。
4.2 Skill:OpenClaw的灵魂功能
如果说模型是OpenClaw的大脑,那Skill就是它的手脚。一个Skill就是一段可复用的能力脚本,OpenClaw在合适的场景下会自动调用它。
以我自己的实际需求为例。我有个习惯,把零散想法记在Obsidian仓库里。我给OpenClaw写了一个“查询Obsidian笔记”的Skill,它能在对话中被触发,搜索我指定的笔记目录并返回摘要。核心步骤很简单:
- 在
~/.openclaw/skills/下新建一个目录,名字是Skill名。 - 目录里放两个文件:一个Skill描述文件(声明触发条件、输入参数),一个执行脚本(Python或Node.js都行)。
- 重启OpenClaw,让它在启动时扫描到新Skill。
Skill描述文件大概是这个意思:
name: obsidian_search description: 搜索Obsidian库中的笔记内容 triggers: - "查笔记" - "搜索obsidian" params: keyword: type: string required: true description: "要搜索的关键词"执行脚本接收参数,去指定目录grep,把结果返回给模型整理。这个模式非常强大——一旦掌握,OpenClaw就从聊天助手变成了能接入你自己工作流的自动化助理。
4.3 配置文件的完整解读:改哪儿、为什么
我见过不少人在配置文件上瞎改,把端口、超时、并发数改得很离谱,然后来群里问为什么起不来。我建议你只关注几个关键字段:
model段:决定用哪个模型、怎么连。这是最核心的。server.port:OpenClaw服务端口。默认3000,如果端口被占,改这里。server.host:监听地址。本机调试用localhost,如果要让局域网或Windows Companion访问,要改成0.0.0.0。logs.level:日志级别。日常用info,排查问题改debug。
改任何配置后都要重启服务,OpenClaw配置是启动时加载的,不支持热更新。这点跟Nginx一样,改完必须reload。
5. 部署全程的常见问题与排查实录,每一坑都是实测踩过的
5.1 WSL2无法安全验证?先运行wsl --status
这是我在网上看到提及率极高的一个问题,也是我自己卡得最久的一次。
现象是这样:在PowerShell里跑wsl -l -v能看到发行版,但启动WSL时提示“无法安全验证此环境”,要求运行wsl --status查看状态。出现这个问题通常意味着WSL2的虚拟机组件没有正常工作,或者Windows的虚拟化平台功能被关闭了。
我的排查路径是:
- 在PowerShell里运行:
wsl --status先看默认版本是不是2,以及有没有报服务未启动。
- 如果默认版本是1,或者干脆没有配置,用:
wsl --set-default-version 2确认Windows功能里“虚拟机平台”和“适用于Linux的Windows子系统”这两项都勾上了,没勾的话要启用并重启电脑。
重启之后如果还报错,试着重装一次WSL2内核更新包,问题基本就能解决。
这个问题的根因,本质上是Windows侧虚拟化相关组件状态异常,跟OpenClaw本身无关。别去反复重装OpenClaw,没用。
5.2 Node.js版本不对导致的服务崩溃
有次我启动OpenClaw时报了一个关于fetch的异常,查了老半天发现是Node.js版本太老,老到不支持全局fetch。这个情况在Ubuntu直接用apt install装Node的话非常容易出现,因为源里的版本可能是18之前的。
遇到这类奇怪的运行时异常,第一步先查版本:
node -v如果低于20,建议用NodeSource源升级,别手动要tar包解压,容易留下权限和PATH问题。升级命令我前面已经给过了。
5.3 Ollama模型服务连不上:分清谁在哪儿
“模型连不上”是部署OpenClaw时仅次于WSL2问题的高频事故。多数情况是网络地址混淆:
- OpenClaw和Ollama都在WSL2里:baseUrl可以直接填
http://localhost:11434。 - OpenClaw在Windows、Ollama在WSL2里:不能填localhost,要填WSL2的IP。
- OpenClaw在云服务器、Ollama在另一台服务器:填实际内网或公网地址,同时确认安全组放行了11434端口。
判断方法很简单:在OpenClaw所在的环境里,先手动curl一下Ollama的地址,不通就看IP和监听状态。Ollama如果没设置OLLAMA_HOST=0.0.0.0:11434环境变量,默认只监听localhost,外部访问是必然失败的。
5.4 服务起来了,Skill不生效怎么办
Skill不生效的原因很统一:要么目录结构不对,要么描述文件格式写错了,要么没重启。我自己有一次写了个Skill,描述文件里少了一个必填字段,OpenClaw扫描时直接把目录忽略了,但日志里只给了一行warn,不仔细看根本发现不了。
解决思路:
cat ~/.openclaw/logs/*.log | grep -i skill把日志里和skill相关的行过滤出来,基本能定位问题。顺手把日志级别调到debug,重启后再看,信息量会大很多。
5.5 常见问题速查表
| 问题现象 | 常见原因 | 排查/解决方法 |
|---|---|---|
| WSL2无法启动、提示无法安全验证 | Windows虚拟化功能异常 | PowerShell运行wsl --status,启用虚拟化平台,重启系统 |
| Skill不被加载 | 描述文件格式错误或缺字段 | 检查YAML格式与必填项,查看日志过滤skill关键词 |
| 模型请求超时 | Ollama地址写错或未监听外部端口 | curl测试服务地址,设置OLLAMA_HOST为0.0.0.0 |
| 端口被占用导致启动失败 | 3000端口被其他程序占用 | 改用其他端口,或杀掉占用进程 |
| 中文对话响应很慢 | 模型太大或推理设备吃力 | 换用更小模型,或关闭后台高占用程序 |
最后再分享一点我实际部署下来的体会
OpenClaw这类框架,最忌讳一上来就追求“全家桶”。我见过有人第一天就要配Companion、装十几个Skill、连Obsidian、还打算接云端API,结果环境都没跑通就放弃了。正确做法是先跑最小闭环:Node.js装好、OpenClaw起服务、接一个本地模型、能对话,这个闭环通了,再逐步加东西。
我自己最后是把OpenClaw从WSL2迁到了云服务器上跑,因为要7×24小时常驻。迁移过程比想象中简单,配置文件复制过去,装好Node.js和Ollama,调整一下监听地址和映射,就稳定跑了。如果你也打算长期用,直接考虑云服务器方案,别在本地Windows上死磕。
还有一个特别实用的小技巧:在WSL2里给常用命令设置alias,能省掉大量重复输入。
echo "alias oc='npx openclaw serve'" >> ~/.bashrc source ~/.bashrc之后要启动OpenClaw,一行oc就够了。这种细节在官方文档里不会写,但实际每天用的时候,幸福感提升是很明显的。