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

47 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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
(нет)