Navidrome — лёгкий музыкальный сервер с веб-интерфейсом и совместимостью с Subsonic API. Он не хранит вашу коллекцию в облаке и не навязывает подписку: файлы лежат на диске, база и обложки — рядом, а слушать музыку можно в браузере, на телефоне и на десктопе. Сервер нетребователен к ресурсам и хорошо работает даже на мини-ПК или Raspberry Pi.

Что умеет Navidrome

  • Читает FLAC, MP3, AAC, OGG, Opus и другие форматы, берёт теги и обложки из файлов.
  • Строит библиотеку по исполнителям, альбомам и жанрам, поддерживает плейлисты и избранное.
  • Отдаёт поток по Subsonic API, поэтому подходит множество клиентов.
  • Умеет транскодировать «тяжёлые» форматы в более совместимые на лету.
  • Поддерживает несколько пользователей с отдельными плейлистами и историей.

Это не стриминговый каталог и не замена магазину. Библиотеку собирают из собственных дисков, записей и материалов, на которые у вас есть права.

Подготовка библиотеки

Порядок в каталогах экономит часы разбора. Простая схема Исполнитель/Альбом/Номер - Название.flac понятна и серверу, и человеку. Теги важнее имён файлов: именно из них строятся альбомы и сортировка.

sudo mkdir -p /srv/music /srv/navidrome/data
sudo chown -R 1000:1000 /srv/navidrome
sudo chmod -R a+rX /srv/music
find /srv/music -maxdepth 2 -type d | head -20

Для приведения тегов в порядок удобны MusicBrainz Picard или beets. Проверьте, что у альбома одинаковое имя исполнителя, заполнены номера треков и нет дублей с разным регистром. Если коллекция большая, первый скан займёт время; это нормально.

Docker Compose

Каталог с музыкой подключается только для чтения, данные сервера — отдельным томом. Пользователь контейнера должен иметь доступ к обоим каталогам.

services:
  navidrome:
    image: deluan/navidrome:latest
    container_name: navidrome
    user: "1000:1000"
    restart: unless-stopped
    ports:
      - "4533:4533"
    environment:
      ND_SCANNER_SCHEDULE: "@every 1h"
      ND_LOGLEVEL: "info"
      ND_SESSIONTIMEOUT: "24h"
    volumes:
      - /srv/navidrome/data:/data
      - /srv/music:/music:ro

Запуск и проверка журнала:

cd /opt/navidrome
docker compose up -d
docker compose logs -f --tail=100 navidrome

Интерфейс открывается на порту 4533. При первом запуске создайте администратора, затем добавьте обычных пользователей. Пароли должны быть отдельными: общий аккаунт на всю семью усложняет историю прослушивания и плейлисты.

В настройках пользователя можно запретить скачивание и загрузку файлов, отключить общий доступ и выдать права администратора. Для семьи достаточно отдельных аккаунтов с обычными правами, а администратора оставить один. Плейлисты хранятся в базе и переживают пересканирование, если треки остаются на месте.

Файл конфигурации

Параметры можно задавать переменными окружения или файлом navidrome.toml. Второй вариант удобнее для версионирования. Ключи чувствительны к регистру.

MusicFolder = "/music"
DataFolder = "/data"
Port = 4533
Address = "0.0.0.0"
Scanner.Schedule = "@every 1h"
SessionTimeout = "24h"
Transcoding.MaxConcurrent = 2
TranscodingCacheSize = "200MiB"
ImageCacheSize = "100MiB"
DefaultTheme = "Dark"

Если файл лежит в /data/navidrome.toml, контейнер подхватит его при старте. Переменные ND_* имеют приоритет над файлом, поэтому не задавайте одно и то же в двух местах. Для сервера за обратным прокси пригодится BaseURL, если приложение размещено в подкаталоге.

Сканирование и клиенты

Первый скан запускается автоматически. Повторный можно инициировать из интерфейса или командой внутри контейнера.

