前言

随着国内版权意识的提高,现在想听一首歌曲,往往我们可能要切换3-4个APP——网易云音乐、QQ音乐、咪咕音乐……切换起来很麻烦,有的APP就算你买了VIP服务,下载的歌曲还是加密的,一旦VIP到期后某些歌你还听不了,非常蛋疼。

最近被朋友推荐入了苹果自己家的音乐APP,感觉还不错,但是搜索特定的几个歌手的歌曲时候,也发现搜索不到(没错,就是南京小李的)

正好自己目前在捣鼓PT,手握几个大型PT站,资源方面不成问题,于是乎就又想着自建一个类似云音乐的服务,这样随时随地在任何地方都能播放我想听的任何歌曲,再也不用担心歌曲被下架了。

为什么说“又”,因为之前就折腾过一个类似的服务——利用Docker自建个人音乐流服务器面板——koel 因为有小伙伴反映这个汉化做的不是很好(没有汉化),所以我也一直在寻找别的代替品,正好前俩天发现一个非常好的项目——Navidrome,使用Go语言开发,内存占用很低,界面简单,而且还兼容Subsonic API,就搞了一个玩玩。

Navidrome界面图片展示

【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听!

【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听!

【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听!

【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听!

【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听!

【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听! 【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听! 【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听!

Navidrome优缺点

先来说说优点:

  • 几乎可以播放任何音频格式
  • 多用户,每个用户都有自己的播放次数、播放列表、收藏夹等。
  • 资源使用率非常低。例如:300GB的资料库(约29000首歌曲),使用不到50MB的内存。(@小z反馈待机状态40Mb左右)
  • 界面简洁,支持中文
  • 支持Subsonic API,也就是说Subsonic能用的客户端,Navidrome都能用

iOS: play:Sub, substreamer, Amperfy, iSub
Android: DSub, Subtracks, subreamer, Ultrasonic, Audinaut
网页端: Subplayer, Airsonic Refix, Aurial, Jamstash, Subfire
桌面端: Sublime Music(Linux)和Sonixd(Windows/Linux/MacOS)
命令行: Jellycli(Windows/Linux)和STMP(Linux/MacOS)

【2022年5月15日更新】桌面版本强烈推荐:sonixd

下载地址:https://github.com/jeffvli/sonixd/releases

【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听!

界面非常简洁大气!

再来说说缺点:

  • 暂时没找到自动获取歌词的方法
  • 不支持通过界面上传/删除歌曲(作者说的是为了安全考虑,不过我们会后面会介绍如何上传/删除)

官方示例网站:

https://www.navidrome.org/demo/

https://demo.navidrome.org/app/

搭建环境

开始搭建

YouTube:https://youtu.be/7XtLD8y8EF0

哔哩哔哩:

采用docker-compose来搭建。

官方的配置有一个小问题,不能通过Web页面上传音乐,上传这个问题后面会介绍一个临时解决办法(感谢@lala)。

apt update -y  ## 升级包  mkdir -p ~/data/docker_data/navidrome   ## 创建文件夹  cd ~/data/docker_data/navidrome   ## 进入文件夹  nano docker-compose.yml   ## 创建docker-compose  

dockerhub的docker-compose配置样例(我们不用这个):

# This is just an example. Customize it to your needs.  version: "3" services:   navidrome:     image: deluan/navidrome:latest     ports:       - "4533:4533"     environment:       # Optional: put your config options customization here. Examples:       ND_SCANSCHEDULE: 1h       ND_LOGLEVEL: info         ND_BASEURL: ""     volumes:       - "./data:/data"       - "/path/to/your/music/folder:/music:ro" 

贴一个我自己实际环境里的配置给大家参考:

version: "3" services:   navidrome:     image: deluan/navidrome:latest     ports:       - "4533:4533"   # 左边可以改成自己服务器未被占用的端口     environment:       # Optional: put your config options customization here. Examples(这些都是可选的):       ND_SCANSCHEDULE: 1m       ND_LASTFM_ENABLED:       ND_LASTFM_APIKEY: eabdf1d50c0e912487521b154a8es1fda694 # 修改成自己的APIKEY       ND_LASTFM_SECRET: a67666ca4as89d7231cf9fc990ef8a2ae6d  # 修改成自己的SECRET       ND_SPOTIFY_ID: 4cd036bsqd1594bd0b41bc8f94c46846d  # 修改成自己的ID       ND_SPOTIFY_SECRET: 249ca01a48be46fcb084523a6b267661bb1  # 修改成自己的SECRET       ND_LASTFM_LANGUAGE: zh       ND_LOGLEVEL: info       ND_SESSIONTIMEOUT: 24h       ND_BASEURL: ""     volumes:       - "./data:/data"       - "/root/data/docker_data/qbittorrent/music:/music:ro"  # 冒号左边修改成自己本地的音乐文件夹路径    miniserve:     image: svenstaro/miniserve:latest     depends_on:       - navidrome     ports:       - "4534:8080"     volumes:       - "/root/data/docker_data/qbittorrent/music:/downloads"  # 冒号左边修改成自己本地的音乐文件夹路径     command: "-r -z -u -q -p 8080 -a imgugugege:szwl2080! /downloads"  # imgugugege:szwl2080! 修改成自己的账号:密码     restart: unless-stopped 

