Как установить и настроить Navidrome на VPS
Если у вас накопилась коллекция музыки в 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 — брать выделенный сервер под это нет смысла.
Требования и выбор конфигурации сервера
Перед установкой определитесь с параметрами:
| Параметр | Минимум | Комфортно |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 512 МБ | 1-2 ГБ |
| Диск | под размер коллекции + 20% запаса | SSD/NVMe желательно |
| ОС | Ubuntu 24.04 LTS | Ubuntu 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 NumberYear- обложка альбома — либо встроена в файл, либо лежит рядом как
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 ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →