openspec: change deploy-gotosocial — развертывание GoToSocial (compose+config+backup+docs)

This commit is contained in:
2026-09-06 19:09:50 +00:00
commit d385d8b42e
19 changed files with 1888 additions and 0 deletions
@@ -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
(нет)