banner
约 2,400 字
8 分钟

飞牛NAS部署docker专属私人音乐库,安装插件拓展更多功能

-
-
无标签

摘要

Songloft 是一款专注于管理本地合法音乐的自托管工具,其核心优势在于开放的插件生态,能灵活应对音源变化。文章详细介绍了在飞牛 NAS 上通过 Docker Compose 部署 Songloft 的方法,强调了数据挂载的重要性。文中推荐了智能音箱联动、标签刮削及 Subsonic 协议等实用插件。总体而言,Songloft 功能完整但有一定折腾门槛,适合追求深度定制的用户,建议先试用官方音乐再决定是否迁移。

前言

Songloft 是一款面向个人用户的自托管音乐工具,核心定位是帮你管理自己合法拥有的音乐文件,而不是去"破解"或聚合盗版资源。它支持本地音乐管理跨平台客户端网络歌曲与电台歌单批量转存到本地等功能,并依托一套 JS 插件体系自由扩展音源、元数据刮削、设备控制等能力。

可能有人会问:这和之前介绍过的 MiMusic 是什么关系?其实 Songloft 就是 MiMusic 的"改名续作"。作者因为各种原因把项目改名为 Songloft,但核心功能不变,并且开放了插件生态,让第三方开发者可以更方便地贡献能力。对老用户来说,迁移成本很低,功能上也没有缩水,反而未来可扩展性更强。作者主页:https://songloft.hanxi.cc

为什么"插件体系"这件事值得单独说

原话是"开放了插件生态",听起来像个普通的功能更新,但它其实决定了一个自建音乐项目能活多久

先看自建音乐软件通常要干的三件事:

要干的事

具体是什么

变化快慢

管本地曲库

扫描、刮削、分类、播放

很稳定

接音源 / 元数据源

拉元数据、找在线资源

变化极快(接口随时关停)

控制播放设备

音箱联动、投屏、协议对接

中等

问题就出在第二行。音源和元数据接口是最不稳定的一环——它们往往依赖第三方服务,接口改了、关了、限流了,整个软件的核心功能就瘸了。如果这些逻辑写死在主程序里,那就只能等作者发新版本;作者一忙,项目就"看起来没人维护"了。

插件化的意义在于把"会变的部分"拆出去独立演进

  • 接口挂了 → 换一个插件,主程序不用动

  • 有人想加个新音箱品牌 → 自己写个插件,不用等作者

  • 版权上有顾虑 → 主程序只做"本地曲库管理"这件干净的事,具体音源交给插件,责任边界清楚

所以官方说的"核心定位是管理自己合法拥有的音乐文件",配合插件体系,是一套很清醒的工程选择主程序保守、生态开放。这也是我看好这类项目的原因——能在接口不断变化的现实里活下来的,往往不是功能最多的那个,而是架构上最"经得起改"的那个

部署

这次我通过 docker compose 的方式把 Songloft 部署到了飞牛 NAS 上,步骤非常简单。

YAML
version: '3.8'

services:
  songloft:
    image: songloft/songloft:latest
    container_name: songloft
    restart: always
    ports:
      - "58091:58091"
    volumes:
      - /vol3/1000/Music:/app/music  #修改为本地的音乐目录
      - /vol3/1000/docker/Songloft/data:/app/data   #修改本地配置文件目录
    environment:
      - ADMIN_USERNAME=admin
      - ADMIN_PASSWORD=123456  #修改为自己的密码
      - LISTEN_PORT=58091

cf5f689b0385e20c.png

这里有几个部署要点需要特别提醒:

  1. 音乐目录挂载/vol3/1000/Music 要改成你 NAS 上真实存放音乐文件的目录。建议把音乐统一放在一个独立目录里,方便日后管理,也方便后续的"本地扫描"。

  2. 数据目录独立/app/data 存的是配置、歌单、刮削缓存等数据,务必挂载到持久化目录,否则容器重建后所有设置都会丢失。

  3. 端口映射:默认 58091 是官方端口,如果你的 NAS 上该端口已被占用,记得改成别的并同步修改 LISTEN_PORT 环境变量,两者必须一致。

  4. 默认密码必改ADMIN_PASSWORD=123456 只是示例,上线前务必改成强密码,因为服务如果做了端口映射暴露到公网,弱密码等于把音乐库敞开给别人。

第 2 点值得展开讲,因为它是 Docker 新手最容易吃亏的地方。

容器在直觉上像一台"电脑",很多人以为装进去的东西会一直在。但服务器上容器的真实语义是:镜像只读,容器可随时删除重建。你更新镜像、改了配置文件、甚至只是手滑删了容器,容器内部的文件就一起没了

所以判断一个 Docker 应用"会不会丢数据",就看它有没有把关键目录挂载出来(volumes)。这份 compose 里挂了两处,含义不同:

挂载

存什么

丢了会怎样

/app/music

你的音乐文件

歌全没了(这是你的原始数据,必须挂)

/app/data

配置、歌单、刮削缓存

设置和歌单全丢,要重新配一遍

判断标准很简单:凡是"我辛苦攒的东西",都要确保它在挂载目录里,而不是容器内部。

使用

  1. 浏览器打开http://NAS的IP:58091,用户名密码填写之前设置的。

373fec21fa7c1636.png
  1. SongLoft 的主界面如下图所示,整体布局清爽,左侧是媒体库和设置入口。

67a7eada5c3529a9.png
  1. 进入设置页面点击扫描本地文件,将 NAS 本地的音乐添加进来。扫描是全量扫描,会把挂载目录里所有支持的音频文件索引进媒体库,之后按专辑、歌手、流派自动归类。

e6459213f6c886c2.png
  1. 在扩展项目里点击插件商店,可以安装官方维护的插件,装完即可在首页启用。

13b8c46a965bcd1e.png
  1. 如果你会写 JS 或拿到第三方插件包,也可以手动上传自己的插件,上传后在插件列表里开启需要的功能即可。

24f9e005547e49f5.png

⚠️ 插件是"能执行代码的程序",不是"配置文件"——尤其是手动上传的第三方插件,它运行在你的 NAS 上,理论上能访问容器内的一切。所以:插件商店里的官方插件可以放心装;来路不明的第三方插件包,装之前最好看一眼代码(大多就几百行 JS,重点看它有没有把数据往外发、有没有执行可疑命令)。这个习惯不只适用于音乐插件,对所有的自托管插件生态都成立。

  1. 返回首页就可以看到并正常使用已启用的插件了。

10a731d00d004b3b.png

常用插件

  1. 智能音箱(米家)联动:在米家 APP 里扫描即可发现并控制自己的小米音箱,把 Songloft 作为播源,实现"NAS 私人曲库 + 全屋音箱播放"。

7a87a1f981019cb9.png

服务器配置这里要重新填写并保存一下,确认地址和端口无误。

f8e54959d3bb7c2e.png

配置完成后就可以正常播放了。

f5d66b88e641703e.png

