Docker搭建自由音乐播放软件—Navidrome
转:
温馨提示:
本文最后更新于 2022-05-15,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
前言
随着国内版权意识的提高,现在想听一首歌曲,往往我们可能要切换3-4个APP——网易云音乐、QQ音乐、咪咕音乐……切换起来很麻烦,有的APP就算你买了VIP服务,下载的歌曲还是加密的,一旦VIP到期后某些歌你还听不了,非常蛋疼。
最近被朋友推荐入了苹果自己家的音乐APP,感觉还不错,但是搜索特定的几个歌手的歌曲时候,也发现搜索不到(没错,就是南京小李的)
正好自己目前在捣鼓PT,手握几个大型PT站,资源方面不成问题,于是乎就又想着自建一个类似云音乐的服务,这样随时随地在任何地方都能播放我想听的任何歌曲,再也不用担心歌曲被下架了。
为什么说“又”,因为之前就折腾过一个类似的服务——利用Docker自建个人音乐流服务器面板——koel 因为有小伙伴反映这个汉化做的不是很好(没有汉化),所以我也一直在寻找别的代替品,正好前俩天发现一个非常好的项目——Navidrome,使用Go语言开发,内存占用很低,界面简单,而且还兼容Subsonic API,就搞了一个玩玩。
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
界面非常简洁大气!
再来说说缺点:
- 暂时没找到自动获取歌词的方法
- 不支持通过界面上传/删除歌曲(作者说的是为了安全考虑,不过我们会后面会介绍如何上传/删除)
官方示例网站:
https://www.navidrome.org/demo/
https://demo.navidrome.org/app/
搭建环境
- 服务器:腾讯云轻量应用服务器(购买链接)
- 系统:Debian 10(DD脚本 非必需DD用原来的系统也OK)
- 域名一枚,并做好解析到服务器上(域名购买、域名解析 视频教程)
- 安装好Docker、Docker-compose(相关脚本)
- 安装好Nginx Proxy Manager(相关教程)
开始搭建
YouTube:https://youtu.be/7XtLD8y8EF0
哔哩哔哩:
采用docker-compose来搭建。
官方的配置有一个小问题,不能通过Web页面上传音乐,上传这个问题后面会介绍一个临时解决办法(感谢@lala)。
1 | apt update -y ## 升级包 |
dockerhub的docker-compose配置样例(我们不用这个):
1 | # This is just an example. Customize it to your needs. |
贴一个我自己实际环境里的配置给大家参考:
1 | version: "3" |
前面说了因为navidrome不支持上传功能,所以这里我们加一个miniserve,之后就可以通过miniserve来上传音乐了。
记得把password这个字段改为一个高强度的密码。当然如果你不需要的话可以把这个容器相关的配置删掉。
下面来一一解释一下里面的各项参数如何设置。
外部集成
配置 Navidrome 可以从 Last.fm 和 Spotify 获取专辑信息和图像
Last.fm
首先需要一个Last.fm
免费帐户,其次你要能访问Last.fm
转到 https://www.last.fm/api/account/create 并创建一个 API 帐户。只有 应用程序名称 字段是强制性的
提交表单后,可以从 API account Created
页面获取 API Key
和 Shared Secret
将上面的值复制到 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
填写所有字段并单击 CREATE
按钮:
将值复制到 Docker 的环境变量
ND_SPOTIFY_ID | Spotify 客户端 ID |
---|---|
ND_SPOTIFY_SECRET | Spotify 客户端 Secret |
转码设置
之所以要转码,是因为无损的文件比较大,一般都有几百M,所以需要进行转码成,便于客户端进行播放
但 Navidrome 出于安全原因,禁用了从 Web 界面更改参数,所以需要先修改 Docker 的环境变量
ND_ENABLETRANSCODINGCONFIG | 设置为 true 才能支持转码功能 |
---|---|
ND_TRANSCODINGCACHESIZE | 转码缓存的大小。设置 0 为禁用缓存,默认为 100MB |
转码
默认设置中有两个转码方案,一个是转 MP3
,另一个是转 OPUS
可以根据需要修改 比特率
然后选择需要转码的客户端
关于客户端,可以看看 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)
以 Android 客户端 Subsonic为例子,
修改完成
运行
全部参数设置好之后,运行docker-compose up -d
访问IP:4533
端口就可以有界面出现了,反向代理用NginxProxyManager完成,不会的可以看视频教程。
访问IP:4534
端口就可以上传下载歌曲了。
补充:filebrowser管理歌曲文件
1 | docker run -d --restart=always \ |
最后
目前遇到的一个痛点是,歌曲都没有歌词,我也在网上搜索了一下,有找到一个叫做“音乐标签”的软件,可以获取歌曲的歌词信息,不过要Windows系统才能使用,我在另一台服务器上安装了这个软件,但是不知道为啥上传之后歌曲名字都变成乱码了,有需要的小伙伴可以到网盘下载这个软件试试。解压密码:www.coolapk.com
燥起来吧!
参考
https://blog.csdn.net/wbsu2004/article/details/121027463
https://github.com/navidrome/navidrome
https://hub.docker.com/r/deluan/navidrome
https://www.xiaoz.me/archives/16527
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com