首页
/ Project NOMAD Supply Depot:离线应用目录的容器化应用管理、逐 App 凭据与数据目录实战解析

Project NOMAD Supply Depot:离线应用目录的容器化应用管理、逐 App 凭据与数据目录实战解析

2026-09-05 22:22:57作者:董灵辛Dennis

Supply Depot(供应仓库)是 Project NOMAD 中安装"内置工具之外"应用的目录:每个应用都是一个运行在你自己 NOMAD 上的独立 Docker 容器,完全离线可用,安装完成后在应用卡片上出现 Open 按钮。本文基于仓库中的官方文档 admin/docs/supply-depot-apps.md 展开,并结合 服务种子文件容器管理服务自定义应用安全护栏 的源码,讲清每个应用首次打开时要用什么账号、文件存在哪里、哪些功能离线时失效,以及如何把第三方容器安全地纳入 NOMAD 统一管理。读完本文,你可以独立完成 Supply Depot 中 Stirling PDF、File Browser、Calibre-Web、Vaultwarden、Jellyfin 等 11 个应用的首次配置与离线运维。

Supply Depot 的工作模型:每个应用一个容器

Supply Depot 页面由 supply_depot_controller.ts 渲染,它通过 SystemService 拉取全部服务(installedOnly: false),把目录内每个应用以卡片形式展示。从 docker_service.ts 的源码可以看到关键实现事实:

  • 容器即应用:NOMAD 通过挂载的 Docker socket(DooD 模式)为每个服务创建同名的 Docker 容器,并在容器上打 io.project-nomad.managed: true 标签,用于后续 Logs/Stats 只作用于自己管理的容器;
  • 安装是异步流createContainerPreflight 先做前置检查(已安装、安装中、数据库与内存双重防并发),再在 _createContainer 中依次执行依赖检查、镜像拉取(pullImage 对拉取失败显式 reject,避免"失败却继续创建容器")、安装前动作(部分应用需要 NOMAD 预先准备证书、空书库等)、容器创建与启动,全过程通过 server-sent events 把进度广播给前端;
  • 失败自愈:安装失败会触发清理;更新时若新容器启动失败,NOMAD 自动回滚到之前可用的版本。

文档明确划定边界:这一页只讲"在 NOMAD 上跑起来"所需的登录方式、默认凭据、文件落点和前置条件,不教如何使用各应用本身——每个应用都是独立的开源项目,以各自的官方文档为准。

管理你的应用:Manage 菜单与版本、Open 链接、自动更新

每个已安装应用的卡片上都有 Manage 菜单:

  • Docs — 直达该应用的 NOMAD 入门说明,即本文各 App 小节。只有在该应用已有文档小节时此菜单项才会出现:supply_depot_docs.ts 中维护了一张服务名 → 文档锚点映射表,且要求每个锚点必须与 Markdown 中 ## 应用名 {% #anchor %} 的标题 id 完全一致,"链接永不指向不存在的章节";
  • Edit — 修改应用的端口映射、卷绑定、环境变量、内存/CPU 限制。对精选目录应用同样可用;编辑会合并进应用的既有配置(例如 AI Assistant 的 GPU 访问等高级设置得以保留),且被编辑过的应用不再被目录更新覆盖;
  • Logs / Stats — 实时查看日志输出或当前内存/CPU 占用;
  • Update / Remove — 拉取最新版本或移除应用(可选连同镜像一并删除)。

版本可见性:每张卡片在应用名旁直接显示已安装版本(如 Kiwix · 3.7.0),有新版本时卡片上会出现橙色 Update available 标记。

