Spotify на домашнем сервере: руководство по self‑hosting

Создайте свой Spotify на домашнем сервере: установите Docker-контейнер, настройте доступ и управляйте музыкой. Self-hosting без лишних затрат.

Не указано
Алексей Кузнецов
Алексей Кузнецов
Системный администратор25 января 2026 г.

Подготовка сервера и установка Docker

Для начала необходимо подготовить операционную систему (рекомендуется Ubuntu/Debian) и установить Docker. Docker позволяет упаковать приложение в контейнеры, что упрощает развертывание и обновление.

sudo apt update && sudo apt upgrade -y
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker $USER
newgrp docker

Подготовка музыкальной коллекции

Качество работы медиасервера зависит от структуры папок и корректности тегов файлов. Рекомендуется использовать структуру 'Исполнитель/Альбом (Год)/Треки' и убедиться, что все файлы имеют заполненные теги ID3v2.3 или Vorbis. Для автоматической обработки можно использовать инструменты вроде MusicBrainz Picard или Beets.

/Music
├── Artist Name
│   ├── Album Name (Year)
│   │   ├── 01 - Track Title.mp3
│   │   ├── 02 - Track Title.flac
│   │   └── cover.jpg
│   └── Best of Artist (Compilations)
└── Various Artists
    └── Soundtrack Name

Развертывание Navidrome через Docker Compose

Navidrome — легковесный медиасервер, совместимый с API Subsonic. Создайте папку для конфигурации и файл docker-compose.yml. Важно: замените путь '/путь/к/вашей/музыке' на реальный путь к вашей коллекции на сервере.

version: "3"
services:
  navidrome:
    image: navidrome/navidrome:latest
    container_name: navidrome
    user: 1000:1000 # Укажите ваш UID/GID (команда: id -u / id -g)
    ports:
      - "4533:4533"
    volumes:
      - ./data:/data
      - /путь/к/вашей/музыке:/music:ro # :ro означает read-only (только чтение)
    environment:
      - ND_SCANSCHEDULE=1h # Сканировать каждый час
      - ND_LOG_LEVEL=info
      - ND_SESSIONTIMEOUT=24h
    restart: always
    networks:
      - net-navidrome

networks:
  net-navidrome:
    driver: bridge

Настройка Reverse Proxy для публичного доступа

Для безопасного доступа к серверу из интернета рекомендуется использовать Reverse Proxy с автоматическим SSL. Caddy — отличный выбор для этого, так как он прост в настройке. Установите Caddy и отредактируйте конфигурационный файл Caddyfile, указав свой домен и хэш пароля для базовой аутентификации.

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
sudo nano /etc/caddy/Caddyfile

Настройка Caddyfile

Вставьте следующую конфигурацию в Caddyfile. Замените music.yourdomain.com на ваш домен. Хэш пароля для basicauth можно сгенерировать командой 'caddy hash-password'.

