Navidrome搭建 一个私人音乐平台
前言
我最近突发奇想,想搭建一个音乐平台,但找了一圈,终于在这个强大的 Bing 找到了这个
Navidrome
Navidrome,其优点是完全免费,且兼容Subsonic的几乎全平台APP!但是缺点是它的安装文档只有英文(当然软件本身是支持中文的),且搭建过程对于Centos稍微有些麻烦,主要是在ffmpeg的安装上(必装依赖),这里选择手动安装。
这里是项目地址 https://github.com/navidrome/navidrome
开始
系统环境选择 Centos 7
先安装所需要的依赖
FFMPEG
这是一个用来转码的应用,在 Navidrome 程序里面以必装依赖存在,所以我们必须要先装FFMPEG
首先查看你服务器上是否有FFMPEG
可以复制以下代码进你的终端
whereis ffmpeg
如果只返回了 ffmpeg: 且后面没有紧跟着目录的话,就代表没有安装。你就可以不管他
先创建一个目录
mkdir /root/ffmpeg
然后输入
cd /root/ffmpeg
下载地址:https://johnvansickle.com/ffmpeg/
根据你的CPU架构来来下载对应的包,例如x86的
选择 ffmpeg-release-amd64-static.tar.xz 这个版本,右键它复制其链接
然后使用wget指令来下载包
wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
下载完毕后解压压缩包
tar xvf ffmpeg-release-amd64-static.tar.xz
测试命令执行
首先进入解压出来的文件夹,ffmpeg-x.x.x-amd64-static 为你刚刚解压出来的文件夹
cd ffmpeg-x.x.x-amd64-static
解压出来的目录名字也有可能不一样,可以使用
ll
指令来查看你那个目录,如果你有宝塔那就更方便了
进入后测试ffmpeg是否可以正常使用
./ffmpeg
正常会显示下面内容
将 ffmpeg 和 ffprobe 移动到 shell 的路径中
直接输入以下命令来将 ffmpeg 和 ffprobe 移动到 bin 来让命令全局生效
mv ffmpeg ffprobe /usr/local/bin/
在命令行输入以下命令来测试,如果出现了和刚刚 ./ffmpeg 命令相同的返回内容,即表示安装成功
ffmpeg
安装Navidrome
官方提供了二进制安装和编译安装两种方式
直接用二进制方式进行安装
如果你想使用编译安装,可以查看官方文档:
https://www.navidrome.org/docs/installation/build-from-source/
安装之前要注意一下
官方在文档里明确提出了不要使用root用户来进行安装,会有很大的安全隐患!
官方原话:
You should NOT run Navidrome as root. Ideally you should have it running under its own user. Navidrome only needs read-only access to the Music Folder, and read-write permissions to the Data Folder.
基于此,我们第一步是应该首先建立一个新的用户,当然如果你已有一个非root的可登录用户,也可忽略!
建立新用户
直接创建一个叫 Navidrome 的用户 一定要英文!!
useradd navidrome
创建好后设置该用户的密码
passwd navidrome
密码设置好后,我们便需要进入该用户,使用新建的该用户来完成接下来的步骤!!
su navidrome
接下来创建一个目录
注意以下所有带sudo的命令均可能需要输入密码,改密码为你设置的用户名密码
navidrome改为你设置的用户名
其中-o后面为用户名,-g后面为组名
sudo install -d -o navidrome -g navidrome /opt/navidrome
sudo install -d -o navidrome -g navidrome /var/lib/navidrome
若输入密码后提示 不在 sudoers 文件中。此事将被报告
请看这里:https://zhuanlan.zhihu.com/p/113267069
接下来就可以下载 Navidrome 的包了
下载二进制文件
我们直接去 https://github.com/navidrome/navidrome/releases 找到最新的版本
找到自己的平台,比如我是用x86架构的平台且为Linux系统。所以我这边选择navidrome_0.47.5_Linux_x86_64.tar.gz
用右键选择复制链接
我们回到命令行,找到当前用户的根目录,以下为命令
cd ~
然后使用wget指令来下载他的包
例如
wget https://github.com/navidrome/navidrome/releases/download/v0.47.5/navidrome_0.47.5_Linux_x86_64.tar.gz
链接可以换成你需要下载的链接
然后对其进行解压
sudo tar -xvzf navidrome_0.47.5_Linux_x86_64.tar.gz -C /opt/navidrome/
解压出来后,我们要给予权限。这里第一个 navidrome 代表用户名,第二个 navidrome 代表组名
sudo chown -R navidrome:navidrome /opt/navidrome
创建配置文件
使用vi/vim,或者直接用sftp来创建和修改文件,当然宝塔创建也OK
nano编辑器也可以的
我们在 /var/lib/navidrome/ 文件夹创建一个navidrome.toml文件
用在命令上就是:(如果没装nano先用yum install -y nano命令来安装)
nano /var/lib/navidrome/navidrome.toml
以下是推荐配置
LogLevel = 'info' #log等级
Port = 8465 #运行端口
MusicFolder = '/var/music' #音乐目录
EnableGravatar = true #使用Gravatar
EnableUserEditing = true #用户编辑
PasswordEncryptionKey = true
ReverseProxyWhitelist = '0.0.0.0'
EnableDownloads = false #开始下载功能
DEVACTIVITYPANEL = false #管理面板?
这里还可以加入其他的配置选项,具体参考官方文档 https://www.navidrome.org/docs/usage/configuration-options/
设置开启自启
在 /etc/systemd/system/ 文件夹下创建一个 <navidrome@.service> 名的文件
sudo nano /etc/systemd/system/navidrome@.service
当然,你也可以用宝塔创建,比较方便
将下面的内容加进去
注意:user和group分别代表用户名和组名都改成自己的!
[Unit]
Description=Navidrome Music
After=remote-fs.target network.target
AssertPathExists=/var/lib/navidrome
[Install]
WantedBy=multi-user.target
[Service]
User=navidrome
Group=navidrome
Type=simple
ExecStart=/opt/navidrome/navidrome --configfile "/var/lib/navidrome/navidrome.toml"
WorkingDirectory=/var/lib/navidrome
TimeoutStopSec=20
KillMode=process
Restart=on-failure
# See https://www.freedesktop.org/software/systemd/man/systemd.exec.html
DevicePolicy=closed
NoNewPrivileges=yes
PrivateTmp=yes
PrivateUsers=yes
ProtectControlGroups=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
RestrictNamespaces=yes
RestrictRealtime=yes
SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap
ReadWritePaths=/var/lib/navidrome
# You can uncomment the following line if you're not using the jukebox This
# will prevent navidrome from accessing any real (physical) devices
#PrivateDevices=yes
# You can change the following line to `strict` instead of `full` if you don't
# want navidrome to be able to write anything on your filesystem outside of
# /var/lib/navidrome.
ProtectSystem=full
# You can uncomment the following line if you don't have any media in /home/*.
# This will prevent navidrome from ever reading/writing anything there.
#ProtectHome=true
# You can customize some Navidrome config options by setting environment variables here. Ex:
#Environment=ND_BASEURL="/navidrome"
之后执行以下三行代码即可。#后面的内容不要复制粘贴进去,那是给你们做解释用的
sudo systemctl daemon-reload #重载配置文件
sudo systemctl start navidrome@navidrome #开启navidrome进程
sudo systemctl status navidrome@navidrome #查看navidrome进程状态
若查看状态为绿色,直接去你的 ip:端口号 访问即可
如果访问没问题了,开启开机自启
sudo systemctl enable navidrome@navidrome
尾声
一定要去宝塔面板开启对应端口,或者自行在防火墙把端口打开
不然真的没法访问的
当然你也可以使用nginx的反向代理,通过域名来访问