mirror of
https://gitverse.ru/kpa39l/gotosocial.git
synced 2026-09-29 18:05:09 +00:00
3.0 KiB
3.0 KiB
GoToSocial Backup — Delta Spec
ADDED Requirements
Requirement: Consistent бэкап SQLite + медиа
- MUST: Скрипт
/opt/gotosocial/backup.shсоздаёт consistent-бэкап SQLite черезVACUUM INTO(илиsqlite3 .backup) — не просто копию файла - MUST: Бэкап включает медиа из
data/storage(локальные файлы) - MUST: Архив собирается в
/opt/gotosocial/backups/с именемgotosocial_<YYYYMMDD_HHMMSS>.tar.gz - MUST: Секреты (
.env) бэкапятся отдельным архивом (.envв git исключён) - SHOULD: Remote-медиа не бэкапится (пере-фетчится) — по официальной рекомендации
Scenario: Создание архива
- GIVEN запущен
bash /opt/gotosocial/backup.sh, WHEN проверить, THEN файлgotosocial_<ts>.tar.gzсоздан и непустой - GIVEN архив создан, WHEN
tar tzf <архив>, THEN содержитdata/sqlite.dbи файлы медиа
Requirement: Копия на Яндекс.Диск
- MUST: Бэкап копируется в
/mnt/yandex-disk/backup/gotosocial-backups/(mount Яндекс.Диска) - MUST: Если Яндекс.Диск не примонтирован — скрипт сообщает об ошибке и завершается с ненулевым кодом
- SHOULD: Копия второго архива (env) также на ЯД
Scenario: Копия на ЯД
- GIVEN Яндекс.Диск примонтирован, WHEN скрипт отработал, THEN файл присутствует на
/mnt/yandex-disk/backup/gotosocial-backups/ - GIVEN диск НЕ примонтирован, WHEN скрипт, THEN exit code != 0 и сообщение об ошибке
Requirement: Ротация бэкапов
- MUST: Локально хранится 7 дней (
find -mtime +7 -delete) - MUST: На Яндекс.Диске хранится 30 дней (
find -mtime +30 -delete) - SHOULD: Ротация применяется только к файлам
gotosocial_*
Scenario: Ротация
- GIVEN бэкап старше 7 дней локально, WHEN ротация, THEN файл удалён
- GIVEN бэкап старше 30 дней на ЯД, WHEN ротация, THEN файл удалён
Requirement: Автоматический запуск (cron/systemd)
- SHOULD: Бэкап запускается по расписанию (cron/systemd timer) — например ежедневно
- SHOULD: Запуск тихий при успехе (без шума), сообщает только при ошибке
Scenario: Запуск по расписанию
- GIVEN настроен таймер/cron, WHEN время запуска, THEN бэкап создан (файл с сегодняшней датой)
MODIFIED Requirements
(нет)