feat: add production data retention
This commit is contained in:
+5
-6
@@ -65,7 +65,7 @@
|
||||
- [ ] Проверить необходимые индексы PostgreSQL и планы запросов для activity, модерации, дедупликации и очистки rate limit; зафиксировать допустимый бюджет запросов пилота.
|
||||
- [ ] Провести security-проверку admin-аутентификации, CORS, security headers, загрузок и управления секретами; вынести допустимые origins в конфигурацию и исключить демонстрационные секреты в production-режиме.
|
||||
- [x] Проверить авторизацию повторной загрузки скриншота: используется отдельный одноразовый случайный токен, в БД хранится только SHA-256, UUID заявки недостаточно.
|
||||
- [ ] Определить сроки хранения ников, исходных payload, staging-наблюдений, moderation events и submission attempts; добавить документированную очистку/анонимизацию.
|
||||
- [x] Определить сроки хранения ников, исходных payload, staging-наблюдений, moderation events и submission attempts; добавлены настраиваемая dry-run-first очистка, тест и `docs/data-retention.md`.
|
||||
- [x] Добавить резервное копирование и документированное восстановление PostgreSQL и MinIO: консистентные `pg_dump` и MinIO API mirror, контрольные суммы, runbook и успешный изолированный drill с намеренным удалением данных (6 сентября 2026).
|
||||
- [ ] Проверить доступность интерфейса: клавиатура, focus states, контраст, подписи полей и семантика таблиц/карточек.
|
||||
- [ ] Провести Lighthouse-проверку основных страниц и устранить критические проблемы производительности.
|
||||
@@ -119,11 +119,10 @@
|
||||
|
||||
1. защита официального импорта от конкурентных запусков;
|
||||
2. пагинация/сортировка списочных API и индексы PostgreSQL;
|
||||
3. политика хранения и автоматическая очистка персональных/staging данных;
|
||||
4. UI/UX-пакеты B–D: мобильная главная, форма и рекорды;
|
||||
5. accessibility/admin safety и Lighthouse;
|
||||
6. мониторинг, DNS/TLS и проверка production-профиля на целевом сервере;
|
||||
7. финальное обновление README, лицензия кода и политика данных.
|
||||
3. UI/UX-пакеты B–D: мобильная главная, форма и рекорды;
|
||||
4. accessibility/admin safety и Lighthouse;
|
||||
5. мониторинг, DNS/TLS и проверка production-профиля на целевом сервере;
|
||||
6. финальное обновление README, лицензия кода и политика данных.
|
||||
|
||||
После каждого пункта необходимо:
|
||||
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
# Политика хранения данных закрытой альфы
|
||||
|
||||
Политика минимизирует персональные и диагностические данные, не разрушая обезличенную статистику клёва. Сроки считаются от `reported_at`, `created_at` или `last_seen_at` соответствующей записи.
|
||||
|
||||
| Данные | Срок | Действие |
|
||||
|---|---:|---|
|
||||
| HMAC-отпечатки IP для rate limit | 1 день | удалить запись |
|
||||
| Pending/rejected пользовательские уловы | 30 дней | стереть ник, комментарий, source URL, токен и скриншот; просроченный pending перевести в rejected с системным событием |
|
||||
| Ник, комментарий и скриншот одобренного пользовательского улова | 180 дней | анонимизировать, сохранив рыбу, точку, вес, снасть и время для агрегатов |
|
||||
| Неопубликованные/rejected staging-наблюдения внешних источников | 90 дней без обновления | удалить запись целиком |
|
||||
| Raw payload опубликованного внешнего наблюдения | 365 дней без обновления | очистить payload, сохранив URL, внешний ID и каноническую связь |
|
||||
| События модерации | 365 дней | удалить событие; сама обезличенная запись улова остаётся |
|
||||
| Официальные рекорды и их публичные поля | пока запись актуальна | сохранять для сверки; удаление регулируется процедурой обновления источника |
|
||||
|
||||
Сроки задаются переменными `RETENTION_*_DAYS` из `.env.production`. Минимальные значения ограничены конфигурацией, чтобы ошибочное значение не вызвало немедленную массовую очистку.
|
||||
|
||||
## Запуск
|
||||
|
||||
Сначала обязателен просмотр плана без изменений:
|
||||
|
||||
```bash
|
||||
docker compose --env-file .env.production -f compose.production.yaml exec -T api python -m app.cli cleanup-retention
|
||||
```
|
||||
|
||||
После проверки счётчиков и свежего backup:
|
||||
|
||||
```bash
|
||||
docker compose --env-file .env.production -f compose.production.yaml exec -T api python -m app.cli cleanup-retention --apply
|
||||
```
|
||||
|
||||
Команда выводит JSON с режимом, применёнными сроками и числом затронутых сущностей. Для альфы её следует запускать ежедневно после успешного backup. Ошибка удаления объекта MinIO прерывает обработку базы; повторный запуск безопасен.
|
||||
|
||||
Администратор может вручную удалить пользовательскую заявку раньше срока через очередь модерации. В таком случае ник, исходный payload и скриншот удаляются немедленно, а обезличенный tombstone и событие аудита остаются до штатной очистки.
|
||||
Reference in New Issue
Block a user