OpenClaw 在 Ubuntu 22.04.5 LTS 上的安装与问题处理记录

整理说明:本记录通过小龙虾OpenClaw依据本地记忆文件、历史会话记录和当前运行配置整理,重点保留可复用的安装步骤、故障现象、根因判断和解决办法。

一、环境概况

操作系统:Ubuntu 22.04.5 LTS

OpenClaw 状态目录:/home/node/.openclaw

工作目录:/home/node/.openclaw/workspace

运行时 Node:已迁移为系统 Node,node / npm / openclaw 解析到 /usr/bin 下的系统安装版本。

OpenClaw 版本线索:配置中 lastTouchedVersion 为 2026.3.13;运行状态里显示 Node 24.14.0。

主要接入方式:Gateway + QQ Bot。

二、安装与部署过程梳理

1. 基础安装思路

本次环境最终采用"系统级 Node + OpenClaw + systemd 管理 Gateway 服务"的方式,而不是继续依赖 nvm 下的 Node 运行。

整理后的推荐安装顺序如下:

(1)准备系统环境:确保 Ubuntu 22.04.5 LTS 可正常使用 apt,建议 root 或具备 sudo 权限。

(2)安装系统级 Node.js 与 npm,保证 node、npm 可直接从系统 PATH 调用。

(3)全局安装 OpenClaw,使 openclaw 命令可直接使用。

(4)初始化 /home/node/.openclaw 下的配置与 workspace。

(5)通过 systemd 安装并管理 gateway 服务,确保开机自启、可探活、可重启。

(6)根据需要接入 QQ Bot,并在 openclaw.json 中写入 appId、clientSecret 等配置。

2. 实际落地后的结构

OpenClaw 的配置文件位于 /home/node/.openclaw/openclaw.json。

Gateway 通过 systemd 管理;后续排查中多次使用 openclaw gateway status、openclaw status 以及 systemctl 进行状态确认。

QQ Bot 接入已成功,日志中可以看到获取 access token、发送消息、接收 C2C_MESSAGE_CREATE 事件等正常行为。

三、安装和使用过程中遇到的主要问题

问题 1:OpenClaw 运行最初依赖 nvm,后续需要迁移到系统 Node

现象:运行环境混用 nvm 路径和系统路径,Gateway 服务的 Node 来源不够统一,后期维护和 systemd 管理容易出现偏差。

根因:OpenClaw 初期依附于用户环境中的 nvm Node;而 systemd 服务更适合绑定稳定的系统级 Node 路径。

解决方法:将 OpenClaw 运行时迁移到系统 Node,确认 node、npm、openclaw 都解析到 /usr/bin;同时让 Gateway 服务也使用系统 Node。

结果:运行时来源统一,后续对 systemd、PATH、服务状态的判断更稳定。

问题 2:Gateway 的 systemd 管理存在 user scope 与 system scope 混淆

现象:机器上曾同时存在用户态 unit 残留和系统级 unit,CLI 对服务状态的识别被误导。

典型表现:虽然实际服务已经 running,但 openclaw gateway status 在某些阶段仍然显示异常或误判,尤其容易偏向 systemctl --user。

根因:同名服务同时存在于 ~/.config/systemd/user/ 与 /etc/systemd/system/,CLI 在 scope 识别上受到残留 unit 干扰。

解决方法:

(1)明确采用 root + 系统级 systemd 方案。

(2)备份或移除用户态残留 unit,避免继续误判。

(3)修正 OpenClaw 对 Linux systemd scope 的识别逻辑,使其在 user bus 不可用时回退到系统级 systemctl。

结果:服务层恢复清晰,systemd 管理链路能够围绕系统级 unit 正常工作。

问题 3:控制台或状态页偶发显示异常,日志提示 missing scope: operator.read

现象:Gateway 实际正常,但控制台某些状态读取失败,容易让人误以为服务不可用。

日志特征:status、system-presence、config.get 等请求返回 missing scope: operator.read。

根因:当前连接到 control UI / webchat 的会话权限不具备 operator.read,对"查看类信息"有限制。

解决方法:把这类现象与"服务真的挂了"区分开。先用 openclaw gateway status、RPC probe、监听端口、日志确认服务本身是否正常,再单独处理控制台权限问题。

结果:明确了这是"权限视角问题",不是 Gateway 本身宕机。

问题 4:为了提升安全性而启用 sandbox 后,机器没有 Docker,导致 agent 无法回复

现象:QQ 私聊和主会话都出现 agent failed before reply,无法正常回答。

报错特征:Sandbox mode requires Docker, but the docker command was not found in PATH。

根因:配置把 agents.defaults.sandbox.mode 调成了 all,但当前机器没有安装 Docker。

解决方法:

方案 A:安装 Docker,并确保 docker 命令在 PATH 中可用。

方案 B:如果当前机器不准备安装 Docker,则把 agents.defaults.sandbox.mode 改回 off,避免嵌入式 agent 直接失败。

