news 2026/10/13 3:53:31

OpenClaw云服务器部署实战:Docker Compose从安装到服务上线

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OpenClaw云服务器部署实战:Docker Compose从安装到服务上线

最近有好几个朋友来问我,说看到“OpenClaw”这个词,知道是个开源的智能体项目,但一听到“部署”两个字就头大,总觉得要写一堆代码、搞一堆环境。其实真上手之后你会发现,只要把几个关键步骤理顺,整个过程比想象中简单不少。这篇教程我就用自己在一台云服务器上从零跑通OpenClaw的实际经历,把每一步操作、每个命令、每个需要留意的坑都摊开来讲,保证你照着做也能把服务跑起来。

这篇内容适合两类人:一类是刚接触智能体、想在自己服务器上搭一个常驻服务来调用大模型API的;另一类是有过一些Linux使用经验,想学习用Docker部署开源项目的。文章里我不会绕弯子,全部是实操过的命令和配置,你复制过去就能用。

1. 部署前的规划:选服务器和定方案

1.1 为什么要把OpenClaw跑在云服务器上

很多人一开始喜欢在本地电脑上跑OpenClaw,图个方便。但用一阵子就会发现,本地运行有几个绕不开的问题:电脑一关服务就断;家里的网络IP不固定,想对外提供接口很麻烦;如果需要在固定的时间自动执行任务,电脑不能一直开着。所以把OpenClaw部署在一台云服务器上,才是真正适合长期使用的方案。

云服务器能够7x24小时运行,你不需要关心断电、断网。同时,服务器有一个固定的公网IP,你可以把OpenClaw的服务通过API暴露给其他系统,或者配合定时任务让它每天自动跑一些数据处理的活。再一个,云服务器上跑Docker很干净,不会污染宿主机环境,以后想升级或者换版本,直接换镜像就行。这是本地环境很难给到的体验。

1.2 服务器配置怎么选

我实际测试下来,OpenClaw本身是一个偏中轻量级的服务,核心消耗在两部分:一部分是OpenClaw进程本身,一部分是它下面挂载的数据库和缓存组件。如果你只是个人使用,一台2核4G内存的服务器完全够用,硬盘建议40G起步,因为系统、Docker镜像、日志都会占用空间,4G内存其实在运行容器后还会剩不少余量。

操作系统我推荐Ubuntu 22.04 LTS,原因是它对Docker的支持最省心,社区资料也多,真遇到问题搜一下基本都有答案。CentOS不是不行,但有些新版本的Docker依赖库在CentOS上需要额外处理,折腾起来没必要。服务器位置选一个离你近的区域就行,延迟会有差异,但OpenClaw本身调用大模型API的延迟才是大头。

域名和SSL的问题也要提前想。如果你只是自己通过API调试,直接用服务器IP加端口也没问题。但如果后面想让OpenClaw接入企业微信、钉钉这类有回调地址要求的平台,那就必须要有一个域名,并且配置好SSL证书。域名不贵,几十块一年,建议提前准备好。

2. 环境准备:装好Docker和配套工具

2.1 连接服务器并更新系统

拿到服务器之后,第一步就是用SSH连上去。Windows用户可以用系统自带的终端或者装一个流行的SSH客户端,macOS和Linux用户直接终端里输命令就行。连接命令长这样:

ssh root@你的服务器IP

这里要提醒一下,很多云厂商默认不允许直接用root登录,或者只允许密钥登录,你拿到服务器后先按厂商的文档把登录方式配好。如果用了密钥,SSH命令加上-i指定私钥文件即可。

连上之后,先把系统软件源更新到最新,避免因为系统包版本太老导致后面装Docker出问题:

apt update && apt upgrade -y

这个过程可能需要几分钟,取决于你的服务器带宽。更新完成后,顺手装几个基础工具,后面会用到:

apt install -y curl git vim

curl用于下载文件,git用于拉取代码,vim用于编辑配置文件。这三样基本是标配。

