DSH NAS

NAS 上的 DeepSeek dsh 网页版启动器:装好即用,点一下「启动服务」,dsh 界面直接出现在窗口里 —— 手机、平板、电脑都能访问

v0.1.7

功能特性

📦

开箱即用

安装包按架构内置 Node.js 运行时(amd64 / arm64),NAS 无需预装任何环境,装上就能跑

🚀

一键启动

点「启动服务」自动通过 npx 拉起 dsh web,没有命令行;启动、停止、换端口、看日志都在网页里完成

🖥️

界面内嵌

dsh 运行期间界面直接内嵌在本应用窗口:同端口根路径反代,不用记第二个地址

👨‍👩‍👧‍👦

全家共享

dsh 服务跑在 NAS 上,「复制访问地址」一键产出带 token 的地址,手机、平板、局域网设备都能打开

🔄

版本与更新

启动时自动查 npm 源新版本,可勾选「自动安装」;断网时自动回退本地缓存版本继续用

💾

数据不丢

dsh 的会话、配置、npm 缓存全部保存在应用数据目录,升级重装都不丢

⚙️

灵活设置

dsh 服务端口、工作目录、npm 源、启动前检查更新、随应用启动、崩溃自动重启等设置项齐全

🩹

崩溃自愈

dsh 意外退出可自动拉起;强杀或断电留下的孤儿进程启动前自动清理,端口被占直接给出精确报错,另备「故障排查:修复 / 重置」一键自救

🐂

飞牛一键登录

继承框架全部公共能力:登录认证、飞牛 NAS 一键登录、用户权限、备份、审计、匿名统计

工作方式

DSH NAS 是桌面版 dsh-desktop(DeepSeek 官方工具 @deepseek-ai/dsh 的桌面启动器)的飞牛 fnOS 版,把 npx @deepseek-ai/dsh web 整条链路包成飞牛应用中心里的一个图标:

飞牛桌面图标 ──打开──▶ DSH NAS 启动器(:9001)
                          │  点「启动服务」
                          ▼
              npx -y @deepseek-ai/dsh@<版本> web --no-open
              (127.0.0.1:18912,仅本机监听)
                          │  解析 `dsh web: …/?token=…`
                          ▼
              点「打开 dsh 界面」──▶ 本窗口直接呈现 dsh

技术架构

后端技术栈

  • Go - 高性能编译型语言
  • Gin - 轻量级 HTTP 框架
  • GORM - ORM 框架
  • SQLite (WAL) - 单文件数据库

前端技术栈

  • Vue 3 - 现代前端框架
  • TypeScript - 类型安全
  • Vite - 构建工具
  • Pinia - 状态管理
  • Tailwind CSS - 原子化样式

运行时与部署

  • fpk 内置 Node.js v22 LTS(双架构)
  • 飞牛 NAS(fnOS)FPK 包(主形态)
  • Docker 镜像 / 二进制

DSH NAS 基于 smallgo 应用框架实例化,服务管理模块位于 server/dshnas/;登录认证、用户权限、备份、审计、匿名统计等公共能力全部继承框架。

快速开始

飞牛 NAS 安装

  1. 下载对应架构的 techfunway-dsh-nas 安装包(.fpk,支持 amd64 / arm64)
  2. 打开飞牛 NAS 桌面 → 应用中心
  3. 点击右上角 手动安装,选择下载的 .fpk 文件
  4. 在安装向导中设置应用端口(默认 9001),点击完成
  5. 桌面点开 DSH NAS,首次访问注册管理员账号(第一个注册用户即管理员)
  6. 点 启动服务:第一次需要联网下载 dsh 组件(走 npmmirror 镜像,之后离线可用)
  7. 日志面板出现 dsh web: http://…/?token=… 即就绪,点 打开 dsh 界面 开始使用

Docker 运行

说明:该应用暂未发布 Docker 镜像,请优先用飞牛应用中心安装包,或按源码自行构建。

docker run -d \
  --name techfunway-dsh-nas \
  -p 9001:9001 \
  -v dshnas-data:/app/data \
  -e TZ=Asia/Shanghai \
  --restart unless-stopped \
  techfunways/dshnas:latest

docker-compose.yaml

services:
  dshnas:
    image: techfunways/dshnas:latest
    container_name: techfunway-dsh-nas
    restart: unless-stopped
    ports:
      - "9001:9001"
    volumes:
      - dshnas-data:/app/data
    environment:
      - TZ=Asia/Shanghai

volumes:
  dshnas-data:
💡 提示:dsh 子进程默认监听 127.0.0.1:18912(仅 NAS 本机回环,可在设置中修改),与对外服务端口 9001 互不相干;对外的访问一律经应用反代,手机与局域网设备直接访问 9001 端口即可。

端口与仓库信息

