MAATRIX / Блог / Как установить и настроить Navidrome на VPS

Как установить и настроить Navidrome на VPS

MAATRIX

Если у вас накопилась коллекция музыки в FLAC и MP3, а Spotify не знает половину альбомов или банально недоступен — вопрос решается за вечер. Navidrome — open-source медиасервер, который превращает папку с файлами на VPS в полноценный стриминговый сервис со своим веб-плеером и поддержкой десятков мобильных приложений через протокол Subsonic. Ниже — установка с нуля, настройка под реальную коллекцию и типичные грабли, на которые я сам наступал.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое Navidrome и зачем он нужен

Navidrome — это сервер потоковой музыки, написанный на Go, с открытым исходным кодом. Он не хранит музыку сам — вы указываете ему папку на диске, а он сканирует её, вытаскивает метаданные (исполнитель, альбом, обложка, год), строит библиотеку и отдаёт всё это через веб-интерфейс или API.

Ключевая особенность — совместимость с протоколом Subsonic API. Это значит, что вместо фирменного приложения Navidrome можно использовать любой из десятков клиентов, которые изначально писались под Subsonic и Airsonic: DSub, Substreamer, play:Sub на iOS, Symfonium на Android и так далее. Часть из них платные, но однократно, без подписки — что уже плюс по сравнению с обычными стриминговыми сервисами.

Ресурсоёмкость у Navidrome низкая: сам сервер спокойно работает на 512 МБ — 1 ГБ RAM и одном ядре, основная нагрузка приходится на диск (место под музыку) и, при необходимости, на транскодирование потока на лету. Для коллекции в 50-100 ГБ и пары одновременных слушателей достаточно бюджетного VPS — брать выделенный сервер под это нет смысла.

Требования и выбор конфигурации сервера

Перед установкой определитесь с параметрами:

ПараметрМинимумКомфортно
CPU1 vCPU2 vCPU
RAM512 МБ1-2 ГБ
Дискпод размер коллекции + 20% запасаSSD/NVMe желательно
ОСUbuntu 24.04 LTSUbuntu 24.04 LTS
Сетьот 100 Мбит/сот 500 Мбит/с при нескольких слушателях

Если коллекция уже в FLAC и вы не планируете транскодировать каждый поток «на лету» под мобильную сеть — CPU почти не нагружается: Navidrome в основном отдаёт файлы как есть (direct stream). Транскодирование включается по требованию клиента (например, чтобы не гонять FLAC по 3G) и тогда действительно ест ядро — закладывайте запас, если ожидаете нескольких активных слушателей одновременно.

Диск — главный лимитирующий фактор. Считайте объём коллекции заранее: библиотека в 200 ГБ FLAC требует соответствующего тарифа с запасом на рост. Расширить диск на VPS обычно можно позже без переустановки, но проще сразу взять с запасом.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Установка через Docker Compose

Самый чистый способ развернуть Navidrome — через Docker. Если Docker ещё не установлен, сначала поставьте его штатным способом для Ubuntu 24.04, затем переходите к самому сервису.

Создайте директорию проекта и структуру папок:

mkdir -p ~/navidrome/{data,music}
cd ~/navidrome

В ~/navidrome/music вы будете хранить саму коллекцию (или примонтируете туда сетевое хранилище — об этом ниже), в data Navidrome держит свою базу данных SQLite, кэш обложек и конфиг.

Файл docker-compose.yml:

services:
  navidrome:
    image: deluan/navidrome:latest
    container_name: navidrome
    restart: unless-stopped
    ports:
      - "127.0.0.1:4533:4533"
    environment:
      ND_SCANSCHEDULE: "1h"
      ND_LOGLEVEL: "info"
      ND_SESSIONTIMEOUT: "24h"
      ND_BASEURL: ""
      ND_ENABLETRANSCODINGCONFIG: "true"
      ND_SPOTIFY_ID: ""
      ND_SPOTIFY_SECRET: ""
    volumes:
      - ./data:/data
      - ./music:/music:ro
    user: "1000:1000"

Обратите внимание на порт: он привязан только к 127.0.0.1, наружу сервис не торчит напрямую. Это сделано намеренно — снаружи Navidrome будет виден только через reverse proxy с SSL, о котором ниже. Флаг :ro на volume с музыкой — тоже не случайность: Navidrome нужен только для чтения, права на запись в директорию с исходниками ему ни к чему.

