前言

近几年,音乐版权越来越分散,想要听到自己想听的歌需要订阅好几家流媒体。而且国内的主流音乐流媒体也变着花样的增加各种与音乐毫无相关的功能,或者是用算法强制拉伸音频来增添更高价格的订阅,没有一家在真正的改善听歌用户的体验。

虽然听歌群众能通过订阅国外的音乐流媒体来适当的提高体验,但也会变量的增加成本。比如注册外区账号需要的科学成本,以及相对更高的单人订阅价格。虽然可以开通家庭套餐来达到比国内更低的价格,但无论是作为用户寻找车主,或者作为车主寻找用户,都有着潜在的风险。

引入

题目提到了自建俩字,已表明这种途径也存在一定的成本。不过这俩字也表明这个全权在你手上,完全由你自己来定义你的音乐库。而且开了公网的话,也能做到随时随地有网就能听。

Github上有很多类似的开源项目,之所以选择Navidrome,主要有以下几个原因:

  • 资源占用非常低。就算在非常老旧的设备上也能很好的运行
  • 能收纳非常庞大的音乐库存。官方说法是90w首音乐也不在话下。我目前放了约1.2w首,体验很好
  • 兼容Subsonic API。所以支持Subsonic API的客户端都能读取你的库存进行播放,详情
  • 支持读取多碟CD的专辑/精选/集锦等,不会分割成多张
  • 支持多用户。方便你另外开号分享给你的朋友
  • 自动监视设置好的目录,即时更新
  • 支持即时转码。如果你的库里存的是无损的音乐,在网络不好的条件下可以设置服务端即时转码有损来播放,支持opus
  • 支持m3u播放列表,本地写好的可以直接传上去识别
  • 智能创建播放列表。不过需要自己写json来指定范围
  • 持续修复bug,增添对音乐有用的功能



准备

  1. 个人的音乐收藏库
  2. 库里的文件都有着正确的metadata
  3. 如果文件的metadata是混乱的,可以使用mp3tag, musictag一类的工具进行修正
  4. last.fm或者spotify只能在已有的信息里辅助获取图片或者相关信息,主要还是你自己修好源文件本身的tag

我的情况

因为有着随时随地点开听的需求,而我家里没有类似NAS的24小时开机的设备,所以我选择把服务端建在白嫖的甲骨文上。如果你想在其他平台部署,可以参考官网,方法大同小异。

又因为甲骨文的存储空间有限,不足以存放那么多音乐,所以我的处理方式是把音乐文件存放到google drvie,然后使用rclone来fuse到VPS里。

部署

最方便的管理方式是使用docker-compose来安装,所以新建一个目录,CD进去vim docker-compose.yml,填写内容如下:

version: "3"
services:
  navidrome:
    image: deluan/navidrome:latest
    user: 1000:1000 # should be owner of volumes
    ports:
      - "4533:4533"
      #前面的4533可以改成你想用的端口
    restart: unless-stopped
    environment:
      # 这里可以填写一些环境参数,比如:
      ND_SCANSCHEDULE: 1h
      ND_LOGLEVEL: info  
      ND_SESSIONTIMEOUT: 24h
      ND_BASEURL: ""
      ND_LASTFM_APIKEY:  # last.fm的apikey
      ND_LASTFM_SECRET:   # last.fm的SECRET
      ND_SPOTIFY_ID:   # spotify的ID
      ND_SPOTIFY_SECRET:   # spotify的SECRET
      ND_LASTFM_LANGUAGE: zh  # 设定last.fm语言为中文
      # 以上五条填写了的话就可以使用对应的数据来刮削你的音乐库
    volumes:
      - "/path/to/data:/data"
      - "/path/to/your/music/folder:/music:ro"
      #前面填写宿主机的本地路径,挂载容器内的相应目录过来,第二个就是音乐文件读取目录

具体可设置的环境参数可去官网查询。同时不要忘记去面板/防火墙开放对应端口。

接下来运行 docker-compose up -d 即可。

启用

浏览器打开 http://ip:port, 就可以看到创建管理员用户的页面

创建并登录以后,就可以看到它开始扫描你前面指定的目录

如果你的文件有着正确完整的metadata,那么点开以后会有上面截图那种很舒服的海报墙和曲目列表



反代

如果你vps里装了宝塔,1Panel一类的面板,直接设置就可以;如果没装面板又不会手搓nginx,可以docker跑一个NPM进行可视化的快速反代。

Enjoy

As title