前言¶
DSH 本身適合本地、單用戶場景:啓動後在本地文件和密鑰環境中運行。但如果把 DSH 部署到一臺公網服務器,供多人長期使用,就需要補上幾件事:誰能登錄、誰被允許使用、每個用戶能否看到彼此文件、每個用戶的 API Key 如何分開保存、如何按域名或子路徑訪問各自的 DSH。
dsh-server-login 針對這些場景,在一臺服務器上提供多租戶 DSH 託管。多個用戶註冊後,由管理員審覈通過,各自獲得一套相互隔離的 DeepSeek Harness(DSH)環境,並可通過域名訪問。
定位¶
- 倉庫:
https://github.com/pointer-a/dsh-server-login - 許可證:MIT
- 一句話定位:面向公網的多租戶 DSH 託管平臺
- 主要能力:登錄審覈、每用戶隔離 DSH、網頁桌面、按文件夾插件、多形態訪問、API Key 隔離、本地單機或 k8s 部署
它解決的核心問題,是把原本偏本地單機的 DSH,放進一套可審覈、可隔離、可遠程訪問的服務端託管流程裏。
核心功能¶
登錄與審覈¶
bootstrap-admin 用於創建首個管理員。普通用戶註冊後,需要管理員審覈通過才能登錄。
禁用用戶時,會同時刪除其會話,並停止該用戶運行中的 DSH。
每用戶隔離 DSH¶
每個用戶對應一套相互隔離的 DSH 環境。主 DSH 常駐對外服務;當它崩潰時,會按需拉起一次守護 DSH 進行修復,並自動重啓主實例。
網頁桌面¶
普通用戶登錄後會進入網頁桌面,可以完成文件瀏覽、新建、上傳等操作,並按文件夾啓動 DSH。
所有路徑會經過兩層圍欄校驗:先做詞法包含校驗,再逐段拒絕符號鏈接分量,用於防止越出用戶根目錄。
每文件夾插件¶
系統會檢測該用戶 profile 中已安裝的插件,並按文件夾勾選啓用。啓用狀態會持久化,並注入 cordis patch。
多形態訪問¶
支持三類訪問形態:
- 默認子路徑:
/u/<userId>/dsh/ - 每用戶子域名:
<用戶名>.<baseDomain>,支持 HTTP + WebSocket - 自定義域名:提供 nginx
server {}生成接口
憑據隔離¶
每個用戶擁有命名 API 密鑰庫。API Key 使用 AES-256-GCM 加密落庫,落庫形態是 references-not-secrets。
更換 key 後會自動重建實例;spawn 時只注入當前啓用的 key。
部署模式¶
支持兩種部署模式:
local:單機部署k8s:每用戶 Pod
安裝與運行¶
已覈實資料中未給出官方 dsh plugin add ... 形式的安裝命令。項目 README 給出的是 git clone、構建、運行的本地流程。
前置條件:
- Linux 服務器
- Node
^22.19或≥24 - 已安裝 DSH CLI
先克隆倉庫並完成構建:
git clone https://github.com/pointer-a/dsh-server-login.git
cd dsh-server-login
npm install && npm run build # tsc → lib/
npm run build 會把代碼構建到 lib/。
創建首個管理員:
node lib/cli.js bootstrap-admin --username admin --password '<強密碼>' --db ./dev.local.db
這個管理員用於登錄管理臺。
啓動編排服務:
node lib/cli.js --port 3080 --db ./dev.local.db
環境變量均可省略;同名 CLI flag,如 --port、--db、--isolation-mode,優先級更高。
典型用法¶
完成上面的步驟後,打開:
http://127.0.0.1:3080/
按下面步驟走一遍完整鏈路:
- 用
admin登錄管理臺。 - 註冊一個普通用戶。
- 回到管理臺審覈通過該用戶。
- 普通用戶重新登錄,進入網頁桌面。
- 在桌面上傳文件、新建文件夾,點擊「在此文件夾啓動 DSH」。
- 在「管理密鑰」填入自己的 DeepSeek API Key。
本地試跑可以驗證登錄、審覈、桌面、啓動這條鏈路。如果要打開 DSH 聊天界面,還需要配置域名與每用戶子域名。
k8s 部署模式¶
除本地單機模式外,項目也支持 k8s 每用戶 Pod 模式。啓用 k8s 模式時,需要配置相關變量,例如:
DB_URL
DSH_IMAGE
CONTROL_PLANE_IMAGE
這些配置項用於支撐容器化部署和每用戶 Pod 的生成。
安全與審計¶
已覈實的安全相關做法包括:
- 會話使用不透明隨機 token,僅 SHA-256 哈希落庫
- cookie 使用
HttpOnly+SameSite - HTTPS 下增加
Secure - 密碼使用 scrypt 加鹽哈希,並採用常數時間比較
- 每用戶 API key 使用 AES-256-GCM 加密落庫
- 主密鑰來自環境變量,或
<dataRoot>/secret.key,文件權限爲0600 - 文件操作先做詞法包含校驗,再逐段拒絕符號鏈接分量
- 註冊、登錄、審覈、改密鑰等動作寫入
audit_log
隔離分層包括:
- 軟隔離
- 賬號級硬隔離:OS 賬號 +
setpriv降權 - 端口守衛:iptables owner-match
- k8s Pod 邊界
適用場景與注意¶
適合:
- 需要把 DSH 部署到公網服務器,供多人分別使用
- 需要註冊、審覈、禁用用戶
- 需要每個用戶有獨立桌面、獨立文件目錄、獨立 API Key
- 需要通過子路徑、子域名或自定義域名訪問 DSH
- 需要在本地單機或 k8s 兩種形態之間選擇
注意:
- 作爲 DSH 插件/服務端形態,它會在當前 DSH 進程權限下運行。安裝和啓用前,應檢查源碼與許可證。
- 本地試跑可以驗證登錄、審覈、桌面、啓動鏈路,但完整打開 DSH 聊天界面還需要域名和每用戶子域名配置。
- API Key 會加密落庫,但仍屬於敏感憑據,建議按生產環境要求管理主密鑰和數據目錄權限。
結尾¶
dsh-server-login 的價值在於把 DSH 從本地單用戶工具,擴展到一套可管理、可審覈、可隔離的多租戶託管服務。它以 MIT 許可證發佈,倉庫地址爲:
https://github.com/pointer-a/dsh-server-login