NAS 上的文件已经有足够多的管理系统12,而电影也有 [[Kodi]], [[Emby]], [[Plex]] 等等工具,图片同样 Chevereto,Lychee,电子书有 Calibre-web,但就是音乐管理工具没有找到一个比较合适的。

构想

我想的应该这个管理系统可以直接通过 Docker 安装,提供一个比较美观的 Web 页面。

  • Docker
  • 映射本地音乐文件夹
  • Web 管理界面
  • 可以根据文件的 metadata 自动归类,如果可以手工进行编辑就更好了
  • 能在线播放

于是乎我带着这样的目的在 awesome-selfhosted Audio streaming 专区寻找,从编程语言,到 Demo,一个个看,然后就发现了 Funkwhale 点开项目主页介绍,界面非常漂亮,Demo 这各个功能也都非常贴心,立即看安装说明,Docker 搞起。并且 Funkwhale 还自带 pot,新建立的站点可以和网络上的站点连接起来相互分享,像极了之前的 SNS Mastodon.

Funkwhale 用 Python,Django 编写,遇到 bug 倒时候也能看懂代码了。

Install

使用 Docker 安装:

export FUNKWHALE_VERSION="0.20.1"
touch .env
chmod 600 .env  # reduce permissions on the .env file since it contains sensitive data
cat > .env <<EOD
# Replace 'your.funkwhale.example' with your actual domain
FUNKWHALE_HOSTNAME=your.funkwhale.example
# Protocol may also be: http
FUNKWHALE_PROTOCOL=https
# This limits the upload size
NGINX_MAX_BODY_SIZE=100M
# Bind to localhost
FUNKWHALE_API_IP=127.0.0.1
# Container port you want to expose on the host
FUNKWHALE_API_PORT=5000
# Generate and store a secure secret key for your instance
DJANGO_SECRET_KEY=$(openssl rand -hex 45)
# Remove this if you expose the container directly on ports 80/443
NESTED_PROXY=1
EOD

运行:

docker run \
	--name=funkwhale \
	--restart=unless-stopped \
	--env-file=/share/Container/funkwhale/.env \
	-v /share/Container/funkwhale/data:/data \
	-v /share/Music:/music:ro \
	-e PUID=1000 \
	-e PGID=1000 \
	-p 6000:80 \
	-d \
	funkwhale/all-in-one:latest

或者使用 docker-compose:

version: "3"

services:
  funkwhale:
	container_name: funkwhale
	restart: unless-stopped
	# add the version number in your .env file, or hardcode it
	image: funkwhale/all-in-one:0.20.1
	env_file: /share/Container/funkwhale/.env
	environment:
	  # adapt to the pid/gid that own /srv/funkwhale/data
	  - PUID=1000
	  - PGID=1000
	volumes:
	  - /share/Container/funkwhale/data:/data
	  - /share/Music/:/music:ro
	ports:
	  - "6000:80"

导入音乐文件

使用如下命令导入文件:

# For file structures similar to ./Artist/Album/Track.mp3
docker exec -it funkwhale manage import_files $LIBRARY_ID "/music/**/**/*.mp3" --in-place --async

这里的 LIBRARY_ID 需要到界面中找。

外延

koel

[[Koel]] 是一个基于网页的音乐媒体播放器。

官网:https://koel.dev/

Koozic

airsonic

reference