Запуск:

docker compose up -d

Проверить, что контейнер поднялся и не падает в рестарт-луп:

docker compose logs -f navidrome

При первом запуске Navidrome создаёт базу и ждёт создания администратора — это делается уже через веб-интерфейс.

Загрузка музыки и структура коллекции

Скопируйте коллекцию в ~/navidrome/music. Для разовой заливки с локальной машины удобен rsync:

rsync -avz --progress ~/Music/ user@your-server-ip:~/navidrome/music/

Для больших библиотек это может занять часы — процесс лучше запускать в screen или tmux, чтобы разрыв SSH-сессии не оборвал передачу.

Если музыка уже в облаке (Google Drive, Yandex.Disk, S3-совместимом хранилище), проще не копировать всё вручную, а смонтировать хранилище через rclone — подробный разбор есть в статье про установку rclone на VPS.

Navidrome хорошо работает с любой структурой папок, но извлекает максимум пользы из правильных тегов ID3/Vorbis Comments внутри файлов, а не из имён папок. Минимальный набор тегов, который стоит проверить перед заливкой:

  • Artist / AlbumArtist — для сборников и разных исполнителей это разные поля, путать их не стоит
  • Album, Title, Track Number
  • Year
  • обложка альбома — либо встроена в файл, либо лежит рядом как cover.jpg

Для массового исправления тегов удобны beets или MusicBrainz Picard — прогонять коллекцию через них лучше до заливки на сервер, локально, это ощутимо быстрее.

После заливки первого куска коллекции зайдите в веб-интерфейс по адресу http://your-server-ip:4533 (пока без домена, временно откройте порт или пробросьте через SSH-туннель: ssh -L 4533:localhost:4533 user@your-server-ip), создайте администратора и дождитесь окончания первого скана — он идёт в фоне, прогресс виден в логах контейнера.

Публикация через домен и SSL

Открывать порт 4533 наружу без шифрования — плохая идея: логин и пароль будут ходить в открытом виде. Привяжите поддомен и настройте reverse proxy с автоматическим SSL.

Если у вас уже стоит Caddy на сервере — конфиг получится буквально в несколько строк:

music.yourdomain.com {
    reverse_proxy 127.0.0.1:4533
}

Caddy сам получит сертификат Let's Encrypt и настроит редирект с HTTP на HTTPS. Если Caddy ещё не установлен, пошаговая установка описана в статье про Caddy с авто-SSL на Ubuntu 24.04 — процесс занимает 10-15 минут.

Для Nginx конфиг чуть длиннее, а сертификат придётся получать отдельно через certbot:

server {
    listen 80;
    server_name music.yourdomain.com;

    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";
    }
}

После этого в DNS создайте A-запись для music.yourdomain.com, указывающую на IP вашего сервера, и подождите распространения (обычно от нескольких минут до пары часов).

Не забудьте и про базовую защиту периметра — брандмауэр должен разрешать только 80/443/22, порт 4533 наружу светить не нужно вообще. Как это настроить, разобрано в статье про UFW на VPS.

Пользователи, плейлисты и мобильные клиенты

Создавать пользователей удобнее всего через веб-интерфейс: раздел Settings → Users. Каждому слушателю — свой аккаунт, это важно и для истории прослушиваний, и для персональных плейлистов, и на случай, если понадобится отозвать доступ одному человеку, не трогая остальных.

Роли в Navidrome простые: обычный пользователь и администратор. Права на управление библиотекой, сканирование и настройки транскодирования — только у админа.

Для мобильного доступа Navidrome реализует Subsonic API, поэтому подключение в клиенте выглядит так:

  • Server address: https://music.yourdomain.com
  • Username / Password: созданные в веб-интерфейсе
  • протокол — Subsonic (иногда указывается явно как "Subsonic API")

Из клиентов, которые на практике работают стабильно: Symfonium и Ultrasonic на Android, play:Sub и Amperfy на iOS. Плейлисты, созданные в веб-интерфейсе, синхронизируются с клиентами через тот же API — отдельно ничего настраивать не нужно.

Транскодирование и работа с разными форматами

Если в коллекции есть FLAC, а слушать вы иногда будете с мобильного интернета — прямая раздача исходника не всегда уместна: FLAC-альбом может весить 300-500 МБ, и на слабом канале это будет заикаться. Здесь помогает транскодирование на лету.

