Свой Spotify на домашнем сервере: Полное руководство по Self-Hosting

Пошаговая инструкция по созданию собственного музыкального стриминга на базе Home Lab. Установка сервера через Docker, настройка доступа и клиентов. Полный контроль над вашей коллекцией.

Не указано

Подготовка сервера и установка 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/