2.2 安装Docker和Docker Compose

现在装Docker,官方推荐用一键脚本方式,不过这个脚本在国内服务器上有时会因为网络问题失败。我实测比较好用的方法是先配置Docker的软件源,然后再安装。以Ubuntu 22.04为例:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - echo "deb [arch=amd64] https://download.docker.com/linux/ubuntu jammy stable" > /etc/apt/sources.list.d/docker.list apt update apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

安装完成后,验证一下:

docker --version docker compose version

我用的这套方式会直接把docker compose插件装好,不需要再单独去下二进制文件。装完后把Docker设为开机自启:

systemctl enable docker systemctl start docker

这里有个细节:默认情况下,使用Docker命令需要root权限。如果你不想每次敲命令都加sudo,可以把当前用户加入docker用户组:

usermod -aG docker $USER

然后重新登录一下SSH,让用户组生效。这一步虽然不影响部署,但能让你后续操作舒服很多。

3. 获取OpenClaw项目并完成基础配置

3.1 拉取项目代码

OpenClaw的代码是托管在公开代码仓库里的,先用git把它克隆到服务器的/opt目录下,这样方便统一管理:

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

注意,实际仓库地址以你拿到的项目页面为准。拉取完成后,看一下目录结构:

ls -la

你会看到里面包含docker-compose.yml、.env.example、config等文件和目录。这说明项目本身已经为Docker部署做足了准备,我们后面要做的就是复制配置、填参数、启动。

3.2 配置环境变量

OpenClaw运行时需要读取一堆环境变量,包括大模型API的密钥、模型名称、服务端口等。项目里一般会给一个示例配置,叫.env.example,我们把它复制一份成真正生效的.env:

cp .env.example .env vim .env

打开文件后,主要关注这几个配置项:

  • API_KEY:这是你调用大模型服务时用的密钥,去对应的模型服务商后台创建一个,保存好。
  • MODEL_NAME:OpenClaw核心逻辑依赖的模型名称,不同服务商有不同叫法,填你开通的模型版本就行。
  • OPENCLAW_PORT:OpenClaw对外提供服务的端口,默认是8080,如果这个端口被占用了,改成别的。
  • TIMEZONE:建议改成Asia/Shanghai,这样日志里的时间戳看起来才舒服。
  • DB_PASSWORD:如果项目依赖数据库服务,这个就是数据库的密码,务必设一个强密码。

修改完保存退出。这里有个容易踩的坑:.env文件里的值不要加引号,尤其是密钥和密码,加了引号可能导致服务启动时把引号也当成值的一部分。我第一次部署时就犯过这个错,结果日志里一直报认证失败,排查了半天才发现是引号的问题。

3.3 检查端口和防火墙

在启动之前,先确认一下服务器内部端口占用情况。比如你想用8080端口,先执行:

netstat -tlnp | grep 8080

如果没有任何输出,说明端口空闲。如果有输出,说明已经有别的进程占了,你需要在.env里改一个端口,或者停掉占用进程。

另外,很多云厂商在服务器外部还有一层“安全组”策略,就算系统内部放行了端口,外部访问依然会被安全组挡住。你需要在云厂商的控制台里,找到这台服务器的安全组规则,把对应的端口(比如8080)加进去,来源IP建议先设成你自己的公网IP,这样更安全。

如果服务器本身开启了防火墙,也要放行端口:

apt install -y ufw ufw allow 8080/tcp ufw enable

注意:如果你是通过SSH连接的,务必先放行SSH端口(一般是22),再启用ufw,不然SSH连接会直接被切断。这是很多新手栽过的跟头。

4. 使用Docker Compose启动OpenClaw

4.1 启动服务全过程

配置完成后,直接用Docker Compose把整套服务拉起来。在项目根目录下执行:

docker compose up -d

第一次执行会自动拉取所有依赖镜像,包括OpenClaw主镜像、数据库镜像、消息队列镜像等,耗时取决于你的服务器带宽和镜像大小,通常在5到15分钟。耐心等待,看到类似Creating openclaw ... done的输出就说明启动成功了。

然后查看所有容器的运行状态:

docker compose ps

正常情况下,每个服务的STATUS列应该显示Up。如果看到某个服务Restarting,多半是配置有问题,往下看日志排查:

docker compose logs -f --tail=200

日志会实时刷出来,重点关注有没有error、exception、failed之类的关键词。

4.2 验证服务是否正常

服务起来之后,怎么确定它真的在正常工作?最简单的方式是测试它的接口。假设OpenClaw监听在8080端口,在服务器本机执行:

curl http://localhost:8080/health

如果返回一段JSON,里面包含status: ok或者类似字段,说明主服务已经跑起来了。

更完整的验证方式是调用OpenClaw的创建对话接口。绝大多数智能体框架都会提供/v1/chat/completions风格的API,我们用curl模拟一次请求:

curl -X POST http://localhost:8080/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer 你的API_KEY" \ -d '{"model": "你的模型名", "messages": [{"role": "user", "content": "你好,请回复收到"}]}'

如果返回的内容里有choices字段,里面带上了模型的回复,那恭喜你,部署已经成功了。这时候你就可以在代码里把http://你的服务器IP:8080当做一个本地版的大模型网关来使用。

最让我意外的是,OpenClaw除了API,还会在本地起一个简单的管理后台,地址就是同一端口的根路径。用浏览器打开http://你的服务器IP:8080,能看到一个简洁的页面,在那里可以直观地查看请求记录、模型调用次数和日志。个人使用的话,这个后台非常够用。

5. 部署过程中最常见的几个坑

5.1 容器一直重启

如果你发现某个容器一直处于Restarting状态,90%的可能性是环境变量配错了。优先去查这条日志:

docker compose logs {容器名}

常见的错误有这几种:

  • 模型名称填错了,服务启动时验证模型不存在就直接退出。
  • API密钥没填对,导致初始化认证失败。
  • .env文件里某个选项漏填,程序读到一个空值。

还有一种情况是数据库容器比主服务启动得慢,主服务连不上数据库就会反复重启。这时候不用慌,先把所有容器停掉,再重新启动一次,让它们在依赖关系上重新排个序:

docker compose down docker compose up -d

如果还是不行,就手动把数据库容器先启动,等它就绪后再启动主服务容器,这样定位问题会更快。

5.2 外网访问不了服务

服务在服务器本机curl通了,但浏览器或者外部程序就是连不上。这个问题听起来简单,实际上有三层“门禁”需要依次检查:

第一层,服务器系统防火墙有没有放行端口。执行ufw status看看规则。第二层,云厂商的安全组有没有加上入方向规则。第三层,如果用了域名,检查域名解析是否指向了服务器IP。

我之前遇到过一个特别隐蔽的问题:安全组只放行了IPv4的端口,而我自己测试时用了IPv6地址的CDN,结果请求在边缘节点就被挡了。建议直接先用IP测试,通了之后再套域名和SSL,这样能少很多干扰因素。

5.3 请求模型API超时

OpenClaw启动正常,但一发消息就等很久,最后提示超时。这个问题多半是网络链路导致的。OpenClaw主服务所在的机器如果不能稳定访问大模型API的服务器,那么每次请求都会卡在等待响应上。

判断方法很简单,在服务器上直接用curl请求一下模型的API地址,看看耗时:

curl -o /dev/null -s -w "time_total: %{time_total}s\n" https://api.example.com/v1/models

如果这个耗时就很高,那问题不在OpenClaw,而在服务器到模型服务商之间的网络质量。常规解法是检查服务器所在地是否离模型服务节点太远,或者考虑把OpenClaw迁移到离模型服务更近的区域。这个说白了就是网络路由问题,换区域往往立竿见影。

