DSH Hub

pointer-a/dsh-server-login

dsh-server-login

BundleWorkflow31 GitHub stars· updated 2026-08-26

dsh-server-login is a community DeepSeek Harness plugin. Read the repository README before installing.

Install

npx @deepseek-ai/dsh plugin --profile web add github:pointer-a/dsh-server-login

Restart `dsh web` after install. Bundle APIs can change during the developer preview.

README badge

dsh-server-login DSH Hub badge
[![DSH Hub](https://dshhub.dev/badge/dsh-server-login.svg)](https://dshhub.dev/plugins/dsh-server-login)

Paste this into your README. The star count updates with every catalog sync.

From the README

Excerpt from pointer-a/dsh-server-login, cleaned of badges and images.

dsh-server-login

面向公网的多租户 DSH 托管平台 —— 部署到一台公网服务器后,多个用户注册并经管理员审核,各自获得一套相互隔离的 DeepSeek Harness(DSH)环境,随时通过域名安全访问(已适配手机端)。

以 DSH 插件市场 的 cordis-plugin 形态分发,遵守 STANDARD.md。

它解决什么

DSH 本身是单用户本地工具:没有认证、没有多租户隔离、Web 远程访问缺认证层。dsh-server-login 在其之上补一层服务端登录 + 多租户编排:

用户浏览器
   │ HTTPS
   ▼
nginx(TLS 终结,主域 + *.子域 通配)
   ▼
编排服务 dsh-server-login(Fastify,单进程)
   ├─ 认证 / 审核 / 管理台 / 网页桌面 / 域名 API
   └─ 按 Host 或 /u/<userId>/dsh/* 路由
        └─ 反向代理 → 各用户的 DSH 子进程(只绑 127.0.0.1 动态端口,不出公网)

流程:管理员审核注册用户 → 每个用户落到自己的文件桌面 → 按文件夹启动 DSH → 通过域名访问,彼此文件隔离。

核心能力

能力说明
登录与审核bootstrap-admin 创建首个管理员;注册后需审核通过才能登录;禁用用户会同时删除其会话并停止运行中的 DSH
每用户隔离 DSH主 DSH 常驻对外服务;崩溃时按需拉起一次守护 DSH 修复并自动重启主实例
网页桌面文件浏览 / 新建 / 上传;按文件夹启动 DSH;所有路径经「词法包含 + 符号链接分量」双重围栏校验
每文件夹插件自动检测该用户 profile 已安装的插件,按文件夹勾选启用,持久化并注入 cordis patch
多形态访问默认子路径 /u/<userId>/dsh/;每用户子域名 <用户名>.<baseDomain>(HTTP + WebSocket);自定义域名 + nginx server {} 生成接口
凭据隔离每用户命名 API 密钥库,AES-256-GCM 加密落库(references-not-secrets);换 key 自动重建实例;spawn 只注入当前启用的 key

部署形态(二选一)

同一套代码,靠 DSH_SERVER_LOGIN_DEPLOY_MODE 切换:

模式 A:直接部署(单服务器)模式 B:K8s + 容器化
形态单机裸机,child_process + setuid/iptables多机 ACK,每用户独立 Pod
数据SQLite(本机文件)PostgreSQL(CloudNativePG)
隔离软隔离 / OS 账号硬隔离Pod 网络 + SecurityContext + NetworkPolicy
弹性/HA无(单点)控制面 3 副本 + leader election,DSH Pod 自动重建
交付git clone + 脚本kubectl apply -f deploy/

模式 B 已完整落地(Phase 0–4):每用户 DSH Pod(dsh + tcp-bridge sidecar)+ file sidecar(8082)+ Headless Service + NetworkPolicy;控制面 3 副本 + Lease 选主 + reconcile + 崩溃接管;NAS(CNFS) 共享卷 + PSA restricted + ResourceQuota。见 K8s 部署教程 与 踩坑记录。

快速开始(模式 A)

前置:Linux 服务器、Node ^22.19 或 ≥24、已安装 DSH CLI(npm i -g @deepseek-ai/dsh)。完整的生产流程(systemd / DNS / 通配证书 / nginx)见部署教程。

git clone https://github.com/pointer-a/dsh-server-login.git
cd dsh-server-login
npm install && npm run build            # tsc → lib/

# 1) 创建首个管理员(用它登录管理台)
node lib/cli.js bootstrap-admin --username admin --password '<强密码>' --db ./dev.local.db

# 2) 启动编排服务
node lib/cli.js --port 3080 --db ./dev.local.db

打开 http://127.0.0.1:3080/:

  1. 用 admin 登录进入管理台;
  2. 另开浏览器注册一个普通用户 → 回管理台点「通过」;
  3. 该用户重新登录进入桌面 → 上传文件 / 建文件夹 → 点「在此文件夹启动 DSH」;
  4. 首次使用在桌面的「管理密钥」里填入自己的 DeepSeek API Key(加密存储;未设置时 DSH 能启动但无法调用模型)。

⚠️ 本地试跑可以验证登录 / 审核 / 桌面 / 启动全链路;但要打开 DSH 聊天界面,需要配置域名与每用户子域名(BASE_DOMAIN + COOKIE_DOMAIN + nginx 通配,见部署教程第 6–9 步)——DSH 的 SPA 使用绝对路径,纯子路径方式加载不了静态资源。

配置

环境变量均可省略;同名 CLI flag(--port / --db / --isolation-mode 等)优先级更高,全部见 src/config.ts 与 node lib/cli.js --help。

…

Related plugins