Подготовь релиз и место
Прочитай примечания к конкретному релизу. Проверь новые зависимости, параметры конфигурации и миграции. Распакуй доверенный архив в новый каталог и найди корень с 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.
Если нужен откат, останови службу и сохрани диагностику. Восстанавливай совместимый комплект старого кода, окружения, конфигурации и базы из проверенного архива. Замены только кода после миграции базы недостаточно. Новые данные, созданные после резервной копии, потребуют отдельного восстановления.