OpenClaw 部署避坑实录:把闲鱼那 99 上门费,自己省下来
上门部署收你 99,干的其实就是几条命令的活。这篇把卡住所有人的几个坑挨个拆开,每个给现成命令。走完,你就是自己的上门师傅。
一、那 99 到底买的是什么
OpenClaw 的热度从年初的百万微信指数跌到四分之一之后,闲鱼和淘宝上反而冒出来一批「上门部署」服务,报价 99 到 999。我翻了几家的服务说明,剥掉话术,交付清单基本是三件:搭好 Docker 运行环境把服务跑起来;对接一个飞书或企微 Bot,让你能在群里 @ 它;再装三个基础 Skills,演示一下能用。
就这些。Bot 对接是填 Webhook 的配置活,谈不上难;装 Skills 一条 clawhub install 的事。真正让人愿意掏这 99 的不是步骤多复杂,是中间那几个坑。尤其在便宜的低配云服务器上,它们能把人卡到怀疑人生:npm install 跑一半进程没了、git 拉依赖报一句看不懂的英文、升级完 Agent 突然不干活了。卡在这儿,一晚上耗进去还是黑屏,99 就显得「值」了。
这篇替你把这几个坑挨个走一遍。我假设你和我条件差不多:租了台两核两 G 的小机器,有点命令行底子,自己装的时候在某一步卡住过。下面每个坑都给能直接复制的命令,更要紧的是讲清楚它为什么卡,这样哪天换台机器、换个版本,你照样知道怎么办。那 99 买的不过是别人帮你装一次;你自己会了,往后就再不用求人。

