Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

English | 简体中文

dsh-docker

让 AI agent 替你安装 dsh Docker。

dsh@deepseek-ai/dsh,DeepSeek 官方智能体 Shell)的容器化部署。注意:本仓库里没有 Dockerfile,也没有 compose.yaml——只有一份部署施工图:dsh-docker-rebuild.md。把它交给任意 AI agent,由 agent 在你的机器上现场重建并完成部署。

快速开始

git clone https://github.com/gitcore/dsh-docker.git
cd dsh-docker

把这段话发给你的 AI agent(Claude Code / DeepSeek / Cursor 等均可):

阅读当前目录下的 dsh-docker-rebuild.md,
严格按它的步骤在这台机器上部署 dsh。
需要向我确认的事情直接问,不要猜。

agent 会先问你三个问题:

问题 说明
是否需要外网(公网)访问? 不需要 → 内网直连;需要 → 继续提供入口域名
API key 现在有吗? 可选;没有则进入 Web UI 后按页面提示录入
数据放在哪里? 可选;默认部署目录下 ./dsh-data

之后 agent 自动完成:落盘 4 个文件 → 构建镜像 → 启动容器 → 健康检查通过为止。

外网部署(可选)

第一问答「需要」时的形态:dsh 保持零端口发布,前面加一道门禁反代,由它统一负责 TLS 与登录校验。

浏览器
  │ https://<入口域名>:<外部端口>
  ▼
路由器(公网 IP,端口转发 <外部端口> → 内网主机 443)
  ▼
门禁反代(nginx 容器,webnet 网络,443 TLS)
  ├─ <入口域名>
  │     ├─ auth_request ──► 认证服务 <认证服务地址>/会话校验端点
  │     │      401 → 302 https://<登录页域名>/signin(登录页)
  │     ▼      200
  │     dsh 容器 dsh:3080(仅 webnet 内部可达)
  └─ <登录页域名> ──► 认证服务(登录页)

你需要自备三样东西:

依赖 说明
入口/登录页域名 各配一张 TLS 证书,装在门禁反代上
认证服务 提供会话校验端点与登录页;没有就先部署一个
路由器端口转发 公网 <外部端口> → 内网主机 443

agent 会把你的入口域名登记进 .envDSH_TRUSTED_HOSTS(域名与带端口形式各一条)。门禁层的具体配置不在施工图范围内,细节见施工图文末「门禁说明」。

特权接口与 loopback Host

dsh 把特权 RPC(settings.* / credentials.* / agentPreset.* / llm.discoverModels 等写操作)设计为只接受 loopback 的 Host 头——它校验的是 Host 头的值,不是来源 IP。所以不经处理时,远程用户即使已登录也打不开设置页、凭据页。

解法:门禁反代转发 /api/ 路径时,把 Host 改写为 127.0.0.1:3080(参考实现:proxy_set_header Host 127.0.0.1:3080)。

但改写 Host 等于穿过了 dsh 自带的浏览器信任墙,必须在反代层补同源校验作为补偿:

校验 规则 违规处置
Origin 为空(非浏览器客户端)或精确等于本站入口源 403
Sec-Fetch-Site 为空 / same-origin / none 403

校验通过后再把 Origin / Sec-Fetch-* 头清空转发(空值=不转发该头),避免残留标记与伪造的 Host 打架。这就是三条底线的由来——登录校验不能省、Host 改写必须配同源守卫、dsh 端口不能发布,三者缺一即出现绕过面。

部署产物

  • ubuntu:24.04 底座 + 锁定版本的 dsh + jq / rg / fd / git / vim / build-essential 工具链
  • 三处 bind mount 持久化:会话、workspace、home 目录;容器重建不丢数据
  • entrypoint 启动自愈:按 storages/workspace.json 重建注册过的 workspace 目录
  • 默认零端口发布:远程访问需自备门禁反代(TLS + 登录态校验),拓扑图见施工图文末
  • 可选独立形态:受信内网直连 :3080

设计取舍

  • 施工图而非成品:每次部署从同一份文档现场重建,改动可追溯、可审计
  • 环境值来自提问:凭据、路径、域名均向用户收集,文档内无写死的机器默认值
  • fail loudly:前置缺失即报错停止,不做静默兜底

Credits

基于 DeepSeek 官方 npm 包 @deepseek-ai/dsh 构建。

About

把 DeepSeek 官方智能体 Shell(@deepseek-ai/dsh)装进 Docker——部署这件事,交给你的 AI agent。A rebuild blueprint: let your AI agent install dsh for you.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors