SoundVault · Установка сервера

Первый запуск SoundVault.

Пошаговая установка на Ubuntu 24.04: отдельная служба, библиотека и первый вход.

Перед установкой

Понадобятся Ubuntu 24.04, доступ sudo, дистрибутив сервера и свободное место для музыки, базы и резервных копий. Примеры используют /opt/soundvault и /srv/music. Если пути отличаются, замени их в командах, конфиге, nginx и unit-файле.

Используй доверенный архив проекта. Публичный URL репозитория здесь не указан: свяжись с автором для получения дистрибутива.

sudo apt update
sudo apt install -y python3 python3-venv python3-dev build-essential libffi-dev nginx acl unzip curl rsync ca-certificates
python3 --version

Используй Python 3.11 или новее; стандартный Python Ubuntu 24.04 подходит.

Пользователь и файлы приложения

sudo useradd --system --home /opt/soundvault --shell /usr/sbin/nologin --user-group soundvault
sudo install -d -o soundvault -g soundvault /opt/soundvault /opt/soundvault/logs
mkdir -p "$HOME/soundvault-release"
# Замени путь на конкретный скачанный архив
unzip /path/to/soundvault-server.zip -d "$HOME/soundvault-release"
find "$HOME/soundvault-release" -name soundvault.py

Найди каталог, непосредственно содержащий soundvault.py, app/, static/, templates/ и requirements.txt. В следующей команде укажи именно его, не родительскую папку архива.

sudo rsync -a --exclude='.env' --exclude='soundvault.conf'   /path/to/extracted/server/ /opt/soundvault/
sudo chown -R soundvault:soundvault /opt/soundvault
sudo -u soundvault python3 -m venv /opt/soundvault/venv
sudo -u soundvault /opt/soundvault/venv/bin/pip install -r /opt/soundvault/requirements.txt

Каталог музыки

sudo install -d -o soundvault -g soundvault -m 2770 /srv/music
sudo -u soundvault mkdir -p /srv/music/public /srv/music/users /srv/music/garbage
sudo setfacl -R -m u:www-data:rX /srv/music
sudo setfacl -R -d -m u:www-data:rX /srv/music

Службе нужны чтение и запись, nginx — только чтение для X-Accel-Redirect. Для ручного копирования файлов настрой группу или ACL своего пользователя. После копирования убедись, что soundvault может читать файлы и изменять каталоги. Для NFS/CIFS права могут задаваться параметрами монтирования.

Конфигурация

Создай /opt/soundvault/.env и /opt/soundvault/soundvault.conf по полному примеру настройки. Заполни секрет, пароль первого администратора и пути. Не требуется искать отсутствующие файлы .example в дистрибутиве.

sudoedit /opt/soundvault/.env
sudoedit /opt/soundvault/soundvault.conf
sudo chown soundvault:soundvault /opt/soundvault/.env /opt/soundvault/soundvault.conf
sudo chmod 600 /opt/soundvault/.env
sudo chmod 640 /opt/soundvault/soundvault.conf

Служба systemd

Создай /etc/systemd/system/soundvault.service:

[Unit]
Description=SoundVault
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=soundvault
Group=soundvault
WorkingDirectory=/opt/soundvault
Environment=PYTHONUNBUFFERED=1
ExecStart=/opt/soundvault/venv/bin/python /opt/soundvault/soundvault.py
Restart=on-failure
RestartSec=10
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/soundvault /srv/music

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now soundvault
sudo systemctl status soundvault --no-pager
curl http://127.0.0.1:8008/api/health

Запускать нужно через soundvault.py: он выполняет миграции и запускает фоновые задачи федерации. Не заменяй его произвольным вызовом Flask app. При ошибке прочитай журнал:

sudo journalctl -u soundvault -n 100 --no-pager

HTTPS и первый вход

  1. Настрой nginx и HTTPS. Не открывай порт 8008 в интернет.
  2. Войди под созданным администратором и смени пароль.
  3. Удали из .env параметры первоначального администратора и перезапусти службу.
  4. Положи альбом в public/, добавь обложку и запусти сканирование.
  5. Проверь воспроизведение и перемотку, затем создай обычного пользователя.
  6. В Android укажи HTTPS-адрес сервера и войди под этим пользователем.

APK раздаётся установленным сервером по /api/update/apk, если администратор разместил пакет. Отсутствующий пакет даст 404; проверь сведения в capabilities.

Подготовлено по исходному коду проекта · 7 октября 2026