从网盘到流媒体 | 心动幡动,来搭一个个人用音乐库吧!

2798字

有一天象上讨论起VPS的话题,看了看VPS的负载和容量,觉得还能再压榨一点,象友提议说可以装个网盘,本来觉得我用得不多有点犹豫,后来有朋友提到说可以弄个音乐流媒体,我立刻!!!还能这样!!!

和象友讨论了一下,选择还挺多的,可以用Nextcloud网盘,带很多应用,音乐就是其中一个,suica写过写一篇很详细的分享。也可以用Funkwhale,支持 ActivityPub联邦协议,也是Fedi宇宙中的一员。我还找到了Navidrome,相比起来较为轻量,与Subsonic/Airsonic兼容,界面美观,不足之处在于不能在网页上管理音乐,需要上传到储存目录再扫描。

Nextcloud试用后觉得有些缓慢,我也不太偏好多合一应用,Funkwhale安装起来很麻烦,找到一篇教程照抄后发现会报错Permission denied并且难以解决,Navidrome的上传问题之前suica提到过替代方案,用网盘存储路径作为Navidrome的扫描路径,这样就可以便利地管理音乐文件,心动不如行动,动手。

本着轻量原则,网盘选择了Cloudreve,先把Cloureve装起来。


安装Cloudreve

Docker compose

基本就按照文档来进行安装,使用docker compose 部署,先建个文件夹用来装这些东西

mkdir drive
cd drive

建立整个文件夹结构

mkdir -vp cloudreve/{uploads,avatar} \
&& touch cloudreve/conf.ini \
&& touch cloudreve/cloudreve.db \
&& mkdir -p aria2/config \
&& mkdir -p data/aria2 \
&& chmod -R 777 data/aria2

然后nano docker-compose.yml,开始编辑docker-compose.yml

注意docker-compose.yml必须与cloudreve文件夹同层级,不然无法调起aria2,我报错了一次,把镜像容器文件夹全部删了重新来了。

version: "3.8"
services:
  cloudreve:
    container_name: cloudreve
    image: cloudreve/cloudreve:latest
    restart: unless-stopped
    ports:
      - "5212:5212"
    volumes:
      - temp_data:/data
      - ./cloudreve/uploads:/cloudreve/uploads
      - ./cloudreve/conf.ini:/cloudreve/conf.ini
      - ./cloudreve/cloudreve.db:/cloudreve/cloudreve.db
      - ./cloudreve/avatar:/cloudreve/avatar
    depends_on:
      - aria2
  aria2:
    container_name: aria2
    image: p3terx/aria2-pro
    restart: unless-stopped
    environment:
      - RPC_SECRET=your_aria_rpc_token //改个自己喜欢的密码
      - RPC_PORT=6800
    volumes:
      - ./aria2/config:/config
      - temp_data:/data
volumes:
  temp_data:
    driver: local
    driver_opts:
      type: none
      device: $PWD/data
      o: bind

之后上线docker时使用docker-compose up命令,管理员账号密码会直接输出在控制台,复制保存后再docker-compose down&&docker-compose up -d,使用http://IP:5212检查是否能打开网页,进去把密码改掉。

反向代理

具体流程可以看我搭Miniflux的文章,就不重复了。

碰到个问题:执行nginx -carbot出现错误Another instance of Certbot is already running

Certbot 不正常關閉,導致原本的 .certbot.lock 檔案還存在於主機中,此時可以找出 .certbot.lock 檔案是否還存在,若檔案存在,則可以移除所有 .certbot.lock 檔案

这里找到了解决办法:

find / -type f -name ".certbot.lock"
find / -type f -name ".certbot.lock" -exec rm {} \;

一些个人调整

图床功能

修改储存策略即可:链接

调整用户组容量

cloudreve的管理员用户组默认拥有1G容量。可以在管理面板-用户组里进行修改,看了一眼存储,VPS还有80G容量可以折腾,考虑到Mastodon的需求,我把可用空间改到20G。


安装Navidrome

在安装前,我在Cloudreve里创建一个叫Music的文件夹并上传一首我想听的歌,之后通过检查可以发现它存储在VPS的/drive/cloudreve/uploads/1/Music路径当中,记住这个路径

然后建立一个用来放navidrome的文件夹,为了简单一点我就叫Music

mkdir Music
cd Music
nano docker-compose.yml

