SoundVault · Обновление сервера

Обновление с сохранением коллекции.

Остановить службу, сохранить данные, обновить код и проверить результат.

Подготовь релиз и место

Прочитай примечания к конкретному релизу. Проверь новые зависимости, параметры конфигурации и миграции. Распакуй доверенный архив в новый каталог и найди корень с soundvault.py. Не распаковывай релиз сразу поверх работающей установки.

Примеры ниже используют SQLite /opt/soundvault/music.db. Для внешней базы сделай её согласованный backup штатными средствами СУБД. Музыка в /srv/music требует отдельного резервного копирования.

Останови службу и сохрани копию

sudo systemctl stop soundvault
sudo systemctl is-active soundvault
# Продолжай только после остановки (inactive).
BACKUP_DIR="/var/backups/soundvault/$(date +%Y%m%d_%H%M%S)"
sudo install -d -m 700 "$BACKUP_DIR"
sudo tar -C /opt -czf "$BACKUP_DIR/application.tar.gz" soundvault
sudo chmod 600 "$BACKUP_DIR/application.tar.gz"
sudo tar -tzf "$BACKUP_DIR/application.tar.gz" > /dev/null

Копия включает конфигурацию, секреты, базу, возможные WAL/SHM-файлы, код и опубликованный APK. Храни её вне обновляемого каталога и проверь, что она читается. Согласуй остановку других процессов, которые могут писать в ту же базу.

Нельзя копировать только music.db при работающем SQLite/WAL. Не удаляй файлы -wal и -shm на работающем сервере.

Обнови всё дерево кода

Укажи точный путь к распакованному корню сервера. Здесь намеренно нет --delete: локальные данные и конфигурация должны сохраниться. Если релиз требует убрать конкретный старый файл, делай это по его инструкции после резервного копирования.

sudo rsync -a   --exclude='.env*' --exclude='soundvault.conf*'   --exclude='venv/' --exclude='.venv/'   --exclude='*.db*' --exclude='*.sqlite*'   --exclude='instance/' --exclude='logs/'   --exclude='static/apk/' --exclude='__pycache__/'   /path/to/extracted/server/ /opt/soundvault/
sudo chown -R soundvault:soundvault /opt/soundvault
sudo -u soundvault /opt/soundvault/venv/bin/pip install -r /opt/soundvault/requirements.txt

Обновляй soundvault.py, app/, static/ и templates/ вместе. Частичная замена одного app/ оставляет несовместимые части приложения. APK обновляется отдельно и не должен случайно исчезнуть; при его замене обновляй соответствующие метаданные релиза.

Проверь настройки и запусти

Сравни свою конфигурацию с требованиями релиза, сохраняя секреты и пути. При переходе со старыми связями федерации подготовь SOUNDVAULT_FEDERATION_KEY до миграции. Не заменяй существующие ключи случайными значениями.

sudo systemctl start soundvault
sudo systemctl status soundvault --no-pager
sudo journalctl -u soundvault -n 100 --no-pager
curl http://127.0.0.1:8008/api/health
curl http://127.0.0.1:8008/api/capabilities

Миграции выполняются на старте. Дождись DB schema ready и здорового состояния базы. Некоторые миграции выполняют VACUUM: для них нужно дополнительное свободное место, вплоть до двух размеров базы помимо backup.

Проверка и возврат

  • Войди, открой библиотеку, воспроизведи трек и проверь перемотку.
  • Проверь права обычного пользователя, загрузку и сканирование тестовой папки.
  • Если используются облако и федерация — проверь их отдельно.
  • Обнови страницу браузера с очисткой кэша и сравни версии в capabilities.

Если нужен откат, останови службу и сохрани диагностику. Восстанавливай совместимый комплект старого кода, окружения, конфигурации и базы из проверенного архива. Замены только кода после миграции базы недостаточно. Новые данные, созданные после резервной копии, потребуют отдельного восстановления.

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