• 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

Логин и пароль — те же что в веб-интерфейсе.

Полезные переменные окружения

Полный список в документации. Наиболее полезные:

Переменная

Значение по умолчанию

Описание

ND_SCANSCHEDULE

@every 1m (первый запуск)

Расписание сканирования

ND_LOGLEVEL

info

Уровень логов: error, warn, info, debug

ND_SESSIONTIMEOUT

24h

Время жизни сессии

ND_ENABLETRANSCODING

true

Транскодинг на лету

ND_DEFAULTTHEME

Dark

Тема веб-интерфейса

ND_LASTFM_APIKEY

API-ключ Last.fm для метаданных и scrobbling

ND_LISTENBRAINZ_ENABLED

false

Scrobbling в ListenBrainz

ND_MAXSIDEBARPLAYLISTS

10

Плейлистов в сайдбаре

Для включения 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, работает на самом скромном железе

  • Активно поддерживается, документация актуальная

Комментарии (0)