前言
随着国内版权意识的提高,现在想听一首歌曲,往往我们可能要切换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)。
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 帐户。只有 应用程序名称 字段是强制性的
提交表单后,可以从 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管理歌曲文件
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
评论区