默认端口 9001(HTTP,安装向导、-port 参数或 PORT 环境变量均可修改)
dsh 子进程端口 18912(默认,仅 127.0.0.1 回环监听,设置中可修改)
容器名 techfunway-dsh-nas
数据卷 dshnas-data → 容器内 /app/data(数据库、dsh 会话、npm 缓存、日志)
Docker 镜像 techfunways/dshnas(端口 9001)
fnOS 包名 techfunway-dsh-nas(桌面显示名「DSH NAS」)
源码仓库 TechFunWay/dshnas(Go + Gin + GORM + SQLite / Vue 3 + TypeScript)
运行数据 data/db/dshnas.db(SQLite WAL),dsh 会话与 npm 缓存同在数据目录
上游框架 smallgo,后端模块名为 smallgo/server

更新日志

v0.1.7 2026-10-02
  • 修复飞牛主入口落点:打开应用先进管理页,不再直落 dsh 未授权页
  • 手机上的飞牛 App 是独立会话、没有 dsh 令牌,此前会卡在未授权页进不了管理页;现在进应用即管理页,再点「打开 dsh 界面」同源带令牌跳转
  • 打包脚本的入口校验同步收紧:落点必须是应用前缀路径,根路径视为错误
v0.1.6 2026-10-01
  • 新增「故障排查:修复 / 重置」:一键清理残留进程、陈旧版本清单与失效的 npx 安装目录,校正失效版本、校验端口与 node;重置则把设置复位并清空组件缓存
  • 修复与重置都不删除 dsh 会话记录与用户数据
  • 修复启动报 ETARGET(No matching version found):版本决策改读 packument 的真实版本列表,镜像 dist-tags 领先于同步进度时自动回退到可安装版本
  • 在线启动改用 --prefer-online 重新校验版本元数据,不再复用陈旧清单导致重试必然失败
  • 上次成功的版本号改为落库保存,离线回退与「检查更新」恢复正常
  • Node 探测兼容软链形态(nvm / Homebrew / ~/.local/bin)
v0.1.5 2026-10-01
  • 新增 dsh 孤儿进程自愈:飞牛强制停止或断电重启后残留的子进程会占住端口,启动前自动识别并清理(TERM → 等待 → KILL),不误伤同机其他 dsh 进程
  • 启动前预检 dsh 端口是否可绑定,仍被占用时直接给出带端口号的精确报错,不再白等 npx 启动失败
  • 应用收到停止信号时先行结束 dsh 子进程,避免飞牛 10 秒宽限耗尽被强杀后留下孤儿
v0.1.4 2026-09-19
  • 首个版本:NAS 上的 DeepSeek dsh 网页版启动器,安装包内置 Node.js 运行时,开箱即用
  • 点「启动服务」自动通过 npx 拉起 dsh web(支持固定版本、自动检查 npm 源更新、离线缓存回退)
  • dsh 运行期间界面内嵌在本应用窗口:同端口根路径反代,手机与局域网设备可直接访问
  • dsh 会话、npm 缓存与配置全部保存在应用数据目录,升级重装不丢失
  • 📦 飞牛应用中心安装包 techfunway-dsh-nas(v0.1.7,x86 / arm64)
  • 🔒 代码仓库与 Docker 镜像尚未公开,进度见 GitHub 组织主页

常见问题

如何修改端口?

飞牛 NAS 安装时可在向导中设置端口(默认 9001)。Docker 方式通过 -p 参数映射端口。二进制方式通过 -port 参数指定端口。dsh 子进程自己的监听端口(默认 18912)在应用设置中修改,与对外端口无关。

NAS 上没有装 Node.js 能用吗?

能。安装包按架构内置了 Node.js 运行时(v22 LTS),不依赖 NAS 上有没有 Node;只有当你在设置里手动指定 node 路径时,才会改用你指定的那个。

手机上怎么访问 dsh?

点界面里的「复制访问地址」,把带 token 的地址发到手机浏览器直接打开;dsh 运行期间也可以直接访问应用的 9001 端口。匿名访问会被 dsh 自己的鉴权拒绝,不怕陌生人扫到。

dsh 的版本更新怎么处理?

启动前会自动检查 npm 源的最新版本:首次使用直接用最新版,之后发现新版会询问「立即更新 / 先用当前版」,勾选「自动安装更新」则不再询问;查不到 npm 源(离线)时改用上次成功的版本离线启动。

点「启动服务」失败了怎么办?

先看日志里的具体报错:端口被占会直接给出端口号(多为强杀/断电留下的孤儿进程,启动时已自动清理);报 No matching version found 一类版本错误,用首页的 故障排查 → 修复 清掉陈旧版本清单与失效安装目录再重试。修复与重置都不会删除 dsh 的会话记录与用户数据。

手机打开应用为什么先看到管理页?

这是 v0.1.7 起的刻意设计:飞牛手机 App 打开应用是独立会话、没有 dsh 令牌,若直落 dsh 界面会停在未授权页。现在先进管理页,再点「打开 dsh 界面」由同源带令牌跳转进入 dsh,手机上也能正常用。

数据存在哪里?

dsh 的会话(data/home)、npm 缓存(data/npm-cache)与应用数据库(data/db/dshnas.db)全部保存在应用数据目录,飞牛上位于 /vol1/@appdata/techfunway-dsh-nas/,升级重装都不会丢失。