В Navidrome транскодинг настраивается в Settings → Transcoding. Нужен установленный ffmpeg — если используете официальный Docker-образ deluan/navidrome, он уже внутри.

Создайте профиль транскодирования, например, для мобильной сети:

  • Name: mp3-mobile
  • Command: ffmpeg -i %s -map 0:0 -b:a %bk -v 0 -f mp3 -
  • Target format: mp3
  • Default bitrate: 128 (или 192 — по вкусу и ширине канала)

Затем в профиле пользователя (Settings → Users → выбрать пользователя) можно назначить этот профиль по умолчанию — тогда клиент получит уже пережатый поток, а не оригинал.

Важный нюанс: транскодирование грузит CPU, и при нескольких одновременных слушателях с включённым транскодингом однопроцессорный VPS может начать захлёбываться. Если активных стримов с транскодингом обычно больше одного — закладывайте 2 vCPU и выше.

Для сравнения с похожими self-hosted решениями (Jellyfin умеет транскодировать не только аудио, но и видео, и подходит, если кроме музыки нужны фильмы и сериалы) можно посмотреть статью про установку Jellyfin на VPS — если задача шире, чем просто музыка, возможно, стоит сразу смотреть в его сторону.

Бэкапы, обновления и обслуживание

Данные Navidrome, которые нужно бэкапить — это не сама музыка (она у вас и так есть в исходном хранилище), а папка data: там лежит база SQLite с плейлистами, историей прослушиваний, пользователями и настройками транскодирования. Потерять её не смертельно, но восстанавливать плейлисты руками неприятно.

Простой скрипт для регулярного бэкапа:

#!/bin/bash
BACKUP_DIR=~/backups/navidrome
DATE=$(date +%Y%m%d-%H%M%S)
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/navidrome-data-$DATE.tar.gz" -C ~/navidrome data
find "$BACKUP_DIR" -name "navidrome-data-*.tar.gz" -mtime +14 -delete

Добавьте его в cron на ежедневный запуск и отдельно выгружайте архив за пределы сервера — на тот же rclone-смонтированный облачный диск, например.

Обновление до новой версии — это просто пересборка контейнера на новом образе:

docker compose pull
docker compose up -d

База данных SQLite при обновлениях мигрируется автоматически, откатов схемы делать вручную не приходится — но перед major-обновлением лучше на всякий случай сделать свежий бэкап data, как описано выше.

Доступ к серверу по SSH — тоже часть обслуживания, и пароль лучше заменить ключами: как это сделать, описано в статье про SSH-ключи вместо пароля на VPS.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Navidrome бесплатен?

Да, сам сервер — open-source (GPLv3) и бесплатен полностью. Платить придётся разве что за отдельные сторонние мобильные клиенты — часть из них однократно платные, но без подписки.

Можно ли слушать музыку без интернета, скачав её в приложение?

Зависит от клиента: некоторые Subsonic-совместимые приложения (например, Symfonium) поддерживают офлайн-кэширование треков, сам Navidrome офлайн-режим не реализует — это функция клиента.

Что делать, если сервер не видит новые файлы после заливки?

Сканирование по расписанию (ND_SCANSCHEDULE) идёт не мгновенно — запустите ручное сканирование в Settings → Scan library, либо дождитесь ближайшего цикла по расписанию из конфига.

Подходит ли Navidrome для больших коллекций (500 ГБ и больше)?

Да, ограничений на размер библиотеки в самом Navidrome нет — упрётесь скорее в объём диска на сервере, чем в возможности сервиса. Первое полное сканирование большой коллекции просто займёт больше времени.

Чем Navidrome отличается от Plex или Jellyfin для музыки?

Navidrome специализирован именно под аудио и заметно легче по требованиям к ресурсам; Plex и Jellyfin — универсальные медиасерверы (видео, музыка, фото), с более тяжёлым интерфейсом и бóльшим потреблением ресурсов при аналогичной задаче.

Нужен ли отдельный NAS или хватит VPS?

Для коллекции разумного объёма и доступа через интернет VPS удобнее NAS — не нужно держать домашний сервер включённым и настраивать проброс портов через домашний роутер, весь трафик и доступность уже на стороне дата-центра.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →