☰
OpenClaw 从零部署实战:开源智能体运行时安装与配置全指南
2026/10/22 13:42:43 网站建设 项目流程

1. 从零认识 OpenClaw:它到底解决什么问题

如果你也是混开源社区的人,最近应该不止一次看到 OpenClaw 这个词。我第一次看到这个项目名是在一个技术社群的讨论帖里,当时帖子标题写着“OpenClaw 部署教程”,底下跟了一堆人在问“这是不是和某某平台类似”“能不能本地跑”。我当时也没太在意,直到后来自己花了一晚上把它部署起来,才意识到这东西的设计思路确实有点意思。

简单来说,OpenClaw 是一个面向多终端场景的开源智能体运行时,它把自然语言理解、任务编排、工具调用和自动化执行整合到了一个相对轻量的框架里。你可以把它理解成一个“翻译官 + 执行管家”的组合体:你给它一段自然语言指令,它负责拆解意图、选择工具、按顺序执行,最后把结果反馈给你。整套逻辑可以跑在本地服务器上,也可以嵌入到自己的应用里,不需要把数据全部交给外部平台,这对很多有隐私顾虑的团队来说是重要的加分项。

这篇文章适合谁?两类人最合适:一类是刚接触智能体开发、想找一个能自主掌控部署全过程的开源项目练手的开发者;另一类是想把 OpenClaw 接到自己业务系统里做自动化流程的运维或后端工程师。我会从环境准备讲起,把每一步的“为什么这么做”也一并拆开,而不是只丢给你一串复制粘贴的命令。毕竟部署这类项目,最大的坑往往不是命令敲错,而是前置条件被忽略,后面报错一堆却不知道根因在哪。

2. 部署前的资源评估与心态准备

2.1 你需要什么样的硬件和系统

OpenClaw 本身不是重型项目,但它依赖的底层组件会消耗一定资源。以我的实际测试为例,一套常见的部署方案包含 Python 运行时、数据库、消息队列和一个推理服务(如果你要用本地模型的话)。在这种组合下,2 核 4G 内存的云服务器可以跑通,但体验会比较紧张;如果是个人电脑,建议至少 8G 内存,否则编译依赖或者启动多进程时容易卡顿。

操作系统方面,Ubuntu 22.04 或者 Debian 12 是我用得最顺的,如果你的服务器是 CentOS 7 这类老系统,我不建议硬上,因为部分依赖库的版本兼容性会让你怀疑人生。macOS 也可以跑,但注意 Apple Silicon 芯片下部分原生库需要重新编译,我后面会单独提到这个坑。

提示:如果你只是想先体验一下功能,不打算做生产级部署,可以跳过数据库和消息队列,用 SQLite 和内置的任务队列先跑通流程。少两个组件意味着少一半的排障成本。

2.2 理解 OpenClaw 的四个核心模块

在真正动手之前,先花两分钟理解 OpenClaw 的架构,会让后面的部署过程顺畅很多。这个项目的核心可以拆成四个模块:

第一是入口层,负责接收用户消息,可能是命令行、网页接口或者 API 请求。第二是意图解析层,它把自然语言转换成结构化的任务序列。第三是工具注册中心,维护了系统可以调用的所有外部动作,比如读写文件、请求某个服务、执行命令等。第四是执行调度层,负责按依赖关系执行任务,并在出错时决定是重试还是返回异常。

理解了这四个模块,你就知道部署过程其实是在“组装”这四部分:先准备好运行环境,然后把入口服务启动起来,接着让意图解析模块可以连上语言模型,最后把工具注册中心的基础组件初始化好。后面每一步操作,你都能对应到这条逻辑链路里。

2.3 版本选择:别一上来就追最新版

OpenClaw 的发布节奏不算慢,我在部署时官方最新版本已经到了某个迭代版。但我的建议是,如果你是一个月内第一次接触这个项目,优先选择上一个稳定小版本,而不是最新版。原因很简单:越新的版本往往意味着功能越完整,但也意味着最近提交的大型重构风险还没被足够多的人踩完。

去看该项目的 release 页面,观察最近两三个版本的间距。如果一个版本发布后两周内没有紧急修复版,说明它相对可靠。我当时选的就是前一个 minor 版本,整个部署过程没有遇到任何诡异问题,而群里有些直接用最新版的人,反而卡在了某个依赖的兼容性报错上。

3. 环境准备:把这四件事做扎实

3.1 安装基础依赖包

OpenClaw 主要用 Python 编写,但配套工具链里还有 Node.js 的参与。直接给出我在 Ubuntu 22.04 上验证过的安装命令:

sudo apt update && sudo apt upgrade -y sudo apt install -y python3.10 python3.10-venv python3-pip git curl wget build-essential libssl-dev libffi-dev curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - sudo apt install -y nodejs

这几个包里,build-essential 和 libssl-dev 经常被忽略,但恰恰是它们决定了后续某些 Python 包能否编译通过。如果你用的是精简版 Docker 镜像,记得上述步骤一个都不能少。

安装完成后,检查一下版本:

python3 --version node --version npm --version

只要 Python 版本不低于 3.9,Node 版本不低于 16,就没问题。如果系统默认的 Python 版本过旧,建议用 apt 安装新版本后再调整update-alternatives,不要直接替换/usr/bin/python3的软链,否则系统的包管理工具可能受影响。

3.2 创建独立的 Python 虚拟环境

这一步是很多人容易偷懒的地方,但也是我强烈建议你认真做的。OpenClaw 的依赖项里有几处版本敏感的地方:比如某些异步库要求特定版本范围,而系统中可能已经安装了不同版本的其他项目依赖。如果不用虚拟环境隔离,轻则警告噪音不断,重则直接产生不可预料的运行时冲突。

mkdir -p /opt/openclaw && cd /opt/openclaw python3 -m venv venv source venv/bin/activate pip install --upgrade pip setuptools wheel

创建完虚拟环境后,你后续所有 pip 安装操作都应该在这个激活状态下完成。我个人的习惯是给每个项目单独建目录,并把这句source /opt/openclaw/venv/bin/activate写进项目根目录的一个activate.sh脚本里,这样下次重新打开终端就不用翻历史记录了。

3.3 配置语言模型接入:本地还是远程

OpenClaw 本身不包含语言模型,它需要你提供一个可供调用的推理服务。这一步有两个分支:

本地推理方案:你可以用开源模型 + 推理框架自己跑一个服务。这种方式的好处是数据完全私有,代价是显存和内存需求会明显上升。以我测试的某个 7B 参数模型为例,量化后也要占用约 6G 显存,如果你只有 8G 显存,运行时还得给其他进程留余量,所以尽量选 4bit 量化版本。

远程 API 方案:直接使用某个云服务商的推理接口,配置简单、启动快,但需要把数据请求发送到外部服务器,并且可能要关注调用配额和费用。这个方案适合快速验证功能,不适合对延迟和隐私有严格要求的场景。

无论选哪种方案,最终你都需要拿到一个 API 地址和对应的访问令牌。我建议把这两个配置单独放在一个环境变量文件里,比如.env,避免硬编码进配置文件。具体的配置格式,我后面会在配置文件章节里详细说。

3.4 准备数据库与消息队列(可选但推荐)

如果你打算长期使用 OpenClaw 保存对话记录、任务状态和执行日志,那就需要一个正式的数据库。官方默认支持 PostgreSQL,但我实测也兼容 MySQL 8.x。对于个人项目,SQLite 虽然简化部署,但是当并发任务多起来以后,写入锁冲突会非常明显。

数据库安装与初始化命令:

sudo apt install -y postgresql postgresql-contrib sudo systemctl enable --now postgresql sudo -u postgres psql -c "CREATE USER openclaw_user WITH PASSWORD 'your_strong_password';" sudo -u postgres psql -c "CREATE DATABASE openclaw_db OWNER openclaw_user;"

消息队列方面,OpenClaw 支持在本地模式运行内置的异步任务队列,不需要额外安装。但如果你要接多个工作节点实现分布式执行,建议安装 Redis:

sudo apt install -y redis-server sudo systemctl enable --now redis-server

我在最开始部署时没有装 Redis,直接用的内置队列,跑单机场景完全没问题。后来想同时跑好几个定时任务,发现任务之间偶尔会互相阻塞,装了 Redis 之后这种问题就消失了。所以我的建议是:如果你预估自己不止一个并发任务,直接上 Redis,省得后面返工。

4. 正式部署:从拉取代码到启动服务

4.1 获取 OpenClaw 源码

确认环境准备无误后,我们拉取代码。这里我用的版本是官方稳定分支,命令如下:

cd /opt/openclaw git clone https://github.com/openclaw/openhub.git source cd source git checkout stable

如果你因为网络原因拉取慢,可以用镜像地址替代,但一定要先核对镜像来源的可靠性。我不建议直接下载压缩包再解压,因为后续升级、看提交记录都不方便。保持一个完整的 git 历史,在排查问题时能省很多力气。

拉完代码后,查看一下项目的README.md和docs/目录。这个步骤看起来可有可无,但我每次部署新项目都会这样做,因为项目文档里通常会写明当前版本最低要求的依赖版本,能帮你提前规避问题。

4.2 安装 Python 依赖

在虚拟环境激活的状态下,安装项目依赖:

pip install -r requirements.txt

这个过程可能需要几分钟,期间你会看到大量来自pip的下载输出。如果出现编译错误,先检查错误信息里是不是缺少某个系统库。常见的比如libpq-dev(PostgreSQL 客户端库)、libjpeg-dev(图像处理库)。我的经验是:与其一次次根据报错补包,不如提前一次性装好:

sudo apt install -y libpq-dev libjpeg-dev zlib1g-dev libfreetype6-dev

安装完成后,运行一下官方自带的依赖检查脚本(通常在scripts/check_env.py),它会自动检测关键依赖的版本是否匹配。这一步能帮你提前发现问题,而不是等到服务启动到一半再报一个隐晦的依赖错误。

4.3 修改配置文件:关键参数逐项说

项目根目录下通常有一个config.example.yaml,复制一份为config.yaml,然后逐项修改。下面是我整理的关键参数。

app: host: "0.0.0.0" port: 8080 log_level: "info" database: type: "postgresql" dsn: "postgresql://openclaw_user:your_strong_password@localhost:5432/openclaw_db" redis: addr: "localhost:6379" model: provider: "local" # 或 "remote" base_url: "http://localhost:11434/v1" # 本地推理服务地址 api_key: "EMPTY" model_name: "your-model-name"

关于host,如果你只想本机访问调试,改成127.0.0.1更安全;如果是要通过局域网或公网提供服务,再用0.0.0.0。但建议任何暴露到公网的部署都至少在最外层加一层反向代理来保证传输加密,不要直接裸奔。

model.provider决定了意图解析层如何调用模型。本地方案我建议用一个兼容 OpenAI 协议的开源推理服务,这样base_url和api_key的配置方式可以完全复用官方文档里的示例。远程方案则需要你把base_url换成对应服务商的地址,并把api_key换成真正有效的令牌。

database.dsn这个字段要特别注意密码中的特殊字符,比如@和:在 DSN 里是有特殊含义的,必须进行 URL 编码,否则解析会出错。我踩过一次这个坑,排了半个多小时才发现是密码里有个#号导致的。

4.4 初始化数据库并创建管理员账号

配置文件修改完成后,我们需要执行数据库迁移和初始化操作。运行项目自带的 CLI 工具:

python -m openclaw.cli migrate python -m openclaw.cli create-admin --username admin --password your_admin_password

第一条命令会创建所有表结构和初始数据,第二条命令生成管理员账号。如果你的数据库连接配置有问题,这里会立刻报错,所以这一步是检验配置是否正确的好时机。

初始化完成后,可以顺手插入一条测试记录,确认写入正常:

python -m openclaw.cli create-demo-data

这条命令不是必须的,但它会生成一些示例任务,让后面启动服务后能直观看到效果。如果你想要一个干净的生产环境,跳过它也行。

4.5 启动服务并验证功能

启动服务有几种方式:直接前台运行、用nohup后台运行、或者写一个 systemd 服务。这里先看前台运行的效果:

nohup python -m openclaw.server --config config.yaml > server.log 2>&1 &

然后用curl检查健康接口:

curl http://127.0.0.1:8080/health

如果返回一个包含"status": "ok"的 JSON,说明服务已经起来了。接着可以测试一个最简单的对话:

curl -X POST http://127.0.0.1:8080/api/chat \ -H "Content-Type: application/json" \ -d '{"message": "你好,请简要说明你的功能"}'

正常情况下会返回一段自然语言回复。如果模型服务没有启动,这里会提示模型连接失败,所以建议先确保模型服务本身可用。

5. 将 OpenClaw 注册为系统服务:生产化第一步

5.1 编写 systemd 服务单元

开发阶段用nohup没问题,但生产环境里服务意外退出后不会自动重启,进程管理也不方便。我习惯为 OpenClaw 写一个 systemd 单元文件,这样能托管启动、停止、重启和开机自启。先创建服务文件:

# /etc/systemd/system/openclaw.service [Unit] Description=OpenClaw Service After=network.target postgresql.service redis-server.service [Service] User=root WorkingDirectory=/opt/openclaw/source EnvironmentFile=/opt/openclaw/source/.env ExecStart=/opt/openclaw/venv/bin/python -m openclaw.server --config /opt/openclaw/source/config.yaml Restart=on-failure RestartSec=10 StandardOutput=append:/opt/openclaw/logs/server.log StandardError=append:/opt/openclaw/logs/server.err.log [Install] WantedBy=multi-user.target

EnvironmentFile用来加载包括API_KEY和DATABASE_DSN在内的敏感信息,这样配置文件和代码里就不会出现明文密码。Restart=on-failure表示非正常退出时自动拉起进程,RestartSec=10是重启前的等待秒数,避免频繁重启导致资源竞争。

创建好文件后,执行重载和启动:

sudo systemctl daemon-reload sudo systemctl enable --now openclaw

然后查看状态:

sudo systemctl status openclaw

如果状态是active (running),就说明服务已经由 systemd 托管了。之后如果你想查看最近的日志,用journalctl -u openclaw -f就能实时跟踪输出,比翻文件方便很多。

5.2 配置反向代理与 WebSocket 支持

如果你的 OpenClaw 只供本机访问,这一步可以跳过。但要是你想通过 Web 界面远程使用,我建议加一层 Nginx 反向代理。OpenClaw 的 Web 接口涉及 WebSocket 连接,所以 reverse proxy 配置里需要额外处理Upgrade头。

一个最小可用的 Nginx 配置如下:

server { listen 80; server_name your-domain.example.com; location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

注意proxy_set_header Connection "upgrade"这一行,如果漏掉了,Web 控制台可能能打开,但实时消息推送会断掉。还有,如果server_name指向的域名没有 DNS 记录,用 IP 访问时记得把server_name改成你的 IP 或者直接留空。

如果你决定启用 HTTPS,不要自己手动维护证书,用certbot自动申请和续期就够了。这里不多展开,但强调一点:不要把私钥放在 Nginx 配置目录之外的地方,且权限设置要严格。

5.3 日常启停与日志查看的命令速查

来一份常用命令清单,方便你操作:

sudo systemctl start openclaw sudo systemctl stop openclaw sudo systemctl restart openclaw sudo systemctl status openclaw journalctl -u openclaw -f

如果改了配置或者更新了代码,先停服务,再运行迁移,然后启动:

sudo systemctl stop openclaw source /opt/openclaw/venv/bin/activate cd /opt/openclaw/source git pull pip install -r requirements.txt python -m openclaw.cli migrate sudo systemctl start openclaw

这个顺序很关键:先停服务再更新代码,否则文件占用会导致更新不完全;迁移必须在服务停止状态下执行,否则可能有两个进程同时访问数据库表结构,引起锁冲突。

6. 实际部署中常见的坑与排查技巧

6.1 模型服务连不上的三种典型原因

这是出现频率最高的报错。按照我的经验,90% 的“模型连接失败”问题都集中在以下三个方面。

第一,base_url末尾的路径错误。很多推理服务暴露的地址是http://host:port/v1,但 API 文档里可能写的是http://host:port。OpenClaw 在请求时通常会在base_url后面拼接/chat/completions等路径,如果你已经写了/v1,它再拼上去就会变成/v1/chat/completions,这通常是正确的;但如果你写成http://host:port/v1/,尾部斜杠可能导致拼接后的路径变成双斜杠,自然 404。

第二,api_key填了占位符没换。本地推理服务通常允许任意非空字符串作为 key,但如果你留空,某些客户端的校验逻辑会直接拒绝请求。我建议哪怕本地部署也填一个至少 8 位的随机字符串,省得奇怪的问题。

第三,模型名称不匹配。OpenClaw 会把你配置的model_name原样传给推理服务,如果你的推理服务里实际加载的模型叫别的名字,就会一直 404。在启动推理服务后,先用工具列一下可用模型列表,确保名称完全一致。

6.2 数据库时区与迁移的诡异表现

另一个我踩过的坑是数据库连接字符串里的时区问题。如果 PostgreSQL 的默认时区是UTC,而应用服务器用的是Asia/Shanghai,那么任务的时间戳显示会差 8 个小时。解决方法是修改配置里的时区参数,或者在数据库连接 DSN 里加options=-c timezone%3DAsia/Shanghai。但我不建议在代码里做时区转换,统一交给数据库更好。

迁移命令偶发报错“字段已存在”,通常是因为你之前中断过一次 migrate 操作,导致部分表已经建立,但迁移记录没有写入。这时不要直接删库,可以进入数据库中删除schema_migrations表,再重新跑迁移命令。如果数据不重要,也可以直接重建数据库,但生产环境务必先备份。

6.3 内存不足导致进程被 Kill 的排查

如果你的服务器只有 2G 内存,启动 OpenClaw 后系统日志会显示Killed进程,这通常不是代码 bug,而是 OOM Killer 在起作用。排查命令:

dmesg | grep -i "killed process"

看到里面有openclaw字样就说明内存不够了。两个解决方向:一是限制模型推理服务的内存占用,改用更小、量化更狠的模型,或者给模型服务单独设置ulimit;二是调整 JVM 或推理框架的堆内存限制。如果 OpenClaw 本身的内存占用超标,检查是不是同时开启了过多的线程池,可以调低配置里的max_workers数值。

注意:不要为了省内存同时启动多个模型副本,那样只会让每个请求都变得超慢。单副本加合理的队列配置往往比多副本更稳。

6.4 端口被占用时的快速定位

启动时报Address already in use时,别急着改端口。先用下面命令定位占用进程,再判断是否可以安全停掉:

sudo lsof -i:8080 netstat -tlnp | grep 8080

如果占用者是某个残留的旧进程,直接kill它再重启;如果是一个你不知道的服务,为了安全换到其他端口更稳妥。我个人习惯在配置里把端口显式写成18080这类不常见的值,能减少与系统内其他服务撞端口的概率。

7. 高级玩法:让 OpenClaw 真正跑起来

7.1 配置自定义工具:让智能体执行真实操作

默认情况下 OpenClaw 只启用了内置的一组工具,比如时间查询、简单文本处理。真正让它有用的是接入你自己的业务工具。打开配置文件中的tools部分,可以看到类似这样的结构:

tools: registry: - name: "file_reader" path: "tools.file_reader" params: allowed_dirs: ["/tmp", "/home/user/data"]

每个工具的本质是实现一个接收参数并返回结果的函数,然后注册到执行环境里。以我最常用的“文件读取”工具为例,它让用户可以用自然语言让 OpenClaw 读取指定目录下的文件。配置时特别要留意allowed_dirs白名单,这是避免任意路径读取的安全底线。绝对不要允许空规则或者根目录,不然等于把你的磁盘开放给所有能访问智能体的人。

在写自定义工具时,建议遵循一个原则:每个工具只做一件事,参数尽量显式化。不要提供一个“通用执行器”,那样会把智能体的权限放大到不可控的程度。我能理解这类工具写起来很爽,但安全边界一旦失守,后果是灾难性的。

7.2 定时任务与自动化脚本:从问答到执行

OpenClaw 的任务调度功能是我个人最看重的部分。它允许你定义 Cron 风格的任务,让智能体在指定时间自动执行某些工具链。比如每天早上 9 点读取一个报表文件,然后生成摘要发到某个接口。

配置定时任务在scheduler.yaml中:

jobs: - name: "morning_report" cron: "0 9 * * *" prompt: "读取 /data/reports/yesterday.txt,并生成一段 200 字以内的摘要" enabled: true

第一行cron表达式遵循标准的 5 段格式,不会写的话可以用在线工具生成后再粘进来。这里有一个容易踩的坑:服务器默认时区如果是 UTC,那你本地看到的 9 点实际上可能不是 9 点。建议在服务器上执行timedatectl将时区调整到业务所在地的时区,否则定时任务会每天按错误时间运行。

7.3 Web 界面的自定义与多用户管理

OpenClaw 附带了一个基础的 Web 控制台,用于查看对话记录、任务状态和工具运行日志。默认界面可能比较朴素,但样式文件是静态的,你可以直接改web/目录下的 CSS 和 HTML 模板。

多用户支持方面,每个用户登录后只能看到自己的对话和任务,管理员可以查看所有内容。如果你有同事需要一起使用,用管理账号登录后在后台创建一个新用户即可,不需要手动插数据库。这个设计对团队内统一管理十分友好。

不过要注意,当前版本的权限粒度只到页面和功能级别,没有细到工具级别。也就是说,只要用户能发起对话,他就能调用所有已注册的工具。如果你的工具链里有敏感操作,建议不要把服务暴露在不可信网络环境里,或者在工具实现层增加额外的权限校验。

8. 一些我最想让你避开的部署误区

8.1 不要跳过虚拟环境

我见过有人图省事,把 OpenClaw 的依赖直接装到系统 Python 里,结果后续安装其他工具时,系统环境被搞乱,连带 OpenClaw 都不能启动。虚拟环境不过是一行命令的事,但它隔离了依赖冲突,是部署 Python 项目的基本素养。

8.2 不要盲从最新版

版本选择部分我已经强调过,这里再补充一句:关注 release 页面的发布时间和已知 issue 列表。如果最新版发布时间离你部署日期很近,又恰好有被标记为 critical 的 open issue,那就直接选次新版本。稳定运行的部署比“尝鲜”重要得多。

8.3 不要忽略日志的作用

部署过程中如果遇到问题,最直接的排查路径是看日志。启动时用-f跟踪日志,发现异常时先看完整堆栈,而不是立刻去网上复制别人的解决方案。每个人的环境不同,别人的解决方法大概率只适用于他自己的环境。耐心读日志里的第一处报错,这往往是根因。

8.4 不要依赖 AI 生成的完整部署脚本

网上有些现成的“一键部署脚本”看起来方便,但它们没有经过充分测试,很可能包含对特定发行版的硬编码路径。用这些脚本可能会帮你把服务跑起来,但当你想改配置或者升级时,脚本里的隐藏逻辑会变成新的障碍。老老实实手动走一遍部署流程,之后你才能真正掌握这个项目的运维方法。

9. 从部署到日常运维:我的几点随想

部署完 OpenClaw 之后,最让我意外的是它不像很多开源项目那样,跑起来就完事,而是真的需要你花时间去“调教”。工具注册得越细致,模型对指令的拆分越可靠,任务执行的成功率就越高。我现在每天用它自动整理一些文本、做简单的数据分析汇总,虽然只是轻量使用,但已经明显感觉到这类智能体工作流带来的节奏变化。

最后再分享一个小技巧:OpenClaw 的配置文件和自定义工具代码,建议放到 git 仓库里管理,配上自动备份。我曾在一次调试中把config.yaml改了又改,结果某个参数的true和false不小心写反,导致所有定时任务都被禁用了。如果当时没有版本控制,排查起来会非常痛苦。给项目目录做一份历史备份,是你的数据安全网。希望这份教程能帮你少走一些弯路,把更多时间花在真正有意思的事情上。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询