☰
OpenClaw 从零部署 + 飞书机器人完整接入:RockyLinux Docker 实操与 TaoToken 统一 Key 配置
2026/10/18 11:16:08 网站建设 项目流程

1. 为什么要在 RockyLinux 上用 Docker 跑 OpenClaw 并接入飞书

OpenClaw 是一个可以执行 Shell 命令、读写服务器文件、对接大模型完成自动化运维任务的 AI Agent 框架。它本身不是一个聊天工具,而是一个“能动手干活”的机器人内核——你给它发一条消息,它可以帮你查日志、跑脚本、分析报错,甚至根据你的描述生成一段 Nginx 配置。适合谁用?运维工程师、后端开发、个人站长,以及任何想让 AI 帮自己盯着服务器的人。

但 OpenClaw 原生自带的 Web UI 体验比较简陋,而且默认只允许本机访问,远程调试还得配 SSH 隧道,日常用起来并不顺手。飞书机器人恰好补上了这块短板:手机、电脑、平板都能直接对话,消息卡片展示清晰,企业内网也能稳定长连接。所以这套组合的核心思路就是——OpenClaw 在 RockyLinux 上以 Docker 方式常驻运行,飞书作为前端交互入口,模型请求统一走 TaoToken 的 Key,省去多平台反复配置的麻烦。

我试过在 RockyLinux 9 上从零走一遍完整链路,踩过的坑主要集中在三块:Node.js 版本不够导致 npm 安装失败、GitHub 拉取插件超时、飞书事件订阅没配对导致机器人“已读不回”。下面把每一步都拆开写清楚,命令可以直接复制,配置片段按路径对应改就行。整篇围绕 RockyLinux Docker 部署 OpenClaw 接入飞书机器人这条主线,把环境准备、容器编排、回调验证、模型 Key 统一配置全部串起来。

2. 前置准备:TaoToken 统一 Key 与飞书应用创建

2.1 为什么用 TaoToken 统一管理模型 Key

OpenClaw 支持多种模型供应商,但如果你同时用 Claude 写方案、用 Qwen 跑脚本、用 DeepSeek 做日志分析,每个平台都要单独申请 Key、单独配 endpoint,配置文件会变得很乱。TaoToken 提供统一的 API 入口,一个 Key 就能调用多个主流模型,Base URL 固定为https://taotoken.net/api,OpenClaw 的 settings 里只需要改一处 endpoint 和一处 Key,切换模型时只改 Model ID 即可。

具体操作:访问官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 注册后,进入控制台 https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console 创建 API Key。建议给 OpenClaw 单独建一个 Key,方便后续按项目排查用量。创建完成后,在 API Keys 页面 https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys 复制 Key 字符串,格式通常是sk-开头的一长串。

注意:Key 只显示一次,复制后先存到密码管理器或临时文件,后面写进 OpenClaw 配置时要用。

2.2 飞书自建应用创建与权限开通

登录飞书开放平台,进入开发者后台,点击“创建企业自建应用”,名称填OpenClaw_Bot,上传图标后确认。创建完成后,在左侧“凭证与基础信息”里拿到App ID和App Secret,这两个值后面配置 OpenClaw 飞书插件时要用。

权限管理是重点。在“权限管理”搜索并勾选以下权限:

权限标识用途
im:message接收与发送单聊消息
im:chat读取群组信息、发送群聊消息
contact:user.base:readonly获取用户基本信息
im:message:send_as_bot以机器人身份发送消息
im:chat:readonly读取群聊信息
im:chat:read查看群信息
contact:user.employee_id:readonly获取用户 ID
im:resource处理图片/文件(建议开启)

im:message.p2p_msg:readonly这个权限在应用未发布前可能无法勾选,提示“此权限暂时不添加”,先跳过,等 OpenClaw 配置成功后再回来补。

