127.9元搭OpenClaw服务器:阿里云ECS + OpenClaw + 飞书,全程踩坑实录

0 阅读9分钟

最近折腾了一件事:在阿里云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"}
    }
  }
}

注意:模型 idname 字段都要填,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 IDApp Secret

在「应用能力」里添加「机器人」能力。

2. 配置权限和事件

在「权限管理」里勾选以下4个权限(缺了会收不到消息):

  • im:message
  • im:message.group_at
  • im:message.p2p
  • bot: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 配对,我发了完全没动静。最终解决方法是把 dmPolicypairing 改成 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 带参数启动
模型配置不生效字段或前缀写错idname 都要填,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的进阶配置:多用户权限管理、对接钉钉和企业微信、更多模型的实测对比,感兴趣的可以关注。