1. 从“本地折腾”到“云端常驻”:为什么我建议在华为云上部署OpenClaw
先聊点实际的。如果你已经接触过OpenClaw(社区里也叫Clawdbot),大概率经历过这么几个阶段:一开始在本地电脑上装,装完发现依赖一堆,Python版本对不上,Node.js环境又闹脾气;好不容易跑起来了,电脑一合盖、网络一切断,机器人就“失联”了;再后来想挂个定时任务、接个Webhook,发现本地IP根本没法让外部服务稳定回调。这时候你就知道,把这套东西搬到云服务器上,不是“炫技”,而是刚需。
我这次用的是华为云服务器,操作系统选的Ubuntu 22.04 LTS,配置是2核4G。说实话,OpenClaw这玩意儿对硬件要求不算高,2核4G跑日常的Agent任务、Skill调用、多轮对话管理都够用,4核8G会更从容一点,尤其是你要并发处理多个会话或者跑一些比较重的Harness场景时。但入门阶段,2核4G完全能撑住,先把流程跑通,再考虑升配。
这篇文章面向的是真正想动手的同学——不管你是第一次接触OpenClaw,还是已经在本地方案里折腾过但没成功,只要你能照着命令复制粘贴,大概率都能在半小时内把服务跑起来。我会把整个流程拆成三层来讲:第一层是云服务器的基础准备,第二层是OpenClaw核心服务安装与配置,第三层是让它长期稳定运行、能对外提供服务的收尾工作。中间会穿插我踩过的坑和排查思路,希望能帮你少走弯路。
2. 云服务器基础准备:买机器、开端口、装环境一气呵成
2.1 选择华为云服务器时的几个关键决策点
华为云的入口就不啰嗦了,控制台里“弹性云服务器”就是我们要买的东西。选配置的时候,有几个容易被忽略的点,我单独拎出来说。
第一个是操作系统版本。我强烈建议选Ubuntu 22.04 LTS,别选CentOS或者Alibaba Cloud Linux。为什么?因为OpenClaw的很多依赖包(比如Python 3.10+、Node.js 18+)在Ubuntu 22.04的官方源里直接就有,装起来不用编译,省时间也少踩坑。你如果非要选CentOS,后面编译Python或者装一些系统库的时候,心态容易崩。
第二个是公网带宽。入门级选1Mbps就行,但如果你的OpenClaw要对接外部Webhook、接收图片或者频繁调用在线API,1M可能会成为瓶颈。我的建议是最低5Mbps,费用差不了多少,但体验完全不一样。实测下来,5M带宽拉取模型响应流式输出时,体感明显更流畅。
第三个是安全组规则。这是新手最容易忽略的一步。华为云默认的安全组只开放了22端口(SSH),你如果不手动加规则,就算服务在服务器上监听3000端口,外部也永远访问不到。后面我会专门讲端口开放,但你在购买时最好就把安全组的规则规划一下。
2.2 基础环境安装:Python、Node.js、Git一个都不能少
服务器拿到手,第一步是SSH连上去。Windows用户可以用PowerShell自带的ssh命令,或者直接用Xshell;Mac用户直接Terminal就行。登录之后,先更新系统包索引,这一步能避免后面装依赖时出现404或者版本过旧的问题:
sudo apt update && sudo apt upgrade -y接下来装基础工具链:
sudo apt install -y git curl wget unzip build-essential然后就是重头戏——Python和Node.js。OpenClaw的核心服务对Python版本有要求,太老或者太新都可能出问题。Ubuntu 22.04自带的Python是3.10,这是我验证过的稳定版本。检查一下:
python3 --version如果输出是3.10.x,那就直接用系统的Python,不用装Miniconda。如果你之前装了Miniconda或者Anaconda,建议把base环境的PATH理清楚,不然一会儿用系统的pip、一会儿用conda的pip,很容易出现“装上了但import不到”的灵异事件。
Node.js这边,OpenClaw的Companion组件(后面会用到)需要Node 18+。Ubuntu 22.04的默认源里Node版本比较老,我推荐用NodeSource的源来装:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install -y nodejs装完验证一下:
node --version npm --version两个命令都有输出,说明环境基本齐了。这里有个细节:不要用apt直接装nodejs,那装出来的是老版本,后面跑OpenClaw的Windows Companion或者某些Skill的Node脚本时,一堆兼容性问题等着你。
2.3 安全组与防火墙配置:让外部流量能进来
这一步很重要,但也特别容易出错。很多人在服务器上把服务启动了,本地浏览器却死活打不开页面,十有八九是安全组没放行。
华为云控制台里,找到你的云服务器实例,点“安全组”,然后“配置规则”。你需要添加两条入方向规则:
| 协议 | 端口 | 用途 |
|---|---|---|
| TCP | 22 | SSH远程连接(一般默认有) |
| TCP | 3000 | OpenClaw主服务端口(按需调整) |
如果你后面要用HTTPS域名访问,还得预留443端口;如果用Nginx做反向代理,80端口也别忘。开放端口的原则是“最小授权”——只开你实际要用的端口,别图省事放行全部端口。
除了云平台的安全组,服务器自己的防火墙也要看看。Ubuntu默认没开ufw,但你可以确认一下:
sudo ufw status如果显示inactive,那就不用管;如果active,记得放行上面那几个端口:
sudo ufw allow 22/tcp sudo ufw allow 3000/tcp另外补充一点:如果你打算用HTTP协议直接暴露服务(而不是走HTTPS),建议至少加上一个Token认证,或者配合IP白名单。OpenClaw自带的一些接口如果不做保护,很容易被扫描器盯上。这个后面在配置章节会细说。
3. OpenClaw项目获取与依赖安装:从源码到可运行的完整链路
3.1 源码获取:Git克隆的速度优化与目录规划
OpenClaw的代码托管在GitHub上,国内服务器直接git clone时,速度时好时坏,有时候几十KB/s,一个仓库拉半天。我的做法是配置Git的代理或者用镜像加速。推荐一个稳妥方案:先用git clone直连试试,如果速度惨不忍睹,可以临时挂一个加速前缀。这里不是让你搞什么特殊网络工具,纯国内CDN加速服务就行,比如把仓库地址替换成一些公共的GitHub镜像域名。具体镜像地址不固定,搜索“GitHub镜像”就能找到不少,选一个速度稳定的。
仓库路径不需要我在这里赘述(避免链接失效),你在OpenClaw的官方文档或社区里能找到最新的仓库地址。克隆后进入目录:
cd openclaw3.2 虚拟环境与依赖安装:不要污染系统Python
OpenClaw的依赖列表里有很多包,直接往系统Python里pip install,短期内没问题,但后续升级Python或者装其他项目时容易冲突。我建议用venv创建独立的虚拟环境:
python3 -m venv venv source venv/bin/activate激活后,你会看到命令行前面多了(venv)前缀。接下来升级pip并安装依赖:
pip install --upgrade pip pip install -r requirements.txt如果requirements.txt不存在,那可能项目是用pyproject.toml管理依赖的,那就用:
pip install -e .这一步会拉取大量的依赖包。国内服务器访问PyPI可能有点慢,稳妥的做法是临时换用清华或者阿里云的PyPI镜像:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt镜像源的选择也有讲究:清华源同步频率高,阿里云源速度快,两个都行,看你的网络情况。装完之后,最好记录一下关键包的版本,比如openai、fastapi、uvicorn这些,后面排查问题时会用到。
3.3 Node.js依赖与Companion组件:额外的那一半拼图
OpenClaw从某个版本开始,把一部分能力拆到了Node.js侧,叫Companion,主要负责WebSocket通信、一些前端资源服务和系统级交互。也就是说,光装Python依赖还不够,你要把Node那边的依赖也装上才能跑完整功能。
在项目根目录下,如果有package.json文件,那就说明需要npm安装:
npm install如果项目是前后端分离的,可能还要进到特定子目录去安装。具体看项目结构。装完之后,用npm run build(如果有这个脚本)来生成产物。
这里有个我常犯的错:Python和Node的依赖必须都装完再启动服务,不要只装一半就去试运行。否则服务起来后,某些Skill的接口会报500错误,而且日志里不直接告诉你“缺少Node依赖”,只会显示“模块未找到”之类的模糊错误,排查起来非常费劲。
3.4 配置文件初探:从示例文件起步,理解每个参数的意义
安装完依赖后,项目目录下应该有一个.env.example或者config.example.yaml之类的文件。复制一份出来作为正式配置:
cp .env.example .env然后编辑.env。关键内容一般包括:
- API密钥:如果你要对接大模型服务(比如OpenAI、Anthropic或国内的大模型接口),需要在这里填API Key和Base URL。
- 服务端口:默认是3000。
- 日志级别:建议先设成DEBUG,跑通了再改回INFO。
一个常见的坑是:很多人把API Key直接填在代码里,结果不小心提交到公开仓库,密钥泄露。正确的做法是始终用.env文件,并且把.env加入.gitignore。
4. 第一次启动与本地验证:从“进程起来”到“服务可用”
4.1 启动服务:前端跑起来不等于后端ready
依赖装好、配置填完,终于到了启动环节。在虚拟环境激活的状态下,执行:
python main.py或者如果你用的是启动脚本:
bash start.sh看到类似“Uvicorn running on http://0.0.0.0:3000”的日志,说明主服务起来了。这时候先别急着高兴,验证要从两个层面做。
第一层是本机自测:在服务器上直接curl:
curl http://localhost:3000/health如果返回{"status":"ok"}之类的JSON,说明服务本身没毛病。
第二层是外部访问自测:在你自己的电脑浏览器里,打开http://服务器公网IP:3000。如果打不开,先别怀疑服务,按顺序排查:安全组有没有放行3000端口?服务器防火墙有没有开?服务有没有监听0.0.0.0而不是127.0.0.1?很多默认配置会把监听地址写成本地回环地址,导致外网无法访问,这是新手最常踩的坑。
4.2 配置模型API:没有密钥,一切都是空谈
OpenClaw作为一个智能体框架,核心玩法是让大模型驱动它执行任务。所以你不光要把服务跑起来,还得让它能够调用大模型API。在配置文件里找到类似model_provider的部分,填入你的API Key和模型名称。
这里我特别强调:如果你没有OpenAI官方的Key,完全可以用国内的大模型API替代。OpenClaw的接口设计比较友好,通常允许你通过base_url参数指向任意兼容的API端点,很多国内大模型服务都提供OpenAI兼容格式的接口。
填完之后,重启服务,然后在后台管理界面或者通过API发一条简单的消息,看看模型是否能正常回复。如果报401或者403,检查Key是不是复制错了;如果报超时,检查服务器到API服务商的网络连通性;如果报模型不存在,检查模型名称是否和你的API服务商匹配。
4.3 Skill机制初体验:让Agent真正“干活”
OpenClaw最吸引人的地方是它的Skill体系。简单理解,Skill就是给Agent预置的能力模块,比如“搜索网页”“调用工具”“处理文件”“执行代码”等。
在配置好模型API之后,我建议你做的第一件事就是启用一个最简单的Skill,比如“echo”或者“当前时间查询”,目的不是玩,而是验证Skill的加载链路是否正常。
启用Skill的方式通常是修改配置文件里的skills列表,或者在管理界面上切换。改完配置需要重启服务。
重启后,给Agent发条消息:“帮我看看现在几点了”?它如果正确调用Skill并返回时间结果,说明整个“意图识别 -> 技能路由 -> 执行 -> 回复”的闭环已经打通。这是你在云上的第一个完整Agent任务,值得有点仪式感。
5. 系统服务化:让OpenClaw脱离SSH窗口也能长期运行
5.1 用systemd守护进程:停止手动nohup的日子
很多人习惯了nohup python main.py &这种土办法,但说实话,不推荐用在云服务器上。原因很简单:一旦进程崩溃,不会自动重启;服务器重启后,服务也不会自动拉起。对生产环境来说,这等于没有保障。
用systemd来管理服务,才是正经做法。创建一个service文件:
sudo vim /etc/systemd/system/openclaw.service内容参考如下:
[Unit] Description=OpenClaw Service After=network.target [Service] Type=simple WorkingDirectory=/your/path/to/openclaw Environment=PATH=/your/path/to/openclaw/venv/bin ExecStart=/your/path/to/openclaw/venv/bin/python main.py Restart=always RestartSec=5 User=ubuntu [Install] WantedBy=multi-user.target这里有几个关键参数要注意:
WorkingDirectory必须指向项目根目录,否则服务可能找不到配置文件。Environment最好显式设置PATH,确保用虚拟环境里的Python。Restart=always意思是不管什么原因退出,都自动重启;RestartSec=5是重启前的等待秒数,防止疯狂重启。User建议用一个普通用户,不要用root跑服务。
写完后,重载systemd并启动服务:
sudo systemctl daemon-reload sudo systemctl enable openclaw sudo systemctl start openclaw查看运行状态:
sudo systemctl status openclaw以后你想看日志,用journalctl -u openclaw -f实时跟踪;想重启,用sudo systemctl restart openclaw。这下舒服了,SSH断开也不影响服务。
5.2 Nginx反向代理与HTTPS的必要性
直接用IP加端口访问OpenClaw,虽然能用,但有几个尴尬:一是端口号不好记;二是HTTP明文传输,API调用时如果带着密钥,就有被中途截获的风险;三是某些浏览器策略对非标准端口有限制。
用Nginx做反向代理,把openclaw.yourdomain.com这个域名指向本机的3000端口,顺便挂上HTTPS证书,这套组合拳能一次性解决上面所有问题。
安装Nginx:
sudo apt install -y nginx然后建一个配置文件:
sudo vim /etc/nginx/sites-available/openclaw基础写法:
server { listen 80; server_name openclaw.yourdomain.com; location / { proxy_pass http://127.0.0.1:3000; 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 X-Forwarded-Proto $scheme; } }把配置文件软链到sites-enabled,然后测试并重载:
sudo ln -s /etc/nginx/sites-available/openclaw /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginxHTTPS证书我用的是Let‘s Encrypt,用certbot一键申请。前提是域名已经解析到服务器IP。执行:
sudo apt install -y certbot python3-certbot-nginx sudo certbot --nginx -d openclaw.yourdomain.com证书会自动配置好,并设置定时自动续期。整个过程不到十分钟,但体验直接从“玩具级”跳升到“生产级”。
5.3 处理WebHook与回调地址的部署细节
OpenClaw有大量场景需要外部服务回调它,比如对接IM机器人、接入飞书/钉钉群聊、或者接收第三方平台的Webhook事件。这个时候,回调地址就该用你配置好的域名,而不是裸IP。
写回调地址时,要注意路径是否和项目里定义的路由一致。拿不到准确路由的时候,去看项目源码里的router定义,或者网络文档。遇到回调失败,优先看Nginx日志(/var/log/nginx/access.log和error.log),再去看OpenClaw的日志,两边一对照,问题通常就浮出水面了。
6. 常用Skill安装与实战:让云端Agent真正接管日常任务
6.1 从官方市场拉取Skill:一条命令搞定
OpenClaw社区维护了一批官方Skill,覆盖了搜索、翻译、摘要、日历管理、邮件发送等常见场景。安装方式一般是通过CLI:
openclaw skill install search openclaw skill install translate安装完成后,修改配置文件的skills列表,把新Skill加进去,再重启服务。
这里提醒一句:Skill不是装完就自动启用的,很多Skill还需要在配置文件里填写对应的API Key或服务参数。比如“搜索”Skill,可能需要你配置搜索服务的API Key;“邮件”Skill,需要你填SMTP账号密码。只装不配,调用时会报一堆错。
6.2 自定义Skill开发:当Agent不够用时的正确解法
官方Skill再多,也覆盖不了所有人的需求。我在实际部署中,自己写过一个定时巡检的Skill:让Agent每隔一段时间去检查服务器磁盘使用率、内存占用和关键服务状态,发现异常就通过消息通知推送给我。
这个Skill的核心逻辑其实很简单:用Python写一个函数,放在Skills目录下,遵循项目的接口规范,然后在配置里注册。具体代码格式各个版本有差异,但思路是共通的。你在写的时候,参考项目里自带的示例Skill,照着葫芦画瓢就行。
有一点值得注意:自定义Skill如果涉及敏感信息(比如数据库密码、服务器SSH密钥),不要硬编码在代码里,放在.env里通过环境变量读取会更安全。
6.3 云端跑Skill和本地跑有什么区别
在云端部署之后,最直观的变化是Skill的执行不再受本地网络和关机的影响。比如我设置了一个每天早上9点从RSS源抓取行业新闻并生成摘要的Skill,它在云服务器上稳定跑了一个多月,一次都没漏过。这在本地电脑上是做不到的,因为我的笔记本不可能24小时开机。
另外,云端服务器的公网IP稳定,Skill里如果有需要外部服务回调的逻辑(比如创建了一个任务卡片,等待用户点击后触发后续动作),也能顺畅运行。
7. 常见问题与排查技巧实录
7.1 服务启动失败或端口被占用
症状是执行启动命令后,报错“Address already in use”。这通常是上一次运行的服务没有优雅退出。排查方式:
lsof -i:3000找到占用端口的进程PID,然后:
kill -9 PID再重新启动。如果是systemd托管,直接用sudo systemctl restart openclaw,它会自动接管。
7.2 WebSocket连接频繁断开
OpenClaw的Companion与主服务之间,以及某些前端页面与服务端之间,会用到WebSocket。如果你用Nginx反代,需要额外配置WebSocket升级头:
proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade";忘记加这段,前端页面可能能打开,但部分实时功能会出现“连接已断开”的提示,很迷惑。
7.3 模型API超时或返回空内容
这个案例我遇到好几次。表现为Agent回复“我暂时无法回答”或者干脆一直转圈。排查顺序是:
- 先看OpenClaw的日志,确认请求有没有发到模型服务商。
- 用curl直接测试API服务商的接口,确认网络链路通不通。
- 检查Base URL是否正确——很多人复制配置时,把
/v1路径写错或者多加了空格。
如果以上都没问题,那就是模型服务商自己的限流或波动,可以适当调大超时时间,或者换成备用模型。
7.4 跨域问题(CORS)导致浏览器端无法访问
如果你从本地浏览器直接访问云服务器上的OpenClaw,页面脚本向服务端发请求时可能被CORS拦截。项目配置里一般有允许跨域的开关或白名单设置。开发阶段可以先把允许的域名设成*,生产环境再收紧到你自己的域名。
7.5 排查问题时的日志观看法
日志是排查一切问题的基础。systemd托管的服务看日志用:
journalctl -u openclaw -n 100 --no-pager实时跟踪用:
journalctl -u openclaw -f如果是手动启动的进程,日志会直接打到终端。建议在配置里把日志级别设成DEBUG,多打一点信息没坏处,排完问题再改回INFO。
8. 部署经验与成本控制心得
8.1 实测资源占用:2核4G到底够不够
我把我这台2核4G服务器跑了一段时间,日常OpenClaw服务在空闲时占用大约300MB内存,跑一个轻量任务时CPU峰值在30%左右,内存占用会到700MB-1GB。如果同时跑多个Skill,比如批量处理文本、调用外部搜索,内存会冲到1.5GB左右。所以结论是:入门够用,但别开太多重型Skill。
如果你想在同一个服务器上再装个数据库、Redis、Nginx这些,2核4G会有点紧张。预算允许的话,直接上4核8G,省心不少。
8.2 省钱策略:按需购买与数据备份
华为云的计费方式有包年包月和按需付费。入门阶段我建议先用按需付费,跑通核心流程之后,再换算一下包年成本,决定要不要转成包年。如果只是学习和测试,用完关机并释放磁盘,能省不少钱。
数据备份方面,.env配置文件、自定义Skill代码这些都属于“脑子里的财富”,建议定期备份到你自己的代码仓库或本地磁盘。云服务器本身挂了都可以重装,但配置丢了很麻烦。
8.3 安全加固的几条底线
云服务器暴露在公网上,随时会招来扫描攻击。以下几点是我实测后认为必须做的:
- SSH端口别用默认的22,改成高位端口(比如22022),能挡住90%的暴力破解。
- 用密钥登录,禁用密码登录。
- OpenClaw的服务接口,至少要加一层访问Token。
- 定期更新系统补丁:
sudo apt update && sudo apt upgrade -y。
这些操作不复杂,但每一个都能实打实地降低被入侵的风险。
9. 写在最后:从能跑到好用,还有一段路要走
部署OpenClaw到华为云服务器,这件事本身不难,难的是把“能跑”变成“好用”。我个人的建议是,按顺序走完这套流程后,接下来花点时间去研究Skill的深浅用法。比如把多个Skill串联起来,做一个完整的自动化工作流;或者写一个定时任务,让Agent每天主动向你汇报云端服务的运行状态。
我踩过几次坑之后,最大的体会是:不要一次性追求大而全的功能配置,而是先把最小闭环跑通,再逐步加料。这个思路在部署OpenClaw上特别适用。
最后分享一个小技巧:如果你在配置过程中遇到任何报错,不要急着搜“OpenClaw xxx报错”,先看日志。日志不会说谎,它会把真正的线索藏在最后几行。养成看日志的习惯,比记住任何教程都管用。希望这篇教程能让你少走一点弯路,早日拥有一台真正为你自己工作的云端Agent。