项目/家庭服务
家庭服务 · 运行中

音乐服务 Navidrome

自建音乐流媒体,手机/网页随时听家里的音乐库。

NavidromeDocker音乐

是什么

家里的音乐文件一直散在硬盘上,电脑上能放,手机就麻烦了。Navidrome 就是解决这件事的:一个自建的音乐流媒体服务,扫一遍音乐目录,把它变成随时可以访问的音乐库,手机、网页都能听。

为什么做

公共云音乐的问题很现实:版权换歌单、会员到期、自己收藏的文件传不上去。与其将就,不如把家里的库直接放出来。数据在自己手里,格式自己定,加歌就丢进目录,不用再折腾同步。

现状

目前状态是「运行中」,就是家里的一台常驻服务。部署上我用 Docker 跑单容器:音乐目录只读挂载,数据目录单独放,备份方便;对外走反向代理路径,定时任务写在 root crontab 里,固定的维护动作交给它。过程中花时间最多的是音乐元数据整理和反向代理路径,记在这页里,以后自己回看。

功能

  • 扫描本地音乐目录,自动整理成可浏览的音乐库
  • 内置网页播放器,浏览器打开就能听
  • 支持 Subsonic 协议,手机端用第三方客户端接入
  • Docker 单容器部署,音乐目录与数据目录分开挂载
  • 通过反向代理路径对外提供访问入口
  • 定时任务挂在 root crontab 上,日常维护有固定节奏

技术栈

DockerNavidromeNginx 反向代理crontabSubsonic API音乐元数据

使用 / 部署教程

1. 准备目录

把音乐和数据分开,音乐目录只读给容器用:

mkdir -p /srv/navidrome/data /srv/navidrome/music

2. 写 docker-compose.yml

services:
  navidrome:
    image: deluan/navidrome:latest
    container_name: navidrome
    restart: unless-stopped
    ports:
      - "4533:4533"
    environment:
      - ND_MUSICFOLDER=/music
      - ND_DATAFOLDER=/data
    volumes:
      - ./music:/music:ro
      - ./data:/data

3. 启动并初始化

docker compose up -d
docker compose logs -f navidrome

首次启动会扫描音乐库,曲库大的话等一会儿。浏览器打开 http://<内网地址>:4533,创建管理员账号,再在设置里确认音乐目录和扫描行为。

4. 反向代理

想在外面听就走反向代理,给一个独立的路径前缀(或子域名),注意 proxy_pass 末尾斜杠和 location 路径要对应,否则前端静态资源和接口路径会错位。改完用手机客户端连一次,确认接口路径也能通。

5. 客户端接入

手机端用支持 Subsonic 协议的播放器,服务器地址填反代后的地址,账号密码用刚才建的管理员账号即可。

6. 定时任务

需要定时执行的动作(例如同步、维护脚本)按现有习惯统一写进 root crontab;这份项目的 etc/root-crontab.txt 就是它的入口,改动直接在该文件里做,再同步到系统。

7. 验证

  • 网页能登录、能播放;
  • 手机客户端能拉取歌单并播放;
  • 重启容器后数据仍在(说明数据目录挂对了)。

注意

  • 音乐目录按只读挂载(:ro),避免服务误改文件;媒体文件本身仍要单独备份。
  • 4533 端口只在内网用,对外只开反向代理后的 HTTPS 入口。
  • 数据目录(数据库与配置)要纳入备份,重建容器前先留一份。