mirror of
https://gitverse.ru/kpa39l/gotosocial.git
synced 2026-09-29 09:55:10 +00:00
openspec: change deploy-gotosocial — развертывание GoToSocial (compose+config+backup+docs)
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
# 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
|
||||
|
||||
(нет)
|
||||
Reference in New Issue
Block a user