Files
gotosocial/openspec/changes/deploy-gotosocial/specs/gotosocial-backup/spec.md
T

3.0 KiB
Raw Blame History

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

(нет)