一台服务器批量养 5 个“数字员工”:Webtop + OpenClaw + 飞书机器人实战

1 阅读7分钟

你有没有这种需求:同一套工作流要并行跑好几份——比如选题、写脚本、做资料整理、跑自动化任务……但每个任务都希望有「独立的账号环境 / 浏览器缓存 / 工具链」,互不干扰。

这篇文章分享一个我自己非常喜欢的组合: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

访问:

说明:

  • 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:在飞书开放平台创建企业自建应用(机器人)

官方文档(以最新为准):

大致流程:

  1. 飞书开放平台 → 创建应用 → 企业自建应用
  2. 开启“机器人”能力
  3. 权限管理:添加消息收发相关权限
  4. 凭证与基础信息:拿到 App ID、App Secret(以及你用到的 Token)
  5. 按你的对接方式配置事件订阅/回调(短连接/长连接等)

常见权限(示例;不同插件/版本可能不同):

权限范围(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 是否更新、服务是否已重启

参考链接

作者信息:

个人网站(www.frogchou.com)

语录(yulu.frogchou.com