infra/_scripts/backup/README.md

📦 Система бекапов с Яндекс.Диском

Версия: 2.0
Дата: 2025-11-12
Статус: Готова к использованию


🎯 Обзор

Автоматическая система резервного копирования с хранением на Яндекс.Диске.

Преимущества:
- ✅ Автоматические ежедневные бекапы БД
- ✅ Еженедельные полные бекапы workspace
- ✅ Offsite хранение на Яндекс.Диске
- ✅ Автоматическая очистка старых бекапов
- ✅ Скрипты восстановления
- ✅ Принцип 3-2-1 (3 копии, 2 носителя, 1 offsite)


📋 Что бекапится

1. DEV-PRO Control Plane

Расписание: Воскресенье 03:00 (автоматически)
Хранение: Локально + Яндекс.Диск
Retention: 30 дней

2. Marketplace БД

Расписание: Ежедневно 04:00 (после настройки)
Хранение: Локально + Яндекс.Диск
Retention: 30 дней


🚀 Быстрый старт

ШАГ 1: Получить токен Яндекс.Диска

  1. Перейти по ссылке:
    https://oauth.yandex.ru/authorize?response_type=token&client_id=423de84129304ccab38c6e7c8c6ae1cf

  2. Авторизоваться в Яндекс

  3. Разрешить доступ

  4. Скопировать access_token из URL:
    https://oauth.yandex.ru/verification_code#access_token=ВАШТОКЕН&...

ШАГ 2: Настроить rclone

cd $WORKSPACE/scripts/backup
./setup-yandex-disk.sh "ВАШ_ТОКЕН"

Скрипт:
- Создаст конфиг rclone
- Проверит подключение
- Покажет информацию о Яндекс.Диске

ШАГ 3: Создать структуру папок

./create-yandex-structure.sh

Создаст на Яндекс.Диске:

/backups-workspace/
├── dev-pro/              (Control Plane)
└── marketplace/
    ├── db/               (Ежедневные БД)
    ├── snapshots/        (Перед deploy)
    └── full/             (Еженедельные полные)

ШАГ 4: Настроить автоматические бекапы

Marketplace БД (ежедневно в 04:00):

crontab -e

Добавить:

# Marketplace DB backup
0 4 * * * $WORKSPACE/scripts/backup/backup-marketplace-db.sh >> /var/log/marketplace-backup.log 2>&1

DEV-PRO уже настроен (воскресенье 03:00) и теперь грузит на Яндекс.Диск автоматически!

ШАГ 5: Проверить

# Тестовый backup marketplace БД
./backup-marketplace-db.sh

# Проверить что файлы на Яндекс.Диске
rclone ls yandex:/backups-workspace/marketplace/db/

# Проверить квоту
rclone about yandex:

📚 Доступные скрипты

setup-yandex-disk.sh

Назначение: Первоначальная настройка rclone

Использование:

./setup-yandex-disk.sh "ВАШ_ТОКЕН"

Что делает:
- Создаёт конфиг rclone
- Проверяет подключение
- Показывает информацию о диске


create-yandex-structure.sh

Назначение: Создание структуры папок на Яндекс.Диске

Использование:

./create-yandex-structure.sh

Что делает:
- Создаёт все необходимые папки
- Показывает структуру


backup-marketplace-db.sh

Назначение: Backup БД marketplace

Использование:

# Вручную
./backup-marketplace-db.sh

# Или через cron (рекомендуется)
0 4 * * * $WORKSPACE/scripts/backup/backup-marketplace-db.sh

Что делает:
1. Создаёт backup БД с компрессией (gzip)
2. Проверяет целостность
3. Загружает на Яндекс.Диск
4. Удаляет старые бекапы (>30 дней)
5. Логирует в /var/log/marketplace-backup.log

Вывод:
- Локально: /var/backups/marketplace/db/marketplace-db-YYYYMMDD_HHMMSS.db.gz
- Облако: yandex:/backups-workspace/marketplace/db/


sync-to-yandex.sh

Назначение: Ручная синхронизация локальных бекапов с Яндекс.Диском

Использование:

# Синхронизировать всё
./sync-to-yandex.sh all

# Только DEV-PRO
./sync-to-yandex.sh dev-pro

# Только Marketplace
./sync-to-yandex.sh marketplace

Что делает:
- Синхронизирует локальную папку с облаком
- Показывает прогресс
- Выводит статистику

Когда использовать:
- После ручных бекапов
- Для проверки синхронизации
- При проблемах с автоматической загрузкой


restore-marketplace-db.sh

Назначение: Восстановление БД из backup

Использование:

# Из локального файла
./restore-marketplace-db.sh local /var/backups/marketplace/db/marketplace-db-20251112_040000.db.gz

