
你有没有这种需求:同一套工作流要并行跑好几份——比如选题、写脚本、做资料整理、跑自动化任务……但每个任务都希望有「独立的账号环境 / 浏览器缓存 / 工具链」,互不干扰。
这篇文章分享一个我自己非常喜欢的组合:Webtop(容器里的 Linux 桌面)+ OpenClaw(能力/网关)+ 飞书机器人(统一入口)。最终效果是:在飞书里像指派同事一样,把任务分给不同“数字员工”。
总体形态:
- Webtop:浏览器里打开的远程 Linux 桌面,一个容器 = 一个独立工位。
- 一台服务器跑 5~N 个 Webtop,每个 Webtop 里装一份 OpenClaw(或其运行时/网关)。
- 在 飞书开放平台建五个企业自建应用(机器人),把消息对接到 OpenClaw。
- 通过「前缀/标签/不同群聊」等方式,把指令路由到指定实例,实现“多人协作”的感觉。
Step 0:准备清单
- 一台 Linux 服务器(建议 8C16G 起;并发多再往上加)
- Docker + Docker Compose
- 数据目录规划(每个 Webtop 单独一个
/data/webtop/<name>,方便备份/迁移)
Step 1:拉取 Webtop 镜像(建议固定版本)
docker pull linuxserver/webtop:ubuntu-kde-version-df170c95
如果更关心资源占用,可以换更轻量的桌面变体(以官方仓库为准)。
Step 2:先跑通 1 个 Webtop(跑通了再批量)
docker run -d \
--name webtop_demo \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-e LC_ALL=zh_CN.UTF-8 \
-e PASSWORD="请改成强密码" \
-p 3701:3000 \
-p 3702:3001 \
-v /data/webtop/demo:/config \
--shm-size="1gb" \
--restart unless-stopped \
linuxserver/webtop:ubuntu-kde-version-df170c95
访问:
http://<IP>:3701https://<IP>:3702
说明:
3000/3001是容器内 HTTP/HTTPS 端口;是否需要两个都映射,取决于你是否做反代/TLS。- 镜像的可用环境变量(
SUBFOLDER、TITLE等)以官方文档为准。
Step 3:批量起 5 个 Webtop(两种方式)
方式 A:复制命令(直观)
关键点:容器名、端口、数据目录都要不同。
| 容器 | HTTP | HTTPS | 数据目录 |
|---|---|---|---|
| webtop_bilibili | 3701 | 3702 | /data/webtop/bilibili |
| webtop_douyin | 3703 | 3704 | /data/webtop/douyin |
| webtop_paper | 3705 | 3706 | /data/webtop/paper |
| webtop_coder01 | 3707 | 3708 | /data/webtop/coder01 |
| webtop_coder02 | 3709 | 3710 | /data/webtop/coder02 |
示例(bilibili):
container_name=bilibili
docker run -d \
--name "webtop_${container_name}" \
-e PUID=1000 \
-e PGID=1000 \
-e TZ=Asia/Shanghai \
-e LC_ALL=zh_CN.UTF-8 \
-e PASSWORD="请改成强密码" \
-p 3701:3000 \
-p 3702:3001 \
-v "/data/webtop/${container_name}:/config" \
--shm-size="1gb" \
--restart unless-stopped \
linuxserver/webtop:ubuntu-kde-version-df170c95
其余容器按表格调整端口与目录即可。
方式 B:docker-compose(推荐,便于长期维护)
创建 docker-compose.webtop.yml,下面给出 5 个容器完整示例(可直接复制):
services:
webtop_bilibili:
image: linuxserver/webtop:ubuntu-kde-version-df170c95
container_name: webtop_bilibili
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
- LC_ALL=zh_CN.UTF-8
- PASSWORD=请改成强密码
ports:
- "3701:3000"
- "3702:3001"
volumes:
- /data/webtop/bilibili:/config
shm_size: "1gb"
restart: unless-stopped
webtop_douyin:
image: linuxserver/webtop:ubuntu-kde-version-df170c95
container_name: webtop_douyin
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
- LC_ALL=zh_CN.UTF-8
- PASSWORD=请改成强密码
ports:
- "3703:3000"
- "3704:3001"
volumes:
- /data/webtop/douyin:/config
shm_size: "1gb"
restart: unless-stopped
webtop_paper:
image: linuxserver/webtop:ubuntu-kde-version-df170c95
container_name: webtop_paper
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
- LC_ALL=zh_CN.UTF-8
- PASSWORD=请改成强密码
ports:
- "3705:3000"
- "3706:3001"
volumes:
- /data/webtop/paper:/config
shm_size: "1gb"
restart: unless-stopped
webtop_coder01:
image: linuxserver/webtop:ubuntu-kde-version-df170c95
container_name: webtop_coder01
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
- LC_ALL=zh_CN.UTF-8
- PASSWORD=请改成强密码
ports:
- "3707:3000"
- "3708:3001"
volumes:
- /data/webtop/coder01:/config
shm_size: "1gb"
restart: unless-stopped
webtop_coder02:
image: linuxserver/webtop:ubuntu-kde-version-df170c95
container_name: webtop_coder02
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
- LC_ALL=zh_CN.UTF-8
- PASSWORD=请改成强密码
ports:
- "3709:3000"
- "3710:3001"
volumes:
- /data/webtop/coder02:/config
shm_size: "1gb"
restart: unless-stopped
启动:
docker compose -f docker-compose.webtop.yml up -d
Step 4:在 Webtop 里安装 OpenClaw
进入任意一个 Webtop 桌面,打开 Terminal 执行(生产环境建议先审计脚本再跑):
curl -fsSL https://openclaw.ai/install.sh | bash
然后检查:
openclaw --help
建议:先把一个容器配置到“能用”(字体、输入法、依赖、OpenClaw、配置),再用它做模版批量复制(导出镜像/复制 /config 都可以按需选)。
Step 5:在飞书开放平台创建企业自建应用(机器人)
官方文档(以最新为准):
- https://www.feishu.cn/content/article/7602519239445974205
大致流程:
- 飞书开放平台 → 创建应用 → 企业自建应用
- 开启“机器人”能力
- 权限管理:添加消息收发相关权限
- 凭证与基础信息:拿到
App ID、App Secret(以及你用到的 Token) - 按你的对接方式配置事件订阅/回调(短连接/长连接等)
常见权限(示例;不同插件/版本可能不同):
| 权限范围(Scope) | 权限类型 | 功能描述 |
|---|---|---|
contact:user.base:readonly | User info | 获取基础用户信息 |
im:message | Messaging | 收发消息 |
im:message.p2p_msg:readonly | DM | 读取机器人的私信消息 |
im:message.group_at_msg:readonly | Group | 接收群内 @ 机器人的消息 |
im:message:send_as_bot | Send | 以机器人身份发送消息 |
im:resource | Media | 上传/下载图片/文件 |
注意:如果出现“读取群内所有消息”等敏感权限,先确认业务必要性,优先最小权限集合。
Step 6:把飞书消息接到 OpenClaw(两条路线)
执行以下命令按提示完成飞书配置
openclaw config
在 channels 中选择飞书(Feishu/Lark),填入 App ID / App Secret,保存后重启服务。
Step 7:多实例编组:让 5 个容器真的像 5 个“员工”
一个简单可落地的约定:
- 容器名就是“员工工位”:
webtop_bilibili、webtop_douyin…… - 飞书群里用“前缀/标签”点名:
@机器人 [bilibili] 今天的选题是什么?@机器人 [paper] 帮我把这篇文章提炼成 3 条摘要- 每个实例只响应自己的前缀(是否支持取决于你的通道/网关是否有路由能力)
如果不支持“多实例路由”,最简单的隔离方式:
- 每个员工一个飞书群(同一机器人加入多个群)
- 或每个员工一个机器人应用(隔离更强但管理成本更高)
一个分工示例(写成系统提示词/skills,会更像团队协作):
bilibili:选题 → 标题党但不低俗 → 口播稿 → 分镜要点douyin:热点跟踪 → 15 秒脚本 → 镜头/字幕节奏建议paper:长文阅读 → 摘要/要点 → 引用出处(链接/页码)coder01:写脚本/爬虫/数据清洗 → 输出可运行命令与注意事项coder02:运维/排障 → 输出“现象-原因-解决步骤-验证方式”

Step 8:验证清单 & 常见问题
验证清单:
- Webtop 桌面能打开、能输入中文、浏览器可用
- OpenClaw 命令可用、服务能启动
- 飞书机器人能进群/能私聊
- @机器人能收到消息并回复(先用 echo/帮助之类的最小指令验证)
常见问题:
- 页面卡顿/浏览器崩溃:提高
--shm-size(例如 2gb),并确保宿主机内存充足 - 端口冲突:检查端口占用或调整 compose 端口映射
- 能打开但不安全:至少加
PASSWORD;生产建议反代 + HTTPS + IP 白名单/统一鉴权 - 飞书收不到回调/事件:优先核对权限、事件订阅方式、Token 是否更新、服务是否已重启
参考链接
- Webtop(linuxserver)镜像仓库:https://github.com/linuxserver/docker-webtop
- OpenClaw:https://openclaw.ai/
- 飞书开放平台:https://open.larkoffice.com/
- clawdbot-feishu:https://github.com/m1heng/clawdbot-feishu