经验结论:在 Ubuntu 服务器上启用 OpenClaw sandbox 前,必须先确认 Docker 已安装且服务可用,否则会直接影响消息回复。

问题 5:QQ 通道安全收紧后,allowFrom 为空会导致私聊被全部拦截

现象:为了避免 QQ 来源全开放,配置把 dmPolicy 调成 allowlist,但 allowFrom 为空。

日志与 doctor 提示:channels.qqbot.dmPolicy is allowlist but allowFrom is empty --- all DMs will be blocked。

根因:安全策略收紧后,没有把实际需要放行的 QQ 用户 ID 加回白名单。

解决方法:将需要使用的 QQ sender ID 精确加入 channels.qqbot.allowFrom;如果已有配对记录,也可使用 openclaw doctor --fix 协助迁移。

结果:QQ 私聊既能恢复可用,又避免像 ["*"] 那样完全开放。

问题 6:系统环境维修期间,MySQL 异常拖慢了 OpenClaw 所在主机的整体部署节奏

现象:apt / dpkg 被卡住,mysql-server-8.0 长期 half-configured,日志反复出现 1396 Operation ALTER USER failed for root@localhost。

根因:升级用的临时 MySQL 实例里只有 root@% ,缺少 root@localhost,导致 postinst 脚本执行 ALTER USER 失败。

解决方法:

(1)先区分正式 mysql.service 与升级拉起的临时实例。

(2)清理互相抢锁的维护 / 临时 mysqld。

(3)连接升级临时 socket,检查 mysql.user。

(4)如果只有 root@% ,则复制补出 root@localhost。

(5)恢复正式 mysql.service,并用 systemctl status mysql、mysqladmin ping 验证。

(6)最后用完整 root PATH 重跑 dpkg --configure -a 和 apt-get -f install。

说明:这不是 OpenClaw 本体故障,但属于部署主机上的关键环境问题,解决后有助于整个系统恢复稳定。

四、可复用的排查方法与经验

1. 先分清"服务问题"还是"展示问题"

如果 openclaw status 或控制台看起来异常,不要立刻判定 Gateway 挂了。应先检查:

openclaw gateway status

openclaw status

日志文件 /tmp/openclaw/openclaw-YYYY-MM-DD.log

RPC probe 是否正常、端口是否在监听。

2. systemd 只保留一套主路径最稳

若决定使用 root + 系统级 systemd,就尽量不要再保留用户态的同名 unit。双份 unit 很容易让排查变复杂。

3. 改安全配置前,先确认依赖条件

例如启用 sandbox 之前先确认 Docker;启用 QQ allowlist 之前先把自己的 sender ID 放进去。否则系统不是"不安全",而是"直接不可用"。

4. 会话长了会影响体感稳定性

历史排查中还发现,主会话和 QQ direct 会话积累到 60k+ token 后,更容易出现上下文串线、答偏、带旧信息的问题。必要时应缩短 reset 时间,或主动开启新会话验证。

五、建议保留的一份最小检查清单

  1. 检查 Node 与 OpenClaw 命令路径是否统一:which node && which npm && which openclaw

  2. 检查 Gateway:openclaw gateway status

  3. 检查整体状态:openclaw status

  4. 检查最近日志:tail -n 100 /tmp/openclaw/openclaw-当天日期.log

  5. 若启用 sandbox,先执行:docker --version

  6. 若 QQ 私聊异常,检查 channels.qqbot.dmPolicy 与 channels.qqbot.allowFrom 是否匹配。

六、结论

这次 Ubuntu 22.04.5 LTS 上的 OpenClaw 部署,最终稳定方案可以概括为:系统级 Node、systemd 托管 Gateway、按需接入 QQ Bot、谨慎启用 sandbox、不要混用多套 systemd scope。

真正需要长期记住的,不只是安装命令本身,而是三条经验:一是路径和运行时要统一;二是 systemd scope 要唯一;三是安全配置一定要和实际依赖、白名单同步配置。

附:本记录同时覆盖了部署过程中遇到的环境问题(如 MySQL 修复),便于后续再次排查时少走弯路。

相关推荐
jwn9992 小时前
Spring Boot 整合 Keycloak
java·spring boot·后端
mldlds2 小时前
SpringBoot详解
java·spring boot·后端
kang_jin2 小时前
Spring Boot 自动配置
java·spring boot·后端
sg_knight2 小时前
如何用 Claude Code 做大型项目重构与架构优化
java·重构·架构·llm·claude·code·claude-code
码不停蹄Zzz2 小时前
C语言——神奇的static
java·c语言·开发语言
徐子元竟然被占了!!2 小时前
Linux的cat
linux·运维·服务器
wal13145202 小时前
OpenClaw教程(九)—— 彻底告别!OpenClaw 卸载不残留指南
前端·网络·人工智能·chrome·安全·openclaw
yuweiade2 小时前
Spring Boot中使用Server-Sent Events (SSE) 实现实时数据推送教程
java·spring boot·后端
丈剑走天涯3 小时前
kubernetes java app 部署使用harbor私服 问题集合
java·容器·kubernetes