前面说了因为navidrome不支持上传功能,所以这里我们加一个miniserve,之后就可以通过miniserve来上传音乐了。

记得把password这个字段改为一个高强度的密码。当然如果你不需要的话可以把这个容器相关的配置删掉。

下面来一一解释一下里面的各项参数如何设置。

外部集成

配置 Navidrome 可以从 Last.fm 和 Spotify 获取专辑信息和图像

Last.fm

首先需要一个 Last.fm 免费帐户,其次你要能访问 Last.fm

转到 https://www.last.fm/api/account/create 并创建一个 API 帐户。只有 应用程序名称 字段是强制性的

【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听!

提交表单后,可以从 API account Created 页面获取 API KeyShared Secret

【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听!

将上面的值复制到 Docker 的环境变量

ND_LASTFM_ENABLED 设置 false 为完全禁用 Last.fm 集成
ND_LASTFM_APIKEY Last.fm 获取的 API Key
ND_LASTFM_SECRET Last.fm 获取的 Shared Secret
ND_LASTFM_LANGUAGE 用于从 Last.fm 检索的语言的两个字母代码,简体中文为 zh

Spotify

在 Spotify 中创建一个免费帐户,然后按照以下步骤操作:

单击 Spotify 的开发者仪表板中的 CREATE AN APP 按钮:https://developer.spotify.com/dashboard/applications

【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听!

填写所有字段并单击 CREATE 按钮:

【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听!

将值复制到 Docker 的环境变量

【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听!

ND_SPOTIFY_ID Spotify 客户端 ID
ND_SPOTIFY_SECRET Spotify 客户端 Secret

转码设置
之所以要转码,是因为无损的文件比较大,一般都有几百M,所以需要进行转码成,便于客户端进行播放

但 Navidrome 出于安全原因,禁用了从 Web 界面更改参数,所以需要先修改 Docker 的环境变量

ND_ENABLETRANSCODINGCONFIG 设置为 true 才能支持转码功能
ND_TRANSCODINGCACHESIZE 转码缓存的大小。设置 0 为禁用缓存,默认为 100MB

转码

默认设置中有两个转码方案,一个是转 MP3,另一个是转 OPUS

【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听!

可以根据需要修改 比特率

【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听!

然后选择需要转码的客户端

关于客户端,可以看看 Subsonic Apps 列表:http://www.subsonic.org/pages/apps.jsp

iOS: play:Sub, substreamer, Amperfy, iSub
Android: DSub, Subtracks, subreamer, Ultrasonic, Audinaut
网页端: Subplayer, Airsonic Refix, Aurial, Jamstash, Subfire
桌面端: Sublime Music(Linux)和Sonixd(Windows/Linux/MacOS)
命令行: Jellycli(Windows/Linux)和STMP(Linux/MacOS)

【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听!

以 Android 客户端 Subsonic为例子,

【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听!

修改完成

【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听!

运行

全部参数设置好之后,运行docker-compose up -d

访问IP:4533端口就可以有界面出现了,反向代理用NginxProxyManager完成,不会的可以看视频教程。

访问IP:4534端口就可以上传下载歌曲了。

【好玩的Docker项目】搭建一个完全自由的音乐播放软件————Navidrome 随时随地!想听就听!

补充:filebrowser管理歌曲文件

docker run -d --restart=always      -v /root/data/docker_data/qbittorrent/music:/srv      -p 8003:80      --name filebrowser      langren1353/filebrowser-ckplayer 

最后

目前遇到的一个痛点是,歌曲都没有歌词,我也在网上搜索了一下,有找到一个叫做“音乐标签”的软件,可以获取歌曲的歌词信息,不过要Windows系统才能使用,我在另一台服务器上安装了这个软件,但是不知道为啥上传之后歌曲名字都变成乱码了,有需要的小伙伴可以到网盘下载这个软件试试。解压密码:www.coolapk.com

燥起来吧!

参考

https://blog.csdn.net/wbsu2004/article/details/121027463

https://github.com/navidrome/navidrome

https://www.navidrome.org/

https://hub.docker.com/r/deluan/navidrome

https://lala.im/7660.html

https://youtu.be/47ZZpJebiG0

https://www.xiaoz.me/archives/16527