Funkwhale: наконец-то нормальный децентрализованный музыкальный сервис

q0ufvebzlzl4lmeb9lakbjbah6i.png

Grooveshark уже пять лет как закрыт. За это время появились десятки проектов поменьше с той же идеей —, но на базе децентрализованных сетей. Проблема Grooveshark была в его централизации, которая позволила правообладателям завалить компанию исками, в итоге потопившими её. С тех пор любая музыкальная платформа с пользовательским контентом обязательно включает в слоганы «децентрализацию», «peer-to-peer», «криптографию» и конечно, блокчейн. У всех общие проблемы: несмотря на использование федеративных сетей и модных протоколов, всё управление стартапом сосредоточено в одном офисе. Пока платформа слишком мала чтобы её заметили, она слабо развивается. Стоит ей дорасти до более-менее крупной пользовательской базы, и через несколько месяцев она тонет под напором DMCA и судебных исков.
Единственной жизнеспособной альтернативой, которая не закроется в любой момент, становятся community-driven проекты без головного офиса (и зачастую вообще без юрлица). Но даже в этом случае нет гарантии, что в один прекрасный день используемый вами сервер/хаб не накроется медным тазом, а значит нужна ещё и селф-хостед версия. Список сужается до единиц проектов, а если добавить вменяемый интерфейс и относительную легкость в развёртывании и использовании ноды, то мы останавливаемся на Funkwhale.

Фичи

  • Разумеется, проект бесплатный, децентрализованный, без стоящим над ним организации
  • Редкое явление для подобных платформ, Funkwhale по протоколу Subsonic поддерживает сразу несколько (в том числе опенсорсных) приложений на iOS и Android, на десктопе есть Clementine
  • Вытекает из предыдущего, платформой можно пользоваться на всех девайсах, раздавая музыку, скажем, с домашнего хранилища
  • Хостить свою ноду (здесь их называют подами) необязательно, можно слушать с чужих
  • Каналы Funkwhale доступны из других федеративных сетей по протоколу ActivityPub
  • Чтобы захостить свой под не нужно часами долбиться с настройкой, есть вагон готовых сборок, и главное — нормально настроенный докер-образ!
  • У проекта хорошая поддержка комьюнити, как пользователей, так и разработчиков
  • Это опенсорс.

Разворачиваем свой под


Установить под можно на любую машину, и для вариантов с годами накопленных терабайтов музыки я бы рассматривал любой подкроватный сервер, подключенный к NAS. Кстати, судя по отдельным комментариям, под при желании можно запустить даже на Raspberry Pi, но я не проверял. У меня довольно мало музыки, поэтому я беру самый дешёвый VPS и разворачиваю систему на нём.

Заказываем сервер


Это статья в корпоративном блоге, поэтому берём сервер у VDSina. Я выбираю копеечный вариант с убунтой, хотя можно взять и любую другю систему, даже Windows Server. Но зачем?

52fctwdnsfk2awsbgslsxve5kcg.png

Не забудьте при создании подключить свой SSH-ключ, это удобнее, чем импортировать его вручную.

Устанавливаем под


Самый простой вариант — поставить под из докера. Здесь нужно понимать нюанс использования: хорошей практикой считается импортирование всей музыки из прокси-каталога с символическими ссылками на реальные каталоги, которые при этом могут быть как угодно раскиданы по машине и даже лежать на примонтированном устройстве. При обычной установке Funkwhale может ходить по всему хосту и брать музыку откуда угодно. При установке в докере надо либо париться с пробросом, либо хранить всю музыку внутри контейнера. Для моего варианта с одним небольшим архивом музыки это подходит. Кстати, по умолчанию под ставится в один контейнер, но если вы планируете создать масштабный хаб с высокими нагрузками, можно рассмотреть атомарную установку, так как она отлично масштабируется. Здесь мы её рассматривать не будем, потому что это очень уж специфичный случай, но вот ссылка на мануал.

Docker


Разумеется, нужно установить сам докер и docker-compose. Подробно расписывать этот процесс нет смысла, вот доки: docker, docker-compose.

Создаем пользователя funkwhale

  sudo useradd -r -s /usr/bin/nologin -m -d /srv/funkwhale -U -G docker funkwhale
  cd /srv/funkwhale

Логинимся и дальше работаем из-под него

  sudo -u funkwhale -H bash

Создаем файл .env

  touch .env
  chmod 600 .env  # reduce permissions on the .env file since it contains sensitive data
  cat > .env << EOF
  # 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
  EOF

Создаем docker-compose.yml

  version: "3"
  services:
    funkwhale:
      container_name: funkwhale
      restart: unless-stopped
      # change version number here when you want to do an upgrade
      image: funkwhale/all-in-one:1.0.1
      env_file: .env
      environment:
        # adapt to the pid/gid that own /srv/funkwhale/data
        - PUID=1000
        - PGID=1000
      volumes:
        - /srv/funkwhale/data:/data
        - /path/to/your/music/dir:/music:ro
      ports:
        - "5000:80"


/path/to/your/music/dir — путь, по которому зыгружается музыка. Тот самый прокси-каталог, например.

Поднимаем сервис

  docker-compose up -d

Настраиваем reverse-proxy


Установим nginx, так как на чистой системе его ещё не было

  sudo apt-get update
  sudo apt-get install nginx

Применяем следующие команды:

  export FUNKWHALE_VERSION="1.0.1"
  # download the needed files
  curl -L -o /etc/nginx/funkwhale_proxy.conf "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/1.0.1/deploy/funkwhale_proxy.conf"
  curl -L -o /etc/nginx/sites-available/funkwhale.template "https://dev.funkwhale.audio/funkwhale/funkwhale/raw/1.0.1/deploy/docker.proxy.template"
  # create a final nginx configuration using the template based on your environment
  set -a && source /srv/funkwhale/.env && set +a
  envsubst "`env | awk -F = '{printf \" $%s\", $$1}'`" \
      < /etc/nginx/sites-available/funkwhale.template \
      > /etc/nginx/sites-available/funkwhale.conf
  
  ln -s /etc/nginx/sites-available/funkwhale.conf /etc/nginx/sites-enabled/

Готово! Сервис доступен на порту 5000


w3vrd6gek7uk5ks0cdmmd8xhbpm.png

Далее нужно будет зарегистрироваться в Funkwhale и импортировать музыку. Вот подробные доки для нетривиальных кейсов.

Заключение


Я рад, что наконец-то нашелся нормальный селф-хостед сервис для музыки, с которым не нужно проводить часы за установкой и настройкой. Вся процедура занимает минут пять, а продвинутая конфигурация хорошо описана в документации. При этом количество остальных плюшек впечатляет, особенно возможность выбрать под себя нормальное приложение для прослушивания на телефоне.
Хорошего пользования!

На правах рекламы


Виртуальные серверы с мгновенной активацией на Linux или Windows. Сервер готов к работе через минуту после оплаты!

8p3vz47nluspfyc0axlkx88gdua.png

© Habrahabr.ru