English | 简体中文
让 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 会把你的入口域名登记进 .env 的 DSH_TRUSTED_HOSTS(域名与带端口形式各一条)。门禁层的具体配置不在施工图范围内,细节见施工图文末「门禁说明」。
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:前置缺失即报错停止,不做静默兜底
基于 DeepSeek 官方 npm 包 @deepseek-ai/dsh 构建。