6. 部署完成后的安全加固

6.1 给OpenClaw加一层访问认证

OpenClaw默认会读取环境变量里的API_KEY来做请求认证,也就是说,你调用接口时必须带着正确的密钥,否则会被拒绝。但有的人觉得本地调试麻烦,就把认证关掉了,这在云服务器上是非常危险的行为。你的服务器一旦暴露在公网,立刻会有扫描程序来探测端口,如果发现一个没有认证的服务,马上就会被滥用,到时候你的模型账户可能会被刷爆。

所以务必确认.env里的AUTH_ENABLED是true,并且把API_KEY设成足够复杂的值。我习惯用一段32位以上的随机字符串,生成方式很简单:

openssl rand -hex 16

把这个输出值复制到API_KEY字段里就行。

6.2 修改默认端口和限制来源IP

端口默认是8080,所有人都知道。为了减少被扫描到的概率,建议把端口改成一个不常见的端口,比如18080或者28080。这不能带来绝对安全,但确实能过滤掉很多自动化扫描脚本。

如果你确定只有自己的电脑会调用这个服务,那么更狠一点的做法是在安全组里把来源IP设置为你的家庭或办公网络IP。这样其他任何IP都连不上这个端口,基本就没什么暴露风险了。不过要注意,如果你的公网IP是动态的,隔一段时间IP变了,就需要去控制台更新规则,这点要自己权衡。

6.3 配置Docker自动重启和日志清理

服务器难免会重启,我们希望OpenClaw能跟着自动起来。Docker Compose默认在Docker服务启动时会自动拉起设置了restart: always策略的容器。你可以在项目的docker-compose.yml里确认一下,如果没有这个配置,自己加一行:

services: openclaw: restart: always

改完之后需要重建容器让配置生效:

docker compose up -d --force-recreate

另外,容器跑久了日志文件会越来越大,如果不控制,硬盘很容易被写满。建议在/etc/docker/daemon.json里配置日志轮转:

{ "log-driver": "json-file", "log-opts": { "max-size": "50m", "max-file": "3" } }

保存后重启Docker服务:

systemctl restart docker

这样每个容器的日志最多只保留3个50MB的文件,不会无限制膨胀。这个配置我建议在部署之初就做好,等日志真把磁盘占满再处理就有点被动了。

7. 实用技巧和扩展建议

7.1 用systemd定时任务实现无人值守

OpenClaw跑起来之后,最大的价值就在于能定时执行任务。比如每天早上9点让智能体自动拉取某个数据源的最新内容,处理完之后通过Webhook推送到群里。这个操作不需要额外写定时任务框架,直接借助系统的cron就行。

先写一个脚本,比如/opt/openclaw/scripts/daily_task.sh,脚本里用curl调用OpenClaw的API,把你要执行的指令作为消息发过去:

#!/bin/bash curl -X POST http://localhost:8080/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer 你的API_KEY" \ -d '{"model": "你的模型名", "messages": [{"role": "user", "content": "请执行每日数据汇总任务"}]}'

然后给脚本加执行权限,并把定时任务写进去:

chmod +x /opt/openclaw/scripts/daily_task.sh crontab -e

在打开的编辑器里加入:

0 9 * * * /opt/openclaw/scripts/daily_task.sh >> /var/log/openclaw_daily.log 2>&1

这样每天早上9点,系统就会自动调用OpenClaw执行任务。日志会写到指定文件里,方便事后检查。就我个人的使用经验来说,这种稳定运行、定时触发的场景,才是自托管智能体最舒服的打开方式。

7.2 数据备份策略

OpenClaw用到的数据库里会保存历史对话记录、知识库内容、任务状态等信息。这些数据一旦丢失,相当于整个服务的记忆归零。所以我强烈建议做每日备份。

备份最省事的办法是把整个docker compose项目目录打压缩包:

tar -czf openclaw_backup_$(date +%Y%m%d).tar.gz /opt/openclaw

