恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
OpenClaw云服务器部署指南:从源码编译到systemd与Nginx反向代理
首页
资讯中心
/
OpenClaw云服务器部署指南:从源码编译到systemd与Nginx反向代理
OpenClaw云服务器部署指南:从源码编译到systemd与Nginx反向代理
发布时间:2026/10/19 8:48:41
如果你手上有一台云服务器正琢磨怎么部署一个稳定、可扩展的自动化任务服务那 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/080HTTP可选用于证书验证0.0.0.0/0443HTTPS 主入口0.0.0.0/08024OpenClaw 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 程序的必需品。cmakeOpenClaw 使用 CMake 作为构建系统必须安装。git从仓库拉取源码。pkg-config编译时查找依赖库的头文件和链接参数。libssl-devOpenClaw 的 HTTPS 支持依赖 OpenSSL。libyaml-dev解析 YAML 配置文件时需要。安装完成后检查一下核心工具版本gcc --version cmake --version make --version如果cmake版本低于 3.20建议从 CMake 官方仓库安装新版本否则 OpenClaw 的构建脚本可能直接拒绝执行。2.2 为编译预留 Swap 空间很多云服务器默认没有 Swap 分区或者 Swap 很小。编译大项目时如果内存不够内核的 OOM Killer 会优先挑占用内存最多的进程杀掉而cc1plusg 的编译器进程往往是最大受害者。一个很实用的办法是临时创建一个 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.23.2 编译安装与常见输出解析OpenClaw 的构建流程是标准的 CMake 流程mkdir -p build cd build cmake .. -DCMAKE_BUILD_TYPERelease -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-devc: 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 创建专用系统用户与目录结构用一个无登录权限的系统用户来运行 OpenClawsudo 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.ymlserver: 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.pathOpenClaw 存储任务状态和队列数据的位置必须属于 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] DescriptionOpenClaw Automation Service Afternetwork.target [Service] Useropenclaw Groupopenclaw ExecStart/usr/local/bin/openclaw serve --config /etc/openclaw/openclaw.yml Restarton-failure RestartSec5 LimitNOFILE65536 [Install] WantedBymulti-user.target几个配置项的意义User/Group指定运行账户避免 root 权限。Restarton-failure进程崩溃后自动拉起间隔 5 秒。LimitNOFILE65536提高文件描述符上限防止任务产生大量并发连接时超过默认 1024 的限制。Afternetwork.target等网络就绪后再启动。写入文件后重新加载 systemdsudo systemctl daemon-reload sudo systemctl enable --now openclawenable --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属主是否为 openclawls -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.confserver { 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; } }启用这个配置并重载 Nginxsudo 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 跳转到 443Nginx 配置里用监听 443 的 server 块承接原来的 location 内容即可。证书申请我不展开按你云服务商提供的免费证书流程走就行。6.2 我踩过的四个坑提前帮你排掉第一个坑是编译时内存不足。我最早用的 1 核 2G 云服务器运行make -j2直接 OOM。后来改成make -j1并加了 2G Swap才顺利编译通过。所以如果你手头的机器比较丐不要怀疑 OpenClaw 有问题先降并发再补 Swap。第二个坑是 systemd 服务里指定了Useropenclaw但忘记给/var/lib/openclaw目录变更属主。服务启动后OpenClaw 尝试写数据库文件时直接报Permission denied。这个坑在日志里看得很清楚但如果你没设log.file只能从 journal 里捞。第三个坑是端口被占用。有一次我在同一台服务器上部署了两个实例后一个一直启动失败。用ss -lntp一看发现前一个实例还占着端口。如果你也想跑多实例务必给每个实例分配不同的端口和数据目录。第四个坑跟日志有关。我一度以为服务没在运行因为日志文件一直不涨。结果发现配置里把log.level设成了error而服务正常运行时的 info 级别日志全被过滤掉了。调试阶段建议先用debug级别确认稳定后再调回info。最后再分享一点实际使用中的体会我在云服务器上反复部署过几次 OpenClaw 之后最大的感受是它的安装过程其实不难难的是把服务边界收得干净、权限分得清楚。好的部署不追求一步到位而是愿意花半小时把 systemd、日志轮换、反向代理都配好后面才真正省心。如果你只是临时调试直接跑一个前台进程也没问题。但如果要用在生产环境请一定把服务账户、监听地址和防火墙规则这些基本功做扎实。一台配置得当的云服务器跑 OpenClaw 可以很久都不用再碰它。希望这篇指南能让你少走几趟弯路装上之后接下来的任务调度、API 接入就都是水到渠成的事了。