docker compose exec navidrome navidrome scan
docker compose logs --tail=50 navidrome | grep -i scan
curl -s http://127.0.0.1:4533/ping

Клиенты подключаются по адресу сервера, логину и паролю. На Android и iOS популярны substreamer и play:Sub, на десктопе — Feishin и Sonixd, в браузере работает собственный интерфейс. В настройках клиента указывайте http://сервер:4533 без лишнего пути, а при использовании HTTPS — домен из сертификата.

Если альбомы «развалились» на отдельные треки, проверьте теги альбома и исполнителя. Если обложек нет, добавьте cover.jpg в каталог альбома или встройте изображение в теги.

Обратный прокси и HTTPS

Для доступа через домен поставьте nginx. Важно отключить буферизацию, иначе перемотка и потоковое воспроизведение будут тормозить.

server {
    listen 443 ssl;
    server_name music.example.ru;

    location / {
        proxy_pass http://127.0.0.1:4533;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_buffering off;
        proxy_read_timeout 600s;
        client_max_body_size 0;
    }
}

Сертификат удобно получать через certbot. Не открывайте порт 4533 в интернет напрямую: прокси добавляет TLS и позволяет ограничить доступ по сети. После смены схемы обновите адрес в клиентах, иначе они будут обращаться к старому порту.

Транскодирование

FLAC на мобильном интернете расходует трафик. Navidrome может отдавать MP3 или Opus на лету, если в контейнере есть ffmpeg. Качество задаётся в профиле клиента, а кэш ограничивается параметром TranscodingCacheSize.

docker compose exec navidrome ffmpeg -version
docker stats --no-stream navidrome
du -sh /srv/navidrome/data/cache

Если транскодирование не работает, проверьте, что ffmpeg установлен в образе и что клиент запрашивает поддерживаемый формат. Для локальной сети проще включить прямое воспроизведение: качество выше, нагрузка на CPU ниже.

Мобильные клиенты умеют кэшировать треки для прослушивания без сети. Учитывайте, что кэш занимает место на телефоне, а при смене адреса сервера его иногда приходится очищать. Для экономии трафика включите транскодирование в настройках клиента, но не в самом сервере по умолчанию: прямое воспроизведение в локальной сети качественнее.

Типичные проблемы

  • Порт 4533 занят — измените публикацию или остановите конфликтующий сервис.
  • Пустая библиотека — проверьте, что каталог смонтирован и доступен пользователю 1000.
  • Обложки не видны — встройте изображение в теги или положите cover.jpg рядом с треками.
  • Клиент не подключается по HTTPS — сертификат должен быть доверенным, а домен совпадать.

Резервное копирование и обновление

База SQLite и настройки лежат в /data. Копировать файл базы на работающем сервере рискованно; используйте .backup или остановите контейнер на время архивации.

docker compose stop navidrome
sqlite3 /srv/navidrome/data/navidrome.db ".backup '/backup/navidrome.db'"
sudo tar -czf /backup/navidrome-$(date +%F).tar.gz -C /srv/navidrome data
docker compose start navidrome

Музыку отдельно архивировать не обязательно, если она уже лежит на защищённом массиве, но каталог data с пользователями и плейлистами нужен обязательно. Утилита sqlite3 ставится отдельным пакетом. Перед обновлением образа сделайте копию и прочитайте примечания к релизу; откат к предыдущему тегу возможен, но базу лучше сохранить: миграции схемы могут быть необратимыми.

Итог

Navidrome даёт домашней коллекции удобный веб-интерфейс и доступ с любых устройств без облачной зависимости. Секрет стабильной работы прост: аккуратные теги, отдельный каталог данных, резервные копии и обратный прокси с TLS. Начните с одной папки и проверьте сканирование, а затем добавляйте остальную библиотеку.

Насколько публикация полезна?

Нажмите на звезду, чтобы оценить!

Средняя оценка 0 / 5. Количество оценок: 0

Оценок пока нет. Поставьте оценку первым.

Поделиться: Telegram ВКонтакте