最近折腾了一件事:在阿里云ECS上把OpenClaw跑起来,对接阿里云百炼的几个主流大模型,最后接进飞书——手机和电脑打开飞书就能直接用。
网上的教程大多缺步骤,或者版本对不上,我前后试了好几种安装方法才把整个链路跑通,尤其是OpenClaw的安装环节,踩了不少坑。这篇文章把完整步骤和我碰到的问题都记录下来,照着做应该能避开大部分麻烦。
先算笔账
- 阿里云 ECS:99元/年,2核2G,3M带宽,40G ESSD盘
- 阿里云百炼 大模型:首月7.9元,可用GLM5、Qwen3.5-Plus等模型,18000次请求
- 域名:
aiearn.me花了21元,阿里云新用户首年1元也能拿下主流后缀
首年合计:7.9 + 99 + 21 = 127.9元
一、前期准备
全程都在阿里云生态里操作,不用跨平台。提前备好三样东西:
1. ECS 服务器 选99元/年的经济型e实例,2核2G、3M带宽、40G ESSD。记下你的公网IP和SSH密码。
2. 阿里云百炼账号 注册并开通Coding Plan(首月7.9元),后面配置模型时要用到API密钥。活动截止2026年4月1日。
3. 域名 在阿里云注册,完成实名认证后,把域名解析A记录指向你的ECS公网IP。
二、在ECS上安装OpenClaw
这是最容易出问题的环节。我试了官方一键安装、Docker安装、npm安装三种方式,最后用的是「Swap扩容 + npm精简安装」的组合。
1. 登录服务器
ssh root@你的服务器公网IP
出现 root@xxx 就登录成功了。
2. 安装系统依赖
# 更新软件包
yum update -y
# 安装核心依赖(--allowerasing 解决阿里云自带 epel 包冲突)
yum install -y wget curl epel-release certbot --allowerasing
# 安装 npm 和 Python
yum install -y python3 python3-pip npm
3. 我踩过的两个坑(可以直接跳过这两种方法)
❌ 方式一:常规 npm 安装
npm install -g openclaw@latest --registry=https://registry.npmmirror.com --unsafe-perm=true --allow-root
安装到一半,终端直接输出「已杀死」。查日志是依赖编译时把2核2G的内存打满,系统主动杀掉了进程。
❌ 方式二:Docker 安装
docker run -d --name openclaw -p 18789:18789 --restart=always --memory=1536m openclaw/openclaw:latest
报错:
Unable to find image 'openclaw/openclaw:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp 54.89.135.129:443: connect: connection refused.
国内访问Docker Hub太不稳定,即使配了国内镜像源也没拉下来,放弃。
4. 最终成功的方法
第一步:开2G Swap + 清缓存
2核2G内存装OpenClaw比较吃紧,先加一块Swap交换空间:
dd if=/dev/zero of=/swapfile bs=1M count=2048 && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile && echo '/swapfile swap swap defaults 0 0' >> /etc/fstab && sync && echo 3 > /proc/sys/vm/drop_caches && systemctl stop firewalld 2>/dev/null
这条命令做了几件事:创建2G Swap文件、设置权限并启用、写入 /etc/fstab 确保重启后自动挂载、清理系统缓存、临时关闭防火墙。
第二步: npm 精简安装(指定稳定版本)
放弃 latest,指定 v2026.2.25,加上几个关键参数大幅减少内存占用:
npm install -g openclaw@v2026.2.25 --registry=https://registry.npmmirror.com --unsafe-perm=true --allow-root --no-optional --omit=dev --ignore-scripts
参数说明:
| 参数 | 作用 |
|---|---|
--registry=https://registry.npmmirror.com | 用淘宝镜像,下载稳定 |
--unsafe-perm=true --allow-root | 允许 root 用户安装,避免权限报错 |
--no-optional --omit=dev | 跳过可选依赖和开发依赖,这是内存不足的核心解法 |
--ignore-scripts | 跳过安装后的自动脚本,不额外消耗内存 |
@v2026.2.25 | 固定版本,行为可预期 |
等3-5分钟,无报错即安装成功。
第三步:验证安装并启动 网关
注意:v2026.2.25 没有 openclaw start 命令,用下面的方式启动:
# 确认版本
openclaw --version
# 清理残留进程
openclaw gateway stop
pkill -9 openclaw
# 后台启动网关(日志写入文件)
nohup openclaw gateway run --port 18789 --force --allow-unconfigured --bind lan > /root/openclaw.log 2>&1 &
# 验证端口
netstat -tulpn | grep 18789
netstat 显示18789端口被监听,就说明网关正常运行了。
安装完成后处理 Swap
OpenClaw日常运行2核2G内存够用,Swap只是安装时临时用的,装完可以关掉:
swapoff /swapfile && rm /swapfile
三、配置阿里云百炼大模型
OpenClaw本身不带模型,需要对接外部API。
1. 获取百炼 API 密钥
登录阿里云百炼控制台,开通Coding Plan后,在「API密钥管理」里创建密钥,复制保存好。
2. 修改配置文件
先停掉网关:
openclaw gateway stop
pkill -9 openclaw
编辑配置文件:
vi ~/.openclaw/openclaw.json
找到 models 节点,替换为以下内容(填入你的API密钥):
"models": {
"mode": "merge",
"providers": {
"bailian": {
"baseUrl": "https://coding.dashscope.aliyuncs.com/v1",
"apiKey": "你的百炼API密钥",
"api": "openai-completions",
"models": [
{"id": "qwen3.5-plus", "name": "qwen3.5-plus", "contextWindow": 1000000, "maxTokens": 65536},
{"id": "glm-5", "name": "glm-5", "contextWindow": 202752, "maxTokens": 16384},
{"id": "MiniMax-M2.5", "name": "MiniMax-M2.5", "contextWindow": 204800, "maxTokens": 131072}
]
}
}
},
"agents": {
"defaults": {
"model": {"primary": "bailian/qwen3.5-plus"},
"models": {
"bailian/qwen3.5-plus": {"alias": "Qwen3.5-Plus"},
"bailian/glm-5": {"alias": "GLM-5"},
"bailian/MiniMax-M2.5": {"alias": "MiniMax-M2.5"}
}
}
}
注意:模型 id 和 name 字段都要填,provider 名用 bailian,Agent 里的默认模型记得加 bailian/ 前缀。
3. 重启并验证
nohup openclaw gateway run --port 18789 --force --allow-unconfigured --bind lan > /root/openclaw.log 2>&1 &
# 测试调用
openclaw models call --model bailian/glm-5 --prompt "你好"
有回复就说明模型配置成功了。
四、配置公网 HTTPS 访问
配完模型后,默认只能通过SSH端口转发本地访问,很不方便。配置域名+HTTPS就能直接从公网进。
1. 申请 HTTPS 证书
我一开始用 --standalone 模式,报错说80端口被占用。换DNS验证模式,不需要占任何端口:
certbot certonly --manual --preferred-challenges dns -d openclaw.你的域名
执行后会生成一条TXT解析记录,去阿里云域名控制台添加这条记录,等一分钟生效后回车,证书就申请成功了。证书路径会在终端输出,记下来。
如果服务器上有Nginx等服务占着80端口,不要强行停它,直接用DNS验证模式就行。
2. 配置 OpenClaw 开启 TLS
编辑配置文件,在 gateway 节点加入TLS配置:
"gateway": {
"port": 18789,
"mode": "local",
"bind": "lan",
"controlUi": {
"dangerouslyAllowHostHeaderOriginFallback": true
},
"auth": {
"mode": "token",
"token": "你的网关token"
},
"tls": {
"enabled": true,
"certPath": "你的证书 fullchain.pem 路径",
"keyPath": "你的证书 privkey.pem 路径"
}
}
重启网关后,用 https://你的域名:18789 就能公网访问了。
3. 处理配对请求
第一次从公网访问,OpenClaw会要求设备配对:
# 查看待配对的请求
openclaw devices list
# 批准(替换成你的 Request ID)
openclaw devices approve 你的RequestID
五、接入飞书
这一步配完就算打通了:飞书私聊或者群聊@机器人,就能直接用大模型。
1. 创建飞书应用
登录[飞书开放平台],创建「企业自建应用」,记下 App ID 和 App Secret。
在「应用能力」里添加「机器人」能力。
2. 配置权限和事件
在「权限管理」里勾选以下4个权限(缺了会收不到消息):
im:messageim:message.group_atim:message.p2pbot:message
在「事件和回调」(新版飞书把「事件订阅」改叫这个了,找了好一会儿)里,选「使用长连接接收事件」,然后添加 im.message.receive_v1 事件。
3. 发布应用
去「版本管理与发布」创建新版本,选「企业内发布」。这步容易忘,没发布机器人不会有任何响应。
4. 配置飞书通道
编辑 OpenClaw 配置文件,在与 models 同级的位置加入 channels 节点:
"channels": {
"feishu": {
"enabled": true,
"appId": "你的飞书App ID",
"appSecret": "你的飞书App Secret",
"dmPolicy": "open",
"groupPolicy": "mention",
"streaming": true,
"requireMention": false
}
}
保存后重启网关,执行:
openclaw channels status --probe
输出 Feishu main: enabled, configured, running, works 就配置好了。
关于 pairing 没有反应的问题:很多教程说要发
pairing配对,我发了完全没动静。最终解决方法是把dmPolicy从pairing改成open,不需要配对,直接发消息就能用。同时检查应用是否已发布、权限是否完整勾选。如果还不行,执行openclaw channels restart feishu重连一次。
5. 测试
打开飞书,搜索你创建的机器人,私聊发「你好」,几秒内收到回复就说明整个链路通了。群聊里添加机器人后,@它发消息同样有效。
六、踩坑汇总
把这次遇到的问题集中列一下:
| 问题 | 原因 | 解决方法 |
|---|---|---|
| npm安装被「杀死」 | 2核2G内存不够 | 先开2G Swap,加 --no-optional --omit=dev --ignore-scripts 参数 |
| Docker安装连接拒绝 | 国内访问 Docker Hub 不稳定 | 改用npm安装+国内镜像 |
openclaw start 报错 | v2026.2.25不支持该命令 | 用 openclaw gateway run 带参数启动 |
| 模型配置不生效 | 字段或前缀写错 | id 和 name 都要填,Agent里加 bailian/ 前缀 |
| 证书申请失败 | 80端口被占用 | 改用DNS验证模式(--preferred-challenges dns) |
| 公网访问报错 | 浏览器要求HTTPS | 必须配域名+证书,不能用HTTP直接访问公网IP |
| 飞书机器人无响应 | 应用未发布 / dmPolicy配置问题 | 确认已发布,dmPolicy 设为 open |
七、openclaw.json 完整配置
贴一份我最终跑通的配置,敏感字段换成你自己的:
{
"meta": {
"lastTouchedVersion": "2026.2.25",
"lastTouchedAt": "2026-03-03T09:36:49.253Z"
},
"wizard": {
"lastRunAt": "2026-03-02T13:33:17.347Z",
"lastRunVersion": "2026.2.25",
"lastRunCommand": "configure",
"lastRunMode": "local"
},
"models": {
"mode": "merge",
"providers": {
"bailian": {
"baseUrl": "https://coding.dashscope.aliyuncs.com/v1",
"apiKey": "你的百炼API密钥",
"api": "openai-completions",
"models": [
{
"id": "qwen3.5-plus",
"name": "qwen3.5-plus",
"reasoning": false,
"input": ["text", "image"],
"contextWindow": 1000000,
"maxTokens": 65536
},
{
"id": "qwen3.5-35b-a3b",
"name": "qwen3.5-35b-a3b",
"reasoning": false,
"input": ["text"],
"contextWindow": 262144,
"maxTokens": 65536
},
{
"id": "qwen3-max",
"name": "qwen3-max",
"reasoning": false,
"input": ["text"],
"contextWindow": 262144,
"maxTokens": 65536
},
{
"id": "glm-5",
"name": "glm-5",
"reasoning": false,
"input": ["text"],
"contextWindow": 202752,
"maxTokens": 16384
},
{
"id": "MiniMax-M2.5",
"name": "MiniMax-M2.5",
"reasoning": false,
"input": ["text"],
"contextWindow": 204800,
"maxTokens": 131072
}
]
}
}
},
"agents": {
"defaults": {
"model": {
"primary": "bailian/qwen3.5-plus"
},
"models": {
"bailian/qwen3.5-plus": {"alias": "Qwen3.5-Plus"},
"bailian/qwen3.5-35b-a3b": {"alias": "Qwen3.5-35B-A3B"},
"bailian/qwen3-max": {"alias": "Qwen3-Max"},
"bailian/glm-5": {"alias": "GLM-5"},
"bailian/MiniMax-M2.5": {"alias": "MiniMax-M2.5"}
},
"workspace": "/root/.openclaw/workspace",
"compaction": {
"mode": "safeguard"
}
}
},
"commands": {
"native": "auto",
"nativeSkills": "auto",
"restart": true,
"ownerDisplay": "raw"
},
"channels": {
"feishu": {
"enabled": true,
"appId": "你的飞书App ID",
"appSecret": "你的飞书App Secret",
"dmPolicy": "open",
"groupPolicy": "mention",
"streaming": true,
"requireMention": false
}
},
"gateway": {
"port": 18789,
"mode": "local",
"bind": "lan",
"controlUi": {
"dangerouslyAllowHostHeaderOriginFallback": true
},
"auth": {
"mode": "token",
"token": "你的网关token"
},
"tls": {
"enabled": true,
"certPath": "/etc/letsencrypt/live/openclaw.aiearn.me/fullchain.pem",
"keyPath": "/etc/letsencrypt/live/openclaw.aiearn.me/privkey.pem"
}
},
"plugins": {
"entries": {
"feishu": {
"enabled": true
}
}
}
}
八、最后
这套配置我全程自己跑通的,没有遗漏步骤。安装OpenClaw是最麻烦的环节,试了三种方法才找到可行的组合,后面的百炼配置和飞书接入相对顺一些。
首年127.9元,数据在自己服务器上,模型可以随时换,还能直接用飞书——对个人用户来说这个成本是可以接受的。
如果按步骤操作遇到问题,欢迎在评论区说,我会回复。
后续打算写OpenClaw的进阶配置:多用户权限管理、对接钉钉和企业微信、更多模型的实测对比,感兴趣的可以关注。