二、坑一 · 低配机 npm install 被 OOM 杀掉
劝退第一名。源码部署 OpenClaw,标准动作是 git pull && npm install。在 1G、2G 内存的小机器上,install 跑到一半,进程毫无征兆地消失,终端只剩一行冷冰冰的 Killed。
先搞清楚是谁动的手。 这不是 npm 的 bug,是 Linux 内核里的 OOM Killer 干的。npm install 默认会顺带编译一个本地依赖 llama.cpp,OpenClaw 拿它做本地模型推理。编译这东西峰值要吃 2GB 以上内存。你的小机器物理内存本就不够,内核眼看要爆,干脆挑了最占内存的那个进程(正在编译的 node)一刀杀掉保命。想实锤,看一眼内核日志:
dmesg | grep -i "killed process"
冒出 Out of memory: Killed process ... 那就对上了。
兜底方案:给系统加块 Swap。 相当于从硬盘划一块出来当「备用内存」,编译时真不够了就往这儿溢。先看现状:
free -h
Swap 那行如果是 0,配个 2G 的:
sudo fallocate -l 2G /swapfile
sudochmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
官方建议很直接:物理内存低于 4GB 的服务器,Swap 至少留 2GB。配完再跑 install,编译就不会因为内存瞬时见底被打断。
釜底抽薪:根本别编译它。 Swap 是拿硬盘充数,编译会拖很久。更值得问一句:你真的需要本地模型推理吗?如果你打算用的是云端模型(GPT、Claude、DeepSeek、Kimi 这些走 API 的),本地推理你压根用不上。用不上,那段要命的编译就完全可以跳过:
npm install --ignore-scripts
--ignore-scripts 让 npm 跳过依赖包里的编译脚本,llama.cpp 不编了,2GB 的内存峰值需求凭空消失,install 几分钟干净跑完。代价只有一个:没有本地模型推理,而这东西对绝大多数人恰恰用不上。
我的判断:纯云端模型路线,直接 --ignore-scripts,又快又省心;确实要跑本地模型的,再老实配 Swap 慢慢编。别两个都上,那是花两份力气办一件事。
三、坑二 · install 卡在 git@github 拉不动
第二个坑,install 没被杀,但卡在拉依赖那一步,吐一句:
Permission denied (publickey).
fatal: Could notreadfrom remote repository.
为什么会这样。 OpenClaw 有一部分 npm 依赖不是从 npm 官方源装的,而是直接从 GitHub 仓库拉,地址写成了 git@github.com:... 这种 SSH 形式。SSH 拉取要求你这台服务器配过 GitHub 的 SSH Key。新开的云服务器当然没配,GitHub 一口回绝,install 当场中断。
一行命令绕过去。 你可以老实生成 SSH Key、再去 GitHub 后台贴上。但有更省事的办法:让 git 把所有 SSH 形式的 GitHub 地址自动改写成 HTTPS。
git config --global url."https://github.com/".insteadOf git@github.com:
这条 insteadOf 是个全局改写规则:往后任何 git@github.com: 开头的地址,git 都自动替换成 https://github.com/ 再去拉。公开仓库走 HTTPS 不需要任何凭证,install 立马就通。比配 SSH Key 少好几步,也省了保管 Key 的心。(这条只对公开仓库免凭证,OpenClaw 的依赖恰好都是公开的,不用操心;哪天撞上私有依赖,那才需要回头配 Key 或 token。)配完重新跑一次 npm install 就行。要是上一步同时撞了 OOM,记得带上 --ignore-scripts。
四、坑三 · 升级翻车要能退回去:备份 + 回滚
前两个坑是「装不上」,这个坑是「装上了,一升级又坏了」。OpenClaw 迭代很快,升级动作就是 git pull && npm install。但新版本翻车真不是稀罕事,小到改个默认配置让 Agent「变哑巴」,大到依赖不兼容整个起不来。
最有名的一次,是某个版本把默认 profile 从 full 悄悄改成了 messaging,升级完所有人发现 Agent 不能读写文件、不能联网、不能执行任何操作,活活变成只会聊天的哑巴。那回社区两小时就定位了,改回 full 就好。可问题是:你怎么提前知道下一次翻车,是改一行配置能救,还是得整个退回去?答案是别赌,升级前先给自己留好退路。
升级前必做:备份数据目录。 回滚的前提是你的数据还在。OpenClaw 的状态都压在数据目录里:SQLite 数据库(频道绑定、记忆、缓存)加上你的配置文件。升级前整个拷一份,路径按你部署时设的实际位置改:
cp -r <你的数据目录> <你的数据目录>.bak
这一步花十秒,能让后面所有操作都「可逆」。省掉它,回滚就是空话。
真翻车了:四步退回去。
git log --oneline -10 # 1. 看最近十次提交,认出升级前那个
git checkout <commit-hash> # 2. 切回升级前的版本
npm install # 3. 按旧版本重装依赖(低配记得 --ignore-scripts)
# 4. 重启服务,必要时用备份目录覆盖回数据
这一步最容易被跳过,偏偏它最值钱。 部署一个迭代这么快的开源项目,能不能升级成功你控制不了,但翻车了能不能十分钟退回去,你完全能控制。把可回滚当成部署的一部分,别赌每次 git pull 都平安落地。上门师傅不会教你这一条,因为他装完就走了,你下次翻车还得再付一次钱。
五、更省事的一条路 · slim 镜像 + 预装 Skills
前面三个坑,都在源码部署(npm install)这条路上。其实还有一条更省心的路,正好把 99 清单里「搭 Docker 环境」和「装 3 个 Skills」两件事一起办了:用官方 Docker 镜像,但要用对版本、设对变量。
用 slim 镜像,别用默认的。 默认镜像 4.2GB,因为把本地模型推理一起打包了,低配机光拉镜像就够呛,首次启动要五分钟。设一个环境变量换成精简版:
OPENCLAW_VARIANT=slim
slim 不含本地推理,镜像 890MB,启动 45 秒。又是「没有本地推理」,但这跟我们一路走的纯云端路线正好合拍,等于没损失。低配机拉镜像、起服务的体验,跟默认版完全是两回事。
启动时顺手把 Skills 装了。 再设一个变量,让容器一起来就自动装好指定 Skills:
docker run -d --name openclaw \
-e OPENCLAW_VARIANT=slim \
-e OPENCLAW_EXTENSIONS=tavily-search,web-fetch,lark-doc \
<官方镜像名>
OPENCLAW_EXTENSIONS 用逗号分隔要预装的 Skills,容器一启动就自动拉好。99 服务清单里「装三个基础 Skills」那一步,到这儿就是一行环境变量的事。镜像名以官方仓库为准,其余照抄即可。
结尾 · 这几条命令,就是那 99 的全部含金量
回头看,上门师傅那 99 买到的,拆开就是这么几样:会配 Swap 或干脆 --ignore-scripts 绕开 OOM、会用 insteadOf 把 git 改道、会备份和回滚、会用 slim 镜像加预装变量。没有一样是黑魔法,全是「知道了就五分钟、不知道就耗一整晚」的差距。
而你现在知道了。
把这页命令存成一份属于你自己的部署 checklist,下次开新机器照着走一遍,十几分钟搞定。OpenClaw 退潮、噪音散去之后,留在牌桌上的不是肯花 99 的人,是愿意自己动手、把每个坑都搞明白的人。这点折腾的能力,比一次省下的 99 值钱得多,而且越用越值钱。
夜雨聆风