- PVSM.RU - https://www.pvsm.ru -
[1]
YouTube Music [2], «Яндекс Музыка» [3], Spotify [4], SoundCloud [5] — относительно удобные музыкальные сервисы, но с недостатками:
Их коллекции далеки от полноты. Редких треков вообще нет. Более того, музыка иногда просто пропадает из-за каких-то заморочек с авторскими правами.
К счастью, очень легко организовать стриминг музыки со своего сервера. Хранить всю музыкальную коллекцию у себя на компьютере — зачастую надёжнее, удобнее и дешевле, чем облачный сервис.
Начнём с того, что существуют универсальные медиасерверы типа Plex [6] и Jellyfin [7], которые тоже умеют транслировать медиаконтент (включая музыку) на любые устройства по локальной сети или через интернет.
У Plex есть официальный мобильный клиент Plexamp [8] специально для прослушивания музыки на смартфоне:

Plexamp
Кроме того, для Plex и прочих выпускается много вспомогательных программ, как менеджер контента Overseerr [9] (система рекомендаций, запросы новых фильмов и сериалов), то есть Plex — это целая экосистема контента, в которой можно жить, и там тоже есть платная подписка с премиальными функциями.

Overseerr
Но у таких серверов слишком много лишних функций, и они обычно более тяжеловесны на серверной стороне, поэтому зачастую удобнее использовать простой специализированный софт.
Black Candy [10] — один из множества [11] стриминговых музыкальных серверов на самохостинге.

Начнём с установки . В маркетплейсе RUVDS имеется готовый образ сервера с установленным Docker CE [13]. Проще всего сразу его и поставить, хотя никто не мешает взять совсем дешёвый сервер [14] в минимальной конфигурации и установить Docker самостоятельно.

Образ включает в себя Docker CE 19.03.5 и Docker Compose 1.25.0 под Ubuntu 18.04. Софт настроен в соответствии с официальными [15] рекомендациями [16].
Как обычно, установка системы занимает несколько минут, после чего сервер готов к работе. Сразу после оформления заказа выделяется статический IP-адрес, логин и пароль для авторизации SSH.
Запускаем SSH-клиент PuTTY [17]…

… подключаемся к серверу…

… и устанавливаем контейнер Black Candy:
docker run -p 3000:3000 ghcr.io/blackcandy-org/blackcandy:latest

Как вариант, можно загрузить контейнер с репозитория Docker Hub:
docker run -p 3000:3000 blackcandy/blackcandy:latest
Это всё, теперь сервер доступен из браузера на хосте по адресу http://localhost:3000 или через интернет по адресу http://IP_сервера:3000, в нашем случае http://195.133.48.189:3000, имя пользователя по умолчанию admin@admin.com, пароль foobar. Разумеется, учётные данные лучше поменять в настройках.

Демо-версию сервера см. на сайте demo.blackcandy.org [18], логин и пароль такие же, как указано выше.

На вкладке «Библиотека» (Library) можно просмотреть все альбомы, музыкантов, плейлисты и песни, которые есть в фонотеке. Картинки альбомов подтягиваются через Discogs API [19], надо получить там токен и указать его в настройках.

В правом верхнем углу кнопка для доступа к настройкам Black Candy:

