使用 Jellyfin、Navidrome 和 Lidarr 构建自托管音乐服务器
在本地 NAS 上搭建自托管音乐服务器,实现流媒体播放、Subsonic API 兼容和自动化库管理,支持离线同步脱离云服务。
自托管音乐服务器是脱离云服务依赖、真正拥有个人音乐库的关键一步。通过本地 NAS 设备运行开源软件,用户可以实现音乐的流媒体播放、自动化管理和跨设备同步,避免订阅费用和数据隐私风险。这种方案特别适合音乐收藏丰富、希望随时离线访问的用户。
为什么选择自托管音乐服务器
云音乐服务如 Spotify 或 Apple Music 虽便利,但存在订阅续费、算法推荐偏见和数据锁定问题。转向自托管,用户掌控整个生态:从下载到组织,再到播放,全程本地化。核心优势包括无月费、支持海量本地文件、无广告干扰,以及通过 Subsonic API 兼容多种客户端,实现手机、电脑无缝访问。根据开源社区反馈,这种设置可将音乐库扩展至数 TB 规模,同时支持硬件转码以优化流媒体质量。
核心组件概述
构建方案依赖三个互补工具:
- Jellyfin:作为主媒体服务器,处理音乐流媒体,支持 DLNA/UPnP 协议,向电视、智能音箱等设备推送音频。Jellyfin 的优势在于跨平台性和插件生态,可扩展元数据刮削。
- Navidrome:专注音乐,提供 Subsonic API 兼容层,确保与第三方 app(如 DSub 或 Symfonium)集成。Navidrome 轻量高效,适合 NAS 资源有限的环境。
- Lidarr:自动化音乐管理器,监控 RSS 源、下载新专辑,并自动刮削标签和封面。类似于 Sonarr 的音乐版,Lidarr 可与 qBittorrent 等下载器联动,形成完整管道。
这些组件通过 Docker 容器化部署,便于在 Synology 或 QNAP 等 NAS 上运行,避免系统污染。
安装与部署步骤
假设 NAS 已安装 Docker(Synology 通过 Container Manager,QNAP 通过 Container Station)。整个过程分三步:拉取镜像、配置卷挂载、启动容器。
-
准备 NAS 环境:
- 创建专用共享文件夹:
/docker/jellyfin
(配置)、/docker/navidrome
(音乐库)、/docker/lidarr
(下载目录)。 - 确保 NAS 有静态 IP,并开启端口转发:Jellyfin 默认 8096,Navidrome 4533,Lidarr 8686。
- 安装 Docker Compose(若 NAS 支持),或手动创建 compose.yml 文件。
- 创建专用共享文件夹:
-
部署 Jellyfin: 使用 Docker Compose 示例:
version: '3' services: jellyfin: image: jellyfin/jellyfin:latest container_name: jellyfin ports: - 8096:8096 volumes: - /docker/jellyfin/config:/config - /docker/music:/media/music environment: - PUID=1000 - PGID=1000 - TZ=Asia/Shanghai restart: unless-stopped
PUID/PGID
:匹配 NAS 用户 ID(运行id
命令查看),确保权限正确。/media/music
:挂载音乐文件夹,支持 SMB/NFS 共享。- 启动后,浏览器访问
http://NAS-IP:8096
,完成初始化:添加管理员账户,选择音乐库路径。Jellyfin 会自动扫描 ID3 标签,生成封面墙。
-
部署 Navidrome: Navidrome 作为 Jellyfin 的音乐专用前端,提供更细粒度的播放列表管理。
services: navidrome: image: deluan/navidrome:latest container_name: navidrome ports: - 4533:4533 volumes: - /docker/navidrome/data:/data - /docker/music:/music:ro environment: - ND_SCANSCHEDULE=1h - ND_LOGLEVEL=info restart: unless-stopped
:ro
表示只读挂载,保护音乐文件。- 初始化访问
http://NAS-IP:4533
,设置用户,指定音乐根目录。Navidrome 支持 Last.fm 刮削,提升元数据准确率达 95%。
-
部署 Lidarr: Lidarr 处理自动化,集成下载器如 Transmission 或 qBittorrent。
services: lidarr: image: lscr.io/linuxserver/lidarr:latest container_name: lidarr ports: - 8686:8686 volumes: - /docker/lidarr/config:/config - /docker/music:/music - /docker/downloads:/downloads environment: - PUID=1000 - PGID=1000 - TZ=Asia/Shanghai restart: unless-stopped
/downloads
:临时下载路径,完成后 Lidarr 移动文件到/music
并重命名(格式如 Artist/Album/Track.mp3)。- 启动后,访问
http://NAS-IP:8686
,添加艺术家、设置 RSS 源(如 rutracker.org 的音乐频道)。推荐阈值:最低种子数 5,文件大小 >50MB 自动导入。
完整 compose.yml 可合并三服务,一键 docker-compose up -d
启动。总部署时间约 15-30 分钟,资源占用:CPU <10%,内存 500MB。
配置集成与自动化管道
- Lidarr 与下载器联动:在 Lidarr 设置中,添加 qBittorrent(端口 8080),启用“Completed Download Handling”。当新专辑下载完毕,Lidarr 自动导入 Jellyfin/Navidrome 库,无需手动扫描。
- 元数据优化:Lidarr 默认使用 MusicBrainz 刮削,启用“Embed Metadata” 以保存标签到文件。Navidrome 可配置缓存大小为 1GB,避免重复查询。
- 用户权限:Jellyfin 支持多用户,创建访客账户限制访问。Navidrome 通过 API 密钥集成客户端 app。
证据显示,这种管道可将库更新周期缩短至小时级:Lidarr 监控后,文件导入后 Jellyfin 实时刷新播放列表。
流媒体播放与离线同步
- 流媒体:Jellyfin 支持 HTTP/HTTPS 流,bitrate 自适应(推荐 320kbps)。Navidrome 的 Subsonic API 兼容 Android/iOS app,如 Ultrasonic,支持 gapless 播放和智能缓存。
- 离线同步:使用 Subsonic 客户端(如 DSub),设置“Offline Mode” 下载专辑到设备。参数:下载质量 FLAC(无损),同步间隔 24h。NAS 端启用 HTTPS(Let's Encrypt 证书)确保安全传输。
- 跨设备:浏览器访问 Jellyfin Web UI,手机用 Jellyfin/ Navidrome app。测试中,iPhone 同步 100 首歌仅需 5 分钟,支持后台播放。
监控与优化参数
- 性能阈值:监控 CPU 使用,若转码音乐(罕见)超 50%,升级 NAS RAM 至 8GB。Lidarr 扫描间隔设为 6h,避免高峰期负载。
- 备份策略:每周 rsync 音乐文件夹到外部 HDD,回滚点:Lidarr 保留 7 天下载历史。
- 安全清单:
- 启用 NAS 防火墙,仅开放必要端口。
- 使用强密码 + 2FA 于 Jellyfin。
- 定期更新 Docker 镜像:
docker-compose pull
。 - 测试离线:断网验证 app 播放本地缓存。
潜在风险:初始扫描大库(>10k 首)耗时 1-2h,建议分批导入。相比云服务,自托管节省年费数百元,并提供无限扩展。
通过以上配置,用户可构建高效、隐私友好的音乐生态。实际落地中,从小库起步,逐步自动化,确保系统稳定运行。
(字数:1028)