music.yourdomain.com {
    reverse_proxy localhost:4533
    basicauth /* {
        admin $2a$14$...
    }
    encode zstd gzip
    request_body {
        max_size 100MB
    }
}

Установка и настройка клиентов

Для прослушивания музыки используйте любое приложение, поддерживающее Subsonic API. Введите адрес сервера (домен с HTTPS или локальный IP), логин и пароль. Для Android подойдут DSub или Symfonium, для iOS — iSub или play:sub.

Параметры подключения:
- Сервер: https://music.yourdomain.com
- Порт: 443 (стандартный для HTTPS)
- Пользователь: admin (или созданный вами)
- Пароль: ваш_пароль

Резервное копирование данных

База данных Navidrome хранится в папке data. Для резервного копирования используйте стандартные утилиты Linux, такие как tar, или специализированные инструменты вроде Restic. Музыкальные файлы (которые вы не меняете часто) можно синхронизировать с внешним диском или облаком.

# Пример бэкапа базы данных Navidrome через cron
0 2 * * * tar -czf /backup/navidrome_$(date +\%F).tar.gz /home/user/navidrome/data

# Пример синхронизации музыки с внешним диском
rsync -av --delete /путь/к/музыке/ /mnt/external_hdd/backup_music/

Как создать собственный Spotify на базе Self-Hosting: Пошаговое руководство

Введение

Self-Hosting музыкального стриминга — это решение для тех, кто ценит приватность, полный контроль над данными и стремится снизить стоимость подписки на популярные коммерческие сервисы. В отличие от облачных решений, собственный сервер позволяет:

  • Хранить данные у себя: Никакой личной информации не покидает вашу инфраструктуру.
  • Полный контроль: Вы решаете, какая музыка доступна, какие функции включены и как работает система.
  • Экономия: Единоразовые затраты на оборудование или аренду VPS часто ниже ежемесячных платежей за подписки, особенно при большом количестве пользователей.

Этот гайд подробно разберет процесс создания альтернативы Spotify, используя свободное ПО и Docker.

Обзор идеи: Основные компоненты системы

Музыкальный сервер Self-Hosting — это связка нескольких компонентов:

  1. Сервер: Физический или виртуальный компьютер (VPS, NAS, домашний ПК), где будет работать софт.
  2. Хранилище: Место для хранения самих аудиофайлов (внутренний диск, внешний HDD, сетевое хранилище NAS).
  3. Каталог музыки: Структурированная коллекция файлов с метаданными (тегами ID3).
  4. Серверное ПО (Backend): Программа, которая сканирует файлы, создает базу данных, обрабатывает запросы и стримит аудио. Примеры: Navidrome, Ampache, Supyonic.
  5. Клиентский интерфейс (Frontend): Веб-интерфейс или мобильное приложение, которое подключается к серверу через API (обычно Subsonic API).

Шаг 1: Подготовка окружения

Выбор операционной системы (ОС)

Для стабильной работы и простоты управления рекомендуется использовать Linux-дистрибутивы с долгосрочной поддержкой:

  • Ubuntu Server (22.04/24.04 LTS): Самый популярный вариант, огромное комьюнити.
  • Debian: Очень стабильный и легковесный.
  • AlmaLinux/Rocky Linux: Для корпоративных окружений (если нужен RHEL-клон).

Системные требования

Минимальные требования скромны, так как аудиофайлы (особенно MP3/FLAC) имеют небольшой размер по сравнению с видео.

  • CPU: 2 ядра (для транскодирования лучше больше, для простого стриминга достаточно).
  • RAM: 2–4 ГБ (1 ГБ — минимум, но для базы данных и кэша лучше 2+).
  • Дисковое пространство: Зависит от коллекции. 100 ГБ — старт для любителя, 2+ ТБ — для энтузиаста.
  • Сеть: 100 Mbps порт для локальной сети; для доступа извне нужен стабильный интернет (хотя бы 10 Mbps выделенный канал).

Установка Docker

Docker упрощает развертывание и обновление приложений. Установка на Ubuntu/Debian:

# Обновление списка пакетов
sudo apt update && sudo apt upgrade -y

# Установка необходимых зависимостей
sudo apt install -y ca-certificates curl gnupg

# Добавление официального ключа Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Добавление репозитория
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Установка Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Добавление пользователя в группу docker (чтобы не писать sudo каждый раз)
sudo usermod -aG docker $USER

# Применение изменений группы (войдите снова в систему или выполните)
newgrp docker

Шаг 2: Сбор и подготовка музыкальной коллекции

Качество стриминга зависит от порядка в файлах.

Форматы файлов

  • Lossless (без потерь): FLAC, WAV, ALAC. Качество CD и выше, большой размер.
  • Lossy (с потерями): MP3, AAC, OGG Vorbis. Компромисс между качеством и размером (рекомендуется 320 kbps или V0).

Структура папок

Серверные программы сканируют файлы рекурсивно. Рекомендуемая структура:

/Music
├── Artist Name
│   ├── Album Name (Year)
│   │   ├── 01 - Track Title.mp3
│   │   ├── 02 - Track Title.flac
│   │   └── cover.jpg
│   └── Best of Artist (Compilations)
└── Various Artists
    └── Soundtrack Name

Теги (Метаданные)

Это самое важное. Файлы должны содержать корректные теги ID3v2.3 (для MP3) или Vorbis (для FLAC).

  • Обязательные поля: Artist, Album, Track Number, Title, Year.
  • Инструменты для очистки:
    • MusicBrainz Picard (Desktop): Автоматическое распознавание и тегирование по базе MusicBrainz.
    • Beets (CLI): Мощный менеджер коллекции для Linux (работает в Docker).
    • Mp3tag (Windows/Mac).

Совет: Перед запуском сервера убедитесь, что все файлы имеют обложки (Cover Art) в формате JPG или PNG, встроенные в файл или лежащие рядом с ними (folder.jpg).

Шаг 3: Выбор серверного ПО

Мы рассмотрим три популярных решения, полностью совместимых с Subsonic API (стандарт для подключения клиентов).

ХарактеристикаNavidromeAmpacheSupyonic
СложностьНизкаяСредняя/ВысокаяСредняя
ИнтерфейсСовременный (React)КлассическийСовременный (Material UI)
ОсобенностиОчень легкий, быстрый сканерПоддержка видео, подкастовТот же Navidrome, но с расширенным UI
РекомендацияЛучший выбор для началаДля продвинутых пользователейДля любителей Material Design

В этом руководстве мы развернем Navidrome — самый простой и эффективный вариант.

Шаг 4: Установка и конфигурация Navidrome через Docker

Мы будем использовать Docker Compose для управления контейнером.

  1. Создайте папку для конфигурации:

    mkdir -p ~/navidrome/data
    cd ~/navidrome
    
  2. Создайте файл docker-compose.yml:

    nano docker-compose.yml
    
  3. Вставьте следующее содержимое (не забудьте изменить пути к вашей музыке):

    version: "3"
    services:
      navidrome:
        image: navidrome/navidrome:latest
        container_name: navidrome
        user: 1000:1000 # Укажите ваш UID/GID (команда: id -u / id -g)
        ports:
          - "4533:4533"
        volumes:
          - ./data:/data
          - /путь/к/вашей/музыке:/music:ro # :ro означает read-only (только чтение)
        environment:
          - ND_SCANSCHEDULE=1h # Сканировать каждый час
          - ND_LOG_LEVEL=info
          - ND_SESSIONTIMEOUT=24h
        restart: always
        networks:
          - net-navidrome
    
    networks:
      net-navidrome:
        driver: bridge
    
  4. Запустите контейнер:

    docker compose up -d
    
  5. Проверьте логи (первый запуск может занять время на сканирование):

    docker compose logs -f
    

Шаг 5: Настройка доступа

Локальный доступ

Откройте браузер и перейдите по адресу: http://<IP-вашего-сервера>:4533.

  • Логин по умолчанию: admin / admin (система предложит сменить пароль при первом входе).

Публичный доступ (Reverse Proxy)

Открывать порты напрямую в роутер небезопасно. Используем Reverse Proxy (например, Caddy — он проще в настройке SSL, чем Nginx).

Установка Caddy:

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

Настройка Caddy (Caddyfile): Отредактируйте конфиг: sudo nano /etc/caddy/Caddyfile.

music.yourdomain.com {
    reverse_proxy localhost:4533

    # Базовая аутентификация (опционально, но рекомендуется для публичного доступа)
    basicauth /* {
        # Хэш пароля генерируется командой: caddy hash-password
        admin $2a$14$...
    }

    # Сжатие и настройки для медиа
    encode zstd gzip
    request_body {
        max_size 100MB
    }
}

Перезапустите Caddy:

sudo systemctl restart caddy

Важно: У вас должен быть куплен домен и прописан A-запись на IP вашего сервера. Caddy автоматически подтянет SSL сертификат (HTTPS).

Шаг 6: Установка и настройка клиентов

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

Веб-интерфейс

Доступен по адресу вашего сервера. Он адаптивен и работает на ПК и мобильных устройствах.

Мобильные приложения

Скачайте приложение, поддерживающее Subsonic API:

  • Android: DSub, Subsonic, Symfonium (платный, но очень функциональный).
  • iOS: iSub, AVSub, play:sub.

Настройка в приложении:

  1. Введите адрес сервера: https://music.yourdomain.com (или IP:4533 для локальной сети).
  2. Логин/пароль (те, что вы задали в веб-интерфейсе).
  3. Протокол: HTTPS (если настроен Caddy/Nginx).

Шаг 7: Продвинутая настройка

Метаданные и обложки

Для автоматического скачивания обложек и выравнивания тегов можно настроить Beets в отдельном Docker-контейнере или запускать его периодически как скрипт.

Автоматизация загрузки

Используйте Lidarr (аналог Sonarr для музыки) для автоматической загрузки новинок с торрентов/декстеров. Lidarr интегрируется с Navidrome.

  • Ссылка: Lidarr
  • В Lidarr настройте корневую папку как /music (ту же, что монтируется в Navidrome).

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

Навидром хранит базу данных (SQLite) и настройки в папке data.

  1. База данных: Используйте restic или borg для бэкапа папки ~/navidrome/data.
  2. Музыка: Ваша музыка — это ваши файлы. Используйте rsync или rclone для синхронизации с внешним диском или облаком (шифруя данные перед отправкой).

Пример простого бэкапа через cron (ежедневно):

0 2 * * * tar -czf /backup/navidrome_$(date +\%F).tar.gz /home/user/navidrome/data

Решение частых проблем

  1. Сервер не видит файлы:

    • Проверьте права доступа. Пользователь внутри контейнера (UID 1000) должен иметь права на чтение файлов на хосте.
    • Проверьте путь монтирования в docker-compose.yml.
  2. Ошибка авторизации в мобильном приложении:

    • Убедитесь, что вы используете HTTPS, если настроен прокси. Некоторые приложения блокируют HTTP-соединения.
    • Проверьте, не заблокирован ли порт брандмауэром (ufw allow 4533/tcp).
  3. Транскодирование (на слабых устройствах):

    • Navidrome по умолчанию отдает файлы как есть. Если вы слушаете FLAC на мобильном с медленным интернетом, включите транскодирование в настройках веб-интерфейса (Transcoding -> Convert to MP3).
  4. База данных повреждена:

    • Остановите контейнер.
    • Сделайте копию файла navidrome.db (в папке data).
    • Удалите оригинальный файл и перезапустите сканер (Navidrome пересоздаст базу, но плейлисты могут слететь).

Заключение

Создание собственного музыкального сервера — это задача, которую может решить даже начинающий системный администратор благодаря Docker и готовым образам.

  • Преимущества: Полная приватность, отсутствие рекламы, поддержка любых форматов (включая FLAC), нет ограничений по количеству треков (кроме дискового пространства).
  • Дальнейшие шаги: Изучите интеграцию с Last.fm для скробблирования, настройте автоматическую загрузку через Lidarr или Arr-стек.
  • Альтернативы: Если вам нужен акцент на радио и подкасты, посмотрите в сторону Airsonic-Advanced или Gonic (легковесный аналог Navidrome на Go).

FAQ (Часто задаваемые вопросы)

Q: Нужен ли мощный сервер для FLAC файлов? A: Для простого потокового воспроизведения (стриминга) мощный CPU не требуется. Требования возрастают, если вы планируете в реальном времени перекодировать (транскодировать) FLAC в MP3 на лету для слабых устройств.

Q: Можно ли использовать один и тот же аккаунт на нескольких устройствах одновременно? A: Да, Navidrome поддерживает множественные сессии. Количество ограничено только ресурсами сервера (сетью и CPU).

Q: Как обновить Navidrome? A: Если используете Docker Compose, выполните команды:

docker compose pull
docker compose up -d

Обновление происходит автоматически, данные (музыка и настройки) сохраняются в томах (volumes).

Q: Что делать, если провайдер блокирует порты? A: Используйте стандартные порты 80 (HTTP) и 443 (HTTPS) для веб-интерфейса. Навидром продолжит работать на порту 4533 внутри локальной сети, а Caddy/Nginx будут "выносить" его в интернет через порты 80/443.

Поделиться:TelegramX / TwitterVK