owndsh
Curated pickMaintenance: Activeboe1900/owndsh
The Self-Hosted Control Plane for DeepSeek-Harness
$ dsh plugin add owndshInstall
dsh has no central install command — add this plugin’s entry (documented in its README below) to your profile or patch config, then restart.
How installs work7
stars
0
forks
Java
Language
2026-09-04
Created
2026-09-29
Last push
README
OwnDsh
OwnDsh · Truly Own Your DeepSeek-Harness.
The Self-Hosted Control Plane for DeepSeek-Harness.
真正拥有属于你的 DeepSeek-Harness。
DeepSeek-Harness 的私有化控制面。
OwnDsh 是 DeepSeek Harness 的自托管团队控制面。管理员统一管理身份、模型、API Key、访问权限、配额、插件、设备和审计;员工继续在自己的 DSH Desktop 或 Harness Web 中工作。
OwnDsh 不 fork 官方 Harness Web UI,不接管员工工作区,也不远程执行员工工具。员工可以安装标准 Harness 插件 owndsh-plugin,或使用预装插件和运行环境的 OwnDsh Desktop,客户端由独立仓库构建 macOS Intel、Apple Silicon 与 Windows x64 安装包。
当前处于预发布阶段。Docker 镜像只发布
next,npm 插件只发布next,不会更新latest。
能力
| 使用者 | 能力 |
|---|---|
| 平台管理员 | 自托管控制台、LOCAL/LDAP/OIDC 身份、成员与设备治理 |
| 模型管理员 | 集中保管供应商 API Key,管理模型、模型集、授权、Token、RPM 与并发 |
| 插件管理员 | 配置安装地址、发布企业插件,设置可见范围并查看客户端状态 |
| 审计员 | 查询管理操作、模型调用、用量与 request ID 关联记录 |
| 员工 | 用企业账号登录 Harness,使用获准模型并自主安装企业插件,无需持有上游 API Key |
Docker Compose 部署
当前镜像目标为 Linux amd64 和 arm64。准备 Docker Engine、Docker Compose 2.20.3+ 和 Git。
1. 启动
git clone https://github.com/boe1900/owndsh.git
cd owndsh
docker compose up -d --wait
默认访问 http://localhost:8080,初始账号 admin,密码 owndsh。第一次登录会强制设置符合安全策略的正式密码。数据库与账号由 PostgreSQL 创建,全部建表、种子数据和后续升级由 Server 内置 Flyway 自动执行,无需额外 SQL 文件。
需要让其他设备访问或覆盖默认凭据时,再创建 .env:
cp .env.example .env
OwnDsh 只有一个公开地址配置。默认由 Compose 生成为 http://localhost:8080;需要让局域网设备访问时,把它改成部署机的实际 IP 和发布端口,例如:
ENT_PUBLIC_BASE_URL=http://192.168.1.50:8080
其中 192.168.1.50 替换为运行 Docker Compose 的机器 IP;若修改 OWNDSH_HTTP_PORT,这里使用相同端口。管理端回调会自动派生为 <ENT_PUBLIC_BASE_URL>/enterprise/auth/callback,不需要单独配置。
生产环境应由现有 Nginx、Ingress 或负载均衡提供可信 HTTPS,并把这个值改成外部 HTTPS 地址。OwnDsh Compose 只开放 Console 的 HTTP 端口,不直接管理证书。.env.example 中的数据库、Redis、JWT、master key 是开箱测试默认值;公网部署必须通过同名环境变量覆盖。
2. 可选:设置初始密码
Compose 默认使用下面的一次性管理员账号和密码;创建 .env 后可以自由修改:
ENT_BOOTSTRAP_ADMIN_USERNAME=admin
ENT_BOOTSTRAP_ADMIN_PASSWORD=owndsh
第一次登录会强制设置符合安全策略的正式密码。
3. 管理服务
docker compose up -d --wait
docker compose ps
docker compose logs -f server
Server 日志仅输出到 stdout/stderr,由 Docker/K8s 与日志平台采集和轮转,不需要应用日志卷。
打开 ENT_PUBLIC_BASE_URL 配置的地址,以配置的初始账号和密码登录。数据库 marker 保证初始化只执行一次;首次改密后,默认初始密码立即失效。
4. 配置企业
- 在“成员”中配置 LOCAL、LDAP 或 OIDC 身份来源。
若 LDAP 服务只提供明文
ldap://,在身份源表单填写ldap://...;TLS 目录填写ldaps://...。 - 在“模型”中添加供应商、API Key 和受管模型。
- 创建模型集,并向全部成员、用户组或指定成员授权。
- 按需配置 Token 配额、RPM 和并发限制。
- 按需登记 npm 精确包名和版本,发布企业插件,并设置对全部或指定成员可见;管理端不维护 DSH 兼容字段,插件包自身通过
peerDependencies声明范围,安装时由官方 Host 校验。 - 邀请员工安装 OwnDsh 并登录;员工只能在官方「插件」页的「企业插件」页签中选择已发布插件。
员工设备不会得到供应商 API Key;每次模型请求都由 OwnDsh 网关重新校验身份、授权和额度。
安装员工插件
使用独立仓库构建的 OwnDsh Desktop 时,直接打开应用并填写 Server 地址即可,无需另装 Node、pnpm 或插件。下面的命令用于已有 Harness/社区 Desktop 的设备。
先确保 pnpm 是 PATH 中可直接执行的命令。Harness 当前基线使用 pnpm 11.7.0:
corepack enable
corepack install --global pnpm@11.7.0
pnpm --version
安装 npm 测试版到需要使用的 profile:
# Harness Web
dsh plugin --profile web add --ignore-scripts owndsh-plugin@next
dsh --profile web
# DSH Desktop
dsh plugin --profile desktop add --ignore-scripts owndsh-plugin@next
从 DeepSeek Harness 源码运行 CLI 时:
pnpm --dir /path/to/deepseek-harness dsh \
plugin --profile web add --ignore-scripts owndsh-plugin@next
安装完成后重启对应 profile。OwnDsh 全屏页面会要求填写管理员提供的 OwnDsh Server HTTP(S) 地址;保存后完成企业登录即可使用管理员授权的模型。
Server 地址和 Refresh Token 由 Harness Host 的官方 settings/credentials 服务持久化。Access Token 只存在 Host 内存,浏览器页面不会读取或保存 Token;正常重启会静默恢复登录。主动退出、设备撤销、成员停用、改密或 30 天有效期结束后需要重新登录。
官方「插件」页面展示已安装、内置和企业插件。企业页签只显示管理端下发的元数据并使用官方默认图标;通用“添加插件”入口被移除,员工不能输入任意包名、Git 仓库或本地路径。点击安装或更新后,官方 pluginManager 负责安装、启停、卸载、进度和重启状态,企业页仅在服务端版本高于本机版本时显示更新。
OwnDsh 闲置时不建立企业 SSE、不定时拉配置或提前续期。用户请求时按需续期,服务端认证 401 最多续期重试一次;Refresh Token 失效或设备撤销时显示登录门禁,重新登录后可继续对话。网络暂不可达保留凭据,可再次发起请求或在 OwnDsh 设置点击刷新;模型与插件目录在打开设置或主动刷新时更新。
更新
更新服务端测试镜像:
docker compose pull
docker compose up -d --wait
更新员工插件:
dsh plugin --profile web remove owndsh-plugin
dsh plugin --profile web add --ignore-scripts owndsh-plugin@next
把 web 换成实际使用的 profile。移除后重新安装可以避免 pnpm 复用同版本缓存。
常见问题
pnpm not found on PATH
执行上面的 corepack enable 和 corepack install --global pnpm@11.7.0,直到直接运行 pnpm --version 成功。只写 corepack pnpm ... 不够,因为 dsh plugin 的子进程仍需要从 PATH 找到 pnpm。
保存 Server 后显示平台不可用
从员工设备访问 <Server地址>/healthz,再检查 DNS、防火墙、反向代理和 TLS 证书。Server 地址必须是完整 HTTP(S) origin,不能附带 API 路径。
登录后看不到模型
确认供应商和模型都已启用,并且该员工、员工所在用户组或全部成员拥有对应模型访问授权。配额策略不会代替访问授权。
重启后要求重新登录
确认启动的是原 profile,且它的官方 credentials provider 可写。主动退出、Server 地址切换、设备/成员撤销和 30 天有效期结束都会使长期会话失效。
GHCR 镜像无法拉取
仓库维护者首次发布后需要把 owndsh-server 和 owndsh-console 两个 GHCR package 设为 Public。部署机无需 GitHub Token。
运维与开发
本地开发体验可运行 ./scripts/local-demo.sh。该脚本要求同级存在锁定的 deepseek-harness checkout,并使用隔离状态启动正式 Server 和 Harness。
上游与声明
OwnDsh 是独立项目,不隶属于 DeepSeek AI 或 Anywhere Labs。DeepSeek Harness 与 DSH Desktop 的名称、代码和商标归各自所有;OwnDsh 只通过公开插件扩展点集成。
More in Integrations & Sharing
dsh-notification
by omdsh-dev
Desktop notifications for DeepSeek Harness turn completions, with per-outcome controls and include/exclude keyword rules.
dsh-open-in-vscode
by omdsh-dev
Open DeepSeek Harness workspace directories in VS Code directly from the web GUI.
fn-os-apps
by tnnevol
Tencent CodeBuddy model provider for DeepSeek Harness that signs in with browser OAuth instead of an API key, lists the CodeBuddy model catalog with the context, output, tool-calling, reasoning and image capabilities of each model, keeps multiple accounts with automatic failover to the next usable one, shows remaining quota in the composer with a token and credit usage panel, and completes automatable CodeBuddy growth tasks per account with an execution log. Install from npm with `dsh plugin --profile web add @tnnevol/dsh-codebuddy`.
dsh-lark-bot
by plutokeating
Feishu/Lark bridge for DeepSeek Harness: scan-to-connect PersonalAgent binding, streaming cards, git-worktree project workspaces, parallel per-scope tasks, multi-role agents, cross-session notify, in-chat model/key management, and a safety-net guardian that still answers in Feishu after dsh crashes.
