OpenClaw(以前叫Clawdbot)这个名字,近半年在开发者圈子里出现的频率实在有点高。它本质上是一个开源的 AI 代理(Agent)运行框架,能把 Claude、DeepSeek、OpenAI 这些大模型的能力,变成部署在你自己服务器上的一个可执行助手。日常写小说、自动整理资料、调用命令行工具、接入微信飞书当机器人,都属于它的基本操作。很多朋友私下问我“怎么才能在云服务器上快速装一个能用的”,所以就结合 2026 年 3 月这个时间节点,把我在阿里云上从零到可用的完整过程整理成这篇笔记。
这篇文章不会只给你一句 curl 命令就完事。我会从一台全新的阿里云 ECS 开始,讲清楚选型、安全组、环境初始化、官方安装脚本跑完之后的配置、模型接入,以及安装完成后你一定会遇到的几个报错。文章适合第一次接触 OpenClaw 的新手,也适合已经装上但被各种异常卡住的朋友,照着顺序操作,四分钟左右就能把一个能对话、能接模型的 OpenClaw 跑起来。
1. 动手之前:服务器选型和基础准备
1.1 选什么样的阿里云服务器
先说服务器规格。OpenClaw 本身是一个 Node.js 应用,它要跑主进程,要跑 Control UI 控制界面,还要处理模型 API 的并发请求。如果你只是本地测着玩,2 核 2G 的机器能跑,但我不建议,因为 2G 内存一旦同时开几个会话,很容易触发 OOM 导致服务直接被杀掉。我的建议是 2 核 4G 起步,轻量应用服务器或者 ECS 都行,新用户活动价格通常能压到几十块一个月,这个成本换来的稳定体验非常值得。
系统镜像优先选 Ubuntu 22.04 LTS。为什么不是 Alibaba Cloud Linux 也不是 CentOS?OpenClaw 官方对 Ubuntu 的适配最完善,依赖安装最简单,Node、git、build-essential 这些包在 Ubuntu 源里都是现成的。CentOS 如果你很熟,也不是不能用,但遇到 node 版本过旧、编译工具链缺失的概率会大很多,新手没必要给自己加戏。
地域选择上,原则是尽量靠近你的日常访问网络。比如你在华东就用杭州或上海节点,在华南就选深圳或广州。带宽方面,轻量服务器一般自带固定带宽,建议 3M 以上。OpenClaw 安装时要拉依赖、拉镜像,运行时 Control UI 也要走网页传输,带宽太低会明显感觉卡。
1.2 登录方式和安全组配置
服务器购买完成后,第一件事是在阿里云控制台重置实例密码,或者绑定密钥对。Windows 用户可以用系统的 Terminal,也可以用 VS Code 的 Remote-SSH 插件登录;Mac 用户直接用自带的终端就行。登录命令就是最基础的 ssh root@你的公网IP,第一次登录会提示你确认主机指纹,输入 yes 回车,然后输密码。
这里要特别强调安全组。经常有人跑到我面前说“端口明明开了为什么访问不了”,结果一看,安全组根本就没放行。OpenClaw 安装完以后,你大概率要访问一个网页端的控制界面(Control UI),它默认跑在 8000 端口附近,具体要以你安装版本的官方文档为准。所以你在安全组里至少需要放行这几个端口:
- 22 端口:SSH 登录,默认就有。
- 8000 端口:OpenClaw 控制界面,给浏览器访问用。
- 如果你后续要接入飞书机器人这类外部回调,还得把对应的 webhook 端口放行,一般会用 8080。
安全组配置原则是“最小够用”,别图省事直接放行 0.0.0.0/0 的所有端口。控制界面如果只给自己用,可以把来源 IP 限制成你家里的公网 IP,或者在服务器上让服务只监听 127.0.0.1,再用 SSH 隧道访问。这个习惯在你真正部署到生产环境时会帮你避开很多安全风险。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境初始化:把地基打牢
2.1 连接服务器后的第一批操作
登录服务器以后,先不要急着装 OpenClaw,把基础环境理顺。我每次新开服务器都会按这个顺序操作:
bash复制apt update && apt upgrade -y
apt install -y curl git vim htop tmux
timedatectl set-timezone Asia/Shanghai
先更新系统包,再安装常用工具。时区改成上海这个操作很多人会忽略,但如果你后面要看日志定位问题,日志时间和北京时间对不上,排查起来非常痛苦。
OpenClaw 官方推荐用非 root 用户运行,但为了“零门槛安装”这个目标,教程里很多地方我还是用 root 演示。如果你要自己上生产环境,我建议创建一个普通用户,比如 openclaw,然后把 OpenClaw 装到这个用户的家目录下。这样即使某个依赖被攻破,攻击者拿到的也不是 root 权限,底线会高很多。
2.2 安装运行环境与镜像加速
OpenClaw 的核心运行时是 Node.js,官方要求 Node 20 以上的版本。Ubuntu 22.04 自带的 nodejs 版本通常不够,所以推荐用 nvm 安装:
bash复制curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install 20
nvm use 20
安装完以后把默认 npm 源切到阿里云镜像。这一步非常关键,尤其是你在中国大陆的网络环境下载 npm 依赖时,默认源经常超时或慢到怀疑人生。执行:
bash复制npm config set registry https://registry.npmmirror.com
npm install -g pnpm
如果你选择用 Docker 方式部署 OpenClaw,那还需要配置 Docker 镜像加速器。阿里云控制台里的容器镜像服务控制台,每个账号都会分配一个专属加速地址,把它写进 /etc/docker/daemon.json:
json复制{
"registry-mirrors": ["https://你的专属加速地址.mirror.aliyuncs.com"]
}
配好之后重启 Docker。这一步能让你拉镜像的速度提升几个量级。我在实际操作中见过太多人卡在“curl 安装脚本秒下,但 npm install 卡半小时”这种情况,根源基本都是源没配。
2.3 准备配置目录与环境变量
OpenClaw 安装完成后,它的配置会放在 ~/.openclaw/ 目录下,包括主配置文件、skills 目录、keys 目录等。在安装之前,你可以先把 API Key 的环境变量准备好。
比如你想用 DeepSeek,就在 ~/.bashrc 里追加:
bash复制export DEEPSEEK_API_KEY=sk-xxxxxxxx
export OPENCLAW_DEFAULT_MODEL=deepseek-chat
然后执行 source ~/.bashrc。为什么要用环境变量而不是直接写配置文件?因为配置文件有可能会被同步、备份、甚至不小心提交到 Git 仓库,一旦密钥泄露,你的 API 额度就会被人盗刷。环境变量的方式够用,而且切换模型时也方便。
3. 4分钟安装:核心步骤拆解
3.1 一键安装脚本做了什么
OpenClaw 提供了一条官方的一键安装命令,大致长这样(具体以官方文档最新版本为准):
bash复制curl -fsSL https://openclaw.ai/install.sh | bash
这条命令的原理并不复杂,就是下载安装脚本,然后交给 bash 执行。脚本内部会依次做这几件事:
- 检测你的操作系统架构和系统版本。
- 检查 Node.js 是否安装、版本是否满足要求。
- 下载 OpenClaw 主程序到本地,通常是某个用户目录下的
.openclaw文件夹。 - 把
openclaw命令软链到系统 PATH 里。 - 初始化目录结构,生成默认配置。
安装过程中最常见的卡点是网络问题。如果脚本下载主程序时特别慢或者直接失败,你需要先确认网络连接正常,然后可以手动把安装脚本下载到本地,分步执行,看看具体是哪一步出了问题。
装完之后,你在终端输入:
bash复制openclaw version
如果能正常输出版本号,说明安装已经成功。这一步通常只要一两分钟,主要取决于你的网络状况。
3.2 初始化与模型接入配置
安装完成后,第一次使用需要做初始化,运行:
bash复制openclaw init
这个命令会进入一个引导式的配置流程,问你选择哪个模型服务商、输入 API Key、选择具体模型等。它能自动把配置写入 ~/.openclaw/config.json,所以建议你仔细走流程,而不是直接跳过然后自己编辑 JSON,容易配置出错。
以 DeepSeek 为例,你选择 deepseek 之后,它会让你填 API Key,然后让你选模型。这里有个非常容易踩的坑:DeepSeek 的模型名必须是 deepseek-chat 或 deepseek-reasoner,你填 deepseek-v3、deepseek-r1 这类名称,OpenClaw 会原样把字符串发给 API,然后 DeepSeek 返回“模型不存在”,OpenClaw 就会报 agent failed before producing a reply。这个我后面在排查章节还会详细讲。
初始化完成后,你可以直接用交互模式验证一次对话:
bash复制openclaw
看到类似 You: 的提示符,输入一句“你好”,如果模型正常回复,说明整条链路已经通了。如果你愿意,也可以跳过交互式验证,直接启动 Control UI 从网页测试。
3.3 启动服务并保持运行
测试通过以后,你面临下一个问题:怎么让 OpenClaw 一直跑在服务器上,而不是你 SSH 一断开它就停了。最简单的方式是用 tmux:
bash复制tmux new -s openclaw
openclaw start
# 按 Ctrl+B 然后按 D 退出 tmux
退出 tmux 会话后,服务会继续在后台跑。但 tmux 方案的问题是服务器重启后不会自动恢复,所以更正规的做法是写一个 systemd 服务。在 /etc/systemd/system/openclaw.service 里写入:
ini复制[Unit]
Description=OpenClaw Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root
ExecStart=/root/.nvm/versions/node/v20.x.x/bin/openclaw start
Restart=on-failure
[Install]
WantedBy=multi-user.target
然后执行:
bash复制systemctl daemon-reload
systemctl enable --now openclaw
注意 ExecStart 里的 openclaw 路径要替换成你自己的实际路径,可以通过 which openclaw 查看。用 systemd 管理的好处是服务崩了会自动重启,服务器重启后也会自动拉起,省心很多。
Control UI 启动后,浏览器访问 http://你的服务器公网IP:8000 就能看到控制界面。如果打不开,先看安全组是否放行,再用 ss -lntp 确认端口有没有在监听,这个我在第五节会展开说。
4. 模型接入与多模型切换
4.1 接入 DeepSeek
之所以很多 OpenClaw 用户把 DeepSeek 作为首选模型,核心原因是便宜、中文效果好、上下文窗口长,而且接口兼容 OpenAI 格式。说白了,它就是目前“低成本高可用”的代表。
在 OpenClaw 里接入 DeepSeek,本质就是配置三样东西:接口地址、API Key、模型名。如果你选择用环境变量方式,关键示例是:
bash复制export OPENAI_BASE_URL=https://api.deepseek.com
export DEEPSEEK_API_KEY=sk-xxxxxxxx
export OPENCLAW_MODEL=deepseek-chat
如果你更倾向于直接改配置文件,~/.openclaw/config.json 里相关的部分大概长这样(不同版本字段名可能略有差异,但思路一致):
json复制{
"model": {
"provider": "deepseek",
"name": "deepseek-chat",
"apiKeyEnv": "DEEPSEEK_API_KEY",
"baseUrl": "https://api.deepseek.com"
}
}
改完配置后重启 OpenClaw,再用交互模式测试。注意 DeepSeek 的 baseUrl 是否带 /v1 后缀,不同版本要求不一样。如果模型一直报鉴权错误,先用 curl 自己测一下 API 是否正常,这是最直接的排障方式。
4.2 多模型配置与切换
很多人装 OpenClaw 不只是想用一个模型。日常闲聊用便宜模型,写代码用推理能力更强的模型,处理敏感数据用本地模型——这是 OpenClaw 多模型配置最典型的应用场景。
多模型配置的方式,是在配置文件里并列写多个 provider:
json复制{
"models": [
{
"name": "deepseek-chat",
"provider": "deepseek",
"apiKeyEnv": "DEEPSEEK_API_KEY",
"baseUrl": "https://api.deepseek.com"
},
{
"name": "claude-sonnet",
"provider": "anthropic",
"apiKeyEnv": "ANTHROPIC_API_KEY"
}
]
}
配置好后,在 OpenClaw 的交互界面里输入 /model 是查看模型列表,/model deepseek-chat 是切换模型。如果你是通过 Control UI 使用,一般在设置面板里也能切换。
这里提醒一句:每个 provider 的 API Key 环境变量一定要单独命名,不要图省事统一叫 API_KEY。因为你同时配置多个服务商时,OpenClaw 需要明确知道某个模型该用哪个 Key,环境变量一旦冲突,往往会出现诡异的鉴权错误。
4.3 接入 NVIDIA NIM 等本地模型
“OpenClaw 配置 nvidia nim”这个词最近热度很高,很多人是想把 OpenClaw 接到本地 GPU 机器上跑的 NVIDIA NIM 推理服务。NIM 是 NVIDIA 提供的模型推理微服务,它对外暴露的是 OpenAI 兼容接口,所以 OpenClaw 接入方式其实不复杂。
核心思路是:把 OpenClaw 里的 OpenAI 兼容配置指向 NIM 服务的地址。比如你的 NIM 跑在一台内网 GPU 机器上,OpenClaw 配置大概长这样:
json复制{
"model": {
"provider": "openai-compatible",
"name": "nvidia/llama-3.1-8b-instruct",
"apiKeyEnv": "NIM_API_KEY",
"baseUrl": "http://192.168.1.100:8000/v1"
}
}
这里 apiKeyEnv 对应的 NIM_API_KEY 可能只是一个占位字符串,因为 NIM 本身不强制校验 key,但 OpenClaw 要求必须有这个字段。你要做的最大工作,其实是先把 NIM 服务本身跑通,比如确认 curl http://192.168.1.100:8000/v1/models 能正常返回模型列表,再回来接 OpenClaw。
需要特别注意的是,如果你的 OpenClaw 跑在阿里云普通 ECS 上,这种机器通常没有 GPU,你没法直接在同一个机器跑 NIM。主流做法是单独开一台 GPU 实例跑 NIM,OpenClaw 所在的应用服务器通过内网或者公网去访问它。这样做的好处是数据链路完全掌握在自己手里,成本也不按 token 计费,适合有隐私要求或者高频调用场景。
5. 高频问题排查实录
5.1 Control UI did not start
这个问题在热搜词里出现频率极高,现象是安装好以后启动服务,终端提示 Control UI did not start,或者网页一直打不开控制界面。
我排查这个问题的顺序是固定的:
第一步,确认端口监听情况:
bash复制ss -lntp | grep 8000
如果没有任何输出,说明服务根本没监听 8000 端口。这时候去看日志,用 openclaw logs 或者直接看 ~/.openclaw/logs/ 目录下的文件,找出 UI 进程为什么没起来。常见原因是 Node 版本太低导致构建 UI 失败,升级 Node 版本后重启即可。
第二步,确认监听地址。如果你看到服务监听在 127.0.0.1:8000,那从公网访问自然是不通的,因为 127.0.0.1 只接受本机访问。你需要把监听地址改成 0.0.0.0,在配置文件里通常会有一个类似 host 的字段,改成 0.0.0.0 后重启。
第三步,确认安全组。如果你确认服务正常监听 0.0.0.0:8000,但网页还是打不开,那基本就是安全组没放行。回到阿里云控制台,检查安全组规则里有没有一条入方向允许 TCP 8000 端口的规则。
5.2 Agent failed before reply / unknown model
这个报错是 OpenClaw 用户问得最多的。现象是你在交互界面发消息,OpenClaw 卡一会儿,然后返回 the agent run failed before producing a reply,日志里可能跟着一句 unknown model: deepsee。
看到 unknown model 基本就是模型名写错了。热搜词里那个经典案例是 unknown model: deepsee,明显是把 deepseek-chat 少打了一个字符,或者你用的服务商实际模型名是 deepseek-chat,但你写成了 deepseek-v3。
遇到 failed before reply 这种通用报错,我的判断流程是这样:
- 先用
openclaw config get model或者直接查看配置文件,确认模型名的准确拼写。 - 用 curl 直接请求模型 API 的
/models接口,验证这个模型名是否存在。比如 DeepSeek,可以执行:
bash复制curl https://api.deepseek.com/models \
-H "Authorization: Bearer sk-xxxxxxxx"
- 如果模型名没问题,再看 API Key 是否有效。换一个测试 Key,或者检查环境变量有没有被正确加载。
- 最后看 base_url。很多服务商接口地址有
/v1和没有/v1是不同的,OpenClaw 内部可能自己会拼一次路径,你需要在配置里试出正确写法。
大多数情况下,90% 的 failed before reply 都是配置错误,不是 OpenClaw 本身的问题。把配置逐项核对,比盲目重装有效得多。
5.3 Windows 本机环境的 node runtime not found
虽然这篇文章主场景是阿里云服务器,但大量用户其实是在自己 Windows 电脑上先踩了坑,才转到服务器部署。Windows 上安装 OpenClaw 时经常会遇到 openclaw node runtime not found,我这边也收到过不少次求助。
原因也很直接:OpenClaw 在 Windows 上是通过 nvm-windows 或者全局 Node.js 来寻找运行时,找不到的原因通常是 Node 没装、装了但没加到 PATH,或者你是用 nvm-windows 装的 Node 但是没有 nvm use 激活某个版本。
解决办法:
- 确认 Node 装了没:
node -v,能输出版本号才行。 - 确认命令所在路径在 PATH 里:
where node。 - 如果你用 nvm-windows,先执行
nvm list看有哪些版本,再nvm use 20.x.x。
还有一个小坑:装完 Node 后不要忘了重新打开终端,新开的终端才会重新加载 PATH。如果你在旧终端里直接跑,依然会报找不到。
5.4 微信/飞书接入失败
另一个高频需求是把 OpenClaw 接入 IM 工具。接入飞书相对稳,因为飞书有官方的机器人 API,你只需要创建一个企业自建应用,拿到 App ID 和 App Secret,再把事件订阅的回调地址填成 http://你的服务器IP:8080/webhook 之类的外网地址,然后在 OpenClaw 配置里启用飞书 adapter 即可。
失败的情况大多是两个原因:第一,安全组没放行回调端口;第二,回调地址写的不是公网地址,或者服务监听在 127.0.0.1 导致外部请求进不来。用阿里云服务器的好处是它有固定公网 IP,回调地址可以直连,不需要额外中转。
微信接入我多说一句:个人微信的自动化存在账号风控风险,不建议拿自己的主力微信号去折腾。如果你确实有需求,优先考虑企业微信,它有官方接口,安全性有保障。OpenClaw 社区里有不少 adapter 封装了企业微信的机器人接口,你可以按官方文档配置。
5.5 问题速查表
| 现象 | 大概率原因 | 快速解法 |
|---|---|---|
| Control UI 打不开 | 安全组未放行端口 | 阿里云控制台放行 8000 |
| Control UI did not start | Node 版本过低 | 升级 Node 到 20+ |
| 外网访问不到 UI | 服务监听 127.0.0.1 | 改成 0.0.0.0 并重启 |
| unknown model: xxx | 模型名拼写错误 | 查 API 文档确认准确名称 |
| agent failed before reply | Key/模型名/baseUrl 错误 | 用 curl 逐步测试 API |
| node runtime not found | Node 未装或不在 PATH | 安装 Node 并激活版本 |
| 飞书回调失败 | 安全组未放行回调端口 | 放行 webhook 端口 |
| 微信接入提示风险 | 个人号自动化被风控 | 改用企业微信接口 |
6. 进阶玩法:从能跑到好用
6.1 编写自定义 Skill
OpenClaw 最吸引我的地方不是它本身能对话,而是它提供了比较成熟的 Skill 机制。你可以把 Skill 理解成给 AI 加的一个工具,比如你想让它能查天气、查数据库、调公司内部 API,都可以通过写一个 Skill 来实现。
Skill 的目录一般放在 ~/.openclaw/skills/ 下,每个 Skill 是一个独立文件夹,里面包含脚本和描述文件。以“查询服务器磁盘状态”为例,结构大致是:
text复制~/.openclaw/skills/disk-status/
├── skill.json
└── script.py
skill.json 描述这个 Skill 的名称、描述、参数,OpenClaw 会根据这段描述决定什么时候调用它:
json复制{
"name": "disk_status",
"description": "查询当前服务器的磁盘使用情况",
"parameters": {
"type": "object",
"properties": {}
}
}
script.py 就是实际执行逻辑:
python复制import shutil
total, used, free = shutil.disk_usage("/")
print(f"总空间: {total / 1024**3:.1f} GB")
print(f"已使用: {used / 1024**3:.1f} GB")
print(f"剩余: {free / 1024**3:.1f} GB")
配好之后,你在对话里说“看看服务器磁盘还剩多少”,OpenClaw 就会把这个请求转成工具调用,命中的就是 disk_status 这个 Skill。这个机制做到极致以后,OpenClaw 基本上就是一个能读懂你意图的 DevOps 助手。
6.2 接入 IM 平台
把 OpenClaw 接到飞书、钉钉或企业微信后,它就能变成一个团队可用的 AI 机器人。比如你的同事可以在飞书群里直接问它“这个月的服务器账单是多少”,OpenClaw 调一个账单查询 Skill,然后回传到群里。
飞书的接入步骤大概是这样:
- 在飞书开放平台创建企业自建应用,开启机器人能力。
- 配置事件订阅,回调地址指向
http://你的IP:8080/webhook。 - 拿到 App ID 和 App Secret,填到 OpenClaw 配置里。
- 在安全组放行 8080 端口。
- 重启 OpenClaw,去飞书群里 @机器人 测试。
整个过程比较顺,因为飞书官方接口文档很清晰。钉钉和企业微信的思路类似,只是 api 字段不同。唯一要注意的是回调地址必须是公网可达,这也是我推荐用阿里云服务器来跑这类应用的原因,省掉了很多内网穿透的麻烦。
6.3 Docker 部署与本地运行
除了直接二进制安装,OpenClaw 也支持 Docker 部署,命令类似:
bash复制docker run -d --name openclaw \
-v ~/.openclaw:/root/.openclaw \
-p 8000:8000 \
-e DEEPSEEK_API_KEY=sk-xxx \
openclaw/openclaw:latest
用 Docker 的好处是环境隔离、升级方便。比如你在一台机器上同时跑多个 OpenClaw 实例做不同项目,用容器就不会互相污染。坏处是你要对 Docker 的网络和卷挂载有基本了解,否则容易出现“容器里改配置,容器外看不到”这种诡异问题。
另外,近期有一个很火的场景是 mac mini 本地跑 OpenClaw。做法是 mac mini 装 Docker Desktop,然后用 Docker 跑 OpenClaw,再配上本地模型或远程模型。它的优势是低功耗、可以 24 小时开机当家庭服务器,适合玩本地模型和自动化家居场景。如果你追求极致的部署便利,mac mini 也是一个不错的选择。
6.4 二次开发思路
如果你不满足于“开箱即用”,想 Deep Dive 到 OpenClaw 的内部逻辑,那就涉及二次开发。OpenClaw 是开源项目,源码在 GitHub 上,整体是一个 Node.js/TypeScript 项目。建议的入手路径是:
- Fork 官方代码到自己的仓库。
- 本地把项目跑起来,先理解 Agent 的主循环:接收消息、调用模型、处理工具调用、返回结果。
- 从“加一个新的 adapter”开始练手,比如接一个新的 IM 平台,或者改一个工具调用的返回值处理。
二次开发最常见的需求是接入公司内部系统。比如你们有一套内部的工单系统,想要让 OpenClaw 能查询工单状态、创建新工单,可以直接写一个 Skill,也可以用 TypeScript 写一个更复杂的插件。
这里要给个忠告:改源码之前先确保官方原版能稳定运行。我见过太多人一上来就 fork 改代码,结果模型配置都没对,最后把问题全归咎于“开源项目有问题”。先把基础链路跑通,把改动范围控制在一个点,出了问题才容易定位。
最后再分享一个实际操作上的小技巧:OpenClaw 这种长期运行的服务,日志很重要。我习惯在 ~/.openclaw/logs/ 目录下定期清理旧日志,同时写一个简单的 crontab 任务,每天备份配置文件和 Key 环境变量文件到本地。另外,如果你的服务器上还跑着其他 Web 服务,记得设置好阿里云的 SSL 证书自动续期,证书过期导致服务异常这种事,真等到用户发现再处理就太被动了。
我在实际部署中最大的感受是:安装 OpenClaw 四分钟确实够用,但真正决定你能不能长期用下去的,是配置管理、服务守护和排障能力这三件事。把前面这些步骤走一遍,你的 OpenClaw 至少能稳定跑半年不用再折腾。
