mirror of
https://gitverse.ru/kpa39l/gotosocial.git
synced 2026-09-29 18:05:09 +00:00
47 lines
3.0 KiB
Markdown
47 lines
3.0 KiB
Markdown
# 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
|
||
|
||
(нет) |