再加一条cron定时任务,每天凌晨3点执行一次。如果你用的是对象存储,还可以把这个压缩包同步到云端,这样即使服务器本身出现问题,数据也还在。实际测试下来,整个备份过程开销很小,对系统性能几乎没影响。

7.3 后续版本升级

OpenClaw项目迭代速度不慢,隔一段时间就会发布新版本。升级的时候不要直接改文件,按这个顺序操作最稳:

cd /opt/openclaw git pull docker compose down docker compose up -d --build

升级前记得先备份数据。如果升级后发现异常,可以用git log查看最近一次提交,再用git checkout切回旧版本,基本能解决大部分兼容问题。我经历过几次升级,只要数据备份做好,没遇到过无法回退的情况。

最后一点个人体会

我从第一次部署OpenClaw到现在,最大的感触是:这类智能体框架的门槛已经降得很低了,真正的难点不在命令,而在理解它运行的整个链路。你只要搞明白“环境变量怎么传”“端口怎么放行”“日志怎么看”这三件事,任何类似的项目到了你手里,都能很快跑起来。

最后再分享一个小技巧:部署完成后,把.env文件单独加密存一份,记下你修改过的每个变量。半年后你再回来看这个项目,或者换一台服务器重新部署,这份记录能帮你省下大量回忆时间。我自己就用一个普通的加密压缩包存着,需要时解压出来直接照着填,非常省心。

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

Wireshark抓包实战:从HTTP/DNS/TCP协议分析入门Web渗透

想进网络安全这一行的人,十有八九都听过这么一句话:不知道流量里发生了什么,就别谈什么渗透测试。我在带新人入门的时候,最常被问到的就是"Kali里工具这么多,到底先学哪个"。我的答案一直没变:先…

作者头像 李华
网站建设 2026/10/13 3:52:50

教育场景下可解释决策树建模实战:从学生行为预测到教务规则落地

简介:本资源是一份面向机器学习初学者与教育数据分析实践者的决策树建模实战项目,聚焦学生在线学习行为预测与教学预警场景。基于真实校园平台采集的千余条行为数据(含到课率、预习率、习题正确率及综合成绩),构建可解…

作者头像 李华
网站建设 2026/10/13 3:52:28

Python+Django运维平台实战:从脚本堆到自动化任务下发与权限审计

简介:这是一套面向Python Web开发初学者与运维工程师的Django运维平台实战源码,适合想通过完整项目理解前后端不分离架构、掌握自动化运维工具开发的学习者。资源包共164个文件,约3.63MB,以39个py文件承载Django模型、视图与业务逻…

作者头像 李华
网站建设 2026/10/13 3:52:08

美股复权行情数据处理全指南:从拆股原理到量化回测实践

搞量化或者经常盯美股盘面的人,大概率都经历过类似的瞬间:你自选里某只一直关注的标的,某天开盘后价格突然“腰斩”,K线图上硬生生劈出一根大阴线,第一反应是公司是不是出了大事。翻一下公告才知道,原来是拆…

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

CTF Misc编码解码全攻略:从特征识别到多层嵌套拆解

CTF里的Misc模块,说白了就是“什么都有”的杂货铺,而编码解码是这间铺子里出货率最高的单品。无论是线上积分赛还是线下赛,第一道签到题十有八九是从一串Base64或者Hex开始的。我见过太多选手卡在最基础的编码识别上,眼睁睁看着送…

作者头像 李华
网站建设 2026/10/13 3:51:44

三大模板引擎SSTI沙箱逃逸深度解析与防御实践

被派到现场做授权评估,目标是一个用Jinja2渲染页面内容的业务系统。模板内容可控,数据交互也很正常,标准的SSTI检测点。我先丢了一个最常见的探测串{{ 7*7 }},页面直接输出了49。再丢{{ .__class__.__mro__ }},拦截提示…

作者头像 李华