OpenClaw,社区里更喜欢叫它小龙虾。如果你经常在自动化、AI工作流、个人服务器运维这几个圈子里逛,大概率刷到过这个名字。它本身是一个开源的服务端自动化框架:把指令调度、数据处理、定时任务、消息通知这些能力整合成一个常驻后台的运行体。我这次做的事,就是搞到一台免费云服务器,从头到尾把这个项目部署起来,并让它稳定跑了几天。整个过程没有花钱,也没有复杂的服务器运维基础,靠的就是一套比较标准化的容器部署流程。
这篇内容不是官网文档的翻译,也不是教程的拼凑,更多是我实际操作中一步一脚印踩出来的记录。适合两类人:一是从来没玩过云服务器的小白,想知道怎么从零到一把一个服务弄上线;二是已经有Linux基础、想省事跑起一个自动化框架的开发者。你按我的步骤走,大概率不会卡在“配置写好了但服务起不来”这种问题上。
1. 内容整体设计与部署思路拆解
1.1 小龙虾到底是个什么东西
OpenClaw不是一个单一功能的小工具,而是一个面向“任务自动化”的服务框架。你可以把它理解成一个能一直挂在云服务器后台的智能助手:给它配置好多个“技能”,比如接收定时指令、调用大模型做文本处理、操作文件目录、访问外部接口、推送通知到聊天工具等,它会把你的自然语言指令拆成步骤并执行。
我从实际使用角度列举几个典型场景,看完你大概就明白它能干什么了:
- 每天定时抓取某个网页或接口的数据,解析后存到自己的数据库或表格里;
- 把邮箱里新到的附件按规则自动处理、归档、推送摘要;
- 在多个平台之间做消息转发和内容同步;
- 把本地脚本的日志、报错信息采集后集中推送到指定聊天频道;
- 把AI能力嵌入到自己的日常工具链中,比如自动给文章打标签、总结摘要。
这些场景不是非它不可,但用这个框架统一管理,比自己东拼西凑一堆定时脚本要省心得多。尤其是你想让AI参与自动化流程,又不想被某个特定云服务绑死的时候,它非常合适。
OpenClaw这个名字跟“小龙虾”没有字面上的对应关系,纯属社区里为了方便交流起的昵称。中文技术圈那帮玩自动化的朋友,喊着喊着就习惯了。所以后面我都会直接用“小龙虾”这个叫法。
1.2 免费云服务器到底够不够用
运行小龙虾并不需要很高配置。一般情况下,1核1G的云服务器就能跑得很舒服,空闲状态内存占用通常只有几百MB。我是实测过的:开了一个容器版主服务、一个Redis,整体内存占用大概在600MB到800MB之间,CPU在空闲时几乎为零,只有执行定时任务时才会短时占满。
这就有意思了,意味着“免费白嫖”完全可行。
市面上免费服务器常见来源有几类:
- 新用户试用:多数主流云平台会给新注册用户提供1到3个月的免费试用实例,配置一般是1核2G或者2核4G,带宽1M到5M;
- 学生教育计划:部分平台对学生身份用户提供长期免费额度或免费轻量实例,期限通常按年算;
- 开源社区激励:少数平台为活跃开源贡献者提供免费资源;
- 开发沙盒体验区:一些云平台提供按时长或按额度发放的免费体验实例。
对小龙虾来说,首选1核2G的实例。1G内存也能跑,但跑久了心里不踏实,尤其是同时开多个任务插件或模型推理的时候,内存容易触顶。如果只有1G,建议后面配一下swap,把磁盘空间当内存的缓冲,能缓解不少压力。
1.3 为什么我选Docker Compose而不是裸装
部署方案上,我几乎没有犹豫就选了Docker Compose。原因很简单:
- 依赖全部隔离在容器里,不污染宿主机环境;
- 升级方便,拉新镜像、重启容器就完事;
- 迁移方便,配置文件和挂载目录打包就能换机;
- 一个YAML文件把主服务、Redis这些依赖全部编排起来,一条命令启动。
如果服务器环境实在装不了Docker,也可以用Python虚拟环境裸装,但升级和隔离都麻烦,我强烈不推荐。还有人是直接用一个docker run命令拉起的,这样也不是不行,但一旦涉及Redis、队列、健康检查这些配套组件,docker run的参数会写得又长又乱,维护起来非常痛苦。
2. 免费云服务器获取攻略
2.1 免费渠道怎么选
先放一张我筛选时的对比表,信息都是基于我自己的实际申请经验,不同平台可能略有出入:
| 渠道 | 参考配置 | 期限 | 门槛 | 适合谁 |
|---|---|---|---|---|
| 新用户试用 | 1核2G / 2核4G | 1~3个月 | 需实名认证,要求首次开通该产品 | 绝大多数人 |
| 学生免费额度 | 1核2G | 1年及以上 | 学生身份验证 | 在校生 |
| 社区开发者计划 | 2核2G | 按贡献评估 | 开源项目活跃度 | 开源玩家 |
| 免费沙盒体验 | 配置不定 | 按天/按小时 | 注册即可 | 临时测试用 |
我的建议是,第一选择“新用户试用”,大部分人都满足条件,流程也最简单直接。如果你手上有学生身份,优先去学生免费额度,这个最稳,期限长,到期还能续,不用反复折腾迁移。
选的时候还要注意几个细节。第一,确认活动页面上写的“新用户”是指“从未开通过该产品的新用户”,光有账号不够,如果你以前注册过甚至开过同类产品,很可能免费资格会失效。第二,看带宽限制,有些免费试用实例只有1Mbps带宽,用来跑服务完全够,但你要往服务器上搬大文件就非常痛苦,比如模型文件、数据包,1Mbps传到天亮都传不完。
2.2 免费实例申请操作流程
基于主流云平台的通用流程,我整理成下面几步,照着点就行:
- 注册云平台账号,完成实名认证。大部分免费试用都要求实名,这一步绕不过去。
- 找到“免费试用”或“新用户专享”入口,选择你需要的配置。操作系统我建议选Ubuntu 22.04 LTS或24.04 LTS,后面部署Docker的兼容性最好。CentOS现在版本更迭有些麻烦,不建议新手碰。
- 配置安全组或防火墙规则。刚开始只需要放行SSH的22端口,其他端口先全部关掉。后面部署完小龙虾,需要对外开放服务时再单独加规则。
- 选择地域。原则是离你实际使用位置近一点,延迟更低。个人折腾的话差别不大,哪个地域有免费名额选哪个就行。
- 创建实例后,系统会给你私钥或让你设置密码。私钥一定要下载保存好,很多新手在这里把私钥搞丢,后面就只能重置系统,太被动了。
- 创建完实例,马上到控制台开一个“到期提醒”,或者自己设个手机提醒。这一步很重要,下面细说。
2.3 白嫖的规则与我的避坑经验
免费实例有很多隐性规则,容易被忽略,我踩过几次坑,写出来给大家避雷:
- 试用到期后系统不会自动销毁实例,通常会转为按量付费。如果不主动处理,过几天一看账单,欠费几十块甚至上百块。所以我会在到期日前三天设个提醒,到期当天登录控制台,把实例彻底释放掉。
- 部分免费试用实例带宽受限。这个前面提过,重要的事再说一遍:如果带宽只有1Mbps,上传下载大文件前先用压缩工具把文件压小,或者干脆在本地处理完再传。
- 部分平台要求“新账号+新用户”,两个条件缺一不可。如果一个账号被判定不符合资格,老老实实换个没注册过的账号。
- 创建完实例后马上做一次系统快照或镜像备份。免费试用期到期前再做一份数据备份,迁移到新机器时直接恢复,能省很多事。
- 不要拿免费实例去跑高负载的商业应用。免费实例本来就是平台让用户体验用的,跑个个人服务、学习测试没人管你,但你要拿它去挖矿、跑大规模爬虫,封号都是轻的,还可能涉及法律风险。
3. OpenClaw部署实操:从空机到正常运行
3.1 服务器初始化从零开始
拿到一台裸的Ubuntu云服务器,第一件事不是装Docker,而是先做基础安全配置。我连上服务器后按顺序做了这些操作。
登录SSH,默认用户名通常是root:
ssh root@你的服务器IP先更新系统:
apt update && apt upgrade -y设置时区,确保定时任务按你习惯的时间运行:
timedatectl set-timezone Asia/Shanghai然后创建一个日常使用的普通用户,不建议长期用root跑服务:
adduser openclaw usermod -aG sudo openclaw切换到新用户,配置SSH公钥登录:
su - openclaw mkdir -p ~/.ssh vim ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys把自己本地的公钥内容粘贴进去保存,然后测试能否用新用户和密钥登录。确认没问题后,再修改SSH配置加固:
sudo vim /etc/ssh/sshd_config至少改这几项:
Port 2222 PermitRootLogin no PasswordAuthentication no改完重启SSH服务:
sudo systemctl restart sshd注意:修改SSH配置之前,一定要先确保新用户能通过密钥正常登录。否则你断开连接后就再也进不来了,只能去云控制台重置系统,从头再来。
3.2 Docker环境安装
接下来安装Docker。Ubuntu下装Docker CE的步骤比较标准化:
sudo apt install -y ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin sudo systemctl enable --now docker如果你的服务器网络访问官方源有问题,可以换用本地的软件源镜像,或者直接使用系统自带的docker.io包,命令会简化成:
sudo apt install -y docker.io docker-compose-plugin装完后确认一下版本:
docker version docker compose version看到Client和Server版本信息都正常输出,说明装好了。
3.3 目录规划和环境变量
我部署小龙虾时的目录结构是这样的:
/opt/openclaw/ ├── docker-compose.yml ├── .env ├── data/ └── logs/为什么要单独建data和logs目录?原因是容器本身是“临时”的,升级、重建都会导致容器内文件丢失。所有需要长期保存的数据必须通过挂载卷放到宿主机目录里。所以data目录存运行数据,logs目录存日志,容器怎么重建都不怕丢。
在项目目录里创建环境变量文件:
cd /opt/openclaw vim .env内容如下(结合自己实际情况调整):
OPENCLAW_MODE=prod OPENCLAW_PORT=8080 OPENCLAW_DATA_DIR=/opt/openclaw/data OPENCLAW_LOG_DIR=/opt/openclaw/logs REDIS_PASSWORD=用openssl生成一串强随机密码Redis密码可以用命令生成:
openssl rand -base64 32不建议用手打的一串短密码,Redis如果暴露在公网,弱密码很容易被扫到,几秒钟就被人给爆破。
3.4 编排文件与启动验证
接下来编写docker-compose.yml。这个是整个部署过程中最重要的文件,我把核心内容贴出来:
services: openclaw-core: image: openclaw/core:latest restart: unless-stopped env_file: .env volumes: - ./data:/data - ./logs:/logs ports: - "8080:8080" depends_on: redis: condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/healthz"] interval: 30s timeout: 5s retries: 3 redis: image: redis:7-alpine restart: unless-stopped command: redis-server --requirepass ${REDIS_PASSWORD} volumes: - redis-data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 3s retries: 3 volumes: redis-data:几个配置点的思路说明:
restart: unless-stopped:容器异常退出时自动重启,这是最常用的重启策略;depends_on:等Redis健康检查通过后再启动主服务,避免主服务连不上Redis直接崩溃;healthcheck:容器内部定期检查服务是否存活,方便后续观察状态;env_file:把上一步的.env文件注入容器环境变量,配置不乱写进代码里。
启动之前先检查配置文件语法:
docker compose config如果输出没有报错,就正式启动:
docker compose up -d docker compose ps查看启动日志,确认没有报错:
docker compose logs -f openclaw-core然后在服务器本机验证服务端口通不通:
curl -I http://127.0.0.1:8080/healthz看到HTTP响应正常,说明核心服务已经跑起来了。这时候再去云控制台的安全组里放行8080端口的入方向规则,就可以通过浏览器访问小龙虾的管理界面了。
顺序很重要:先在服务器内部验证通过,再开放公网端口。很多人一上来就把8080端口开到公网,服务还没跑起来,反而暴露了一个无人值守的端口,容易招来扫描器。
3.5 服务守护与开机自启
Docker本身已经有restart: unless-stopped策略,容器挂了会自动拉起。但服务器重启时,Docker服务本身要由systemd来管理,所以前面安装Docker后我特意执行了systemctl enable --now docker,这一步就是保证开机自动启动Docker。
如果你希望用systemd统一管理整个Compose服务,也可以额外加一个unit文件:
sudo vim /etc/systemd/system/openclaw.service写入:
[Unit] Description=OpenClaw Compose Service Requires=docker.service After=docker.service [Service] Type=oneshot RemainAfterExit=yes WorkingDirectory=/opt/openclaw ExecStart=/usr/bin/docker compose up -d ExecStop=/usr/bin/docker compose down [Install] WantedBy=multi-user.target启用并启动:
sudo systemctl daemon-reload sudo systemctl enable --now openclaw以后要查看服务状态就用systemctl status openclaw,操作起来比直接敲docker命令更直观。
3.6 安全加固不能偷懒
免费服务器也是公网服务器,只要暴露在公网上,分分钟就有扫描器在撞你的端口。安全加固这一节我放在部署流程里,因为它是上线前必须完成的动作,不是可选项。
先启用防火墙,只放行必要端口:
sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw allow 2222/tcp sudo ufw allow from 你的常用IP to any port 8080 proto tcp sudo ufw enable如果小龙虾的管理界面不访问,干脆别开放8080端口。我在实际使用中只是部署验证阶段临时开启过,日常使用都是通过SSH隧道访问的:
ssh -L 8080:127.0.0.1:8080 openclaw@服务器IP -p 2222这样本地浏览器访问localhost:8080就能连上服务,公网完全不暴露管理端口,安全风险小很多。
另外建议定期查看容器日志和磁盘占用:
docker system df df -h免费实例磁盘通常不大,一般就40G左右。日志文件如果不轮转,很快就会把磁盘塞满。我给小龙虾的日志目录加了个简单的cron轮转,每天只保留最近7天的日志:
sudo crontab -e写入:
0 4 * * * find /opt/openclaw/logs -name "*.log" -mtime +7 -delete4. 常见问题与排查技巧实录
4.1 容器反复重启,日志报Redis连接失败
我遇到的第一个问题就是容器一直在重启。执行docker compose ps看到状态是Restarting,然后看日志:
docker compose logs openclaw-core输出里有大量类似“Redis connection error”的报错。定位过程如下:
- 先单独看Redis容器是否正常:
docker compose ps redis- 如果Redis容器没起来,多半是Redis启动时密码不对或数据卷有权限问题。检查.env里REDIS_PASSWORD变量是否设置正确;
- 如果Redis正常,那就是主服务连Redis时用的密码或地址不对。确认环境变量是否注入了容器:
docker compose exec openclaw-core env | grep REDIS- 还有一种容易踩的坑:修改完.env文件后没有重新创建容器。
docker compose restart不会重新读取环境变量,必须用:
docker compose up -d --force-recreate这个问题本质上是环境变量没对上,属于配置层面的错误,不是项目本身的问题。养成修改配置后重建容器的习惯,能省掉很多排查时间。
4.2 端口测不通,外部访问不了
容器起来了,日志也很平静,但浏览器就是访问不了8080端口。我的排查顺序是:
先确认本机能通:
curl -I http://127.0.0.1:8080/healthz本机通,说明服务本身没问题,问题出在防火墙或安全组。
检查服务器防火墙:
sudo ufw status再检查云控制台的安全组规则。很多云平台的安全组和服务器内部防火墙是两层独立的,光放行一个不够。安全组里确保入方向规则允许了8080端口,且来源IP范围正确。
最后检查docker端口映射是否生效:
docker compose port openclaw-core 8080如果输出的是0.0.0.0:8080,说明端口映射绑定没问题。注意一个细节:8080端口如果绑定成127.0.0.1:8080,外部就连不上,必须绑定0.0.0.0:8080才能对外提供服务。
4.3 内存不足导致进程被杀
免费实例配置低,运行一段时间后有可能遇到内存不足的问题。现象是:容器突然变成退出状态,日志里最后几行是“Killed”,或者系统日志里有OOM(Out Of Memory)的记录。
最直接的应对方案是加swap。操作如下:
sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile写入fstab,保证重启后swap依然生效:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab用free -h确认swap已经挂上。
注意,swap是磁盘空间模拟出的内存,速度比真实内存慢得多。如果并发任务多,swap也会被疯狂消耗。实在扛不住,要么降低小龙虾的任务并发数,要么老老实实换2G内存的实例。免费试用期结束后用学生额度云服务器,一般都有2G内存,会从容很多。
4.4 拉取镜像慢或失败
Docker镜像拉取超时是部署时很常见的痛点。我第一天下载镜像等了十分钟都没动静,最后超时失败。几个处理办法:一是换一个时间段再拉,避开晚高峰;二是在Docker配置里设置可用的镜像加速地址;三是如果网络实在不给力,就在本地机器或其他网络环境好的服务器上先docker save成tar包,再上传到目标服务器docker load导入。
# 本地或网络好的机器上 docker save openclaw/core:latest -o openclaw-core.tar # 传到目标服务器后导入 docker load -i openclaw-core.tar这个方法对一次性的镜像迁移很有效,尤其是之后免费服务器到期换新机器时,我会直接把镜像压缩传到新机器上,再配合数据目录备份做恢复。
4.5 免费实例到期,迁移数据备份实战
这是白嫖党迟早要面对的事情:免费实例到期,数据怎么平稳迁到新机器。
我的迁移方案分四步,实际执行下来二十分钟搞定。
第一步,在旧机器上打包数据和配置:
sudo tar -czf openclaw-backup.tar.gz /opt/openclaw如果加上Redis数据卷,需要先把容器停掉再打包,保证数据一致性:
docker compose stop sudo tar -czf openclaw-backup.tar.gz /opt/openclaw docker compose up -d第二步,把备份文件传到新实例:
scp -P 2222 openclaw-backup.tar.gz openclaw@新服务器IP:/tmp/第三步,在新实例上解压并恢复目录结构:
sudo tar -xzf /tmp/openclaw-backup.tar.gz -C /第四步,启动容器:
cd /opt/openclaw docker compose up -d最后访问管理界面验证数据是否完整。如果之前配置了任务,看一下任务列表和日志输出,确认状态正常。
我强烈建议在部署完成之后就写一个备份脚本,配合crontab每天自动打包数据和配置文件。免费服务器什么时候到期说不准,但数据一旦丢了就真的要命。
4.6 常见问题速查表
把上面遇到过的坑整理成一张表,方便你对照排查:
| 现象 | 最常见原因 | 解决顺序 |
|---|---|---|
| 容器一直重启 | Redis连接失败或配置错误 | 看主服务日志→确认.env变量→重建容器 |
| 外部访问不了8080 | 安全组/防火墙未放行 | curl本机→ufw状态→云控制台安全组 |
| 内存不足进程被Killed | 实例内存过低 | 加swap→减少并发→换2G内存实例 |
| 镜像拉取超时 | 网络问题 | 重试→配置加速→离线save/load |
| 修改配置后不生效 | 容器没有重建 | docker compose up -d --force-recreate |
| SSH连不上 | 密钥或端口配置错误 | 云控制台重置密码→检查sshd配置→重试连接 |
5. 部署之后的真实感受与扩展建议
5.1 我的真实使用感想
这套部署流程走下来,我最深的感受是:部署本身不难,难的是对背后机制的理解。你如果只是机械地敲命令,一遇到问题就懵了。但如果你知道环境变量是怎么注进去的、端口映射是怎么工作的、容器挂载目录为什么不能丢,很多问题光看现象就能猜到原因。
免费云服务器确实好用,但这个“免费”是有代价的:你得接受迁移、接受配置可能被重置、接受带宽和资源限制。真正的解决办法,是把自己的部署流程做得足够“可复制”——配置文件、数据备份、镜像归档全都模块化,换一台机器分分钟恢复。我后来干脆把整个部署过程整理成了脚本,连备份恢复都可以一键执行,再也不怕实例到期。
另外一点就是安全别偷懒。我见过有人把免费服务器当做“临时玩具”,觉得不用管安全,结果被植入了挖矿程序都不知道。记住,只要是公网IP,就要按生产环境的标准对待。
5.2 还可以怎么继续扩展
小龙虾部署完成只是开始,后面能玩的东西还挺多。按我自己的路线,下一步的准备方向有这么几个:
- 把聊天工具或邮件通知接进来,这样任务跑完就能实时收到推送,不用天天登录控制台看状态;
- 写几个自定义任务流,把日常重复的运维操作交给它管理,比如定时巡检磁盘、检测证书有效期、拉取订阅源做摘要;
- 如果需要更高可用性,可以再申请一台免费实例,把数据目录用同步工具做双机备份,一台挂了另一台直接顶上;
- 把部署过程写成自动化的配置脚本,这样每次申请新免费服务器,跑一段脚本就能还原整套环境。
我个人实操下来的体会是,部署这件事最难的部分从来不是敲命令,而是习惯于把每一步都理解清楚,把每一个可能发生的变化都提前想好。免费实例会到期,容器会崩溃,端口会被扫描,这些都不是灾难,只要你提前准备了恢复方案。希望这套从零到一的过程,能让你少踩我踩过的坑,顺顺利利把小龙虾跑起来。