你有没有这种需求:同一套工作流要并行跑好几份——比如选题、写脚本、做资料整理、跑自动化任务……但每个任务都希望有「独立的账号环境 / 浏览器缓存 / 工具链」,互不干扰。
这篇文章分享一个我自己非常喜欢的组合:Docker-Webtop(跑在容器里的 Linux 桌面环境)+ OpenClaw(能交付成果的AI 员工)+ 飞书机器人(统一入口) 。最终效果是:在飞书里像指派同事一样,把任务分给不同“数字员工”。
总体形态:
- Webtop:浏览器里打开的远程 Linux 桌面,一个容器 = 一个独立工位。
- 一台服务器跑 5~N 个 Webtop,每个 Webtop 里装一份 OpenClaw(或其运行时/网关)。
- 在 飞书开放平台建五个企业自建应用(机器人),把消息对接到 OpenClaw。
- 通过「前缀/标签/不同群聊」等方式,把指令路由到指定实例,实现“多人协作”的感觉。
Step 0:准备清单
- 一台 Linux 服务器(建议 8C16G 起;并发多再往上加)
- Docker + Docker Compose
- 数据目录规划(每个 Webtop 单独一个 /data/webtop/,方便备份/迁移)
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://localhost:3701
- https://localhost:3702 (!!用这个!!,http协议不支持共享剪切板和麦克风)
说明:
- 3000/3001 是容器内 HTTP/HTTPS 端口;是否需要两个都映射,取决于你是否做反代/TLS。
- 镜像的可用环境变量(SUBFOLDER、TITLE 等)以官方文档为准。见文章底部GitHub链接。
Step 3:批量起 5 个 Webtop(两种方式)
方式 A:复制命令(直观)
关键点:容器名、端口、数据目录都要不同。
示例(创建一个B站运营助手):
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(这里略过,想必大家都会)
这里有两个坑: 1、大家一定要在Webtop容器里新打开一个终端窗口,不然openclaw命令不会被识别。 2、在新的终端里使用openclaw gateway run 来启动gateway,因为容器里没有systemd,所以不能使用系统服务启动openclaw。
openclaw --help (验证一下openclaw是否安装成功)
建议:先把一个容器配置到“能用”(字体、输入法、依赖、OpenClaw、配置),再用它做模版批量复制(导出镜像/复制 /config 都可以按需选)。
Step 5:在飞书开放平台创建企业自建应用(机器人)
官方文档(以最新为准):
大致流程:
- 飞书开放平台 → 创建应用 → 企业自建应用
- 开启“机器人”能力
- 权限管理:添加消息收发相关权限
- 凭证与基础信息:拿到 App ID、App Secret(以及你用到的 Token)
- 按你的对接方式配置事件订阅/回调(短连接/长连接等)
常见权限(示例;不同插件/版本可能不同):
权限范围(Scope)权限类型功能描述contact:user.base:readonlyUser info获取基础用户信息im:messageMessaging收发消息im:message.p2p_msg:readonlyDM读取机器人的私信消息im:message.group_at_msg:readonlyGroup接收群内 @ 机器人的消息im:message:send_as_botSend以机器人身份发送消息im:resourceMedia上传/下载图片/文件
注意:如果出现“读取群内所有消息”等敏感权限,先确认业务必要性,优先最小权限集合。
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)镜像仓库:github.com/linuxserver…
- OpenClaw:openclaw.ai/
- 飞书开放平台:open.larkoffice.com/
- clawdbot-feishu:github.com/m1heng/claw…
作者信息:
个人网站(www.frogchou.com)
语录(yulu.frogchou.com )