news 2026/10/19 8:48:34

OpenClaw云服务器部署指南:从源码编译到systemd与Nginx反向代理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenClaw云服务器部署指南:从源码编译到systemd与Nginx反向代理

如果你手上有一台云服务器,正琢磨怎么部署一个稳定、可扩展的自动化任务服务,那 OpenClaw 值得看一眼。它不像传统 Cron 那样只能把命令写在系统配置里,而是把“什么时间触发”“执行什么任务”“结果往哪存”拆成了清晰的模块,配合 HTTP API 可以随时远程调度。这篇文章我就从零开始,把 OpenClaw 在云服务器上的完整安装过程过一遍,包括资源规划、依赖安装、源码编译、服务账户初始化、systemd 托管和反向代理接入。适合刚拿到云服务器的新手,也适合想把 OpenClaw 从容器迁移到裸机部署的老手。

在写命令之前,我先把几个容易踩坑的点放在前面:

OpenClaw 的官方仓库很多时候只维护源码,不提供预编译包,所以最通用、最可控的安装方式是从源码编译。这篇指南基于常见的 Linux 发行版展开,命令在 Ubuntu/Debian 系下可以直接复制运行,其他发行版把包管理器换成对应的即可。

1. 部署在云服务器前,先把资源账算清楚

很多人的第一个冲动是拿到服务器就直接敲安装命令,结果编译到一半进程被系统杀掉,或者服务跑起来之后磁盘被日志塞满。我建议先花五分钟把需求想清楚,这五分钟能省下后面一整天的折腾。

1.1 内存与磁盘如何估算

OpenClaw 本身是一个服务端程序,编译阶段和运行阶段的资源需求差别很大。

  • 编译阶段:用默认的make -j$(nproc)并行编译时,每路编译任务大概需要 150MB 到 300MB 内存。一台 2 核的云服务器如果并行编译 2 个任务,保守估计需要 1GB 以上可用内存,实际在 4GB 内存的机器上编译最从容。
  • 运行阶段:服务启动后常驻内存约 200MB 到 500MB,具体取决于你配置的并发 worker 数和任务队列长度。如果你的任务里有大量文件处理或者 HTTP 请求,内存会随之上涨。
  • 磁盘空间:源码目录、编译产物、运行日志三块加起来,预留 5GB 比较安全。其中编译产物大约占 1GB,日志默认路径在/var/log/openclaw下,如果不做轮换,一个月下来可能涨到几个 GB。

我给的保守建议是:最低配置选 2 核 4GB 内存、40GB 磁盘的云服务器。如果你打算用 OpenClaw 同时跑定时任务和 Webhook 触发,这个配置在后端没问题。

1.2 网络端口与安全组规划

云服务器通常有一层安全组(或者叫防火墙规则),这层规则在系统防火墙之前生效。很多人只想着把服务端口打开,结果把 OpenClaw 的 API 端口直接暴露到公网,这是很危险的。

安全组规划原则只有一条:只暴露你真正需要暴露的端口。

OpenClaw 服务本身监听在内网地址(比如127.0.0.1),然后通过 Nginx 反向代理对外提供 HTTP/HTTPS 服务。因此安全组只需要开放:

端口用途建议开放范围
22SSH 管理仅你的固定 IP,不要设为 0.0.0.0/0
80HTTP(可选,用于证书验证)0.0.0.0/0
443HTTPS 主入口0.0.0.0/0
8024OpenClaw API(内部使用)不对公网开放,仅本机或内网

如果你在安全组里看到8024端口开着,说明你已经把自己暴露在风险里了。OpenClaw 的控制接口如果带 token 还好,但谁也不能保证 token 不会泄露。所以最好的方式就是让这个端口只在云服务器内部可见,外面的人根本摸不到。

2. 环境准备:一份不会再缺依赖的检查清单

环境准备是整个安装过程里最容易“缺胳膊少腿”的环节。OpenClaw 依赖的库比较多,少一个,编译到一半就会报错。我把检查清单按顺序写清楚,你照着执行就行。

