从过年折腾到现在,我终于在 Linux 服务器上把 OpenClaw(原 Clawdbot)完整跑通了。这项目的坑说多不多,说少也不少,尤其是微信接入、消息回包这类问题,社区里隔几天就有人问。所以我把整套流程重新梳理了一遍,从环境准备、依赖安装、初始化配置,到微信接入、模型对接、常见报错排查,全部整理成这篇指南,照着操作基本能少走一半弯路。
OpenClaw 是一个开源的消息机器人网关,它能把微信、QQ、飞书、Telegram 这些聊天渠道接进来,统一对接 OpenAI、Ollama、ModelScope 等多个大模型,实现自动回复、定时任务、智能助手这类功能。适合想把个人微信/办公软件接入大模型、快速做一版智能客服或私人助理的开发者、运维同学。我这次部署用的是 Ubuntu 22.04,下面所有操作都基于这个环境,其他主流 Linux 发行版大同小异。
1. 项目认知与部署思路
1.1 OpenClaw 到底是什么
OpenClaw 的前身叫 Clawdbot,身边不少老人儿还是习惯叫老名字。人如其名,Claw 这个核心动作就是“抓取消息”,它本身不是一个大模型产品,而是一个把消息渠道和大模型串起来的网关层。你可以在微信里跟它聊天,它收到消息后把上下文带给后端模型,模型生成回复,再通过渠道发送回来。
架构上,OpenClaw 分了几个层次:渠道适配层负责对接不同聊天平台,对话策略层负责处理上下文、指令、多轮会话,模型调用层负责对接 OpenAI、Gemini、Ollama 这类推理服务。最早项目是基于 Node.js 和 TypeScript 写的,好处是跨平台、生态成熟,社区插件也多,想在群里 @ 机器人让它总结聊天记录、定时推送天气这种活儿,改改配置就能实现。
为什么叫“智能体网关”?因为 OpenClaw 的重心不只是“聊天”。它可以通过工具调用、Webhook、插件机制去操作外部系统,比如查询数据库、调用内部 API、对接 Dify 这类应用平台。简单类比:大模型是大脑,OpenClaw 就是连接手脚的神经中枢。理解了这层,后面配置渠道和模型时你就能明白每个参数到底在干什么。
1.2 为什么优先选 Linux 部署
我一开始其实是在自己的 Windows 笔记本上折腾的,想本地跑起来看看效果。结果遇到一个很典型的问题,Windows 下需要依赖 WSL2 环境,而 OpenClaw 在校验 WSL2 时会弹出类似 “could not safely verify the WSL2 environment” 的报错,要么是 WSL 内核版本不一致,要么是环境变量没带上。虽然最终能绕过去,但每一步都在还环境债,体验很差。
Linux 服务器部署就清爽很多:原生内核、没有虚拟机层、systemd 天然接管进程、服务器长期开机也不怕掉线。尤其微信这类渠道需要 7x24 小时在线,你用笔记本跑根本不现实,手机锁屏、断网、休眠都会让服务挂掉。所以我的建议是:生产环境老老实实买台便宜云服务器,Ubuntu 22.04 或者 Debian 12 都行,2 核 4G 跑 OpenClaw 加几个小模型绰绰有余。
| 部署平台 | 安装难度 | 长期稳定性 | 推荐指数 | 备注 |
|---|---|---|---|---|
| Linux 原生(Ubuntu/Debian) | 低 | 高 | 五星 | 生产首选,systemd 托管方便 |
| Windows + WSL2 | 中 | 中 | 两星 | 环境校验问题多,适合本地调试 |
| macOS | 低 | 中 | 三星 | M 系列芯片注意原生模块编译 |
| Termux(Android) | 中 | 低 | 两星 | 可原生部署,但不适合长期跑 |
如果你也只是想本地测试一下,那 Windows 和 macOS 都能跑起来;但只要你想认真用起来、挂微信、接团队消息,直接上 Linux 服务器是最省心的路线。下面我就按这个思路来写整套部署流程。
2. 环境准备与依赖安装
2.1 服务器基础要求与系统初始化
先说硬件底线。OpenClaw 本身占用资源不高,Node.js 进程加上微信客户端这类的依赖进程,内存占用大概在 600MB 到 1GB 之间。如果你想在本地再跑 Ollama 这种模型推理,至少得 16G 内存起步;如果只是对接云端 API,2G 内存就足够。磁盘建议预留 10GB,因为依赖安装、日志文件、可能的本地数据库都会占空间,别只留 2、3G 那种极限容量。
系统我用的 Ubuntu 22.04 LTS,内核直接支持,不需要额外虚拟化。拿到服务器之后,第一步先做基础配置,创建新用户,避免所有操作都在 root 下进行,这是 Linux 运维的基本习惯。微信登录后会产生临时缓存文件,用专门用户运行服务,权限上也更清晰。
# 建议用 sudo 权限用户操作,而不是 root sudo apt update && sudo apt upgrade -y sudo useradd -m -s /bin/bash openclaw sudo passwd openclaw顺手把常用工具装上:curl、wget、git、build-essential。后面安装 Node.js 原生模块时需要编译工具链,这一步经常被忽略,等报错了再回来装很浪费时间。
sudo apt install -y curl wget git build-essential python3这里提醒一句,如果你用的是 CentOS 或 rocky 这类系统,包管理器是 yum/dnf,命令要相应改成yum install -y ...。核心流程不受影响,但别把 apt 的命令粘贴到 yum 的机器上硬跑。
2.2 Node.js 与包管理工具安装
OpenClaw 是基于 Node.js 的项目,所以 Node 环境是绕不开的。官方要求 Node.js 18 以上,我个人建议直接装 20 LTS,稳定且生态兼容最好。服务器上装 Node 的方式有好几种,我推荐 nvm,因为它不污染系统目录,切换版本也方便,后面升级 Node 时不用重装项目。
# 安装 nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash # 重新加载 shell 配置 source ~/.bashrc # 安装 Node.js 20 LTS nvm install 20 nvm use 20 nvm alias default 20装完顺手验证一下版本号,避免 PATH 混乱导致命令找不到:
node -v npm -v接下来装 pnpm。OpenClaw 项目使用 pnpm 作为包管理器,原因是它节省磁盘空间、依赖安装速度快,而且能很好地处理 monorepo 结构。如果项目里有多个包需要互相引用,pnpm 的 workspace 机制会舒服得多。
# 通过 corepack 启用 pnpm corepack enable corepack prepare pnpm@latest --activate国内服务器如果 npm 官方源下载依赖太慢,建议配一下国内镜像源,能省不少时间:
npm config set registry https://registry.npmmirror.com2.3 获取 OpenClaw 项目代码
环境齐了,就可以拉代码了。OpenClaw 的官方仓库在 GitHub,如果你在服务器上直接 git clone 速度慢,也可以找社区维护的国内镜像仓库,或者从 ModelScope 魔塔社区下载部署包。这一步没有什么特殊技巧,关键是选稳定分支,别一上来就用 dev 分支,很可能跑着跑着遇到未发布的 bug。
# 创建项目目录 sudo mkdir -p /opt/openclaw sudo chown -R openclaw:openclaw /opt/openclaw # 切换到 openclaw 用户 sudo su - openclaw # 拉取代码 cd /opt/openclaw git clone https://github.com/openclaw/openclaw.git .多说一句,“/opt/openclaw” 是我习惯的目录,你完全可以用~/openclaw这种用户目录,只要注意后续 systemd 服务里 WorkingDirectory 路径保持一致就行。拉完代码后,先看一下目录结构,确认有 package.json 和 pnpm-workspace.yaml,这就说明代码没问题。
3. 核心安装流程与初始化配置
3.1 安装依赖与构建项目
项目代码拉下来之后,第一步是安装依赖。这里强调一下,OpenClaw 是用 pnpm workspace 组织的,所以一定要用 pnpm 而不是 npm 装依赖,否则依赖树会乱掉。整个过程根据网速不同需要几分钟,耐心等就行。
cd /opt/openclaw pnpm install安装过程中如果出现 “ERR_PNPM_NO_MATCHING_VERSION” 这类报错,多半是 pnpm 版本太旧,升级到最新版再试。如果出现 node-gyp 相关的编译错误,说明 build-essential 没装全,或者缺少 python3,回头检查一下上一节的工具链。
依赖安装完成后,一般还需要构建项目。很多 Node 项目会把 TypeScript 编译成 JavaScript 放到 dist 目录,OpenClaw 也类似。这一步官方文档通常写的是 pnpm build 或 pnpm run build,具体看 package.json 里的 scripts 字段。
pnpm build构建结束后检查一下apps/clawdbot/dist这类目录是否生成了 index.js 文件,确认构建产物完整。到这里,项目已经具备启动条件,接下来是初始化配置。
3.2 首次启动与交互式配置
我第一次跑 OpenClaw 时多多少少被初始化流程绕了一下。它不像传统项目让你手动编辑 .env 文件,而是启动时进入交互式配置向导,你选择模型渠道、填写 API Key、启用消息渠道,向导会把配置写入本地配置文件。
启动命令根据你的运行模式来选。首次配置我推荐用开发模式直接前台跑,方便看日志输出:
cd /opt/openclaw pnpm run dev启动后终端会进入一个交互界面,大致流程是这样:先选择模型服务商,比如 OpenAI、ModelScope、Ollama;填 API Key 和模型名称;然后选择要接入的渠道,比如微信、Telegram、飞书;最后向导会让你确认配置。每一步都有默认值,不确定就直接回车跳过,后面到配置文件里再改。
交互配置完成后,推荐退出交互界面,直接改配置文件,因为可视化的终端界面修改多行配置效率很低。配置文件一般生成在~/.openclaw/或项目目录下的.env,每个版本位置可能有差异,启动日志里会明确打印“配置文件已保存到 xxx”。
3.3 生产环境运行与 systemd 托管
配置确认没问题后,正式运行时不要再用 pnpm run dev 了。dev 模式会启动文件监听和调试接口,白白占用资源。生产模式一般是pnpm start或者直接启动构建后的产物,比如node apps/clawdbot/dist/index.js。
为了让服务开机自启、崩溃自动拉起,我建议用 systemd 写一个服务单元文件,这也是 Linux 生态下的标准姿势。
[Unit] Description=OpenClaw Service After=network.target [Service] Type=simple User=openclaw WorkingDirectory=/opt/openclaw ExecStart=/usr/bin/pnpm start Restart=always RestartSec=10 Environment=NODE_ENV=production [Install] WantedBy=multi-user.target把上面内容保存到/etc/systemd/system/openclaw.service,然后执行:
sudo systemctl daemon-reload sudo systemctl enable openclaw sudo systemctl start openclaw查看运行状态和日志的方式:
sudo systemctl status openclaw journalctl -u openclaw -f用 systemd 托管有一个非常实用的好处:服务崩了自动重启。微信这类渠道偶尔会断连,进程退出后 10 秒内自动拉起,比自己在后台写个 while 循环靠谱太多。日志也无缝接到了 journalctl,排查问题时翻日志特别方便。
3.4 版本升级与数据备份
OpenClaw 现在迭代非常快,基本一两周就有一个新版本。升级流程不算复杂,核心三连:拉代码、装依赖、构建重启。
cd /opt/openclaw git pull pnpm install pnpm build sudo systemctl restart openclaw但我强烈建议升级前先备份配置文件和本地数据目录。别问我是怎么知道的,有一次升级后配置格式变更,整个微信通道失效,重新扫码登录才恢复。备份目录一般涉及~/.openclaw和项目目录下的 data 文件夹:
cp -r ~/.openclaw ~/.openclaw.bak.$(date +%Y%m%d)如果你启用了本地数据库,也一并备份。这些操作看起来基础,但关键时候能救命。
4. 微信集成实操与坑位复盘
4.1 微信接入的原理与限制
微信是 OpenClaw 社区里最热门、也最容易出问题的接入渠道。先说一句不好听但实在的话:OpenClaw 接入微信走的基本是非官方协议渠道,腾讯官方并没有开放个人微信机器人 API,所以这种接入方式存在账号风控风险。我建议使用小号进行测试,并且不要在核心账号上跑高频消息触发,以免被限制登录。
实操接入时,OpenClaw 的微信渠道大致分两类工作模式:同步消息和发送消息。同步消息指接收来自微信联系人、群聊的消息并把它们送入对话流程;发送消息指 OpenClaw 主动调用接口把回复发出去。很多人配置完发现机器人能发消息,但是微信发消息给它却没有任何反应,问题往往出在同步消息这一侧没有正确配置。
原理并不复杂:消息进入微信后,客户端或协议端需要把事件回调给 OpenClaw 的消息监听器,监听器校验来源、解析内容,再交由模型处理。如果同步消息开关没开、回调地址不对、或者账号登录态失效,就会出现“单向通”的现象。这个观念先记住,后面排查会反复用到。
4.2 微信扫码登录配置实操
在 OpenClaw 的配置文件中,微信渠道的配置项大致长这样,具体字段名不同版本略有差异,但核心选项是这几项:
# 微信渠道开关 WECHAT_ENABLED=true # 是否同步接收消息 WECHAT_SYNC_MESSAGE=true # 是否允许监听群聊 WECHAT_ENABLE_GROUP=true # 是否只响应 @ 机器人的群消息 WECHAT_GROUP_AT_ONLY=true # 登录态有效期,过期后需要重新扫码 WECHAT_AUTO_LOGIN=true配置完成后重启服务,日志里会出现一张二维码图片路径或终端二维码。在服务器环境下,建议把二维码图片复制到本地再扫,或者用支持终端二维码的 SSH 客户端直接展示。
# 查看最新日志里的二维码路径 journalctl -u openclaw -f扫完码后确认日志出现“login success”或“微信登录成功”的提示,然后向自己的微信小号发一条测试消息。如果机器人回复了,恭喜,微信渠道已经通了。
4.3 “能发不能收”问题排查实录
首先说明,我在群里看到最多的问题是这句:“openclaw能发消息微信,但微信发消息没回复”。我自己也踩过一次,排查过程还算典型,分享给大家参考。
第一次遇到时,我先看了日志,发现机器人确实收到了消息事件,但事件进入消息队列后没有任何后续输出。看配置后发现WECHAT_SYNC_MESSAGE=false,也就是说项目只开启了发送能力,接收消息的开关没开。问题就这么简单,所以第一条排查项就是这个开关。
第二类情况是「日志里完全没有任何收到消息的记录」,这时要分两种情况:如果微信账号是扫码登录的,大概率是登录态失效了,重新扫码即可;如果日志显示“message received”但模型未回复,排查模型调用链路,检查 API Key 是否过期、上下文长度是不是超了。
第三类群聊场景,机器人要回复群消息通常需要满足触发条件。默认设置下WECHAT_ENABLE_GROUP=false或WECHAT_GROUP_AT_ONLY=true,机器人只回复被 @ 的消息,群里 @ 一下如果还是没反应,检查这两项配置的取值是否正确。有几次我看日志里根本没有事件进来,结果发现是WECHAT_ENABLE_GROUP=false把群消息直接过滤掉了。
| 故障现象 | 可能原因 | 排查方向 |
|---|---|---|
| 机器人能发消息,但收不到消息 | 同步消息开关未开启 | 检查 WECHAT_SYNC_MESSAGE 配置 |
| 日志完全无消息记录 | 登录态失效 | 重新扫码,用 WECHAT_AUTO_LOGIN 自动续期 |
| 群聊不响应 @ | 群监听未开启 | 开启 WECHAT_ENABLE_GROUP |
| 个人消息有回复,群消息全静默 | @ 触发条件限制 | 按需调整 WECHAT_GROUP_AT_ONLY |
| 扫码后反复要求重扫 | 风控限制 | 换小号、降低发送频率、检查 IP 状态 |
4.4 微信渠道的稳定性与降频策略
微信接入最大的敌人不是代码 bug 而是风控。社区里有人反馈跑了一周被限制登录的,也有大神稳定跑了几个月的,差别主要在于使用习惯。我的经验是:降低触发频率,不要做那种“群里每句话都回复”的机器人,至少要设置冷却时间或关键词过滤。这也是为什么很多 OpenClaw 配置里会有“是否只响应 @ 消息”这个选项,本质就是在保护你的账号。
同时建议开启自动登录,登录态过期后尽量自动恢复,减少人工介入。但自动登录不等于不会风控,如果服务器 IP 被标记,扫再多次也没用,这时可以考虑换绑小号、检查出口 IP 的稳定性。
5. 渠道扩展与大模型对接
5.1 更多渠道的接入对比
微信搞定之后,如果你有跨平台消息分发的需求,可以考虑再把其他渠道接进来。OpenClaw 目前主流的渠道支持包括 Telegram、飞书、Discord、QQ 等。每个渠道的接入难度差异不小,上面这张表格可以帮你做预判:
| 渠道 | 接入方式 | 维护成本 | 适合场景 |
|---|---|---|---|
| 微信 | 扫码登录,非官方协议 | 中,有风控风险 | 个人助理、小范围测试 |
| 飞书 | 开放平台自建应用 | 低,官方 API 稳定 | 企业内部群、办公自动化 |
| Telegram | Bot Token,官方 Bot API | 低 | 技术群、海外用户 |
| Discord | Bot Token | 低 | 社区群、游戏社群 |
| 协议登录 | 中,风控风险 | 备选方案 |
飞书和 Telegram 这类走官方 API 的渠道,稳定性远强于微信。如果你想在生产环境给团队用,我建议认真考虑飞书机器人,它通过开放平台创建应用、设置事件订阅即可,出问题的概率很小。微信更适合个人玩一玩或者小范围测试。
5.2 对接魔塔 ModelScope 平台
大模型服务商的选择决定了你的使用成本和回复效果。如果你在国内、不想折腾网络问题,ModelScope(魔塔社区)是一个非常顺滑的方案。它提供开源模型的在线推理 API,也提供 Serverless API 服务。OpenClaw 中可以直接把 ModelScope 配成一个模型 provider。
先在魔塔社区注册账号,在控制台创建 API Key。然后在 OpenClaw 的模型配置中,把 provider 切换到 ModelScope,填入 API Key 和模型名。推荐直接用通义千问系列的 qwen-plus 或 qwen-max,稳定性和中文语感都很不错。
# 模型配置参考 MODEL_PROVIDER=model-scope MODEL_API_KEY=sk-xxxxxxxxxxxxxxxx MODEL_NAME=qwen-plus关键一点是模型名称必须和 ModelScope 平台上完全一致,大小写都不能错。填错了启动时会报 “model not found” 之类的错误。另外,ModelScope 有些模型是限时免费或部分免费,长期使用前要看清楚定价规则。
5.3 对接 Ollama 与 Dify 等本地/业务平台
如果你的服务器内存足够,想完全本地化运行,可以考虑 Ollama。安装 Ollama 后拉取一个量化模型,比如 qwen2.5:7b,然后把 OpenClaw 的模型 provider 指向http://localhost:11434即可。
# 安装 Ollama(Linux 一键脚本) curl -fsSL https://ollama.com/install.sh | sh ollama pull qwen2.5:7bOllama 的部署优势是数据不出服务器,隐私性好;劣势是高负载时占用 CPU/内存明显,建议 16G 内存以下就别折腾 7B 以上的模型了。我自己的测试服务器是 4G 内存,跑 qwen2.5:3b 都勉强,只能说能用、不流畅。
如果你已经有了 Dify 这类 Agent 平台,OpenClaw 也可以作为渠道网关接入,前面几节提过的 gateway 模式就是为此设计的。由 Dify 负责工作流编排、知识库检索和工具调用,OpenClaw 只做消息收发与事件转发,架构上职责清晰、耦合小。配置思路是把 OpenClaw 的出站消息通过 Webhook 转发到 Dify 的 API,收到回复后再推回原渠道。这一块各家版本差异较大,具体字段以官方文档为准,但架构思路是通用的。
6. 常见问题速查与安装卸载
6.1 高频报错整理
折腾这几次,我把社区里出现频率最高的几类问题整理了一下,按可能原因和解决方向做了个速查表,方便你排查时对号入座。
| 报错/现象 | 可能原因 | 解决方向 |
|---|---|---|
| pnpm install 超时或卡住 | 网络问题或源过慢 | 配置 npmmirror 镜像源或使用全局代理配置 |
| node-gyp 编译失败 | 缺少 build-essential | 安装build-essential python3 |
| 提示 could not safely verify the WSL2 environment | Windows 环境下 WSL2 校验不通过 | Linux原生部署可完全绕开,Windows 用户检查 WSL 版本并升级内核 |
| 端口被占用(如 3000) | 项目进程未关闭或冲突 | lsof -i :3000查看占用进程,kill 后重启 |
| 服务频繁重启,journalctl 有 OOM 日志 | 内存不足 | 关闭部分插件,或加 swap / 升级内存 |
| 微信二维码过期过快 | 登录态不一致 | 重启服务,检查本地缓存目录权限 |
| 模型报错 invalid_api_key | API Key 配置错误 | 检查 key 前后是否有空格或换行,重新粘贴 |
6.2 其他平台部署差异
除了标准 Linux 服务器,我再简单说一下其他平台部署时的一些差异。热词里有人提到在安卓 Termux 中部署 OpenClaw,这个方案确实可行,基于 Termux 的原生环境,不需要 proot 虚拟化,流程和 Linux 类似,但需要注意 Termux 的包源和目录结构与常规 Linux 不完全一样,Node.js 版本可能偏旧,建议先pkg upgrade再安装 nodejs。还有一个限制是手机息屏后 Termux 后台可能被系统清理,长期运行稳定性一般,适合临时体验。
macOS 上部署相对简单,安装 Homebrew 后brew install node@20 pnpm git即可,依赖编译一般都能过。但如果你是 Apple Silicon 芯片,部分原生模块可能需要额外编译工具,装上 Xcode Command Line Tools 能解决大部分问题。macOS 跑微信渠道有个优势,就是日常开着电脑就能第一个体验功能;劣势和 Windows 一样,不适合长期无人值守场景。
6.3 完全卸载与干净重装
如果你配置改乱了,或者想升级个大版本,不想在旧环境上修修补补,直接删除重装往往更干净。卸载要彻底,因为 OpenClaw 的数据并不都在项目目录里,配置文件和数据库可能散落在系统其他位置。
# 停止服务 sudo systemctl stop openclaw sudo systemctl disable openclaw # 删除 systemd 服务文件 sudo rm /etc/systemd/system/openclaw.service sudo systemctl daemon-reload # 删除项目目录 sudo rm -rf /opt/openclaw # 删除用户数据目录(根据版本可能变化) rm -rf ~/.openclaw # 可选:清理数据库和缓存 rm -rf ~/.cache/openclaw干净重装的建议是换个全新目录,比如从/opt/openclaw换到/srv/openclaw,这样可以确认没有旧文件干扰。重装完成后如果发现某配置异常,大概率就是旧的残留数据没删干净,这是最容易踩的坑。
另外要说一下,如果你后续从 Windows 迁移到 Linux,注意把原来 Windows 下生成的环境变量和键值对一起迁移过来。有些配置字段的格式在两种平台下可能不一样,最典型的是路径分隔符,Windows 用反斜杠,Linux 用正斜杠,这个细节很隐蔽,但会让程序找不到文件。
我个人实际跑下来的最大体会是:OpenClaw 的部署流程本身难度不大,依赖的就是 Node.js 生态那套常规操作,真正花时间的是微信渠道的调试和账号风控的规避。所以真心建议你在 Linux 上用 systemd 托管服务,配一个国内可用的模型服务商,日常测试用小号、低频运行。配置文件记得养成备份习惯,升级前 cp 一份。上面的流程已经帮你把能踩的坑都填得差不多了,照着做应该能稳稳跑起来。如果还遇到别的奇怪报错,先翻 journalctl 日志,大多数问题在日志里都有明确答案。