Navidrome — опенсорсный стриминговый сервер. Читает папку с музыкой, отдаёт через браузер и приложения.
Работает через Subsonic API → совместим с десятками готовых клиентов на всех платформах.
Ставится через Docker: один
docker-compose.yml, пять минут, готово.Работает на чём угодно с Linux: RPi, NAS, VPS, старый ноутбук.
Поддерживает несколько пользователей, плейлисты, scrobbling, транскодинг.
Зачем это нужно
Стриминги удобны пока всё стабильно. Потом правообладатели начинают убирать треки с платформ. Потом приходит внутренняя цензура — тексты запикали, треки удалили. Платформа тут не виновата — она исполняет то что ей говорят снаружи. Но результат один: ты не контролируешь свою библиотеку.
Navidrome решает конкретную задачу: взять папку с музыкой и превратить её в полноценный стриминговый сервис — с веб-интерфейсом, мобильными приложениями, поиском и плейлистами. Никаких подписок, никакой зависимости от внешних сервисов.
У меня крутится на Raspberry Pi 5 — про выбор железа отдельно в следующей части.
Что такое Navidrome
Navidrome — опенсорсный медиасервер, написанный на Go. Лицензия GPL-3.0.
Что умеет из коробки:
Читает FLAC, MP3, AAC, ALAC, OPUS, OGG и другие форматы
Веб-интерфейс — полноценный плеер в браузере
Subsonic API v1.16.1 — совместимость с десятками сторонних клиентов
Мультипользовательский режим с разграничением прав
Умные плейлисты (Smart Playlists) — фильтрация по жанру, рейтингу, дате добавления
Scrobbling в Last.fm и ListenBrainz
Транскодинг на лету (FLAC → MP3 для экономии трафика)
Подтягивание метаданных: биографии артистов, похожие исполнители (через Last.fm API)
Автосканирование библиотеки по расписанию
Чего нет:
Управления через DLNA/UPnP (нужен отдельный сервис)
Podcast-менеджера
Требования
Минимальные:
Linux (x86_64, ARM64, ARMv7)
Docker + Docker Compose
Папка с музыкой
Navidrome работает на чём угодно: Raspberry Pi 2+, любой NAS с Docker, VPS, старый ноутбук. Потребление памяти в работе — около 80-120 МБ.
Установка через Docker
Самый простой и рекомендуемый способ.
1. Установить Docker
Если Docker ещё не стоит:
curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER newgrp docker
Проверить:
docker --version docker compose version
2. Создать docker-compose.yml
mkdir -p ~/navidrome && cd ~/navidrome
docker-compose.yml:
version: "3" services: navidrome: image: deluan/navidrome:latest user: "1000:1000" ports: - "4533:4533" restart: unless-stopped environment: ND_SCANSCHEDULE: 1h ND_LOGLEVEL: info ND_SESSIONTIMEOUT: 24h ND_BASEURL: "" volumes: - "./data:/data" - "/path/to/music:/music:ro"
/path/to/music — абсолютный путь к папке с музыкой. :ro — read-only, Navidrome только читает файлы, не меняет их.
3. Запустить
docker compose up -d
Через 30-60 секунд открыть в браузере: http://localhost:4533
При первом запуске Navidrome предложит создать администратора. После этого — начнётся первоначальное сканирование библиотеки.
Структура музыкальной библиотеки
Navidrome читает теги из файлов (ID3 для MP3, Vorbis Comments для FLAC). Структура папок влияет на отображение, но не является обязательной.
Рекомендуемая структура:
/music/ ├── Artist Name/ │ ├── 2019 - Album Title/ │ │ ├── 01 - Track Name.flac │ │ ├── 02 - Track Name.flac │ │ └── cover.jpg │ └── 2023 - Another Album/ │ └── ... └── Various Artists/ └── Compilation Name/ └── ...
Год перед названием альбома — для правильной хронологической сортировки.
Обложки: Navidrome читает cover.jpg / folder.jpg рядом с треками, либо embedded-обложки из тегов. Приоритет — embedded теги.
Принудительное пересканирование
По расписанию задаётся через ND_SCANSCHEDULE (например, 1h, @daily, @weekly).
Принудительно через веб-интерфейс: Settings → Library → Scan Now.
Или через Subsonic API:
curl -u admin:password \ "http://localhost:4533/rest/startScan?v=1.16.1&c=myclient&f=json"
Subsonic API — почему это важно
Subsonic — протокол 2009 года, но именно он объединяет весь экосистем self-hosted аудио. Navidrome реализует Subsonic API версии 1.16.1.
Это означает: любой клиент написанный для Subsonic/Airsonic/Funkwhale работает с Navidrome без изменений. Таких клиентов — десятки: под iOS, Android, macOS, Windows, Linux, веб.
Базовый URL для подключения клиентов:
http://<адрес>:4533
Логин и пароль — те же что в веб-интерфейсе.
Полезные переменные окружения
Полный список в документации. Наиболее полезные:
Переменная |
Значение по умолчанию |
Описание |
|---|---|---|
|
|
Расписание сканирования |
|
|
Уровень логов: |
|
|
Время жизни сессии |
|
|
Транскодинг на лету |
|
|
Тема веб-интерфейса |
|
— |
API-ключ Last.fm для метаданных и scrobbling |
|
|
Scrobbling в ListenBrainz |
|
|
Плейлистов в сайдбаре |
Для включения Last.fm (биографии артистов, похожие исполнители, scrobbling) нужен бесплатный API-ключ с последнего сайта:
environment: ND_LASTFM_APIKEY: "your_api_key" ND_LASTFM_SECRET: "your_api_secret" ND_LASTFM_ENABLED: "true"
Доступ снаружи
По умолчанию Navidrome слушает только локально на порту 4533. Для доступа с телефона в дороге нужен либо проброс порта, либо VPN.
Я использую Tailscale — mesh VPN без возни с портами и роутером. Подробнее про настройку удалённого доступа — в следующей части про железо и сеть.
Клиенты
Раз Navidrome реализует Subsonic API — работает с любым Subsonic-клиентом. Что использую сам:
Mac: kōan — терминальный клиент, прямой тракт на внешний ЦАП
iPhone: Kolis Music
Android / hi-fi плеер: Symfonium
Думаю в следующих постах раскрою детальнее тему.
Обновление
Navidrome активно развивается. Обновить до последней версии:
cd ~/navidrome docker compose pull docker compose up -d
Данные хранятся в ./data/ — при обновлении образа не затрагиваются.
Итог
Navidrome закрывает задачу «свой стриминг» минимальными средствами:
Один
docker-compose.yml— сервис поднятSubsonic API — клиенты под любую платформу без дополнительной настройки
Потребляет ~100 МБ RAM, работает на самом скромном железе
Активно поддерживается, документация актуальная