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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.


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

Единственной жизнеспособной альтернативой, которая не закроется в любой момент, становятся community-driven проекты без головного офиса (и зачастую вообще без юрлица). Но даже в этом случае нет гарантии, что в один прекрасный день используемый вами сервер/хаб не накроется медным тазом, а значит нужна ещё и селф-хостед версия. Список сужается до единиц проектов, а если добавить вменяемый интерфейс и относительную легкость в развёртывании и использовании ноды, то мы останавливаемся на Funkwhale.

Фичи



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


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


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

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


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



Не забудьте при создании подключить свой 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




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

Заключение


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



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


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

Источник: https://habr.com/ru/company/vdsina/blog/528192/


Интересные статьи

Интересные статьи

Привет, Хабр! Меня зовут Роман, и я хочу рассказать сегодня о том, как мы в университете Иннополис разрабатывали тестовый стенд и сервис для системы Acronis Active Restore, которая скоро должна с...
Всем привет! Меня зовут Алексей Скоробогатый, я системный архитектор в Lamoda. В феврале 2019 года я выступал на Go Meetup еще на позиции тимлида команды Core. Сегодня хочу представить расшифровк...
Облака подобны магической шкатулке — задаешь, что тебе нужно, и ресурсы просто появляются из ниоткуда. Виртуальные машины, базы данных, сеть — все это принадлежит только тебе. Существуют и другие...
По долгу работы приходится копаться на андеграунд форумах в поиске свежей информации об уязвимостях, утечках паролей и другим интересным вещам. Иногда консультируем представителей силовых ст...
Некоторое время назад мне довелось пройти больше десятка собеседований на позицию php-программиста (битрикс). К удивлению, требования в различных организациях отличаются совсем незначительно и...