自定义 Open 链接:默认 Open 指向 NOMAD 自身地址;如果你用反向代理或本地 DNS,可通过 Manage › Edit 设置自定义启动地址(例如 https://jellyfin.myhomelab.net)。NOMAD 会把原始链接安全存档,可随时切回,且该覆盖在升级后依然生效。

自动更新:已安装应用可免手动自动更新,两级 opt-in —— Settings → Updates 的总开关加上 Supply Depot 中每个应用的独立开关;且只自动应用 minor 和 patch 更新,major 版本永远手动。完整机制见 Updates 文档

Bring Your Own App:把第三方容器纳入托管,以及安全护栏

除了精选目录,Supply Depot 可以把你自己的 Docker 容器作为托管应用运行。点击 Add a custom app,告诉 NOMAD:

  • 要拉取的 image(例如 ghcr.io/owner/app:1.2.3);
  • 它需要的 端口映射卷绑定环境变量内存/CPU 限制

填写过程中 NOMAD 做实时 pre-flight 检查,对端口冲突、风险配置给出警告;部分警告(非受信镜像仓库、无法做版本跟踪的 :latest 标签)属于建议性质,可选择 Install anyway;真正不安全的配置则直接阻止安装。

源码 custom_app_guard.ts 完整展示了这套"硬护栏 + 软警告"的设计(GuardEvaluation 返回 blockedwarnings 两类结果):

检查项 结果 说明
挂载 Docker socket(docker.sock blocked 等于交出宿主机的完整控制权
挂载 /etc/proc/sys/boot/dev/run/var/run/ blocked 核心系统目录一律拒绝
挂载 NOMAD 安装树本身(/opt/project-nomad)及其任意上级目录 blocked 防止容器看到 NOMAD 自身代码与数据
host/container 路径不是绝对路径、或路径中含 :(Docker 绑定分隔符,防解析差集绕过) blocked 保证校验与 Docker 实际解析一致
镜像引用含空白或非法字符 blocked 格式校验
镜像来自可信仓库集(docker.ioghcr.iolscr.ioquay.io 等)之外 warning 提示"只安装你信任的镜像"
使用 :latest 或未带标签 warning 提示固定具体版本以获得可复现安装
卷绑定落在托管存储根(默认 /opt/project-nomad/storage,可用 NOMAD_STORAGE_PATH 覆盖)之外 warning 提示你确认信任该镜像对该路径的访问

自定义容器的默认资源上限为 1024 MB 内存 / 1 CPU(DEFAULT_MEMORY_MB / DEFAULT_CPUS),除非用户显式覆盖。安装完成后,自定义应用与其他应用行为一致:同样的 Manage 菜单、卡片上显示版本、可加入自动更新。文档同时声明边界:自定义应用是你自己的,NOMAD 只负责运行,不提供目录外软件的安装文档与支持。

应用速查表:端口、凭据、数据目录

以下表格汇总自文档与 service_seeder.ts 中各精选应用的镜像、端口绑定与卷绑定配置,方便检索:

应用 镜像 宿主端口 首次登录 数据目录(storage 根下) 离线程度
Stirling PDF ghcr.io/stirling-tools/s-pdf:2.13.1 8400 无(默认跳过登录) stirling-pdf 全离线,OCR 加语言需联网
File Browser filebrowser/filebrowser:v2 8410 admin / nomad(须立即改) filebrowser + 内容目录 全离线
Calibre-Web linuxserver/calibre-web:0.6.26-ls386 8420 admin / admin123(须立即改) calibreweb + books 离线,metadata 抓取需联网
IT Tools ghcr.io/corentinth/it-tools:2024.10.22-7ca5933 8430 全离线
Excalidraw excalidraw/excalidraw:sha-4bfc5bb 8440 无(存在浏览器本地) 基本离线,字体/统计需联网
Meshtastic Web ghcr.io/meshtastic/web:2.7.1 8450 全离线
Homebox ghcr.io/sysadminsmedia/homebox:0.26.2 8470 首次注册即 owner homebox 全离线
Vaultwarden vaultwarden/server:1.36.0 8480(HTTPS) 创建账号 + 主密码 vaultwarden 全离线
Jellyfin jellyfin/jellyfin:10.11.11 8490 向导中自建管理员 jellyfin + media 离线播放,metadata 需联网
Education Platform (Kolibri Gen 2) learningequality/kolibri:0.19.4 8310 向导中自建 admin kolibri-gen2 导入频道需联网,其余全离线
MeshCore Web ghcr.io/axistem-dev/meshcore-web:v1.45.0 8500(HTTPS) 全离线

Stirling PDF:本地 PDF 工具箱

完整的本地 PDF 处理工具箱:合并/拆分、与 PDF 互转、压缩、旋转、加/去密码、对扫描件做 OCR 使其可搜索、签名、盖章、涂黑编辑,共 50 多个工具。全部运行在你自己的硬件上,文档不会离开 NOMAD。

首次打开:直接进工具页,无需登录。NOMAD 默认配置跳过了 Stirling 的登录屏——在你自己的局域网里它是个人工具,密码墙只会碍事。左下角显示 "Guest" 属正常现象。种子配置的实证见 service_seeder.ts:环境变量 SECURITY_ENABLELOGIN=false(环境变量覆盖镜像内 settings.yml 的默认登录墙)与 LANGS=en_GB,8080 端口映射到宿主 8400,配置与日志分别绑定 storage/stirling-pdf/configsstorage/stirling-pdf/logs

冷启动慢,属正常:Stirling PDF 是一个大体积 Java 应用,安装后给它 30–60 秒完成启动再打开页面。它需要约 1 GB 内存,更适合内存宽裕的 NOMAD。

想加回登录墙? 若多人共享你的 NOMAD,可以从 NOMAD 侧重新开启登录(注意:这是唯一途径——Stirling 自身的设置菜单在登录之后才能访问,登录关闭时只能从 NOMAD 的 Edit 屏操作):

  1. 在 Supply Depot 找到 Stirling PDF,点 Manage › Edit
  2. Environment Variables 中把 SECURITY_ENABLELOGIN=false 改为 SECURITY_ENABLELOGIN=true
  3. 保存。NOMAD 重建容器后登录屏回归。

首次登录用 admin / stirling,Stirling 会强制你立即自设密码。

数据存储:设置存在 storage/stirling-pdf。你处理的 PDF 是"上传—操作—下载回你的设备"的临时工件,Stirling 不是长期档案库。

文件来源说明(为什么看不到 NOMAD 上的其他文件):Stirling 只处理你当前设备(笔记本、手机、平板)上传的文件;它无法访问 NOMAD 上的 books 目录、Knowledge Base 文档或 File Browser 里的内容。若 PDF 已在 NOMAD 上,先从它所在之处(如 File Browser)下载一份,再在 Stirling 中打开。多一步,但文件各归其位。

离线:全部 PDF 工具本地运行,完全离线。少数联网功能离线时失效:"Google Drive" 导入项、页脚的 Survey/Discord/GitHub 链接。唯一带联网组件的核心功能是 OCR——英文语言包已内置,添加其他语言时才需要联网。

File Browser:NOMAD 的网页文件管理器

浏览器里的文件管理器:浏览、上传、下载、建目录、重命名、移动、删除,无需在电脑上装任何东西。

首次打开:出现登录屏,用 admin / nomad 登录,请立即修改密码——每台 NOMAD 默认相同,同网络内知道它的人都能进。点设置齿轮 → 个人资料设置 → 设置新密码。

与本页多数应用不同,File Browser 有意保留登录:它能对你 NOMAD 上的真实文件重命名和删除,即便在自家网络里密码也是正确选择。源码印证了这一点:service_seeder.ts 中通过 FB_USERNAME=adminFB_PASSWORD("nomad" 的 bcrypt 哈希,镜像无初始密码时只会在容器日志里打印随机密码,非技术用户无法获取,故种子一个已知凭据)完成首次登录铺设;由于该版本镜像不支持 noauth 模式,登录墙天然存在。

能看到的内容目录(一次性的"挂载即护栏"设计,见种子文件中的绑定注释):

  • books — 电子书(含你想交给 Calibre-Web 的书);
  • maps — 下载的地图数据;
  • media — 视频、音乐、照片(含想交给 Jellyfin 的内容);
  • zim — Wikipedia 等离线参考库;
  • kb_uploads — 你加入 Knowledge Base 的文档。

这些目录内可上传、下载、重命名、移动、删除,顶层放入的内容也会持久保存(filebrowser/files 根目录是持久卷)。而应用真正依赖的内部目录(AI 模型、搜索索引、密码保险库等)被刻意排除在绑定之外——容器里根本不存在这些路径,所以无法浏览、下载或删除,这就是 NOMAD 的可见性护栏。

关于删除的提醒:这里删掉就是真的删掉,没有回收站。内容大多可重新下载(地图、Wikipedia 库),但你自己加入的书或视频一旦删除即不复存在。请像在自己电脑上一样谨慎。

离线:完全离线,联网与否行为完全一致。

Calibre-Web:电子书阅读与书库管理

浏览器内的电子书阅读器与书库管理:在线阅读、按作者/系列/标签组织、推送到 Kindle 等电纸书。它与 NOMAD 的 books 目录配对,整座书库就在设备上,设备走到哪书库跟到哪。

首次打开(一次性流程):Calibre-Web 需要一个书库路径,NOMAD 在安装时已为你准备好一个空书库(见 install/calibre-empty-library/ 资产与 docker_service.ts 中的 _runPreinstallActions__CalibreWeb),不会卡在 setup 错误上:

  1. 打开 Calibre-Web,落在 Database Configuration 屏;
  2. Location of Calibre Database 输入 /books 并点 Save(书库绑定为 storage/books:/books,宿主端口 8420);看到 "Database Settings updated",空书库即打开;
  3. 完成。书库随时可以填充。

若任何环节要求登录,默认凭据为 admin / admin123进入后请修改(点右上角 admin → Edit)。

加书:网页上传默认关闭。打开方式:Admin(右上角)→ 编辑基础配置允许上传,之后会出现 Upload 按钮。另一条路:用 File Browser 把电子书直接放进 books 目录,再用 Calibre-Web 的 "scan" 收录。

数据:书库在 books 目录(与 File Browser 中看到的同一个)。备份这一个目录即备份整个书库。

离线:阅读与管理完全离线。唯一联网功能是 "fetch metadata"(拉取封面与简介),离线时该项无作用,但不影响阅读和整理已有书。

IT Tools:100+ 个开发者小工具

100 多个平时要满网去找的小工具合集:哈希生成、Base64/URL 编解码、JSON/SQL 格式化、UUID 生成、二维码制作、颜色转换等。全部运行在 NOMAD 本地,无网络也能用。

首次打开:直接进工具页,无登录、无账号、无配置,侧边栏选工具即用。

数据:无状态——会话之间不在 NOMAD 上存任何文件,无目录、无凭据,是 Supply Depot 中最简单的应用。

离线:所有工具都在浏览器里对你 NOMAD 上的这份副本运行,没有任何联网请求。

Excalidraw:离线白板,但画稿在你的浏览器里

手绘风格虚拟白板:方框、箭头、自由笔触、文本与图片,几十秒画出流程图或网络拓扑图。

首次打开:直接是空白画布,无登录。欢迎提示会告诉你"作品保存在你的浏览器里"——这正是 NOMAD 上 Excalidraw 唯一需要理解的一点。

画稿存在哪(重要):这个版本的 Excalidraw 在 NOMAD 上没有任何存储,画稿保存在你正在用的浏览器(该设备)内。由此推出三条结论:

  • 不跨设备:笔记本上画的,手机打开看不到,每个浏览器各自存一份;
  • 清浏览器数据或用隐私窗口,画稿即丢失,NOMAD 上没有备份可兜底;
  • 所以请把作品存成文件:用左上角菜单 Save to... 存成 .excalidraw 文件并放到安全位置(例如经 File Browser 存入 media 或文档目录),以后用 Open 载入即可。这是长期保存或跨设备迁移的唯一方式。

离线:白板本体离线可用(画、改、存文件都不需要网络),三点须知:

  • 手绘字体来自互联网:离线时取不到,回退为普通字体,图看起来"没那么潦草",画稿本身完全不受影响;
  • 在线时会上报匿名使用统计:应用方内置了基础页面访问统计(Simple Analytics),只记录"应用被打开过",看不到你的画稿;离线时该通道不可达。NOMAD 整体以"不与外界通信"为设计准则,此处特意告知;
  • 若干云端按钮在 NOMAD 上无效:"Live collaboration"、"Sign up"、"Excalidraw+" 指向开发者的付费在线服务;形状 Library 浏览器同样拉取在线图库。均可忽略。

Homebox:家庭资产清单

家庭物品盘点系统:按位置和标签分类,附照片、序列号、购入价、保修日期与票据,搜索即得。做保险记录、保修跟踪、"我有什么东西在哪"的可靠工具。

首次打开:落在登录屏,但此时你还没有账号,先注册——点 Register,填写:

  • 邮箱(即登录用户名);
  • 姓名
  • 密码(Homebox 有强度计,强度不够不让注册,请用真实密码)。

注册即用该邮箱和密码登录。第一个创建的账号即此 Homebox 的 owner,没有默认凭据需要改——账号从创建起就是你的。源码层面,docker_service.ts 在创建 Homebox 容器时会注入一个持久化的 HBOX_AUTH_API_KEY_PEPPER(一次性生成、跨更新复用,因为 Homebox ≥ 0.26 缺少 pepper 会直接启动 panic)。

多人共享 NOMAD? 默认任何能访问它的人都能注册新账号。若你希望注册自己账号后关闭注册:

  1. 先创建 owner 账号;
  2. 在 Supply Depot 找到 Homebox,点 Manage › Edit
  3. Environment Variables 中加入 HBOX_OPTIONS_ALLOW_REGISTRATION=false
  4. 保存。NOMAD 重建应用后 Register 不再能创建新账号,已有登录不受影响。

数据:Homebox 全部数据在 storage/homebox 一个目录(一个数据库文件,加上你附的照片与票据)。备份这一个目录即备份整个清单。

离线:完全离线,本地存储,无使用统计,联网与否行为一致;页头的项目链接(GitHub、Discord、官网)离线时点不开,但与你的清单无关。

Vaultwarden:私有的 Bitwarden 兼容密码管理器

跑在自己 NOMAD 上的私有密码管理器。兼容 Bitwarden 生态:加密保险库存放登录凭据、安全笔记与卡信息,官方 Bitwarden 浏览器扩展与手机 App 全部指向你的 NOMAD 而非别人的云。

首次打开会看到安全警告,属预期行为:密码管理器只走 HTTPS,NOMAD 因此为 Vaultwarden 自动配置了 HTTPS(service_seeder.tsROCKET_TLS 指向安装时由 _runPreinstallActions__Vaultwarden 生成的自签名证书,并启用 WEBSOCKET_ENABLED 供多设备同步)。NOMAD 是私人设备而非公网网站,自签名证书会让浏览器首次警告。一次处理即可:

  1. 点卡片上的 Open,浏览器显示类似 "Your connection is not private";
  2. AdvancedProceed to (你的 NOMAD 地址)(部分浏览器按钮文字是 "Continue" / "Accept the Risk");
  3. 进入保险库。该设备之后不再提示。

创建保险库:登录页点 Create account,设置邮箱主密码

主密码不可找回。Vaultwarden 没有"忘记密码"邮件、没有重置机制,因为它设计上根本看不到你的密码。忘了主密码,保险库及其内容即永久锁定。请选强密码并避免遗失,必要时在物理安全的地方记一份。

多人共享 NOMAD? 默认任何能访问 Vaultwarden 的人都能建自己的账号(账号之间相互独立且各自加密)。要关闭新注册:

  1. 先建自己的账号;
  2. 找到 Vaultwarden 卡片,点 Manage › Edit
  3. Environment Variables 中加入 SIGNUPS_ALLOWED=false
  4. 保存。NOMAD 重建应用,新注册关闭,已有账号照常。

手机与浏览器接入:安装官方 Bitwarden App 或浏览器扩展,登录屏选 self-hosted(或 "Server URL")填入 https://(你的NOMAD地址):8480。注意部分手机 App 对自签名证书更严格,可能拒绝连接;从 NOMAD 打开的 Web 保险库始终可用。

数据:加密保险库在 storage/vaultwarden。备份该目录即备份一切。内置管理面板默认关闭(除非设置 admin token,大多数人不需要)。种子文件标注了最低资源建议:256 MB 内存 / 512 MB 磁盘。

离线:完全离线、完全私有,不向任何人发请求。Bitwarden 客户端本地也保存保险库副本,NOMAD 或手机离线时照样能读密码。

Jellyfin:你自己的媒体服务器

私有媒体服务器:指向 NOMAD 上存放电影、剧集、音乐、照片的目录,Jellyfin 以封面与详情组织一切,并向浏览器、手机、平板、智能电视及 Jellyfin 官方 App 串流。它是"你已经拥有"的媒体在大流媒体平台之外的私有离线替代。

首次打开是设置向导,几屏即过:

  1. Language — 选界面语言,Next;

  2. Create your admin account — 输入用户名与密码。这是控制整台服务器的管理员账号,请用真实密码并记牢(之后可在 Dashboard 加用户,包括儿童受限账号);

  3. Add your media — 点 Add Media Library 选内容类型。NOMAD 已在 media 目录内为每种类型建好对应子目录,把每个书库指向对应子目录即可:

    • Movies 书库 → Movies 目录;
    • Shows 书库 → TV Shows 目录;
    • Music 书库 → Music 目录;
    • Photos 书库 → Photos 目录。

    每个书库指向自己的子目录,不要指向整个 media 目录:若一个书库指向 media(内含其余所有子目录)而另一个指向其中的 Music,Jellyfin 会认为同一批文件被两个书库重复声明("duplicate path"),音乐就会静默消失。一步可跳过,之后在 Dashboard 添加。

  4. Metadata / remote access / finish — 剩余屏幕接受默认值并完成,然后登录。

入库工作流:把文件放进 media 目录的对应子目录(与 File Browser 中同一个 media):电影进 Movies、剧集进 TV Shows、音乐进 Music(每个专辑一个文件夹效果最佳)、照片进 Photos。最省事的流程是:File Browser 上传(或任意方式放入)→ Jellyfin 里点 Scan Library。Jellyfin 读取子文件夹结构,整个专辑文件夹放进 Music 即成为一张专辑;文件命名清晰(如 Movie Name (2020).mp4)最利于匹配封面与详情。

数据:媒体在 storage/media;Jellyfin 自身的设置、用户账号、下载的封面在 storage/jellyfin。媒体文件只读不改。

离线:串流自有媒体完全离线——这就是它的意义。唯一联网部分是 metadata 抓取(封面、简介、演职员):离线时条目以裸名无封面显示,但播放完全正常;重新联网后一次扫描即补齐。

播放性能提示:多数文件播放毫无压力;若视频格式不被设备支持,Jellyfin 需实时转码(transcoding),CPU 负担重。NOMAD 默认不为其配置显卡加速,分辨率很大的视频在配置一般的 NOMAD 上可能卡顿。使用广泛支持的格式(如 MP4/H.264)可避免转码、播放最顺。种子文件同样标注了 2048 MB 内存 / 20480 MB 磁盘的最低建议。

Meshtastic Web:离线网格电台的网页控制台

浏览器端控制台面向 Meshtastic 设备。Meshtastic 是离网、远距离无线电通信:小型便宜的 LoRa 电台自组 mesh 网络,无蜂窝、无互联网、无月费,传输数英里的文本消息与 GPS 位置。本应用让你在完整屏幕上配置电台、收发信息。

前提:你得有一台 Meshtastic 电台。 本应用只是控制台——没有电台时打开就是 "No devices connected" 屏,真正的通信发生在物理设备及其组网的电台之间。

首次打开:无登录直接进入。点 New Connection 可见三种连接方式:

  • HTTP — 按 IP 连接已加入 Wi-Fi 的电台。在 NOMAD 上用这一种
  • Bluetooth — 蓝牙配对附近电台;
  • Serial — USB 串口连接。

NOMAD 特有的限制(Bluetooth/Serial 需要 HTTPS):浏览器只允许在 HTTPS 页面使用 Bluetooth/USB API。NOMAD 以纯 HTTP 提供 Meshtastic Web(8450 端口),因此 Bluetooth 与 Serial 会被浏览器直接拦截;能用的就是 HTTP:让电台加入与 NOMAD 相同的 Wi-Fi(Meshtastic 电台支持加入 Wi-Fi),然后按 IP 连接。确实需要 USB/蓝牙配对的场景,请改用官方 Meshtastic 手机 App 或官网工具。

数据:NOMAD 上无目录需要配置或管理——电台设置存在电台本身,本应用偏好存在你的浏览器。

离线:完全离线,这正是 Meshtastic 的全部意义。应用由 NOMAD 提供,与电台的通信走局域网或无线电,永远不经过互联网。页脚链接(Vercel、法务)是唯一在线元素,与使用无关。

Education Platform (Kolibri) Gen 2:完整离线学习平台

Learning Equality 出品的完整离线学习平台:视频课程、练习、阅读材料组织成结构化频道(channels),再组织为班级与课程,跟踪学习进度,全程在 NOMAD 上运行、无需互联网。面向学校与低连接/无连接地区的学习者。

首次打开是快速向导:选择机构类型并创建 admin 账号(管理整台设备的超级用户,请用真实密码并记牢)。进入后以频道形式导入学习内容。

导入内容:Kolibri 内容以频道交付。打开 Device → Channels → Import,可从 Kolibri Studio(在线)拉取,也可从本地磁盘或另一台 Kolibri 设备导入已有内容文件。可选内容很多且体积大,只导入需要的频道。

从 Gen 1 迁移(重要):早期 NOMAD 版本附带一个相当旧的 Kolibri(treehouses/kolibri:0.12.8 镜像)。Gen 2 是更新的官方上游 Kolibri(当前目录镜像为 learningequality/kolibri:0.19.4,宿主端口 8310),全新安装——旧频道与学习者数据不会自动迁移,因为两个版本的数据存储差异大到无法安全迁移。若你在用旧版并希望把频道导入新版:

  1. 从目录安装 "Education Platform (Gen 2)"(它与旧版不同端口并行运行,设置期间互不干扰);
  2. 启动新版、走完向导,然后从侧边栏进入 Device > Channels > Import,选择 "Local network or internet",再 "Add new device";在弹出对话框中输入旧 Education Platform 的 IP 加端口(默认 8300,例如 http://192.168.1.36:8300),任意命名,点 "Add" 后 "Continue";
  3. 现在可以逐个选择旧版频道,或选 "Select entire channels instead" 一次全导。点 "Import" 开始传输;
  4. 确认新安装可用、内容已复制后,从旧应用卡片卸载旧 Education Platform(卡片带 legacy 标记)。建议卸载时同时删除旧镜像与数据卷以腾空间、避免混淆;想暂时留着也无妨。

数据:导入的频道、班级与学习者进度都在 storage/kolibri-gen2。备份该目录即备份整个 Kolibri。

离线:内容导入后完全离线——这正是 Kolibri 的用武之地。唯一需要联网的步骤是从 Kolibri Studio 导入频道;此后的课程浏览、练习、进度跟踪全部在 NOMAD 上。

MeshCore Web:另一套 LoRa mesh 客户端

MeshCore 电台的浏览器客户端。MeshCore 是 Meshtastic 的"表亲"——同样是小型电台组网、无蜂窝、无互联网、无月费地传递文本与位置。本应用用于在完整屏幕上配置 MeshCore 电台并收发信息。如果你没有 MeshCore 设备,上文 Meshtastic 客户端是更常见的起点;这里服务于 MeshCore 用户。

前提:同样,你得一有 MeshCore 电台;没有电台时本应用没有可对话的对象。

首次打开会看到安全警告,属预期:MeshCore 通过 USB 或 Bluetooth 连电台,而浏览器只在 HTTPS 页面开放 Web Bluetooth / Web Serial。因此 NOMAD 将该应用以 HTTPS 提供(service_seeder.ts 中绑定 storage/meshcore-web/nginx-ssl.conf 与自签名证书到容器、发布 443→8500,ui_location 记为 https:8500,Open 按钮据此生成 https 链接)。自签名证书首次会触发浏览器警告,处理一次即可:

  1. 点卡片 Open,浏览器显示 "Your connection is not private" 之类提示;
  2. AdvancedProceed to (你的 NOMAD 地址)(部分浏览器为 "Continue" / "Accept the Risk");
  3. 进入 MeshCore Web,该设备之后不再提示。

连接电台:请使用 Chrome 或 Edge,二者对浏览器 USB/Bluetooth 支持最好。把电台插到你正在浏览的那台电脑(USB)或放在蓝牙范围内,再在应用内连接。注意:电台连的是你使用的电脑,不是 NOMAD 本身,所以务必从插着电台(或在蓝牙范围内)的设备操作。部分手机对自签名证书更严格可能拒绝连接;桌面版 Chrome/Edge 最可靠。

数据:NOMAD 上无目录需要管理——电台设置存在电台上,应用偏好在浏览器里。

离线:完全离线,这正是 MeshCore 的全部意义。应用由 NOMAD 提供,与电台经 USB/Bluetooth 直连,永远不经过互联网。

共同模式:凭据、数据与离线的三条底线

把 11 个应用放在一起看,NOMAD 对 Supply Depot 的处理遵循三条一致的设计底线,可作为你自己运维时的判断基准:

  1. 默认凭据要么没有、要么明确且要改:File Browser(admin/nomad)与 Calibre-Web(admin/admin123)保留默认登录并要求立即修改;Stirling PDF 默认去掉登录墙并给出从 NOMAD 侧恢复的标准步骤;Homebox 与 Vaultwarden 则没有默认账号,第一账号即 owner,并分别提供 HBOX_OPTIONS_ALLOW_REGISTRATION=falseSIGNUPS_ALLOWED=false 两条关闭注册的开关;
  2. 数据各归其位,一个应用一个目录:每个应用的数据目录都位于 NOMAD 存储根(默认 /opt/project-nomad/storage)下的专属子目录,备份该目录即备份该应用;File Browser 的可见范围由卷绑定选择而非应用内规则实现,敏感目录根本不进容器;
  3. 离线优先,联网功能显式标注:每个应用小节都以 "Works offline" 收尾,逐一列出离线时失效的联网功能(metadata 抓取、OCR 加语言、Excalidraw 字体与匿名统计、频道导入等),离线时核心能力全部保留。

配合 Manage 菜单的版本展示、自定义 Open 链接、两级开关的自动更新(仅 minor/patch 自动、major 永远手动),以及自定义应用那套"硬拦截 + 可覆盖警告"的绑定与镜像护栏,Supply Depot 构成了 NOMAD 在离线前提下"装得进、管得住、找得到数据"的完整应用层。若你只记住一件事:每个应用的数据都在 storage/ 下的专属目录里,备份它们,就备份了你的 NOMAD。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.76 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
858
1.35 K
docsdocs
暂无描述
Markdown
899
5.82 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
923
1.85 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.83 K
1.02 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
532
596
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.03 K
524
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.37 K
1.46 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
393