因为想用Last.fm,我参考Navidrome搭建一个属于自己的音乐播放器这篇文章改了一下docker-compose.yml文件

version: "3"
services:
  navidrome:
    image: deluan/navidrome:latest
    ports:
      - "4533:4533"   # 左边可以改成自己服务器未被占用的端口
    restart: unless-stopped
    environment:
      # Optional: put your config options customization here. Examples(这些都是可选的):
      ND_SCANSCHEDULE: 1m   #扫描计划
      ND_LASTFM_ENABLED:#设置第三方链接lastfm,将此设置false为完全禁用默认Last.fm 集成 true
      ND_LASTFM_APIKEY:  # 修改成自己的APIKEY
      ND_LASTFM_SECRET:   # 修改成自己的SECRET
      ND_LASTFM_LANGUAGE: zh  #用于从 Last.fm 检索传记的语言的两个字母代码 zh
      ND_LOGLEVEL: info  #日志级别,可能的值:error, warn, info,debug,trace
      ND_SESSIONTIMEOUT: 24h #会话超时,Navidrome 在关闭 Web ui 空闲会话之前将等待多长时间
      ND_BASEURL: ""  #基本网址,path用于在代理后面配置 Navidrome的基本 URL(仅部分)(例如/music:)默认空
    volumes:
      - "./data:/data" #请自行指定一个本地路径用来存储navidrome数据
      - "/music:/music:ro"  # 冒号左边修改成自己本地的音乐文件夹路径

通过文档我们可以发现:/music 这一行是我们放音乐的文件夹,我们把第一个冒号左边改成我们需要的路径,这里的路径要写成绝对路径,也就是把/music:/music:ro改为"/root/drive/cloudreve/uploads/1/music:/music:ro"docker-compose up -d使网页上线,访问http://IP:4533,右上角刷新一下,已经可以看到我们刚刚上传上去的那首歌了,之后就可以把歌曲批量拖拽上传到网盘,Navidrome会每隔一分钟进行一次扫描。

之后再做好反向代理,个人音乐流媒体就堂堂出锅!


歌曲元数据

Navidrome读取并显示的是歌曲的元数据,也就是储存在音频文件内的信息,标题、艺术家、乃至专辑封面的显示都要依赖完善的元数据,但找到的歌不一定元数据都完整,为了Navidrome里的歌不乱七八糟地堆在一起,如何给歌曲补完元数据?

第一当然是使用有完善元数据的源来下载专辑,除去自购部分和Apple Music,网易云的元数据比QQ音乐做得好,但QQ音乐下载时的文件命名策略又比网易云做得好,如果你也是个死宅,二次元音乐自购自抓的资源一般也都有完善的元数据,但有的音乐,比如翻唱翻弹甚至讲座就只有B站有,这时候就需要扫描音乐文件或者自己给音乐文件来编辑元数据。

我用的是一套组合方案:MusicBrainz-Picard+Mp3tag,都支持中文,其中MusicBrainz Picard可以通过声纹来识别音乐文件,成功率相当高,我会用它来做无元数据音乐文件的第一步处理,需要注意的是“查找相似的音轨”这一功能的搜索依赖文件的其他元数据,如果搜不到的话可以先写入一部分来辅助它搜索。

Mp3tag则是一款可以自己编辑音乐元数据的软件,批量编辑相当顺滑,另外,如果同一张专辑中有不同艺术家参与,Navidrome会识别为多张专辑,这就是Mp3tag大显身手的时候:把专辑的所有歌都拖拽进去,全选并编辑专辑集艺术家,重新上传,他们就又会被组合在一起,并且不影响每首歌艺术家的单独显示。


竣工感想

快乐!!!!!

我是个音乐欲望比较低的人,大部分音乐场景是通勤路上十几分钟、写博客或者做其他事的时候随便找点什么听听,大部分时候也只听熟悉的几个乐团和歌手,因此比起在网易云上各种广告和推送的繁杂信息,自己搭建一个音乐库既能获得相对纯粹和不需挑选的听歌体验,不用担心忽然就被推送了不喜欢的歌手和几个APP来回切换以凑足版权库,何况当自己喜欢的专辑封面被列成一面专辑墙,格外有成就感和收集图鉴的愉快。

只有一个问题:我已经往网盘里塞了17个G了,硬盘真的还够用吗?