Приведём некоторые параметры, которые можно указать в командной строке при запуске сервера.
Следующая команда позволяет примонтировать папку с медиафайлами в контейнер и устанавливает для Black Candy переменную окружения MEDIA_PATH с путём к файлам.
docker run -v /media_data:/media_data -e MEDIA_PATH=/media_data ghcr.io/blackcandy-org/blackcandy:latest
Эта опция присутствует и в настройках через GUI. Нужно просто скопировать на сервер папку с файлами и примонтировать её.
Кроме MEDIA_PATH, есть ещё несколько переменных окружения [20], в том числе FORCE_SSL для принудительного включения SSL, а также DB_ADAPTER и DB_URL для выбора СУБД.
По умолчанию Black Candy устанавливает SQLite как более простую СУБД для маленького сервера. Но если SQLite недостаточно или мы размещаемся у какого-то специфического
docker run -e DB_ADAPTER=postgresql -e DB_URL=postgresql://yourdatabaseurl ghcr.io/blackcandy-org/blackcandy:latest
Для сохранения всех данных и рабочих файлов Black Candy из /app/storage в постоянном хранилище можно создать отдельную директорию и примонтировать туда /app/storage:
mkdir storage_data
docker run -v ./storage_data:/app/storage ghcr.io/blackcandy-org/blackcandy:latest
Для комфортного прослушивания фонотеки на смартфонах есть нативные клиенты Black Candy под Android [21] и iOS [22]. Хотя в принципе сервер нормально доступен из браузера, как указано выше.
В приложении указываем IP-адрес сервера (с портом), логин и пароль — и получаем доступ к фонотеке.
По умолчанию сервер Black Candy выполняет автоматическое транскодирование музыки в lossy-формат 128 Кбит/с для экономии трафика, но это можно изменить в настройках.
Кроме Black Candy, существует множество других серверов для музыки со стримингом, в том числе опенсорсных. Среди них можно упомянуть Subsonic [23] (с десятками приложений [24] для Android, iPhone, Windows Phone, Mac, Chrome), Navidrome [25], Icecast [26], Snapcast [27], Koel [28], OwnTone [29], Lyrion Music Server [30] и др.
Например, Snapcast [27] специализируется на двустороннем синхронном стриминге с поддержкой множества разных клиентов. Двусторонний стриминг означает, что звук снимается с клиентов, синхронизируется на сервере — и передаётся остальным. Несколько клиентов могут транслировать звук одновременно друг с другом:

Архитектура Snapcast
Navidrome [25] отличается очень низким потреблением ресурсов, работает даже на слабеньких «малинках» или старых мобильных телефонах Android, без тормозов обрабатывает большие музыкальные коллекции и любые аудиоформаты, поддерживает транскодирование на лету и пр. Можно использовать как портативный плеер или как сервер для трансляции на другие устройства, демо [31].

Сервер Navidrome

Клиенты Navidrome
Есть даже такие экзотические варианты, как Musikcube [32]: аудиоплеер и медиасервер с текстовым интерфейсом, работающий из консоли:

Не забываем и Music Player Daemon [33] (MPD), классический музыкальный сервер/плеер под Linux.
В качестве альтернативы всему вышеперечисленному, можно организовать музыкальный стриминговый сервер на старом Android-смартфоне [34]. В описании по ссылке приведена пошаговая инструкция и код, проверено на Samsung Galaxy S7, но сработает и на других смартфонах, куда можно поставить LineageOS [35] и Termux [36].
Использовались следующие инструменты:
Можно ещё использовать приложение scrcpy [38], которое умеет дистанционно управлять Android-устройствами (видео, аудио), в том числе по TCP/IP [39], то есть через интернет, что очень удобно.
Среди функций:
То есть можно дистанционно запустить на смартфоне плеер на воспроизведение музыки.
Утилита работает под Linux, Windows и macOS.
Благодаря своему серверу или
Вместо стриминга музыки можно просто синхронизировать MP3-файлы между клиентами и сервером с помощью Syncthing [52] или другого инструмента синхронизации. Если библиотека небольшая (до нескольких десятков гигабайт), то это тоже хороший вариант. В любом случае файлы остаются под нашим контролем, а музыка всегда доступна в офлайне.
© 2025 ООО «МТ ФИНАНС»
Автор: ru_vds
Источник [53]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ssh/414091
Ссылки в тексте:
[1] Image: https://habr.com/ru/companies/ruvds/articles/891848/
[2] YouTube Music: https://music.youtube.com/
[3] «Яндекс Музыка»: https://music.yandex.by/
[4] Spotify: https://www.spotify.com/
[5] SoundCloud: https://soundcloud.com/
[6] Plex: https://www.plex.tv/
[7] Jellyfin: https://jellyfin.org/
[8] Plexamp: https://www.plex.tv/plexamp/
[9] Overseerr: https://github.com/sct/overseerr
[10] Black Candy: https://github.com/blackcandy-org/blackcandy
[11] множества: #1
[12] VPS: https://www.reg.ru/?rlink=reflink-717
[13] готовый образ сервера с установленным Docker CE: https://ruvds.com/ru/mp/docker/
[14] совсем дешёвый сервер: https://ruvds.com/ru/cheap-vps/
[15] официальными: https://docs.docker.com/install/linux/docker-ce/ubuntu/
[16] рекомендациями: https://docs.docker.com/compose/install/#install-compose
[17] PuTTY: https://www.putty.org/
[18] demo.blackcandy.org: https://demo.blackcandy.org/
[19] Discogs API: https://www.discogs.com/developers?
[20] несколько переменных окружения: https://github.com/blackcandy-org/blackcandy?tab=readme-ov-file#environment-variables
[21] под Android: https://github.com/blackcandy-org/android
[22] iOS: https://github.com/blackcandy-org/ios
[23] Subsonic: https://www.subsonic.org/
[24] десятками приложений: https://www.subsonic.org/pages/apps.jsp
[25] Navidrome: https://www.navidrome.org/
[26] Icecast: https://icecast.org/
[27] Snapcast: https://github.com/badaix/snapcast
[28] Koel: https://github.com/koel/koel
[29] OwnTone: https://owntone.github.io/owntone-server/
[30] Lyrion Music Server: https://lyrion.org/
[31] демо: https://www.navidrome.org/demo/
[32] Musikcube: https://musikcube.com/
[33] Music Player Daemon: https://www.musicpd.org/
[34] на старом Android-смартфоне: https://github.com/davidhampgonsalves/music-server
[35] LineageOS: https://lineageos.org/
[36] Termux: https://termux.dev/
[37] Dynamic DNS через Cloudflare: https://github.com/timothymiller/cloudflare-ddns
[38] scrcpy: https://github.com/Genymobile/scrcpy
[39] по TCP/IP: https://github.com/Genymobile/scrcpy/blob/master/doc/connection.md#tcpip-wireless
[40] переадресация аудио: https://github.com/Genymobile/scrcpy/blob/master/doc/audio.md
[41] аудио- и видеозапись: https://github.com/Genymobile/scrcpy/blob/master/doc/recording.md
[42] виртуальный дисплей: https://github.com/Genymobile/scrcpy/blob/master/doc/virtual_display.md
[43] с выключенным экраном: https://github.com/Genymobile/scrcpy/blob/master/doc/device.md#turn-screen-off
[44] копипаст в обоих направлениях: https://github.com/Genymobile/scrcpy/blob/master/doc/control.md#copy-paste
[45] настройка качества: https://github.com/Genymobile/scrcpy/blob/master/doc/video.md
[46] трансляция камеры: https://github.com/Genymobile/scrcpy/blob/master/doc/camera.md
[47] в качестве веб-камеры (V4L2): https://github.com/Genymobile/scrcpy/blob/master/doc/v4l2.md
[48] клавиатуры: https://github.com/Genymobile/scrcpy/blob/master/doc/keyboard.md#physical-keyboard-simulation
[49] мыши: https://github.com/Genymobile/scrcpy/blob/master/doc/mouse.md#physical-mouse-simulation
[50] геймпада: https://github.com/Genymobile/scrcpy/blob/master/doc/gamepad.md
[51] режим OTG: https://github.com/Genymobile/scrcpy/blob/master/doc/otg.md
[52] Syncthing: https://syncthing.net/
[53] Источник: https://habr.com/ru/companies/ruvds/articles/891848/?utm_source=habrahabr&utm_medium=rss&utm_campaign=891848
Нажмите здесь для печати.