适用场景
如果你想有一个 7×24 小时在线、能通过聊天软件随时派活的 AI 助手——早上自动汇总待办、白天帮你查资料改稿、晚上把结果推到手机上——而不是每次打开网页重新解释一遍背景,那么把 OpenClaw 这类可自托管的智能体常驻在一台小机器上是个务实的选择。这套方案适合有一定命令行基础、愿意自己管一台 VPS 或闲置 Mac mini 的开发者、运维和重度工具型用户,解决的是「智能体只在对话框里、进不了真实工作流」的问题。本文跑通的是最小可用闭环:装好、接上聊天渠道、把权限收紧、下发第一个任务、看得见 AI 词典:Token">Token 花在哪。
环境与前置条件
- 机器:一台可以长期开机的设备。1 核 2 GB 内存的 VPS 能跑起来,但如果你打算让它执行编译、跑脚本这类任务,建议 2 核 4 GB 起步。磁盘留 20 GB 以上,模型缓存、日志和临时文件会持续增长。
- 不建议装在你的主力工作机上。常驻智能体能读写文件、执行命令,装在存着 SSH 私钥、浏览器 Cookie、公司代码的机器上,等于把攻击面拉满。宁可多花一台小机器的钱。
- 操作系统:主流 Linux 发行版(Debian/Ubuntu 系最省事)或 macOS。Windows 建议走 WSL2,别直接装在宿主机。
- 运行时:Node.js,具体主版本要求以 OpenClaw 官方文档当前版本为准。装之前先用
node -v确认,版本过低会在安装阶段直接报EBADENGINE。 - 模型 API Key:至少一个可用的模型服务商密钥(Anthropic、OpenAI 或兼容接口的第三方网关)。
- 一个聊天渠道的凭证:Telegram Bot Token 最容易拿到,本文以它为例;WhatsApp、Discord、Slack 等渠道的接入方式以官方文档为准。
- 网络:能访问模型 API 和消息平台。国内机器访问部分服务商可能需要额外处理,这一点在选机器时先想清楚。
分步骤部署
步骤 1:创建专用系统用户
不要让智能体以 root 或你的日常账号运行。单独开一个用户,把它的家目录当作它的「整个世界」。
```bash
sudo adduser --disabled-password --gecos "" claw
sudo su - claw
```
adduser 交互式地创建用户,成功后 id 命令能看到 uid=... (claw)。之后所有安装和运行都在这个用户下进行。
步骤 2:安装 Node.js
用发行版自带的包管理器装的 Node 往往版本偏旧。推荐用 nvm 或官方二进制包,版本按官方文档要求选 LTS。
```bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.bashrc
nvm install --lts
node -v
npm -v
```
能打印出版本号即为成功。如果 nvm 命令找不到,说明 shell 配置文件没重新加载,重开一个终端或 source ~/.bashrc。
步骤 3:全局安装 OpenClaw
```bash
npm install -g openclaw@latest
openclaw --version
```
安装命令与包名以官方文档当前给出的为准,@latest 表示装最新版。openclaw --version 能输出版本号,说明二进制已经进了 PATH。如果提示 command not found,多半是 npm 全局 bin 目录不在 PATH 里,用 npm config get prefix 查一下路径,把它的 bin 子目录加进 ~/.bashrc 的 export PATH=。
步骤 4:跑引导向导,接入模型
```bash
openclaw onboard
```
向导会交互式地问你:用哪个模型服务商、API Key 是什么、用什么渠道、工作目录放哪。按提示填完,配置会落到用户目录下的配置文件夹(通常是 ~/.openclaw,以官方文档为准)。
Key 不要直接写在命令行历史里。可以先 export ANTHROPIC_API_KEY=...(或对应服务商的环境变量名),向导一般能读到你已有的环境变量。
这一步成功的标志是向导最后打印出配置已保存的提示,并且 openclaw config 或等价命令能列出你选的默认模型。
步骤 5:接上 Telegram
在 Telegram 里找 @BotFather,/newbot 建一个机器人,拿到 Bot Token。然后:
```bash
openclaw channels add telegram
```
把 Token 粘进去。接着在 Telegram 里给你的 bot 发一条消息,看有没有回复。同时在配置文件里把允许对话的用户 ID 写进白名单——只留你自己的账号,否则任何搜到你 bot 的人都能指挥它。
步骤 6:让进程常驻
前台跑着,SSH 一断就没了。用 systemd 托管:
```bash
sudo tee /etc/systemd/system/openclaw.service > /dev/null <<'EOF'
[Unit]
Description=OpenClaw Agent
After=network-online.target
[Service]
Type=simple
User=claw
WorkingDirectory=/home/claw
ExecStart=/bin/bash -lc 'openclaw gateway'
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now openclaw
```
ExecStart 里的子命令名(这里是 gateway)以官方文档为准,不同版本可能叫法不同,用 openclaw --help 核对。
```bash
systemctl status openclaw
```
看到 active (running) 即成功。macOS 上对应改用 launchd,或者先用 tmux 顶一阵子。
步骤 7:权限收敛
这是最容易被跳过、也最该认真做的一步。
- 目录边界:把工作目录限制在
/home/claw/workspace,配置里明确写死允许读写的路径,不要给整个 home。 - 工具白名单:默认只开你真正需要的工具。文件读写、shell 执行、浏览器控制这几类风险等级不同,先只开读文件和搜索,确认跑顺了再逐个放开。
- 命令确认:如果有关闭「执行前询问」的开关,日常任务为主的场景可以保留询问,只在定时任务里用宽松模式。
- 密钥隔离:API Key 放在
~/.openclaw/.env之类的文件里,chmod 600,不要写进代码或聊天记录。 - 不做的事:不要给智能体你公司的生产环境凭证,不要让它可以
sudo,不要让它监听公网端口(除非你清楚自己在做什么并配好鉴权)。
改完配置重启服务:sudo systemctl restart openclaw。
步骤 8:下发第一个任务
在 Telegram 里直接说话就行,例如:
> 帮我看一下 ~/workspace/inbox 目录下今天新增的文件,把每个文件的标题和要点整理成 5 条以内的清单发给我。
再配一个定时任务,让它自己动起来:
```bash
openclaw cron add \
--name "morning-brief" \
--schedule "30 8 * * *" \
--prompt "汇总昨天我发给你但还没处理的待办,输出成三条以内的清单"
```
定时任务的具体子命令和参数以官方文档为准,用 openclaw cron --help 看当前语法。成功的标志是第二天早上 8:30 你确实收到一条消息。
步骤 9:盯住 Token 成本
常驻智能体的花费来自三处:你主动对话、定时任务、心跳或后台巡检。前两项好理解,第三项容易被忽略——一个每 15 分钟醒一次的配置,一天就是近百次调用,哪怕每次很便宜,累积起来也够看。
做法:
- 在模型服务商后台设置月度消费上限和余额告警,这是最后一道闸。
- 用
openclaw自带的用量查询(命令名以openclaw --help为准)每周看一次调用次数和 token 消耗。 - 把后台巡检的间隔从分钟级调到小时级,能省掉大部分无意义调用。
- 定时任务尽量指定便宜的小模型,只有需要长文推理的任务才走高配模型。
费用取决于所选模型单价与你实际的 token 用量,具体数字以服务商官方定价页面为准,这里不给估算。
验证部署是否成功
按顺序跑一遍,每项都过才算真的通了:
```bash
1. 进程状态
systemctl status openclaw --no-pager
2. 版本与配置
openclaw --version
openclaw config list
3. 健康自检(命令名以 openclaw --help 为准)
openclaw doctor
4. 最近日志有无报错
journalctl -u openclaw -n 100 --no-pager
```
预期结果:第 1 条出现 active (running);第 3 条各项检查为通过状态,至少包含模型连通性、渠道连通性两项;第 4 条里没有连续的 ERROR、401、ECONNREFUSED。
最后做端到端验证:在 Telegram 里发一句「现在几点,你运行在哪台机器上」,两分钟内收到带时间和你主机名的回复,说明模型、渠道、执行环境三层全通。
常见报错与解决
1. npm ERR! code EBADENGINE / Unsupported engine
→ 原因:Node.js 版本低于 OpenClaw 要求的最低主版本。
→ 解决:
```bash
node -v
nvm install --lts && nvm use --lts
npm install -g openclaw@latest
```
装完重新 node -v 确认版本已切换。
2. openclaw: command not found
→ 原因:npm 全局 bin 目录不在 PATH 中,或安装到了别的用户下(比如用 sudo 装成了 root 的)。
→ 解决:
```bash
npm config get prefix
echo 'export PATH="$(npm config get prefix)/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
which openclaw
```
如果 which 仍为空,检查是不是用 root 装的,卸掉重来:sudo npm uninstall -g openclaw,再切回 claw 用户安装。
3. 模型调用返回 401 Unauthorized 或 invalid api key
→ 原因:Key 没被读到、抄漏字符、或环境变量名与配置里引用的名字不一致。
→ 解决:
```bash
env | grep -i api_key # 确认变量存在
openclaw config list # 确认配置引用的变量名一致
sudo systemctl restart openclaw
```
注意 systemd 启动的服务不会继承你 SSH 会话里的临时 export。要么写进服务用户的环境文件,要么在 unit 里加 EnvironmentFile=/home/claw/.openclaw/.env。
4. Telegram 侧报 409 Conflict: terminated by other getUpdates request
→ 原因:同一个 Bot Token 被两处同时轮询。常见于你在前台手动跑了一份,systemd 服务又在跑一份。
→ 解决:
```bash
ps aux | grep -i openclaw # 找出重复进程
sudo systemctl restart openclaw
```
只保留 systemd 托管的那一个实例,其余 kill 掉。
5. 服务反复重启,日志出现 EADDRINUSE
→ 原因:上次进程没退干净,端口被占。
→ 解决:
```bash
ss -lntp | grep <端口号>
kill -9 <占用的 PID>
sudo systemctl restart openclaw
```
6. 任务执行中途被杀,日志里是 Killed 或 OOM 相关字样
→ 原因:内存不足。小内存 VPS 上跑带浏览器的任务很容易触发。
→ 解决:加 swap,或者把这类任务改成异步、分批处理。
```bash
free -h
sudo fallocate -l 2G /swapfile && sudo chmod 600 /swapfile
sudo mkswap /swapfile && sudo swapon /swapfile
```
后续维护
备份:整个 ~/.openclaw 目录就是它的全部状态——配置、渠道凭证、记忆、会话历史。每周打包一次,加密后传到别处:
```bash
tar czf ~/openclaw-backup-$(date +%F).tar.gz ~/.openclaw
```
备份包里含 API Key,别扔进公开仓库。
升级:先看官方 CHANGELOG 里有没有破坏性变更,再动手。
```bash
npm install -g openclaw@latest
sudo systemctl restart openclaw
openclaw doctor
```
升级后跑一遍 doctor,确认渠道和模型仍然连通,再观察一天日志。
日志:journalctl -u openclaw -f 日常看;担心磁盘被撑爆时,在 unit 里加 SystemMaxUse=500M 限制 journal 总量。
监控:最省事的做法是让智能体每天给自己发一条心跳消息,连续两天没收到就说明挂了。再往前一步,用 uptime 监控服务盯住端口,或者写个 cron 定时 systemctl is-active openclaw,异常时推送到你的另一个渠道。
成本与密钥:每月对一次账,看服务商账单和你的用量记录是否对得上;API Key 建议每季度轮换一次,换完记得同步更新环境文件并重启服务。
迭代节奏:先把单渠道、单任务跑稳两周,再逐步加渠道、加技能、放开工具权限。常驻智能体的坑大多出在「一次开太多」——先用最小闭环建立信任,再谈自动化到什么程度。