这里填的地址要用"音箱能访问到的地址"。如果你的音箱和 NAS 不在同一个网段、或者你在配置时习惯性填了 localhost,会发现"能连上但播不出声"。正确做法是填 NAS 在内网的实际 IP + 端口(比如 http://192.168.1.x:58091)。这是个很常见的小坑,但它消耗的时间往往比部署本身还多。

  1. 标签刮削:在歌单里全选歌曲,插件会自动联网补全专辑封面、艺人、曲目信息等元数据,让原本文件名杂乱的本地音乐库变得整洁美观。

b49fd41f5610d878.png
  1. Subsonic 协议支持:这个插件让 Songloft 兼容 Subsonic API,可以把其它支持 Subsonic 协议的外部音乐服务器(如 Navidrome、Airsonic)无缝接入到 Songloft 播放器里统一听。这样即使你之前用别的音乐服务,也能平滑迁移过来,客户端选择也更自由。

21588f3af6d949b8.png

Subsonic 协议的支持,其实是三个插件里"含金量"最高的一个,值得单独说清楚。

在自建音乐这个圈子里,Subsonic API 事实上是一个通用语言。Navidrome、Airsonic、gonic 等一批服务端都实现了它,于是产生了一个很实用的局面:大量手机端/桌面端播放器只要支持 Subsonic,就同时支持所有这些服务端

这意味着两件事:

  • 你不用被单一客户端绑死——服务端是 Songloft 还是 Navidrome,客户端都能用同一个 App 连

  • 迁移成本极低——换服务端只改一下连接地址,客户端的歌单和习惯都不用重建

所以选自建音乐方案时,"是否支持 Subsonic"是我会优先看的指标,它比"自带客户端好不好用"更影响你未来几年的使用体验。

结尾

手机客户端大家找自己设备的版本安装即可,和 Web 端体验基本相同,支持后台播放、歌单同步。

整体使用下来,Songloft 和 MiMusic 没有太大区别,属于"换名不换心"。作者已经完全剥离了原先的一些依赖,独立成项目。它现在更适合把本地正版音乐管好、通过插件接各种合法音源和设备的玩法。几个老问题依然存在,比如对 FLAC 这类无损格式的支持还不是特别完善、某些操作偶尔会卡顿——但这些都靠作者持续迭代和插件生态逐步完善,期待未来更好用。

它和飞牛官方音乐、和其他方案怎么选

现在 NAS 听歌的选择其实不少,按"省事程度"排下来是这样:

方案

上手成本

功能完整度

适合谁

飞牛官方音乐(内测)

最低,装完勾权限就能用

基础(无声歌词管理、暂无手机端)

想省事、曲库不大

Songloft(本文)

中等,需要写一份 compose

完整,靠插件扩展

想要完整功能、愿意折腾一次

独立音乐服务器方案

中等

侧重多端与音箱联动

重视全屋播放体验

我的建议顺序是:先用官方音乐跑起来,确认自己真的会长期用 NAS 听歌;等到开始嫌它功能不够(尤其是想要手机端、想要音箱联动)时,再迁到 Songloft 这类自建方案。因为曲库文件在哪都一样,迁服务端只是换个入口,不会白折腾。

常见问题

Q:扫描后曲库是空的 / 少了很多歌?

先确认挂载路径对不对——这是最高频的原因:compose 里写的 /vol3/1000/Music 如果实际不存在或者写错了,容器里那就是个空目录,扫不出任何东西。排查方法是在 NAS 的终端里 ls 一下这个路径,看有没有文件。其次看音频格式是否在支持范围内。

Q:无损格式(FLAC)支持不好怎么办?

这是它的已知短板。折中做法是:核心播放库用 FLAC 保证音质,同时准备一份 mp3 版本给兼容性差的场景用。另外可以留意作者后续版本——这类问题通常会在迭代中解决。

Q:暴露到公网安全吗?

两个动作必做:改掉默认密码(compose 里的 123456 是示例值),以及不要直接把端口映射到公网——推荐用反代加一层访问控制(或者只在内网/组网环境访问)。音乐服务本身不涉及支付等高敏感数据,但一个开放的管理后台就等于 NAS 的一个入口,不该裸奔。

Q:以后想换到 Navidrome 之类的服务,歌单会丢吗?

因为曲库文件是你自己的、且大家都遵循同样的标签规范,曲库本身不受影响。歌单这类"服务端数据"通常能通过导出/导入或 Subsonic 协议的收藏同步来迁移,具体看两边支持程度。这也再次说明:真正值钱的是你本地那份整理好的曲库和标签,服务端只是"读它的工具",工具可以随时换。

END

相关文章

暂无相关文章