🟡 待办:dsh(Docker) 部署 + 飞书接入(镜像版,参考阿里云方案) #27

Open
opened 2026-08-21 17:21:42 +08:00 by xiaowu · 0 comments

由小五 2026-08-21 创建 | 方案已验证(镜像/仓库/npm 包均确认存在)
部署完成后在本 issue 回复结果,遇到问题贴日志。


DeepSeek Harness (dsh) Docker 一键部署 + 飞书接入指南(镜像版)

更新:2026-08-21 | 参考:阿里云开发者社区《用 Docker 安装 deepseek-harness 并接入飞书》(2026-08-15) + harness-lark 官方 README
方案:直接用社区发布好的 Docker 镜像(ghcr.io/huoxue1/deepseek-harness-lark),免自建
已验证:镜像存在(tags 0.1.2 ~ 0.1.16 + latest)✅ | 仓库 github.com/huoxue1/harness-lark ✅

架构

飞书 App(私聊/群聊/话题,@机器人)
   │  飞书 WebSocket 长连接(无需公网 IP/域名/回调地址)
   ▼
harness-lark 飞书插件(打进镜像,dsh 的 Cordis 插件)
   ▼
DeepSeek Harness 本体(dsh,Web UI :3080,容器内绑回环)
   ▼
LLM(Web UI 配置 或 DEEPSEEK_API_KEY 环境变量)
  • 每个飞书会话(chat_id)映射一个持久 dsh agent,上下文跨消息、跨重启保留
  • 流式回复:思考过程 → 生成过程 → 结果实时更新到飞书卡片(可折叠面板)
  • 审批卡片:bash 沙箱升级等审批请求以「批准/拒绝」按钮卡片发到会话,点击即应答
  • 飞书原生工具:云文档/知识库/云盘/多维表格/表格/日历/任务(用户 /feishu auth 授权后以本人身份调用)
  • 多 agent 支持:一个应用多个 agent,按群路由(每群独立 cwd + AGENTS.md + 会话)

前置条件

  1. Docker Engine 20.10+(群晖 Container Manager / Docker Desktop / 任意 Linux)
  2. 能访问 ghcr.io 的网络(拉镜像用)
  3. 飞书账号(建应用、扫码/登录用)
  4. DeepSeek API Key(可选,也可以首次启动后在 Web UI 配)

第 1 步:飞书开放平台创建应用(约 5 分钟)

  1. 打开 https://open.feishu.cn → 开发者后台 → 创建企业自建应用
    (名称如「dsh 助手」,描述随意)
  2. 「凭证与基础信息」页 → 记下 App ID(cli_ 开头)和 App Secret
  3. 「应用能力」→ 添加机器人能力
  4. 「事件与回调」→ 订阅方式选 「使用长连接接收事件」(关键:选长连接,
    不要选 webhook,这样不需要公网回调地址)
  5. 添加事件:im.message.receive_v1(接收消息)
  6. 如果机器人收不到消息,检查权限管理里是否已开通消息相关权限
    (如 im:message 系列,按飞书提示申请)
  7. 「版本管理与发布」→ 创建版本并发布 → 设置可用范围(全员或指定人),
    团队其他成员才能搜到/使用这个机器人

第 2 步:Docker 部署(推荐 compose)

官方仓库带一份开箱即用的 deploy/docker-compose.yml,直接可用:

# docker-compose.yml(来自 huoxue1/harness-lark/deploy/,加了注释)
services:
  dsh-lark:
    image: ghcr.io/huoxue1/deepseek-harness-lark:latest
    container_name: dsh-web
    restart: unless-stopped
    ports:
      - "3080:3080"        # dsh Web UI(容器内绑回环,Docker 发布到主机)
    volumes:
      - dsh-data:/root/.dsh   # 会话/设置/授权token 全在这里,重建不丢
    environment:
      - NODE_ENV=production
      - DSH_TELEMETRY_DISABLED=1
      # 飞书应用凭据(第 1 步拿到的)
      - FEISHU_APP_ID=${FEISHU_APP_ID}
      - FEISHU_APP_SECRET=${FEISHU_APP_SECRET}
      # 模型 Key(二选一:这里传,或首次启动后在 Web UI 配)
      - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY}
    healthcheck:
      test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:3080').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"]
      interval: 20s
      timeout: 5s
      retries: 5
      start_period: 25s
    logging:
      driver: json-file
      options:
        max-size: "20m"
        max-file: "5"

