Ввиду недавних изменений на стриминговых платформах, давно хотел иметь свою собственную музыкальную библиотеку, к которой можно получить доступ с любого устройства. У меня конечно уже стоит Jellyfin, но хотелось отдельного решения для музыки. Остановился на Navidrome.

Почему Navidrome? Link to heading

Navidrome — это лёгкий и быстрый сервер для стриминга музыки с поддержкой Subsonic API. Написан на Go, использует SQLite в качестве базы данных и потребляет минимум ресурсов.

Из плюсов:

  • Лёгкость — написан на Go, потребляет мало RAM и CPU
  • Subsonic API — совместим с большинством клиентов Subsonic
  • Поддержка тегов — автоматически сканирует и индексирует метаданные
  • Транскодинг — встроенная поддержка FFmpeg
  • Веб-интерфейс и мобильные клиенты
  • Мультипользовательский режим — можно создать аккаунты для семьи

Что нам понадобится Link to heading

  • Сервер с DietPi
  • Домен (опционально, для удобного доступа извне)
  • Nginx в качестве reverse proxy

Установка Navidrome на DietPi Link to heading

Шаг 1: Установка через dietpi-software Link to heading

DietPi имеет встроенную поддержку Navidrome через dietpi-software. Запускаем:

dietpi-software

В меню выбираем Navidrome. Мастер автоматически:

  • Установит все зависимости
  • Настроит сервис для автозапуска
  • Создаст необходимые директории

Шаг 2: Настройка после установки Link to heading

После установки Navidrome будет доступен по адресу:

http://<IP-сервера>:4533

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

Шаг 3: Добавление музыки Link to heading

По умолчанию Navidrome ищет музыку в директории /mnt/dietpi_userdata/navidrome/music, но в интерфейсе можно будет добавить и свою библиотеку или в конфиге /mnt/dietpi_userdata/navidrome/navidrome.toml поменяйте путь:

MusicFolder = "/mnt/external/music"

на свою папку , она станет вашей основной библиотекой.

После изменения конфига перезапустите сервис:

dietpi-services restart navidrome

Шаг 4: Проверка статуса Link to heading

Проверяем что сервис запущен:

dietpi-services status navidrome

В ответе должно быть active (running).

Настройка Nginx в качестве reverse proxy Link to heading

Если вы хотите использовать доменное имя и HTTPS, нужно настроить reverse proxy. На DietPi это можно сделать через встроенную утилиту.

Шаг 1: Устанавливаем Nginx Link to heading

dietpi-software

Выбираем Nginx для установки.

Шаг 2: Получаем SSL сертификат Link to heading

Для настройки HTTPS сначала нужно получить сертификат через встроенную утилиту dietpi-letsencrypt:

dietpi-letsencrypt

Следуем инструкциям мастера:

  1. Выбираем домен navidrome.yourdomain.com
  2. Указываем email для уведомлений
  3. Выбираем Nginx как веб-сервер

После успешного выполнения сертификаты будут размещены в /etc/letsencrypt/live/navidrome.yourdomain.com/.

Шаг 3: Создаём конфиг для Navidrome Link to heading

Создаём файл конфига:

sudo nano /etc/nginx/sites-available/musicstream

С таким содержимым:

server {
    listen 80;
    listen [::]:80;
    server_name navidrome.yourdomain.com;

    location / {
        proxy_pass http://localhost: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_read_timeout 90;
    }

    include /etc/nginx/sites-dietpi/*.conf;

    listen [::]:443 ssl;
    http2 on;
    listen 443 quic;
    listen [::]:443 quic;
    quic_retry on;
    quic_gso on;
    add_header Alt-Svc 'h3=":443"; ma=86400' always;

    ssl_certificate /etc/letsencrypt/live/navidrome.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/navidrome.yourdomain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
Пояснения Link to heading
  • proxy_pass — перенаправляем запросы на Navidrome (порт 4533)
  • proxy_set_header — передаём оригинальные заголовки клиента
  • proxy_read_timeout — увеличиваем таймаут для стриминга
  • include /etc/nginx/sites-dietpi/*.conf — подключаем дополнительные конфиги DietPi
  • http2 on / quic — включаем HTTP/2 и HTTP/3 (QUIC) для лучшей производительности
  • Alt-Svc — заголовок для поддержки HTTP/3
  • ssl_certificate — пути к сертификатам Let’s Encrypt

Шаг 4: Включаем сайт Link to heading

sudo ln -s /etc/nginx/sites-available/musicstream /etc/nginx/sites-enabled/musicstream
sudo nginx -t
dietpi-services restart nginx

После перезагрузки Nginx ваш сервер будет доступен по HTTPS с поддержкой HTTP/2 и HTTP/3 (QUIC).

Также не забудьте открыть порт 443 в вашем фаерволле или роутере.

Клиенты для Navidrome Link to heading

Navidrome совместим с любым клиентом, поддерживающим Subsonic API. Вот некоторые из них:

Веб Link to heading

Встроенный веб-интерфейс Navidrome уже имеет полный функционал и адаптивный дизайн. Открыть его можно по адресу:

  • Локально: http://<IP-сервера>:4533
  • Через proxy: https://navidrome.yourdomain.com

Мобильные Link to heading

На телефоне я использую клиент Yuzic

Бекапы Link to heading

Для резервного копирования достаточно сохранить директорию /mnt/dietpi_userdata/navidrome — там находится SQLite база и конфиги

Заключение Link to heading

Navidrome — отличное решение для тех, кто хочет иметь свою музыкальную библиотеку с современным интерфейсом и минимальными затратами ресурсов. На DietPi разворачивается за 10 минут, а настройка Nginx proxy позволяет получить безопасный доступ по HTTPS с любого устройства.