架构概览
飞书 App(WebSocket 长连接)
↕
OpenClaw Gateway(服务器上 systemd 常驻)
↕
AI 模型(DeepSeek v3.2 / GLM 4.7)
↕
服务器 Shell(受白名单限制的命令执行)
这套东西的核心很简单:飞书负责入口,OpenClaw 负责把消息转成 Agent 行为,模型负责理解意图,最后由受控的 shell 执行真正的运维动作。能跑起来不难,难的是别把服务器权限放得太松。
核心组件如下:
- OpenClaw Gateway:Agent 网关,负责会话管理、工具调用和渠道连接。
- 飞书插件:通过 WebSocket 长连接收发消息,不需要公网回调地址,配置会省很多事。
- exec 工具:允许 AI 在服务器上执行 shell 命令,配合白名单策略控制风险。
- 模型提供商:支持自定义 OpenAI 兼容 API,本文使用 OneRouter 提供的 DeepSeek V3.2。
环境要求
- Linux 服务器(本文以 Ubuntu 为例)
- Node.js 22+
- npm 10+
- 飞书企业账号(可免费创建)
- AI 模型 API(OpenAI / Anthropic / OpenRouter / 自定义兼容接口均可)
安装 OpenClaw
如果目标是让机器人直接管服务器服务,我更倾向于裸机装 npm 全局包,而不是先塞进 Docker 里。容器化当然也能做,但这类运维机器人最后还是要落到本机命令和系统服务上,直接装省一层心智负担。
npm install -g openclaw
装完后先确认 openclaw 命令是否可用。如果提示 command not found,把 npm 全局 bin 目录加到 PATH 里:
echo 'export PATH="$HOME/.npm-global/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc
注册为 systemd 服务
运维机器人想做到 7x24,Gateway 必须开机自启并且长期常驻。
openclaw gateway install
openclaw gateway start
查看状态:
openclaw gateway status
配置模型提供商
编辑 ~/.openclaw/openclaw.json,补上模型配置。下面以 OneRouter + DeepSeek V3.2 为例:
{
"agents": {
"defaults": {
"model": {
"primary": "onerouter/deepinfra/deepseek-v3.2"
}
}
},
"models": {
"mode": "merge",
"providers": {
"onerouter": {
"baseUrl": "https://your-api-endpoint/v1",
"apiKey": "your-api-key",
"api": "openai-completions",
"models": [
{
"id": "deepinfra/deepseek-v3.2",
"name": "DeepSeek V3.2"
}
]
}
}
}
}
只要是兼容 OpenAI API 格式的提供商,这种接法基本都通用。
接入飞书
1. 创建飞书应用
去飞书开放平台创建企业自建应用。在凭证与基础信息页记下 App ID 和 App Secret。权限这块别图省事,至少把下面这些开上:
im:message— 发送消息im:message:send_as_bot— 以机器人身份发送im:message.p2p_msg:readonly— 读取私聊消息im:message.group_at_msg:readonly— 读取群聊 @ 消息im:resource— 读取资源contact:contact.base:readonly— 读取联系人基本信息(可选,用于解析发送者名字)
在应用能力里启用机器人,然后安装飞书插件:
openclaw plugins install @openclaw/feishu
2. 配置飞书 App 信息
可以直接走 CLI 向导:
openclaw channels add
选择 Feishu,填入 App ID 和 App Secret。也可以手动写进 openclaw.json:
{
"channels": {
"feishu": {
"enabled": true,
"accounts": {
"main": {
"appId": "cli_xxxxx",
"appSecret": "your-app-secret"
}
}
}
}
}
3. 重启并确认连接
openclaw gateway restart
openclaw logs --follow
看到下面两行,基本就说明飞书长连接起来了:
feishu[main]: WebSocket client started
[ws] ws client ready
4. 配置飞书事件订阅
回到飞书开放平台:
- 事件与回调里选择'使用长连接接收事件',保存。
- 添加事件
im.message.receive_v1。 - 到版本管理与发布里创建版本并发布。
这里有个顺序问题,先把 Gateway 拉起来,再去保存长连接订阅方式,不然飞书后台那边经常不会给你过。
配置运维 Agent
1. 设置 Agent 人设
编辑 ~/.openclaw/workspace/AGENTS.md,在原有内容后追加运维规则:
## 服务器运维规则
你同时是一个服务器运维助手,负责维护管理员在这台服务器上部署的服务。
### 工作范围
- 只管理 /home/youruser/projects 目录下的项目和服务
- 不要触碰其他用户的文件和服务
### 允许的操作
- 查看日志、进程、服务状态、端口、磁盘/内存
- 管理用户级服务(systemctl --user)
- 工作目录下的文件操作
### 禁止的操作
- rm -rf(用 trash 代替)
- sudo 操作(除非明确要求)
- 修改系统配置
- 重启其他用户的服务
### 语言
- 用中文回复
2. 配置 exec 工具
在 openclaw.json 里加上工具配置,让 Agent 能在服务器上执行命令:
{
"tools": {
"exec": {
"host": "gateway",
"security": "allowlist",
"ask": "off"
}
}
}
host:gateway,命令直接在服务器本机执行security:allowlist,只允许白名单命令ask:off,不弹审批提示,适合 7x24 场景
3. 配置命令白名单
编辑 ~/.openclaw/exec-approvals.json,把允许执行的命令列出来:
{
"version": 1,
"defaults": {
"security": "allowlist",
"ask": "off",
"askFallback": "allowlist"
},
"agents": {
"main": {
"security": "allowlist",
"ask": "off",
"askFallback": "allowlist",
"allowlist": [
{ "pattern": "/usr/bin/bash" },
{ "pattern": "/usr/bin/sh" },
{ "pattern": "/usr/bin/ls" },
{ "pattern": "/usr/bin/cat" },
{ "pattern": "/usr/bin/tail" },
{ "pattern": "/usr/bin/head" },
{ "pattern": "/usr/bin/find" },
{ "pattern": "/usr/bin/du" },
{ "pattern": "/usr/bin/df" },
{ "pattern": "/usr/bin/free" },
{ "pattern": "/usr/bin/ps" },
{ "pattern": "/usr/bin/top" },
{ "pattern": "/usr/bin/ss" },
{ "pattern": "/usr/bin/netstat" },
{ "pattern": "/usr/bin/journalctl" },
{ "pattern": "/usr/bin/systemctl" },
{ "pattern": "/usr/bin/git" },
{ "pattern": "/usr/bin/docker" },
{ "pattern": "/usr/bin/node" },
{ "pattern": "/usr/bin/python3" }
]
}
}
}
/usr/bin/bash 和 /usr/bin/sh 记得一定要加,不然带管道的命令会卡住。不同机器路径可能不一样,最好先用 which <command> 确认。
测试与使用
重启 Gateway 后,直接在飞书里对机器人说:
帮我看看服务器上哪些服务在运行
机器人会自己调用 systemctl、ps、ss 之类的命令,整理出一份结构化的服务器状态报告。
常见的问法也可以直接丢给它:
- '查看 xxx 服务的最近日志'
- '服务器磁盘还剩多少空间'
- '帮我重启一下 xxx 服务'
- '看看哪些端口在监听'
安全策略总结
| 层级 | 措施 | 说明 |
|---|---|---|
| 命令执行 | allowlist 白名单 | 只允许指定的二进制文件 |
| 工作范围 | AGENTS.md 规则 | Agent 被指示只操作特定目录 |
| 飞书接入 | pairing 配对 | 新用户需要管理员批准才能使用 |
| 系统权限 | 非 root 运行 | Gateway 以普通用户身份运行 |
最终的 openclaw.json 结构
{
"plugins": { "entries": { "feishu": { "enabled": true } } },
"agents": {
"defaults": {
"model": { "primary": "your-provider/your-model" }
}
},
"models": {
"mode": "merge",
"providers": { "...": "..." }
},
"tools": {
"exec": {
"host": "gateway",
"security": "allowlist",
"ask": "off"
}
},
"channels": {
"feishu": {
"enabled": true,
"accounts": {
"main": {
"appId": "cli_xxxxx",
"appSecret": "your-secret"
}
}
}
},
"gateway": { "mode": "local" }
}

