存储节点是 UniRhy 能够读写的一个具体存储位置。音频文件、封面与转码产物均存放于某个节点上;元数据解析与转码任务也以节点为单位发起。节点在「设置 → 存储节点」中挂载,数量不限,多个节点可被并行处理。
只读与非只读
每个节点在挂载时可标记为「只读」。
- 只读节点:仅参与扫描与读取。UniRhy 不会向只读节点写入任何文件。适用于既有的音乐收藏目录、NAS 共享目录,或由第三方维护的存储桶。
- 非只读节点:可读可写。除参与扫描外,还可承接运行期写入的数据,例如转码产物与提取出的封面。
推荐配置至少一个只读节点存放原始音乐库,并另设一个非只读节点承接系统写入。
系统存储节点
UniRhy 在所有已挂载节点中指定一个作为系统存储节点,作为系统自身写入数据时的默认落点。首次启动向导中填写的路径会被注册为初始的系统存储节点,参见 首次启动。
系统存储节点受以下约束:
- 同一时刻有且仅有一个;
- 不能为只读节点。
管理员可在「设置 → 存储节点」中切换至任意其他非只读节点。
任务与节点的关系
内置任务在提交时均需指定作用的节点,规则如下。
元数据解析
提交时选择一个被扫描的节点(系统存储节点除外),任务遍历该节点上的音频文件并解析内嵌元数据。
元数据解析不提供目标节点选项,也不会移动或复制音频文件。任务唯一的写入产物是从音频中提取的内嵌封面,其落点规则固定:
- 被扫描节点为非只读节点:封面写回该节点;
- 被扫描节点为只读节点:封面写入系统存储节点。
转码
提交时需分别指定源节点与目标节点:
- 源节点:待转码音频所在的节点(系统存储节点除外);
- 目标节点:转码产物的写入位置,可为任意非只读节点,包括系统存储节点。
转码完成后,产物在目标节点落盘,并注册为对应曲目的一份新音频文件。
两类存储提供方
存储节点在底层由存储提供方实现,当前提供两类,差异主要体现在数据物理存储方式、以及 server 如何访问。
文件系统存储提供方
指向 server 进程能直接访问的一个绝对路径。
| 项目 | 说明 |
|---|---|
| 关键字段 | 根路径 |
| 前置条件 | server 进程对该路径有相应的读写权限 |
| Docker | 必须填容器内的挂载路径,非挂载路径会随容器销毁而丢失 |
| 适用场景 | 单节点部署、本地磁盘、NAS 挂载盘、局域网内的共享目录 |
OSS 存储提供方
指向一个 S3 兼容的对象存储桶。阿里云 OSS、AWS S3、Cloudflare R2、MinIO、自建 S3 网关等均可。
| 项目 | 说明 |
|---|---|
| 关键字段 | Endpoint、Bucket、Access Key、Secret Key、可选的路径前缀 |
| 前置条件 | 网络可达;凭据具备对目标 Bucket 的相应读写权限 |
| 适用场景 | 云端归档、异地灾备、多实例共享同一份音乐库 |
对播放链路的影响
两种存储提供方对播放器呈现一致的接口——客户端从 API 获取一段 URL 并交给音频元素播放。差异在于 URL 的指向:
- 文件系统节点:URL 指向 server 自身的媒体接口,音频流由 server 从磁盘读出后转发给客户端;
- OSS 节点:server 返回一段短期有效的预签名 URL,客户端直接向对象存储拉取,播放流量不经过 server。
因此,OSS 节点在多用户或跨地域场景下可显著降低 server 的带宽压力;预签名的有效期同时限制了 URL 泄露后的滥用窗口。