接着在“应用能力”里添加“机器人”能力,否则应用无法在对话框里聊天。然后进入“版本管理与发布”,创建版本,详情描述填“初始版本”,可用范围选“所有人”或仅自己,保存后申请线上发布。企业管理员直接通过,普通员工需等审批。

最后配置事件订阅:左侧“事件与回调” → “事件配置”,订阅方式选“使用长连接接收事件”,保存后添加事件im.message.receive_v1,确认开通权限。添加事件后需要再次创建版本并发布,否则事件不生效。

3. RockyLinux Docker 部署 OpenClaw 可复制配置

3.1 系统基础配置与 Node.js 环境

RockyLinux 默认的软件源在国内访问较慢,先换成阿里云镜像:

sed -e 's|^mirrorlist=|#mirrorlist=|g' \ -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \ -i.bak /etc/yum.repos.d/rocky*.repo dnf makecache

SELinux 和防火墙按需处理。如果是内网测试环境,可以临时关闭:

grubby --update-kernel ALL --args selinux=0 systemctl stop firewalld.service systemctl disable firewalld.service reboot

Node.js 版本必须 ≥ 22。官方 rpm 源在国内可能超时,直接用阿里云二进制包:

cd /usr/local/src wget https://mirrors.aliyun.com/nodejs-release/v24.1.0/node-v24.1.0-linux-x64.tar.xz tar -xJvf node-v24.1.0-linux-x64.tar.xz -C /usr/local --strip-components=1 node -v # 应输出 v24.1.0 npm -v # 应输出 10.x 以上

--strip-components=1的作用是去掉最外层目录,把bin、lib直接放到/usr/local下,这样node命令全局可用。

3.2 Docker 与 docker-compose 安装

dnf install -y dnf-plugins-core dnf config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin systemctl enable --now docker docker --version docker compose version

3.3 获取 OpenClaw 初始化配置

先创建目录结构,再从临时容器里拷贝默认配置:

mkdir -p ~/openclaw/nginx/{conf,cert} cd ~/openclaw docker run -itd --name openclaw-temp ghcr.nju.edu.cn/openclaw/openclaw:latest docker cp openclaw-temp:/home/node/.openclaw ./ chmod 777 -R .openclaw/ docker stop openclaw-temp docker rm openclaw-temp

3.4 自签 HTTPS 证书与 Nginx 配置

OpenClaw UI 要求 HTTPS,先生成自签证书:

cd ~/openclaw/nginx/cert openssl req -x509 -newkey rsa:2048 \ -keyout example.key -out example.crt \ -days 365 -nodes -subj "/CN=example.com"

创建~/openclaw/nginx/conf/nginx.conf:

worker_processes auto; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; client_max_body_size 1024m; server_tokens off; server { listen 443 ssl http2; server_name localhost; ssl_certificate /etc/nginx/cert/example.crt; ssl_certificate_key /etc/nginx/cert/example.key; ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; location / { proxy_pass http://openclaw-gateway:18789; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; 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; proxy_connect_timeout 7d; proxy_send_timeout 7d; proxy_read_timeout 7d; } } }

3.5 docker-compose.yaml 完整片段

创建~/openclaw/docker-compose.yaml:

services: openclaw-gateway: image: ghcr.nju.edu.cn/openclaw/openclaw:latest container_name: openclaw restart: unless-stopped volumes: - ./.openclaw:/home/node/.openclaw environment: - TZ=Asia/Shanghai mem_limit: 6g logging: driver: json-file options: max-size: "10m" max-file: "3" openclaw-nginx: image: nginx:1.23.4 container_name: openclaw-nginx restart: always ports: - 443:443 volumes: - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf - ./nginx/cert:/etc/nginx/cert privileged: true depends_on: - openclaw-gateway

启动:

cd ~/openclaw docker compose up -d

3.6 初始化 OpenClaw 并修改 settings 指向 TaoToken

进入容器执行 onboard:

docker exec -it openclaw /bin/bash openclaw onboard

按提示选择 QuickStart,模型供应商先随便选一个(后面手动改配置),API Key 随便填,渠道选 Skip for now,搜索选 Skip,技能选 No,Hooks 选 Skip,最后选 Do this later。退出容器。

编辑~/openclaw/.openclaw/openclaw.json,找到 gateway 部分,把 bind 改为lan,并添加 allowedOrigins:

"gateway": { "port": 18789, "mode": "local", "bind": "lan", "controlUi": { "allowedOrigins": [ "http://localhost:18789", "http://127.0.0.1:18789", "https://你的宿主机IP" ] }, "auth": { "mode": "token", "token": "你的token" } }

然后把模型 endpoint 和 Key 改成 TaoToken。在openclaw.json的 models 或 providers 段(不同版本字段名略有差异,以实际文件为准)写入:

"providers": { "taotoken": { "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的TaoTokenKey", "api": "openai-completions", "models": [ { "id": "claude-3-5-sonnet-latest", "name": "Claude 3.5 Sonnet" }, { "id": "deepseek-chat", "name": "DeepSeek Chat" } ] } }

重启容器:

docker compose restart

3.7 设备授权与 Web UI 登录

浏览器访问https://宿主机IP,输入 token,如果提示pairing required,进入容器执行:

docker exec -it openclaw /bin/bash openclaw devices list openclaw devices approve <Request ID>

再次点击连接即可进入 Web UI。

4. 飞书机器人接入与消息收发验证

4.1 在 OpenClaw 中配置飞书渠道

进入容器执行:

docker exec -it openclaw /bin/bash openclaw channels add

选择 Feishu/Lark,插件安装方式选Use local plugin path,然后依次输入:

  • App ID:飞书后台“凭证与基础信息”里的 App ID
  • App Secret:同上
  • Verification Token:飞书后台“事件与回调”里的 Verification Token
  • 连接模式:选WebSocket(内网服务器无需公网 IP)
  • 域名:选国内版feishu.cn
  • 群聊响应策略:选Open - respond in all groups (requires mention)
  • 搜索插件:Skip for now
  • 技能:选 Yes,安装 clawhub
  • 包管理器:选 npm
  • 其他 API Key:全部选 No
  • Hooks:空格选中command-logger和session-memory,回车确认

完成后会提示Configuration saved to /root/.openclaw/openclaw.json。

4.2 飞书后台事件订阅与权限补全

回到飞书开放平台,进入应用后台:

  1. “事件与回调” → “事件配置”,订阅方式选“使用长连接接收事件”,添加事件im.message.receive_v1。
  2. “权限管理”里补上im:message.p2p_msg:readonly。
  3. “版本管理与发布”创建新版本并发布。

4.3 配对码授权与消息联调

打开飞书电脑端,搜索应用名称,进入对话窗口,发送一条消息。此时机器人不会直接回复,而是返回一个配对码,例如Pairing code: 9MMEH7Y8。

回到服务器终端执行:

openclaw pairing approve feishu 9MMEH7Y8

显示配置保存成功后,再次在飞书发送消息,机器人正常回复即表示链路打通。

查看当前模型:

/model status

输出示例:

Current: taotoken/claude-3-5-sonnet-latest Default: taotoken/claude-3-5-sonnet-latest Auth file: ~/.openclaw/agents/main/agent/auth-profiles.json [taotoken] endpoint: https://taotoken.net/api api: openai-completions

4.4 验证请求是否走通 TaoToken

在飞书里发一条需要调用模型的消息,比如“帮我写一个查看磁盘占用的 shell 命令”。如果机器人返回了合理内容,说明模型请求已经通过 TaoToken 的 endpoint 发出并成功返回。你也可以在 TaoToken 控制台的用量页面看到对应的调用记录,确认 Key 和 endpoint 配置正确。

5. 常见报错排查:401、local proxy failed、reading choices、OAuth

5.1 401 Unauthorized

现象:飞书机器人回复“模型请求失败”,容器日志出现401 Unauthorized。

原因:TaoToken Key 填错、Key 已过期、或者openclaw.json里apiKey字段没写对。

排查:

docker exec -it openclaw /bin/bash cat /home/node/.openclaw/openclaw.json | grep -A5 taotoken

确认baseUrl是https://taotoken.net/api,apiKey是sk-开头的完整字符串。如果 Key 没问题,去 TaoToken 控制台检查该 Key 是否被禁用或额度耗尽。

5.2 local proxy failed

现象:容器日志出现local proxy failed或connection refused。

原因:OpenClaw 容器内无法访问外部网络,或者 DNS 解析失败。

排查:

docker exec -it openclaw /bin/bash curl -I https://taotoken.net/api

如果 curl 不通,检查宿主机 DNS:

cat /etc/resolv.conf

建议改成223.5.5.5或119.29.29.29,然后重启 Docker:

systemctl restart docker docker compose restart

5.3 reading choices 报错

现象:日志出现error reading choices或invalid response format。

原因:模型返回格式与 OpenClaw 预期不一致,通常是api字段配置错误。TaoToken 兼容 OpenAI 格式,所以api应设为openai-completions。

排查:检查openclaw.json中 provider 的api字段,确保不是anthropic-messages或其他格式。如果用的是 Claude 模型,TaoToken 已经做了格式转换,统一用openai-completions即可。

5.4 OAuth 相关报错

现象:日志出现OAuth token expired或refresh failed。

原因:如果你之前配置过 Qwen 的 OAuth 登录,auth-profiles.json 里可能残留了过期的 OAuth 凭证,OpenClaw 优先读取了旧配置。

排查:

docker exec -it openclaw /bin/bash cat /home/node/.openclaw/agents/main/agent/auth-profiles.json

如果里面有qwen-portal的 OAuth 记录,手动删除该段,或者直接清空文件后重新用 TaoToken 的 Key 配置:

echo '{}' > /home/node/.openclaw/agents/main/agent/auth-profiles.json

然后重启容器,重新在飞书发消息测试。

5.5 飞书机器人无响应

现象:飞书发消息后机器人完全没反应,也没有配对码返回。

原因:事件订阅没配好,或者应用版本没发布。

排查:

  1. 确认飞书后台“事件与回调”里订阅方式是“使用长连接接收事件”。
  2. 确认im.message.receive_v1已添加。
  3. 确认应用版本已发布且可用范围包含你。
  4. 查看容器日志:
docker logs -f openclaw

如果日志里没有飞书相关输出,说明 WebSocket 没连上,检查 App ID 和 App Secret 是否填错。

6. 接入文档与模型验证入口

整套链路跑通后,日常使用中最常做的两件事:一是验证模型是否正常返回,二是排查 Key 和 endpoint 配置。模型对话入口可以直接在浏览器里测试 TaoToken 的连通性:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=chat ,输入一段 prompt,看是否正常返回内容。如果这里不通,OpenClaw 里肯定也不通,先解决这一层。

接入文档里对 Base URL、Key 格式、Model ID 列表有详细说明:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc 。遇到reading choices或401时,对照文档检查api字段和 Key 权限。

如果你打算长期跑编码类任务或 Agent 自动化,Coding Plan 提供了更稳定的调用配额:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan 。OpenClaw 的command-logger和session-memory两个 Hook 开启后,对话上下文会保留较长时间,配合 Coding Plan 的额度更适合持续运维场景。

最后提醒一点:飞书机器人的配对码机制是保护服务器安全的第一道门。任何未授权的用户发消息只会拿到配对码,不会执行任何命令。如果机器人被拉进群,只有 @ 它才会响应,且群聊响应策略可以在openclaw.json里改成白名单模式,只允许特定群使用。这些配置在openclaw channels add时已经设好,后续需要调整可以直接编辑配置文件后重启容器。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询