2.1 系统更新与基础工具

以 Ubuntu 22.04 为例,先做系统更新和基础工具安装:

sudo apt update sudo apt upgrade -y sudo apt install -y build-essential cmake git curl pkg-config libssl-dev libyaml-dev

每个包的作用我简单解释一下:

  • build-essential:包含 gcc、g++、make,是编译 C/C++ 程序的必需品。
  • cmake:OpenClaw 使用 CMake 作为构建系统,必须安装。
  • git:从仓库拉取源码。
  • pkg-config:编译时查找依赖库的头文件和链接参数。
  • libssl-dev:OpenClaw 的 HTTPS 支持依赖 OpenSSL。
  • libyaml-dev:解析 YAML 配置文件时需要。

安装完成后检查一下核心工具版本:

gcc --version cmake --version make --version

如果cmake版本低于 3.20,建议从 CMake 官方仓库安装新版本,否则 OpenClaw 的构建脚本可能直接拒绝执行。

2.2 为编译预留 Swap 空间

很多云服务器默认没有 Swap 分区,或者 Swap 很小。编译大项目时,如果内存不够,内核的 OOM Killer 会优先挑占用内存最多的进程杀掉,而cc1plus(g++ 的编译器进程)往往是最大受害者。

一个很实用的办法是临时创建一个 Swap 文件:

sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile

你可以用free -h确认 Swap 是否生效。这 2GB 不需要一直保留,编译完了想删掉也完全没问题。只不过我一般会留着它,因为后续跑任务或者日志缓冲区偶尔也会用到。

如果你用的云服务器是 SSD 云盘,Swap 的读写性能足够支撑编译过程。但注意,不要在生产环境下依赖 Swap 来跑业务,它只是临时缓冲。

2.3 确认网络与时间同步

OpenClaw 的任务调度依赖系统时间,如果服务器时钟偏移太厉害,定时任务可能提前或延后执行。安装前执行一次:

sudo timedatectl set-ntp true timedatectl status

确保NTP synchronized: yes。另外,云服务器的默认软件源有时候下载很慢,可以在安装依赖前换成离你较近的镜像源,但不是必须的,跳过也不影响安装。

3. 拉源码、编译、装好的完整命令行流程

环境准备好了,接下来进入正题。我会把每一步命令都写出来,并且告诉你每步大概会看到什么输出,方便你判断是否正常。

3.1 获取源码与切换版本

先建立一个/opt目录下的工作区:

cd /opt sudo git clone https://code.example.com/openclaw/openclaw.git

注意,这个仓库地址只是示例,你实际操作时用 OpenClaw 官方公布的真实仓库地址。克隆完成后:

cd openclaw git tag -l

这一步会列出所有发布版本。我建议你选一个带v前缀的稳定版本,比如v0.9.2,而不是直接编译默认分支的最近提交,因为主分支很可能处于开发中状态,功能不稳定。

git checkout v0.9.2

3.2 编译安装与常见输出解析

OpenClaw 的构建流程是标准的 CMake 流程:

mkdir -p build && cd build cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local make -j$(nproc)

-j$(nproc)会让 make 使用所有 CPU 核心并行编译,速度最快。如果你只有 2 核且内存吃紧,可以改成make -j1,虽然慢,但不容易被 OOM 杀掉。

编译顺利的话,终端会滚动大量的[ xx%]进度信息,最后出现:

[100%] Built target openclaw

然后执行安装:

sudo make install

安装完成后验证:

openclaw --version

如果能看到版本号,恭喜,编译安装这一步已经过了。如果提示command not found,多半是/usr/local/bin不在系统 PATH 中,执行一次export PATH=/usr/local/bin:$PATH临时解决,长期可以在~/.bashrc里追加。

3.3 编译期最常见的三个报错

我把实际编译中容易遇到的情况整理成一个速查表:

报错信息原因解决方案
fatal error: yaml.h: No such file or directory缺 libyaml 开发包sudo apt install libyaml-dev
c++: fatal error: Killed signal terminated program cc1plus内存不足,编译器被 OOM 杀死添加 Swap,并用make -j1降低并发
Could not find a package configuration file provided by "OpenSSL"缺 OpenSSL 开发包sudo apt install libssl-dev

遇到这些不要慌,缺什么装什么。编译安装这种事,报错信息永远是第一线索。

4. 跑起来只是开始,配置文件和服务账户这样调

很多教程到“编译完”就结束了,但真正的运维难点全在配置和权限上。如果直接以 root 用户运行 OpenClaw,后续日志、数据目录、任务执行都会出现权限混淆。我们必须从一开始就把服务账户分好。

4.1 创建专用系统用户与目录结构

用一个无登录权限的系统用户来运行 OpenClaw:

sudo useradd --system --home /var/lib/openclaw --shell /usr/sbin/nologin openclaw

创建三个目录,分别放配置、数据和日志:

sudo mkdir -p /etc/openclaw sudo mkdir -p /var/lib/openclaw sudo mkdir -p /var/log/openclaw sudo chown -R openclaw:openclaw /var/lib/openclaw /var/log/openclaw

注意,/etc/openclaw可以把所有者设为 root,配置文件不应该允许运行用户随意修改。

4.2 生成 Token 并编写主配置文件

OpenClaw 的 HTTP API 通常需要一个 token 认证。用系统自带的 OpenSSL 生成一个足够长的随机串:

openssl rand -hex 32

输出结果复制保存,待会写进配置。

创建一个最小可用的配置文件/etc/openclaw/openclaw.yml:

server: listen: 127.0.0.1 port: 8024 token: "替换成你生成的随机字符串" storage: path: /var/lib/openclaw max_size_mb: 1024 worker: concurrency: 2 timeout_seconds: 300 log: level: info file: /var/log/openclaw/openclaw.log max_size_mb: 100 max_backups: 5

关键点逐一解释:

  • listen: 127.0.0.1:只监听本机回环地址。这是安全边界,外面的流量无法直接访问 API。
  • port: 8024:默认端口。你可以改成任何未占用的端口。
  • token:请求 API 时通过Authorization: Bearer <token>传递。
  • storage.path:OpenClaw 存储任务状态和队列数据的位置,必须属于 openclaw 用户。
  • worker.concurrency:同时执行的任务数。2 表示最多同时跑两个任务,太大容易把 2 核机器跑满。
  • log.file:指向日志文件,并设置轮换参数。

4.3 为什么要监听回环地址,而不是监听 0.0.0.0

我遇到不少同学为了让外网直接访问,把listen改成了0.0.0.0。这样确实省了反向代理,但问题也来了:API 端口暴露在公网上,等于把控制大门敞开。一旦 token 被扫到,别人就能任意触发你的任务执行,云服务器很容易变成挖矿肉鸡。

正确的姿势是服务监听本机,由 Nginx 做一层 TLS 反向代理。这样外面只能看到 443 端口,OpenClaw 本身从网络层隔离。就算 Nginx 被攻破,攻击者也要先搞定本机的用户权限,安全等级完全不一样。

5. systemd 托管:开机自启和日志轮换一次搞定

直接用nohup openclaw serve &跑服务是最粗暴的方式,但云服务器重启后服务不会自动恢复,进程崩溃了也无人拉起。用 systemd 管理才是生产环境的标配。

5.1 服务单元文件编写

创建/etc/systemd/system/openclaw.service:

[Unit] Description=OpenClaw Automation Service After=network.target [Service] User=openclaw Group=openclaw ExecStart=/usr/local/bin/openclaw serve --config /etc/openclaw/openclaw.yml Restart=on-failure RestartSec=5 LimitNOFILE=65536 [Install] WantedBy=multi-user.target

几个配置项的意义:

  • User/Group:指定运行账户,避免 root 权限。
  • Restart=on-failure:进程崩溃后自动拉起,间隔 5 秒。
  • LimitNOFILE=65536:提高文件描述符上限,防止任务产生大量并发连接时超过默认 1024 的限制。
  • After=network.target:等网络就绪后再启动。

写入文件后重新加载 systemd:

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

enable --now会同时完成开机自启和立即启动。查看运行状态:

sudo systemctl status openclaw

输出中看到Active: active (running)就说明服务已经在跑了。

5.2 日志查看与 logrotate 配置

systemd 会把服务进程的标准输出和标准错误收进 journal,同时 OpenClaw 自己也会写日志文件。两种方式我一般都会用:

查看最新日志:

journalctl -u openclaw -f

查看指定时间范围的日志:

journalctl -u openclaw --since "10 minutes ago"

不过 journal 日志默认不持久化到硬盘,重启云服务器后旧日志可能会丢。所以配置里的log.file是主要的日志来源。为了不让这个文件无限增长,写一个 logrotate 配置/etc/logrotate.d/openclaw:

/var/log/openclaw/openclaw.log { daily rotate 7 compress missingok notifempty copytruncate }

copytruncate很重要:复制日志内容并清空原文件,这样不用重启 OpenClaw 也能完成轮换。如果直接用rename方式,OpenClaw 还握着旧文件的 inode,日志会继续往旧文件写,导致磁盘空间不释放。

5.3 服务启动失败时的常规检查路径

如果systemctl status显示启动失败,不要慌,按顺序排查:

sudo systemctl status openclaw sudo journalctl -u openclaw -n 50 --no-pager

通常会看到两类原因:一是配置文件语法错误,二是目录权限不对。配置文件检查可以用openclaw config check命令(具体看版本支持),目录权限则确认/var/lib/openclaw和/var/log/openclaw属主是否为 openclaw:

ls -ld /var/lib/openclaw /var/log/openclaw

如果不是,执行之前的chown命令修复即可。

6. 安装完怎么验证,还有我踩过的四个坑

服务启动成功不等于万事大吉。我习惯按下面这套自检流程过一遍,确认 API 可用、代理转发正常,才敢说“安装完成”。

6.1 命令行自检清单

首先在本机测试 API 是否响应:

curl -H "Authorization: Bearer 你的token" http://127.0.0.1:8024/health

正常情况下会返回类似{"status":"ok"}的 JSON。如果连接拒绝,检查服务是否在运行、端口是否被占用:

ss -lntp | grep 8024

接着配置 Nginx 反向代理。创建一个站点配置/etc/nginx/sites-available/openclaw.conf:

server { listen 80; server_name your.domain.com; location / { proxy_pass http://127.0.0.1:8024; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

启用这个配置并重载 Nginx:

sudo ln -s /etc/nginx/sites-available/openclaw.conf /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx

然后从你的本地电脑访问http://your.domain.com/health,确认能够通过域名访问到 API。

给域名加上 TLS 加密后,80 端口可以设一个 301 跳转到 443,Nginx 配置里用监听 443 的 server 块承接原来的 location 内容即可。证书申请我不展开,按你云服务商提供的免费证书流程走就行。

6.2 我踩过的四个坑,提前帮你排掉

第一个坑是编译时内存不足。我最早用的 1 核 2G 云服务器,运行make -j2直接 OOM。后来改成make -j1并加了 2G Swap,才顺利编译通过。所以如果你手头的机器比较丐,不要怀疑 OpenClaw 有问题,先降并发,再补 Swap。

第二个坑是 systemd 服务里指定了User=openclaw,但忘记给/var/lib/openclaw目录变更属主。服务启动后,OpenClaw 尝试写数据库文件时直接报Permission denied。这个坑在日志里看得很清楚,但如果你没设log.file,只能从 journal 里捞。

第三个坑是端口被占用。有一次我在同一台服务器上部署了两个实例,后一个一直启动失败。用ss -lntp一看,发现前一个实例还占着端口。如果你也想跑多实例,务必给每个实例分配不同的端口和数据目录。

第四个坑跟日志有关。我一度以为服务没在运行,因为日志文件一直不涨。结果发现配置里把log.level设成了error,而服务正常运行时的 info 级别日志全被过滤掉了。调试阶段建议先用debug级别,确认稳定后再调回info。

最后再分享一点实际使用中的体会

我在云服务器上反复部署过几次 OpenClaw 之后,最大的感受是:它的安装过程其实不难,难的是把服务边界收得干净、权限分得清楚。好的部署不追求一步到位,而是愿意花半小时把 systemd、日志轮换、反向代理都配好,后面才真正省心。

如果你只是临时调试,直接跑一个前台进程也没问题。但如果要用在生产环境,请一定把服务账户、监听地址和防火墙规则这些基本功做扎实。一台配置得当的云服务器,跑 OpenClaw 可以很久都不用再碰它。希望这篇指南能让你少走几趟弯路,装上之后,接下来的任务调度、API 接入就都是水到渠成的事了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/19 8:48:14

希尔排序原理与Python实现:从插入排序到增量序列优化

排序算法学到最后你会发现&#xff0c;真正“通吃所有场景”的算法几乎不存在&#xff0c;反而是各种带条件的选手各显身手。希尔排序就是其中一个有意思的中间派&#xff1a;它比插入排序快不少&#xff0c;又比快速排序、归并排序容易理解得多&#xff0c;而且完全不占用额外…

作者头像 李华
网站建设 2026/10/19 8:47:52

AI智能体如何落地能源优化?架构、算法与实战拆解

1. 能源优化AI智能体到底在解决什么问题能源效率优化这个话题&#xff0c;放在几年前还是个偏学术的方向&#xff0c;现在已经被很多制造企业、数据中心、园区运营方提到了日程上。原因很简单&#xff1a;电费在涨&#xff0c;碳排放要求收紧&#xff0c;设备老化带来的能耗浪费…

作者头像 李华
网站建设 2026/10/19 8:47:51

Origin软件安装与科研图像生产流水线配置指南

简介&#xff1a;本资源为Origin科研绘图软件的完整安装包&#xff0c;面向高校理工科研究生、科研人员及数据分析工程师&#xff0c;解决科研论文中高质量数据图表制作需求&#xff0c;尤其适用于物理、化学、生物、材料等需精确拟合与多图层定制的学科场景。压缩包共2000个文…

作者头像 李华
网站建设 2026/10/19 8:46:42

ArtCraft:结构化创意方法论与参数化设计实践

1. 项目概述&#xff1a;ArtCraft 不是“艺术手作”的简单拼贴&#xff0c;而是一套可落地的创意生产方法论ArtCraft 这个词乍看像英文直译——art&#xff08;艺术&#xff09;和 craft&#xff08;工艺/手艺&#xff09;的组合&#xff0c;很容易被理解成“艺术手作”“创意D…

作者头像 李华
网站建设 2026/10/19 8:46:12

开源CLI代码审查工具:基于Git与LLM的本地化自动化审查方案

1. 项目概述&#xff1a;一个真正能落地的开源代码审查 CLI 工具“open-code-review”这个名字乍一听像某个 GitHub 上刚建的空仓库&#xff0c;但如果你最近在团队里被 PR 堆得喘不过气&#xff0c;或者自己写完代码总不敢直接合入主干&#xff0c;又或者发现 junior 同学提交…

作者头像 李华
网站建设 2026/10/19 8:45:54

Notepad++正则表达式替换实操指南:日志清洗与批量文本处理

最近一次处理那份几万行的业务日志&#xff0c;我原本做好了一个下午都在 Excel 和脚本编辑器之间来回折腾的打算。结果没想到&#xff0c;真正花时间的只是打开 Notepad 的几个快捷键&#xff0c;剩下全是靠几串正则表达式替换完成的。从那以后&#xff0c;Notepad 正则表达式…

作者头像 李华