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

Navidrome – лёгкий open source музыкальный сервер: своя коллекция файлов, веб-интерфейс, стриминг по Subsonic-совместимому API на телефон, планшет или десктоп. Без подписки и без отдачи треков чужому облаку. Удобен на домашнем Linux-сервере или VPS рядом с медиатекой на диске.

Зачем он нужен

Если музыка лежит папками (FLAC, MP3 и остальное), а слушать хочется с телефона в дороге или с ноутбука в другой сети, варианты обычно такие: облачный стриминг, ручное копирование или свой сервер. Navidrome – второй путь: один раз указали каталог с музыкой, дальше библиотека, обложки, плейлисты и клиенты.

Пошаговая установка с Nginx и HTTPS на домашнем сервере разобрана отдельно: руководство в разделе про домашний сервер.

Что умеет

Форматы

  • MP3 – компактно, универсально;
  • FLAC – lossless для архива коллекции;
  • AAC / M4A – баланс качества и размера;
  • OGG / Opus – открытые кодеки;
  • WAV / AIFF и другие, которые понимает встроенный стек (для редких контейнеров смотрите актуальный список в документации).

Библиотека и веб-UI

  • сканирование каталога, артисты, альбомы, жанры;
  • плейлисты и избранное;
  • поиск и фильтры;
  • работа с метаданными и обложками;
  • несколько пользователей (раздача доступа семье без расшаривания всего диска).

Клиенты

Помимо встроенного веб-плеера работают Subsonic/OpenSubsonic-клиенты на Android, iOS, десктопе (Symfonium, Ultrasonic, play:Sub, Feishin и другие). Один сервер – много оболочек под задачу.


Быстрый старт

Бинарник или Docker – с официального сайта и репозитория. Минимально нужно указать папку с музыкой и data-каталог для БД и кэша.

Запуск с явным music folder:

navidrome --musicFolder="/mnt/data/music"

Часть настроек удобнее держать в navidrome.toml (или переменных окружения в Docker). Примеры:

MusicFolder = "/mnt/data/music"
DataFolder = "/var/lib/navidrome"
ScanSchedule = "@every 24h"
# размер кэша транскодинга/артефактов - подстройте под диск
CacheSize = "1500MB"
Address = "127.0.0.1"
Port = 4533

ScanSchedule задаёт периодическое сканирование новых файлов. Кэш имеет смысл увеличить, если часто слушаете с транскодингом в более лёгкий битрейт для мобильного интернета.

Первый пользователь создаётся при первом входе в веб-UI (по умолчанию порт 4533). Дальше можно завести остальные аккаунты в админке.


Доступ извне через Nginx и HTTPS

Наружу Navidrome лучше не светить «голым» HTTP. Типичная схема: systemd/Docker слушает localhost:4533, спереди Nginx (или Caddy) с Let’s Encrypt.

server {
    listen 443 ssl http2;
    server_name music.example.com;

    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    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 Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_buffering off;
    }
}

proxy_buffering off важен для стриминга: иначе Nginx может буферизовать ответ и портить воспроизведение. Сертификаты – certbot или другой ACME-клиент. Подробный разбор связки Navidrome + Nginx + HTTPS: на странице домашнего сервера.

Last.fm и ListenBrainz

В настройках пользователя или сервера можно включить scrobbling в Last.fm и ListenBrainz. История прослушиваний уходит в привычную статистику, коллекция при этом остаётся у вас на диске.

Кому зайдёт

  • есть NAS/VPS и терабайты своей музыки;
  • нужен доступ извне без Google Drive-костылей;
  • важны lossless и контроль над файлами;
  • хочется лёгкий сервис на Go, а не тяжёлый стек «как у корпоративного медиа».

Если коллекции почти нет и слушают только редакционные плейлисты Spotify/Yandex Music, смысл своего сервера минимальный. Если архив уже собран – Navidrome закрывает задачу «свой стриминг» без лишнего шума.

Источники и ссылки


Комментарии загружаются…