# С Яндекс.Диска
./restore-marketplace-db.sh yandex marketplace-db-20251112_040000.db.gz

Что делает:
1. Создаёт safety backup текущей БД
2. Проверяет целостность backup
3. Останавливает приложение
4. Восстанавливает БД
5. Проверяет восстановленную БД

⚠️ ВНИМАНИЕ:
- Текущая БД будет заменена!
- Приложение будет остановлено!
- Создаётся safety backup в /tmp/


🔍 Проверка и мониторинг

Проверить статус Яндекс.Диска

# Информация о диске (квота, использовано)
rclone about yandex:

# Список файлов
rclone ls yandex:/backups-workspace/

# Размер папки
rclone size yandex:/backups-workspace/marketplace/

Проверить локальные бекапы

# DEV-PRO
ls -lah /var/backups/dev-pro/

# Marketplace
ls -lah /var/backups/marketplace/db/

Проверить логи

# DEV-PRO backup
tail -50 /var/log/dev-pro-backup.log

# Marketplace backup
tail -50 /var/log/marketplace-backup.log

Проверить cron задачи

crontab -l

Должно быть:

# DEV-PRO (уже есть)
0 3 * * 0 $WORKSPACE/infra/@infra-dev-pro/scripts/backup.sh >> /var/log/dev-pro-backup.log 2>&1

# Marketplace (добавить после настройки)
0 4 * * * $WORKSPACE/scripts/backup/backup-marketplace-db.sh >> /var/log/marketplace-backup.log 2>&1

🆘 Troubleshooting

Ошибка: "Яндекс.Диск не настроен"

Решение:

./setup-yandex-disk.sh "ВАШ_ТОКЕН"

Ошибка: "Failed to create file system"

Причина: Неверный или истёкший токен

Решение: Получить новый токен и переконфигурировать

Медленная загрузка

Причина: Ограничения Яндекс.Диска или интернета

Решение:
- Проверить скорость интернета
- Бекапы загружаются в фоне ночью
- Можно настроить --bwlimit в rclone

Backup не создаётся автоматически

Проверить:

# 1. Cron задача существует
crontab -l | grep backup

# 2. Скрипт исполняемый
ls -l $WORKSPACE/scripts/backup/*.sh

# 3. Логи cron
grep CRON /var/log/syslog | tail -20

📊 Статистика и размеры

Типичные размеры бекапов

DEV-PRO Control Plane:
- Архив: ~4-5 MB
- На Яндекс.Диске: ~4-5 MB
- Retention: 30 дней = ~120-150 MB

Marketplace БД:
- SQLite: ~400 KB
- Сжатый (gzip): ~100 KB
- Retention: 30 дней = ~3 MB

Итого на Яндекс.Диске:
- ~150-200 MB в месяц
- ~1.8 GB в год (при текущем размере)


🔒 Безопасность

Токен rclone

Где хранится:

~/.config/rclone/rclone.conf

Права доступа:

chmod 600 ~/.config/rclone/rclone.conf

ВАЖНО:
- Токен = полный доступ к Яндекс.Диску
- Не коммитить в git
- Не показывать в логах
- Хранить только на сервере

Бекапы БД

Что НЕ бекапится:
- .env файлы (содержат секреты)
- Пароли в открытом виде

Что бекапится:
- SQLite БД (содержит хэши паролей)
- Код (публичный)


📅 Расписание

┌───────────────────────────────────────────────┐
│ ПОНЕДЕЛЬНИК - СУББОТА                         │
├───────────────────────────────────────────────┤
│ 04:00  Marketplace БД backup → Яндекс.Диск    │
└───────────────────────────────────────────────┘

┌───────────────────────────────────────────────┐
│ ВОСКРЕСЕНЬЕ                                   │
├───────────────────────────────────────────────┤
│ 03:00  DEV-PRO full backup → Яндекс.Диск      │
│ 04:00  Marketplace БД backup → Яндекс.Диск    │
└───────────────────────────────────────────────┘

🔗 Ссылки

Документация:
- YANDEX-DISK-SETUP.md - Детальная настройка
- rclone docs - Официальная документация rclone

Скрипты:
- $WORKSPACE/scripts/backup/ - Все скрипты бекапов
- $WORKSPACE/infra/@infra-dev-pro/solution/scripts/backup.sh - DEV-PRO backup

Логи:
- /var/log/dev-pro-backup.log - DEV-PRO
- /var/log/marketplace-backup.log - Marketplace


✅ Checklist первой настройки


📞 Поддержка

Проблемы?

  1. Проверить логи
  2. Проверить подключение к Яндекс.Диску: rclone about yandex:
  3. Проверить cron: crontab -l
  4. Запустить скрипты вручную для диагностики

Создано: 2025-11-12
Автор: Claude Code
Версия: 2.0