1. 安装前必读:OpenClaw到底是个啥
先说说这个项目。OpenClaw在国内社区被叫成“小龙虾”,名字挺接地气,但干的事一点也不简单——它是一个开源的AI智能体运行框架,核心就是帮你把大模型、工具调用、自动化任务、外部接口全部串到一个统一的服务里。你可以把它理解成一个“大模型调度中心”,或者一个长着龙虾钳子的全能管家:它负责接收指令,调用模型思考,再通过一组叫“技能”的插件去执行。这篇文章要做的,就是把这套东西老老实实装到一台 CentOS 7 上。
这篇手册适合谁?如果你手头有老旧的 CentOS 7 服务器,想在内部网络部署一套自己的 AI 助手;或者你是机器人方向的研究者,打算让 AI 智能体接上 ROS2 和 Gazebo 仿真环境;又或者你只是想绕开各种商业化平台的限制,用 Ollama 跑本地模型、不花 API 费用——这篇文章都能给你一条完整、能照抄的路径。标题里那个“完整”不是噱头,我会从虚拟机创建、ISO 选择、yum 源修复,一直写到 systemd 守护进程和手机端 Companion,全程记录我实际踩过的坑。
我为什么坚持把这套东西跑在 CentOS 7 上?说实话,CentOS 7 早就进入 EOL 状态了,官方不再更新,Python 默认还停留 2.7 版本,装个现代 AI 框架就跟在老平板车上装火箭发动机一样别扭。但现实情况是,很多公司和机房里还躺着大量 CentOS 7 机器——内网隔离、业务迁移成本高、老板不愿意动。这种情况下,与其反复争论“该换系统了”,不如把手头的资源用起来。OpenClaw 这种以文本交互为主的智能体框架,对系统版本要求并没有那么苛刻,CPU 跑小模型也完全可行,所以 CentOS 7 并非不能战,关键是把环境配好。
1.1 名字的由来和核心定位
OpenClaw 英文直译是“张开的螯爪”,官方 Logo 也是一只龙虾钳子,中文社区顺口就叫“小龙虾”。名字虽然可爱,项目本身却是个典型的 agent 框架:它不像 ChatGPT 那样只有一个网页对话框,而是把“模型对话”和“外部动作”绑定在一起。你可以告诉它“帮我查一下服务器磁盘空间”,它会自动调用系统命令,把结果整理成一段自然语言回复给你;你也可以给它接上天气 API、数据库查询、ROS 机器人控制接口,让它成为一个能干活的数字员工。
这套框架里有一个非常重要的概念,就是 Skill(技能)。技能可以理解为给智能体准备的“工具函数注册表”,每个技能是一个文件夹,里面包含一份 SKILL.md 描述文件和若干可执行脚本或代码。OpenClaw 在运行时会读取这些技能描述,结合当前的大模型,判断用户意图应该调用哪个技能。这种设计和现在主流 agent 工具的插件机制很像,但 OpenClaw 更强调本地部署和与机器人领域的结合——这也是为什么它的社区里能看到 rosclaw、ROS2 Humble、Gazebo 这类关键词。
1.2 为什么我坚持在 CentOS 7 上装
如果只看“省事”,我肯定会推荐 Ubuntu 22.04 或者 Debian 12,包管理舒服,Python 版本新,跑 AI 框架几乎零折腾。但我这次的目标很明确:一台闲置的 CentOS 7.9 Minimal,配置是 4 核 CPU、8GB 内存、40GB 磁盘,没有独立 GPU。这种机器现在干重活肯定不行,但跑一个 7B 参数级别的量化模型做日常问答和工具调用,其实绰绰有余。
CentOS 7 装 OpenClaw 的难点主要有三个:第一,默认 Python 2.7 太老,OpenClaw 要求 Python 3.8+,所以得先解决 Python 环境;第二,CentOS 7 已经停止维护,yum 源大面积失效,装基础依赖时经常报错;第三,系统自带的 GCC 版本较低,某些 Python 包在编译时会失败。这些问题都不是绝症,后面每一节我都会给出对应的解决办法。简单说,我的立场是:如果你有条件,用新系统;如果没条件,看完这篇再决定也不迟。
1.3 整体架构与算力来源
在开始动手之前,你得先搞清楚 OpenClaw 部署后到底有哪几个部分,这样后面配置时才不会晕。整个架构分四层:
- 主服务(Core):跑在 CentOS 7 上的后台进程,负责接收请求、调度模型、调用技能。
- 模型源:可以是本地 Ollama 服务,也可以是任意 OpenAI 兼容的 API 接口。
- 客户端(Companion):Windows 桌面端、安卓端的交互界面,通过 HTTP 连接主服务。
- 技能层(Skills):存放在主服务上的可执行脚本目录,是智能体“干活的手”。
关于算力来源,很多人在社区问“OpenClaw 是不是只能用接入 API 的方式使用算力”。答案是:不是。它支持通过 Ollama 调用本地模型,完全离线运行,不花一分钱 API 费用。Ollama 在这套方案里扮演的是“本地推理引擎”的角色,OpenClaw 负责智能体逻辑,Ollama 负责算词。当然,如果你本地没有 GPU 或者想用更强的模型,也可以改成 API 模式,配置方法后面我会详细写。
2. 环境准备:先把 CentOS 7 收拾利索
老话说磨刀不误砍柴工,CentOS 7 安装 OpenClaw 最大的变量不是 OpenClaw 本身,而是这台机器的系统环境。我建议你从一台干净的 CentOS 7 开始,尽量不要在一堆旧服务上叠着装,因为依赖冲突会把你折腾到怀疑人生。下面这部分把虚拟机创建、ISO 下载、yum 源修复、Python 和 Node.js 环境全部串一遍。
2.1 虚拟机与 ISO 选型
如果你手头没有物理服务器,用虚拟机是最快的。我这次用的是 VirtualBox,原因是免费且跨平台,但 VMware Workstation 也一样,只是最后装 VMware Tools 的步骤略有区别。创建虚拟机时,有几点可以照抄我的配置:
- 操作系统类型:Linux → Red Hat (64-bit),对应 CentOS 7。
- 内存:8GB 是底线,如果只想跑 3B 级别的模型,4GB 也能用,但 7B 模型加系统本身很容易吃紧。
- 磁盘:40GB,动态分配。OpenClaw 本体不大,真正的空间大户是 Ollama 的模型缓存,默认会存在
~/.ollama/models,一个 7B 量化模型就有 4GB 左右。 - 网络:选桥接模式,这样 Windows 和安卓端可以直接访问 CentOS 的 IP,省去端口转发的麻烦。
ISO 我用的是 CentOS 7 x86_64 Minimal 2009.iso,这个版本是目前最稳定、也最容易找到的 CentOS 7 最终版。安装系统时只选最小化安装,不要装桌面,OpenClaw 是纯命令行服务,图形界面纯属浪费内存。装完之后,建议先给虚拟机装增强功能——VirtualBox 叫 Guest Additions,VMware 叫 VMware Tools,作用主要是优化网络、鼠标和共享文件夹。在 CentOS 7 里安装 VMware Tools 的常见做法是:
mkdir /mnt/cdrom mount /dev/cdrom /mnt/cdrom cd /mnt/cdrom tar zxf VMwareTools-*.tar.gz -C /tmp cd /tmp/vmware-tools-distrib ./vmware-install.pl -d注意-d参数是全默认安装,省去交互。VMware Tools 装完后一般需要重启,或者重启vmtoolsd服务,否则剪贴板和共享目录可能不生效。
2.2 处理 yum 源失效的经典报错
CentOS 7 最坑的地方不是 Python 2.7,而是安装完系统之后,你执行yum install会看到类似这样的报错:
http://mirrors.aliyun.com/centos/7/os/x86_64/repodata/repomd.xml: [Errno -1]这个错误的本质是:CentOS 7 EOL 之后,阿里云等镜像站把centos/7目录归档到了centos-vault路径下,原来的路径自然就 404 了。我最初以为是临时网络问题,反复yum clean all也没用,后来才反应过来是源挂了。解决办法是把仓库源切到 CentOS 官方 vault 地址。
操作前先备份原文件,避免改错后悔莫及:
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak sed -i 's/mirrorlist=/#mirrorlist=/g' /etc/yum.repos.d/CentOS-Base.repo sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-Base.repo这段命令的逻辑很简单,注释掉 mirrorlist,再把 baseurl 强制指向vault.centos.org。改完之后执行:
yum clean all yum makecache如果一切正常,yum 就能用了。这里我要多说一句:不要只替换这一个文件,最好把CentOS-CR.repo、CentOS-SCLo-scl.repo等文件里的镜像路径也检查一遍,否则后续安装某些开发包时还会碰到类似报错。另外,epel-release包本身也可能失效,最稳妥的方法是把 EPEL 源也切到 vault。
2.3 安装 Python 3 和 Node.js
yum 源修好之后,先更新系统:
yum update -y yum install -y git curl wget unzip vim接下来解决 Python 3。CentOS 7 自带的 python 命令指向 2.7,但 OpenClaw 要 3.8 以上。系统自带的 SCL 源能装 Python 3.8,但配置起来繁琐,我推荐直接用 Miniconda,理由有两个:一是 conda 不依赖系统 GCC 就能装好 Python;二是后面创建虚拟环境非常方便,不会污染系统 Python。
curl -fsSL https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -o miniconda.sh bash miniconda.sh -b -p /opt/miniconda3安装完成后,把 conda 加到 PATH 里,然后创建 OpenClaw 的专用环境:
echo 'export PATH=/opt/miniconda3/bin:$PATH' >> ~/.bashrc source ~/.bashrc conda create -n openclaw python=3.10 -y conda activate openclawNode.js 并不是 OpenClaw 主服务的硬性依赖,但如果你打算编译或开发前端面板,最好先装一个 Node 16 或 18。用 NodeSource 的源安装最快:
curl -fsSL https://rpm.nodesource.com/setup_16.x | bash - yum install -y nodejs node -v这里插一句心得:很多人看到curl | bash就觉得不安全,我也是谨慎派,但 NodeSource 的安装脚本是官方维护的,且你可以在执行前先肉眼看一下脚本内容。如果实在不放心,手动下载 rpm 包安装也行。接下来就可以进入 OpenClaw 主体安装了。
3. 主体安装:把 OpenClaw 跑起来
环境收拾干净之后,安装 OpenClaw 反而是最顺利的一部分。这一节会从获取源码、配置 Ollama、配置 API 模式、初始化技能目录四个角度展开,覆盖两种最常见的部署方案——本地算力和纯 API。
3.1 获取主程序与虚拟环境
OpenClaw 的源码托管在 GitHub 上,直接 clone 最新版即可。这里我假设你已经把代码拿到了/opt/openclaw目录:
cd /opt git clone https://github.com/你的项目地址/openclaw.git cd openclaw conda activate openclaw pip install -U pip setuptools wheel pip install -e .pip install -e .是开发模式安装,好处是以后更新代码后不用重新安装,直接生效。如果你下载的是打包好的发行版,也可以用pip install openclaw或先安装requirements.txt,但在我测试的版本里,源码方式对 CentOS 7 兼容性最好。安装完成后执行:
openclaw --version能看到版本号,说明主程序已经装好了。如果提示command not found,不用慌,很大概率是 conda 环境的 bin 目录没有加进 PATH。执行which python先确认当前环境,然后在~/.bashrc里补一行:
export PATH=/opt/miniconda3/envs/openclaw/bin:$PATH3.2 配置 Ollama 本地模型
既然要本地跑模型,Ollama 是绕不开的。Ollama 的安装命令很简洁:
curl -fsSL https://ollama.com/install.sh | sh systemctl start ollama systemctl enable ollamaOllama 默认监听 11434 端口,跑起来之后拉一个模型。考虑到这台机器是 8GB 内存、无 GPU,我选择的是qwen2.5:7b的量化版,内存占用大概 5GB 左右,CPU 推理速度能接受:
ollama pull qwen2.5:7b拉取模型可能需要一点时间,取决于你的网络。模型就位后,可以先用命令行快速验证:
ollama run qwen2.5:7b "你好"然后开始配置 OpenClaw。首次运行会生成配置文件,一般位置是~/.openclaw/config.yaml。你不需要从零写配置,直接修改生成出来的文件就行。核心配置块长这样:
model: provider: ollama base_url: http://127.0.0.1:11434 model_name: qwen2.5:7b temperature: 0.7这里provider: ollama告诉 OpenClaw 走本地推理引擎,base_url是 Ollama 的服务地址。如果 Ollama 和 OpenClaw 在同一台机器,用 127.0.0.1 就行;如果 Ollama 跑在别的机器上,改成对应 IP。
3.3 纯 API 模式怎么配
再说回前面那个问题:OpenClaw 是不是只能用 API?当然不是,但 API 模式在特定场景下更好用——比如你本地没有显卡,但想用更大的模型;或者你公司有统一的模型网关。OpenClaw 支持任何 OpenAI 兼容接口,配置也很简单。
把配置文件里的 model 块改成:
model: provider: openai base_url: https://你的API端点/v1 api_key: sk-xxxx model_name: gpt-4o-mini注意,如果你是接本地 vLLM 或 One API 这类服务,只要它暴露的是/v1/chat/completions接口,OpenClaw 都能识别。这里有两个容易踩的坑:一是base_url末尾要不要带/v1,取决于服务商的具体路径,很多 OpenAI 兼容服务只要填到根地址,OpenClaw 会自动拼上;二是api_key千万别写在公开仓库或聊天记录里,建议用环境变量方式注入。
如果两种模式都要支持,OpenClaw 也允许在配置里写多个模型 profile,运行时通过指令切换。我个人的建议是:本地 Ollama 负责日常轻量任务,API 模式负责高质量复杂任务,两套并存,灵活度最高。
3.4 初始化用户目录和 Skill
主程序装好后,执行初始化命令,生成用户工作目录:
openclaw init这条命令会在你的用户目录下创建~/.openclaw/文件夹,里面包含config.yaml、skills/、logs/等子目录。其中skills/就是技能目录,也是 OpenClaw 最有特色的部分。
为了让你理解 Skill 机制,我直接用一个例子说明。假设我想给小龙虾加一个“查询磁盘空间”的技能,那就先在技能目录下建一个文件夹:
mkdir -p ~/.openclaw/skills/disk_usage cd ~/.openclaw/skills/disk_usage然后创建一个SKILL.md,内容大致是:
# Disk Usage Skill 技能名称: disk_usage 功能描述: 查询服务器磁盘分区使用情况。 用法: 当用户询问磁盘空间、磁盘占用、df 命令结果时,调用此技能。 执行命令: bash script.sh再创建一个script.sh:
#!/bin/bash df -h chmod +x script.shOpenClaw 会读取SKILL.md里的描述,当大模型判断用户意图匹配时,就执行这个脚本。这个概念和我之前提过的“AI 工具调用”是一样的,但好处是 OpenClaw 的技能文件就是普通脚本,你不需要写任何复杂的 API 代码。技能库可以不断积累,社区里也有人分享现成的技能包,比如网页搜索、HTTP 请求、SQL 查询等。
4. 服务化与生态接入
命令行能跑通只是第一步,一个正经部署的 agent 服务必须能做到开机自启、后台守护、异地访问。这一节把 systemd 配置、Windows/安卓 Companion 接入、ROS2 扩展三个内容讲完。
4.1 用 systemd 开机自启
开发环境里你可以直接前台开着openclaw serve,但生产环境必须交给 systemd 管。先创建一个服务文件:
vim /etc/systemd/system/openclaw.service内容如下:
[Unit] Description=OpenClaw AI Agent Service After=network-online.target ollama.service Wants=network-online.target [Service] Type=simple User=root WorkingDirectory=/opt/openclaw ExecStart=/opt/miniconda3/envs/openclaw/bin/openclaw serve --config /root/.openclaw/config.yaml Restart=on-failure RestartSec=10 Environment=PYTHONUNBUFFERED=1 [Install] WantedBy=multi-user.target有几个细节值得注意。ExecStart必须写绝对路径,不能让 systemd 依赖你的环境变量;After=ollama.service保证了 Ollama 先启动,OpenClaw 再启动,避免模型源还没就绪就疯狂报错;User=root图省事,但更安全的是单独建一个openclaw用户,只是这样一来文件权限要配好。
写完文件后执行:
systemctl daemon-reload systemctl enable --now openclaw systemctl status openclaw如果看到active (running),说明服务已经起来了。用 Ctrl+C 是无法停掉 systemd 服务的,必须用systemctl stop openclaw,这也是以后最规范的运维方式。日志则统一通过journalctl -u openclaw -f查看,比看日志文件方便得多。
4.2 Windows/安卓 Companion 连接
OpenClaw 的官方客户端叫 Companion,目前有 Windows 桌面版和安卓版,本质就是一个“远程遥控器”:你在一台普通电脑或手机上输入服务器地址,就能和 CentOS 7 上的智能体对话,并查看它执行任务的实时状态。
Windows 端配置比较简单:
- 下载 Companion 客户端并安装。
- 打开设置,填入服务器地址:
http://你的CentOS服务器IP:8000。 - 填入 Access Token,这个 token 在
~/.openclaw/config.yaml里可以找到或自行生成。 - 保存后连接,正常情况下能看到在线状态。
安卓端有两条路。如果官方提供了 Companion APK,直接安装即可;如果你想在 Termux 里跑命令行版,也可以把 CentOS 7 上的 Python 环境迁移思路套用过来,在 Termux 里创建同样的 conda 环境或直接用 pip 安装,但这需要手机性能够用,日常连接远程服务端的话,用 Companion 更实用。
这里有个很容易被忽略的问题:防火墙。CentOS 7 默认 firewalld 是开启的,你服务起来了,但外部机器就是连不上。先看端口监听状态:
ss -lntp | grep 8000如果监听在 127.0.0.1,说明 OpenClaw 只允许本机访问,需要把配置里的监听地址host改成0.0.0.0。然后再放行防火墙端口:
firewall-cmd --permanent --add-port=8000/tcp firewall-cmd --reload改完服务端配置后,记得systemctl restart openclaw。
4.3 顺带聊聊 ROS2 和 Gazebo 扩展
热搜词里出现了 rosclaw、ROS2 Humble、Gazebo,说明很多人想把 OpenClaw 接到机器人仿真里。想法虽好,但有个现实问题:ROS2 Humble 官方只支持 Ubuntu 22.04 这类新系统,CentOS 7 原生装不上。所以我的方案是“Docker 隔离”,把 ROS2 环境装进容器,CentOS 7 只负责跑 OpenClaw 主服务,两者通过网络通信。
具体思路是:
docker pull osrf/ros:humble-desktop docker run -it --rm osrf/ros:humble-desktop在容器内安装 rosclaw 桥接包,再把 OpenClaw 的意图输出转成 ROS2 话题发给 Gazebo 中的机器人模型。这样做的优势很明显:CentOS 7 的老内核和库不会污染机器人开发环境,ROS2 容器崩了也不会影响 OpenClaw 主服务。如果你是研究机器人方向的,后续可以专门写一篇文章讲 rosclaw 的话题映射和 TF 树处理,这里先提一个方向:重点看 OpenClaw 输出的“结构化指令”如何转成 ROS2 的geometry_msgs/Twist话题。
5. 踩坑记录:这些问题我替你试过了
装一遍下来,前前后后踩了不少坑。有些问题光看官方文档根本想不到,但这些才是真实的部署常态。我把最容易让新手卡住的几个问题整理成了排查套路和速查表,希望你用不上。
5.1 启动即崩溃的排查套路
OpenClaw 装好后第一次启动,最常见的就是立即退出,没有任何像样的错误提示。这时候别慌,先看服务状态和日志:
journalctl -u openclaw -e日志里如果出现ModuleNotFoundError: No module named '...',十有八九是虚拟环境没激活,或者pip install -e .装的包进了系统环境。确认一下执行openclaw命令时用的是哪个解释器:
which openclaw如果路径不是/opt/miniconda3/envs/openclaw/bin/openclaw,说明 PATH 污染了。处理办法是重开终端,或者手动指定全路径启动。
另一个隐蔽的坑是 glibc 版本。CentOS 7 的 glibc 是 2.17,某些新版 Python 包(比如 pydantic、numpy)在编译时可能依赖更高版本。解决办法是尽量用pip install预编译的 wheel 包,不要强制从源码编译。如果某一步编译报错,可以在pip install后加--only-binary :all:参数试试。
5.2 端口访问不通
服务起了,防火墙也放行了,Windows 端就是连不上。第一步先排除监听地址问题:
ss -lntp | grep 8000如果显示的是127.0.0.1:8000,无论怎么配防火墙都没用——外部机器根本找不到这个端口。去config.yaml里把 host 改成0.0.0.0,重启服务。如果监听地址已经是0.0.0.0,再用另一台机器测试端口连通性:
telnet 192.168.1.100 8000连不上就检查防火墙,连上了就查客户端。还有一个很少人注意的点:SELinux 会拦截非标准端口的对外监听。临时测试可以执行setenforce 0,但长期运行建议写一条对应端口的 SELinux 规则,或者直接按需配置。
5.3 模型加载慢和显存不足
无 GPU 的 CentOS 7 上跑 Ollama,模型加载确实慢,第一次查询可能要几十秒。这不是 OpenClaw 的问题,而是 CPU 推理的通病。如果慢到不可接受,建议换小一点的量化模型,比如qwen2.5:3b。如果 Ollama 报model requires more memory,说明模型大小超过了可用内存。解决办法有几种:
- 关闭不必要的服务释放内存,比如
systemctl stop postfix。 - 调整 Ollama 环境变量:
OLLAMA_NUM_PARALLEL=1限制并行请求数,OLLAMA_MAX_LOADED_MODELS=1限制同时加载的模型数量。 - 在
~/.bashrc里配好环境变量后重启 ollama 服务:
export OLLAMA_MAX_LOADED_MODELS=1 export OLLAMA_NUM_PARALLEL=1做深度学习的朋友应该明白,模型加载是稀疏矩阵运算和显存管理的事,CPU 机上内存就是“显存”,所以内存越充裕,越能跑大模型。如果你只有 8GB,跑 7B 就是极限了,别硬上 13B。
5.4 常见问题速查表
| 问题 | 可能原因 | 解决办法 |
|---|---|---|
| yum 报 repomd.xml [Errno -1] | CentOS 7 EOL 后源路径失效 | 切换 vault 源,重新 makecache |
| openclaw 命令找不到 | PATH 未配置或环境未激活 | 检查 conda 环境 PATH,使用全路径 |
| ModuleNotFoundError | pip 包装错环境 | 确认进入 openclaw 虚拟环境重装 |
| Ollama 模型下载慢 | 网络带宽受限 | 换镜像站或用代理下载后离线导入 |
| openclaw 端口外部连不上 | 监听 127.0.0.1 或防火墙未放行 | 改 host 为 0.0.0.0,开放端口 |
| systemd 启动立即退出 | 配置错误或依赖服务未起 | 用 journalctl 看日志,检查 Ollama 状态 |
| API key 报 401 | 密钥写错或服务商鉴权失败 | 核对 api_key,确认用环境变量注入 |
| ROS2 容器无法访问 OpenClaw | 网络隔离 | 用 host 网络模式或桥接容器网络 |
我个人在折腾这套环境时最大的体会是:CentOS 7 就像一间老房子,管道、电路都旧了,但只要你肯花时间把基础设施理顺,它照样能稳稳当当地住人。OpenClaw 本身并没那么娇气,绝大多数安装失败都倒在系统环境这一关。如果你也准备在 CentOS 7 上部署,务必先花半小时把 yum 源、Python 环境、系统依赖清理干净,后续会顺很多。
最后再分享一个小技巧:装好之后,记得把~/.ollama和~/.openclaw这两个目录做一次快照或者 tar 备份。模型缓存和技能配置是你最宝贵的资产,有了备份,以后不管怎么折腾系统,都能快速恢复到能用的状态。祝你一次成功。