volumes:
  dsh-data:

启动:

# 准备环境变量(可写进 .env 文件)
export FEISHU_APP_ID=cli_xxx
export FEISHU_APP_SECRET=你的secret
export DEEPSEEK_API_KEY=你的deepseek_key

docker compose up -d
docker logs -f dsh-web   # 看启动日志

备用:一行命令版

docker run -d --name dsh-web \
  -p 3080:3080 \
  -v dsh-data:/root/.dsh \
  -e FEISHU_APP_ID=cli_xxx \
  -e FEISHU_APP_SECRET=你的secret \
  -e DEEPSEEK_API_KEY=你的deepseek_key \
  ghcr.io/huoxue1/deepseek-harness-lark:latest

群晖图形界面:Container Manager → 项目 → 新建项目 → 粘贴上面 compose
(把 ${...} 换成真实值,或建 .env)→ 完成。日志页看启动输出。

第 3 步:首次启动配置

  1. 浏览器打开 http://<群晖IP或主机IP>:3080,在 Web UI 配置 LLM 模型
    (如果没传 DEEPSEEK_API_KEY)
  2. 飞书里私聊你的机器人,发 /status,能收到回复即接通 ✅
  3. 把机器人拉进团队群,@它 即可触发

第 4 步:开启群聊(关键,默认是关的!)

harness-lark 默认 groupPolicy: disabled(群聊禁用),要团队群用必须改:

docker exec -it dsh-web sh
# 查看 profile 里的 patch 配置
cat /root/.dsh/profiles/web/cordis.patch.yml

把其中 groupPolicy 改为 open(群聊开放),requireMentionInGroups 保持
true(群里要 @机器人 才响应)或按需改 false;replyMode: streaming(流式卡片)。
改完保存,docker restart dsh-web 生效。

如果文件里没有 lark 条目,追加(注意缩进):

- insert:
  - id: lark
    name: 'harness-lark'
    config:
      groupPolicy: open
      requireMentionInGroups: true
      replyMode: streaming

只给信任的群用:groupPolicy 也支持 allowlist(配 open_id 白名单)。

团队使用

飞书里常用命令(群聊带 @机器人 前缀,如 @dsh助手 /status):

命令 作用
/status 当前模型、工作目录、会话状态
/model 列出模型;/model <provider/model> 切换(下一轮生效)
/cd <绝对路径> 切换工作目录(重启后生效)
/new 新会话(清空上下文,别名 /reset)
/stop 停止当前回复
/permission 查看/切换权限预设(如 danger-full-access)
/setting 查看/设置默认权限、默认模型
/help 全部命令

多 agent(可选进阶):一个飞书应用可配多个 agent,按群路由、各自独立
cwd/AGENTS.md/会话,适合团队多项目并行。在 Web UI 设置页的 harness-lark
配置里编辑 agents 数组,重启生效。

安全注意

  • App Secret 别外泄、别提交到仓库
  • 群聊开放前先想好:群里所有人都能指挥 agent 执行命令;
    不熟的环境用 allowlist 白名单限制
  • 审批卡片机制 = 沙箱升级要人在飞书里点批准,比全开 danger-full-access 安全,
    建议保持默认审批流,除非你明确要全自动
  • 数据卷 dsh-data 建议定期备份(会话/设置/token 都在里面)

升级

docker pull ghcr.io/huoxue1/deepseek-harness-lark:latest
docker compose up -d   # 重建容器,数据在卷里不丢

或锁版本:把 image 的 latest 换成具体 tag(如 0.1.16)。

常见问题

现象 处理
拉镜像慢/失败 检查到 ghcr.io 的网络;可设代理或换时段重试
飞书私聊没反应 ①确认应用已发布+可用范围包含你 ②事件订阅选了长连接并加了 im.message.receive_v1 ③权限已开
群聊不响应 默认 groupPolicy=disabled,按第 4 步开启;群聊需 @机器人
任务卡"等待审批" 正常现象:飞书会话里会来审批卡片,点批准即可
容器重启后凭据/会话丢失 检查 dsh-data 卷是否还在(compose 已配置)
Web UI 打不开 端口映射是否 3080:3080;容器内只绑回环,别改 0.0.0.0

本文档基于 2026-08-21 查证的仓库/镜像信息;dsh 仍为 developer preview,
升级前注意兼容性变更。

> 由小五 2026-08-21 创建 | 方案已验证(镜像/仓库/npm 包均确认存在) > 部署完成后在本 issue 回复结果,遇到问题贴日志。 --- # DeepSeek Harness (dsh) Docker 一键部署 + 飞书接入指南(镜像版) > 更新:2026-08-21 | 参考:阿里云开发者社区《用 Docker 安装 deepseek-harness 并接入飞书》(2026-08-15) + harness-lark 官方 README > 方案:直接用社区发布好的 Docker 镜像(ghcr.io/huoxue1/deepseek-harness-lark),免自建 > 已验证:镜像存在(tags 0.1.2 ~ 0.1.16 + latest)✅ | 仓库 github.com/huoxue1/harness-lark ✅ ## 架构 ``` 飞书 App(私聊/群聊/话题,@机器人) │ 飞书 WebSocket 长连接(无需公网 IP/域名/回调地址) ▼ harness-lark 飞书插件(打进镜像,dsh 的 Cordis 插件) ▼ DeepSeek Harness 本体(dsh,Web UI :3080,容器内绑回环) ▼ LLM(Web UI 配置 或 DEEPSEEK_API_KEY 环境变量) ``` - 每个飞书会话(chat_id)映射一个持久 dsh agent,上下文跨消息、跨重启保留 - 流式回复:思考过程 → 生成过程 → 结果实时更新到飞书卡片(可折叠面板) - 审批卡片:bash 沙箱升级等审批请求以「批准/拒绝」按钮卡片发到会话,点击即应答 - 飞书原生工具:云文档/知识库/云盘/多维表格/表格/日历/任务(用户 /feishu auth 授权后以本人身份调用) - 多 agent 支持:一个应用多个 agent,按群路由(每群独立 cwd + AGENTS.md + 会话) ## 前置条件 1. Docker Engine 20.10+(群晖 Container Manager / Docker Desktop / 任意 Linux) 2. 能访问 ghcr.io 的网络(拉镜像用) 3. 飞书账号(建应用、扫码/登录用) 4. DeepSeek API Key(可选,也可以首次启动后在 Web UI 配) ## 第 1 步:飞书开放平台创建应用(约 5 分钟) 1. 打开 https://open.feishu.cn → 开发者后台 → 创建**企业自建应用** (名称如「dsh 助手」,描述随意) 2. 「凭证与基础信息」页 → 记下 **App ID**(cli_ 开头)和 **App Secret** 3. 「应用能力」→ 添加**机器人**能力 4. 「事件与回调」→ 订阅方式选 **「使用长连接接收事件」**(关键:选长连接, 不要选 webhook,这样不需要公网回调地址) 5. 添加事件:`im.message.receive_v1`(接收消息) 6. 如果机器人收不到消息,检查**权限管理**里是否已开通消息相关权限 (如 im:message 系列,按飞书提示申请) 7. 「版本管理与发布」→ 创建版本并发布 → 设置**可用范围**(全员或指定人), 团队其他成员才能搜到/使用这个机器人 ## 第 2 步:Docker 部署(推荐 compose) 官方仓库带一份开箱即用的 `deploy/docker-compose.yml`,直接可用: ```yaml # docker-compose.yml(来自 huoxue1/harness-lark/deploy/,加了注释) services: dsh-lark: image: ghcr.io/huoxue1/deepseek-harness-lark:latest container_name: dsh-web restart: unless-stopped ports: - "3080:3080" # dsh Web UI(容器内绑回环,Docker 发布到主机) volumes: - dsh-data:/root/.dsh # 会话/设置/授权token 全在这里,重建不丢 environment: - NODE_ENV=production - DSH_TELEMETRY_DISABLED=1 # 飞书应用凭据(第 1 步拿到的) - FEISHU_APP_ID=${FEISHU_APP_ID} - FEISHU_APP_SECRET=${FEISHU_APP_SECRET} # 模型 Key(二选一:这里传,或首次启动后在 Web UI 配) - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY} healthcheck: test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:3080').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"] interval: 20s timeout: 5s retries: 5 start_period: 25s logging: driver: json-file options: max-size: "20m" max-file: "5" volumes: dsh-data: ``` 启动: ```bash # 准备环境变量(可写进 .env 文件) export FEISHU_APP_ID=cli_xxx export FEISHU_APP_SECRET=你的secret export DEEPSEEK_API_KEY=你的deepseek_key docker compose up -d docker logs -f dsh-web # 看启动日志 ``` 备用:一行命令版 ```bash docker run -d --name dsh-web \ -p 3080:3080 \ -v dsh-data:/root/.dsh \ -e FEISHU_APP_ID=cli_xxx \ -e FEISHU_APP_SECRET=你的secret \ -e DEEPSEEK_API_KEY=你的deepseek_key \ ghcr.io/huoxue1/deepseek-harness-lark:latest ``` > 群晖图形界面:Container Manager → 项目 → 新建项目 → 粘贴上面 compose > (把 ${...} 换成真实值,或建 .env)→ 完成。日志页看启动输出。 ## 第 3 步:首次启动配置 1. 浏览器打开 `http://<群晖IP或主机IP>:3080`,在 Web UI 配置 LLM 模型 (如果没传 DEEPSEEK_API_KEY) 2. 飞书里私聊你的机器人,发 `/status`,能收到回复即接通 ✅ 3. 把机器人拉进团队群,@它 即可触发 ## 第 4 步:开启群聊(关键,默认是关的!) harness-lark 默认 `groupPolicy: disabled`(群聊禁用),要团队群用必须改: ```bash docker exec -it dsh-web sh # 查看 profile 里的 patch 配置 cat /root/.dsh/profiles/web/cordis.patch.yml ``` 把其中 `groupPolicy` 改为 `open`(群聊开放),`requireMentionInGroups` 保持 `true`(群里要 @机器人 才响应)或按需改 false;`replyMode: streaming`(流式卡片)。 改完保存,`docker restart dsh-web` 生效。 如果文件里没有 lark 条目,追加(注意缩进): ```yaml - insert: - id: lark name: 'harness-lark' config: groupPolicy: open requireMentionInGroups: true replyMode: streaming ``` > 只给信任的群用:groupPolicy 也支持 allowlist(配 open_id 白名单)。 ## 团队使用 飞书里常用命令(群聊带 @机器人 前缀,如 `@dsh助手 /status`): | 命令 | 作用 | |---|---| | /status | 当前模型、工作目录、会话状态 | | /model | 列出模型;/model <provider/model> 切换(下一轮生效) | | /cd <绝对路径> | 切换工作目录(重启后生效) | | /new | 新会话(清空上下文,别名 /reset) | | /stop | 停止当前回复 | | /permission | 查看/切换权限预设(如 danger-full-access) | | /setting | 查看/设置默认权限、默认模型 | | /help | 全部命令 | 多 agent(可选进阶):一个飞书应用可配多个 agent,按群路由、各自独立 cwd/AGENTS.md/会话,适合团队多项目并行。在 Web UI 设置页的 harness-lark 配置里编辑 agents 数组,重启生效。 ## 安全注意 - App Secret 别外泄、别提交到仓库 - 群聊开放前先想好:群里所有人都能指挥 agent 执行命令; 不熟的环境用 allowlist 白名单限制 - 审批卡片机制 = 沙箱升级要人在飞书里点批准,比全开 danger-full-access 安全, 建议保持默认审批流,除非你明确要全自动 - 数据卷 dsh-data 建议定期备份(会话/设置/token 都在里面) ## 升级 ```bash docker pull ghcr.io/huoxue1/deepseek-harness-lark:latest docker compose up -d # 重建容器,数据在卷里不丢 ``` 或锁版本:把 image 的 latest 换成具体 tag(如 0.1.16)。 ## 常见问题 | 现象 | 处理 | |---|---| | 拉镜像慢/失败 | 检查到 ghcr.io 的网络;可设代理或换时段重试 | | 飞书私聊没反应 | ①确认应用已发布+可用范围包含你 ②事件订阅选了长连接并加了 im.message.receive_v1 ③权限已开 | | 群聊不响应 | 默认 groupPolicy=disabled,按第 4 步开启;群聊需 @机器人 | | 任务卡"等待审批" | 正常现象:飞书会话里会来审批卡片,点批准即可 | | 容器重启后凭据/会话丢失 | 检查 dsh-data 卷是否还在(compose 已配置) | | Web UI 打不开 | 端口映射是否 3080:3080;容器内只绑回环,别改 0.0.0.0 | > 本文档基于 2026-08-21 查证的仓库/镜像信息;dsh 仍为 developer preview, > 升级前注意兼容性变更。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: shellway/quanxiel#27