本站展示的 音乐模块 中介绍的音乐站点均是使用 Navidrome 的开源音乐服务器方案建立的。我将其部署在了阿里云上,以便多端进行访问,从而尽情享受 听歌自由

1. Navidrome 介绍

1.1. 音乐站点效果展示

1.2. 介绍

官网简介: Navidrome 是一个自托管的开源音乐服务器和流媒体。它让您可以自由地从任何浏览器或移动设备收听您的音乐收藏。它还可以用作轻量级的 Subsonic-API 兼容服务器,可以与任何 兼容 Subsonic 的客户端一起使用。

  • 什么是流媒体?
    流媒体指的是通过 网络 传输的 媒体,是在网络中 流动 的媒体,比如视频流、音频流、文字流等。

  • 什么是视频流、音乐流?
    在网络中传输的数据都是以二进制的数据传输的,而我们认知的媒体都是连续的,于是就需要对媒体进行处理,得到可以在网络中进行传输的数据流。而对应的处理技术就称为 流媒体技术

1.3. 特点

  • 处理非常大的音乐收藏
  • 流式传输几乎任何可用的音频格式
  • 读取并使用您精心策划的所有ID3标签中的元数据
  • 多用户,每个用户都有自己的播放次数、播放列表、收藏夹等
  • 非常低的资源使用率:例如:具有 300GB(~29000 首歌曲)的库, 它使用不到 50MB 的 RAM
  • 多平台,可在 macOS、Linux 和 Windows 上运行, 还提供了 Docker 镜像
  • 自动监视您的库的更改、导入新文件和重新加载新元数据
  • 基于 Material UI 的主题化、现代和响应式 Web 界面, 用于管理用户和浏览您的图书馆
  • 与所有 Subsonic/Madsonic/Airsonic 客户端兼容, 查看经过测试的客户列表
  • 即时转码/下采样, 可以为每个用户/玩家设置, 支持 Opus 编码

1.4. 支持的平台

除了可以使用搭建的网页端 Web UI,Navidrome 还可以与以下所有 Subsonic 客户端兼容。以下客户端经过测试并确认可以正常工作:

  • iOS:substreamer、Amperfy、iSub
  • 安卓:DSub、Subtracks、substreamer、Ultrasonic、Audinaut
  • 网络:Subplayer、Airsonic、Refix、Aurial、Jamstash、Subfire
  • 桌面:Sublime Music(Linux)、Sonixd(Windows/Linux/macOS)
  • CLI:Jellycli(Windows/Linux)、STMP(Linux/macOS)

2. docker 和 docker-compose 安装

由于 Navidrome 提供了 Docker 镜像,使用 docker 进行安装部署是非常方便的,也不用担心环境问题。

我是使用 docker-compose 对 docker 的镜像包进行安装和部署。
关于这二者的介绍可参考这篇文章
下面是安装步骤。

安装 docker
在 Windows 上直接到官网下载安装就行

下载地址

安装 docker-compose

下载地址
这是对应2.19.1的版本,找到你的windows对应架构的 exe 文件下载就ok了。

可能你的 Ubuntu 上有旧版本的 docker,这里可以先卸载一下

1
sudo apt-get remove docker docker-engine docker.io containerd runc

安装几个会用到的工具

1
2
3
4
5
6
7
sudo apt-get update
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release

防伪
1
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

下载仓库文件

1
2
3
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安装 docker 引擎

1
2
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io -y

安装 docker-compose

1
2
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/v2.19.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

大多数云服务器是使用的 CentOS 的系统,如果你需要将 Navidrome 部署到云服务器上,就按照以下指令进行安装。

旧版本卸载

1
2
3
4
5
6
7
8
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

安装yum-utils软件包

1
2
3
4
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

安装docker引擎

1
sudo yum install docker-ce docker-ce-cli containerd.io

若报 containerd.io 的版本错误,则重新下载最新的 containerd.io
1
sudo dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

安装docker-compose

1
2
sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

3. 使用 docker-compose 部署 Navidrome

在你电脑磁盘空间充足的下创建一个项目文件夹,如 D://music-server
在该文件夹下新建以下三个子文件夹

1
2
3
4
music-server
conf # 存放 docker-compose 的配置文件
music # 存放你的音乐文件
db # 存放 Navidrome 运行时的一些数据文件

conf 路径下创建一个 docker-compose.yml 文件,贴入以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
version: "3"
services:
navidrome1:
container_name: navidrome
image: deluan/navidrome:latest

user: 1000:1000

ports:
- "4533:4533"

restart: unless-stopped

environment:
ND_PORT: 4533
ND_DEFAULTLANGUAGE: zh-Hans
ND_SCANSCHEDULE: 1m
ND_ENABLETRANSCODINGCONFIG: 1
ND_ENABLEDOWNLOADS: 1
ND_LOGLEVEL: info
ND_SESSIONTIMEOUT: 24h
ND_BASEURL: ""
ND_UIWELCOMEMESSAGE: "welcome to k0191's music server"
volumes:
- "D://music-server/db:/data"
- "D://music-server/music:/music:ro"

打开 Windows命令台, 在其中输入

1
docker-compose -f d://music-server/conf/docker-compose.yml up -d

查看是否运行成功,可以在命令台输入:

1
docker ps

打开浏览器,输入http://localhost:4533/ 就可以看到一个登录界面,第一次登陆创建的用户为 admin 用户,可以创建和管理其他用户。

Linux上的配置文件和Windos一样,只用更改相应的路径即可。
如:在将/home/k019/project/music-server作为我的项目根目录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
version: "3"
services:
my-navidrome:
container_name: navidrome
image: deluan/navidrome:latest

user: 1000:1000

ports:
- "4533:4533"

restart: unless-stopped

environment:
ND_PORT: 4533
ND_DEFAULTLANGUAGE: zh-Hans
ND_SCANSCHEDULE: 1m
ND_ENABLETRANSCODINGCONFIG: 1
ND_ENABLEDOWNLOADS: 1
ND_LOGLEVEL: info
ND_SESSIONTIMEOUT: 24h
ND_BASEURL: ""
ND_UIWELCOMEMESSAGE: "welcome to k0191's music server"
volumes:
- "/home/k0191/project/music-server/db:/data"
- "/home/k0191/project/music-server/music:/music:ro"

启动指令

1
docker-compose -f /home/k0191/project/music-server/conf/docker-compose.yml up -d

3.1. 参数说明

参数 说明
version 3 表示compose对docker版本的支持,这里是compose的版本,并非是docker的版本
services 表示一个该配置文件的所有容器实例,支持配置多个容器实例
my-navidrome 服务名称,同一网络上的其他容器可以使用服务名称或别名来连接到其他服务的容器
container_name 容器实例的名称
image 发布的实例镜像的名称,以及版本,latest:表示最新的
ports 暴露的端口, 指定两个端口(HOST:CONTAINER),可设定多组
restart 重启策略
“no”: 默认,在任何时候都不会重启容器
always: 容器总是重新启动
on-failure: 退出代码出错时重启
unless-stopped: 总是重新启动容器,除非容器停止
environment 设置运行的环境变量
volumes 挂载,即将本地路径与容器内的路径进行映射

3.2. Navidrome 环境变量说明

官网的说明: 点击前往

常用参数说明

参数
说明
默认值
ND_PORT 服务器侦听的端口 4533
ND_ADDRESS 服务器绑定的IP地址 0.0.0.0 and :: (all IPs)
ND_BASEURL 服务器的根目录 /
ND_DATAFOLDER 数据文件存放目录,指定后,需修改上述配置文件中的挂载目录 "./data"
ND_MUSICFOLDER 音乐文件存放目录,指定后,需修改上述配置文件中的挂载目录 "./music"
ND_DEFAULTLANGUAGE 默认的语言, 支持简体中文, zh-Hans en
ND_ENABLEDOWNLOADS 是否可以下载 true
ND_SESSIONTIMEOUT 空闲会话超时 "24h"
ND_LASTFM_APIKEY 配置last.fm 所需要的 key,支持通过last.fm的API获取歌手专辑等信息 留空
ND_MAXSIDEBARPLAYLISTS 设置UI侧栏中显示的最大播放列表数。请注意,数量过大可能会导致UI性能问题 100
ND_SCANSCHEDULE 扫描周期,多久扫描一次音乐库 1m
ND_TRANSCODINGCACHESIZE 转码缓存 100MB
ND_UIWELCOMEMESSAGE 登录界面的欢迎信息
ND_SPOTIFY_ID
ND_SPOTIFY_SECRET
通过spotify获取歌曲封面信息 留空

4. 导入歌曲说明

国内使用last.fm和spotify的API服务可能会很慢,故在配置文件中没有加入这两点。一般歌曲的封面和专辑信息都包含在了歌曲的文件中,不需要额外去获取,但歌词信息不同。

Navidrome 是支持歌词显示的,需要确保你下载的歌曲中有歌词的ID3标签,但一般为了歌曲体积,网上多数是将歌词文件 与音乐文件分开管理的,所以下载歌曲时需要将歌词文件一同下载下来。然后再用 music-tag等工具将歌词导入到原歌曲文件中,这样使用 Navidrome 播放的音乐就可以看到歌词了。

这里我推荐一款修改音乐标签的工具:
MusicTag