infra/@nocodb.app/scripts/README_BACKUP.md

Система резервного копирования и восстановления

📋 Обзор

Двухуровневая система бэкапов: GOLDEN (система) + NocoDB (данные).

Состав:
- ✅ GOLDEN бэкап - эталонная копия системы (еженедельно)
- ✅ NocoDB бэкап - ежедневные бэкапы БД (3:00 ночи)
- ✅ Автоочистка диска при загрузке (если < 5 GB)
- ✅ Ротация бэкапов (хранятся 30 дней)
- ✅ Сжатие бэкапов (gzip, ~10× уменьшение)
- ✅ Локальный → Удаленный (двойное хранение)


📦 Файлы

/1/                        # НОВОЕ: Системные скрипты
├── backup/golden/                         # GOLDEN бэкап (локально)
├── create_golden.sh                       # Создание GOLDEN
├── auto_cleanup_on_boot.sh                # Автоочистка
└── README.md

/opt/claude-workspace/scripts/
├── backup_nocodb.sh                       # Скрипт бэкапа БД
├── restore_nocodb.sh                      # Скрипт восстановления БД
└── README_BACKUP.md                       # Этот файл

/opt/claude-workspace/infra/@backup.service/scripts/
└── restore-claude.sh                      # Recovery меню (start.sh  r)

/etc/systemd/system/
└── auto-cleanup-boot.service              # Systemd служба автоочистки

/mnt/beget-s3/projects/pirotehnika/backups/
└── nocodb_*.sql.gz                        # Бэкапы БД

/mnt/beget-infra/dev-pro/backup/golden/    # GOLDEN клон (S3)
└── CLAUDE.md, start.sh, settings.json...

/mnt/beget-infra/dev-pro/backup/RECOVERY/  # Аварийное восстановление
└── claude.tar.gz, workspace.bundle...

🔄 Автоматические бэкапы

1. GOLDEN бэкап (система)

Расписание: Каждое воскресенье в 4:00

Cron задача:

0 4 * * 0 /1/create_golden.sh >> /var/log/golden_backup.log 2>&1

Что включает:
- CLAUDE.md, start.sh, index.yaml
- settings.json, claude.json, credentials.json
- history.jsonl
- nocodb-latest.sql.gz

Хранение:
- Локально: /1/backup/golden/ (7.4 MB)
- S3: /mnt/beget-infra/dev-pro/backup/golden/ (клон)

Просмотр логов:

tail -f /var/log/golden_backup.log

Создание вручную:

/1/create_golden.sh

2. NocoDB бэкап (данные)

Расписание: Каждый день в 3:00 ночи

Cron задача:

0 3 * * * /opt/claude-workspace/scripts/backup_nocodb.sh >> /var/log/nocodb_backup.log 2>&1

Просмотр логов:

tail -f /var/log/nocodb_backup.log

💾 Ручное создание бэкапа

/opt/claude-workspace/scripts/backup_nocodb.sh

Что делает:
1. Создаёт дамп PostgreSQL
2. Сжимает файл (gzip)
3. Удаляет бэкапы старше 30 дней
4. Показывает список последних бэкапов

Результат:

/mnt/beget-s3/projects/pirotehnika/backups/nocodb_20251227_194002.sql.gz

🔧 Восстановление из бэкапа

1. Просмотр доступных бэкапов

ls -lht /mnt/beget-s3/projects/pirotehnika/backups/

2. Восстановление

/opt/claude-workspace/scripts/restore_nocodb.sh <путь_к_бэкапу>

Пример:

/opt/claude-workspace/scripts/restore_nocodb.sh \
  /mnt/beget-s3/projects/pirotehnika/backups/nocodb_20251227_194002.sql.gz

Что делает:
1. ✅ Создаёт резервную копию текущей БД (безопасность!)
2. ⚠️ Останавливает NocoDB
3. 🗑️ Удаляет текущую БД
4. 📥 Восстанавливает данные из бэкапа
5. ▶️ Запускает NocoDB
6. ✅ Проверяет работоспособность

ВНИМАНИЕ: Скрипт запросит подтверждение. Введите yes для продолжения.


🧹 Автоочистка при загрузке

Служба: auto-cleanup-boot.service

Что делает:
- Запускается ДО создания swap диска
- Проверяет свободное место
- Если < 5 GB → запускает безопасную очистку

Проверка статуса:

systemctl status auto-cleanup-boot.service

Просмотр логов:

cat /var/log/auto_cleanup.log

Ручной запуск:

/opt/claude-workspace/scripts/auto_cleanup_on_boot.sh

📊 Текущее состояние

База данных:
- Размер: 90 MB (несжатая)
- Размер бэкапа: ~30 MB (SQL)
- Размер сжатого: ~3 MB (gzip)

Хранение:
- Расположение: /mnt/beget-s3/projects/pirotehnika/backups/
- Ротация: 30 дней
- Сжатие: gzip


⚙️ Настройки

Изменение расписания бэкапов

crontab -e

Формат cron:

минута час день месяц день_недели команда
0      3   *    *     *           /opt/claude-workspace/scripts/backup_nocodb.sh

Изменение срока хранения

Отредактируйте backup_nocodb.sh:

KEEP_DAYS=30  # Количество дней хранения

Изменение порога автоочистки

Отредактируйте auto_cleanup_on_boot.sh:

MIN_FREE_GB=5  # Минимум свободного места в GB

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

  1. Резервная копия перед восстановлением
    - Скрипт всегда создаёт safety backup перед восстановлением
    - Файл: nocodb_before_restore_*.sql.gz

  2. Проверка целостности
    - После восстановления проверяется запуск NocoDB
    - При ошибке автоматический откат к safety backup

  3. Хранение
    - Бэкапы на отдельном диске S3
    - Защита от потери при сбое основного диска


📝 Примеры использования

Восстановление вчерашнего бэкапа

# Найти вчерашний бэкап
ls -lt /mnt/beget-s3/projects/pirotehnika/backups/ | grep $(date -d yesterday +%Y%m%d)

# Восстановить
/opt/claude-workspace/scripts/restore_nocodb.sh \
  /mnt/beget-s3/projects/pirotehnika/backups/nocodb_20251226_030001.sql.gz

Копирование бэкапа на другой сервер

scp /mnt/beget-s3/projects/pirotehnika/backups/nocodb_latest.sql.gz \
    user@backup-server:/backups/

Проверка размера бэкапов

du -sh /mnt/beget-s3/projects/pirotehnika/backups/

🆘 Решение проблем

Бэкап не создаётся

# Проверка контейнера
docker ps | grep nocodb-products-db

# Проверка логов
tail -f /var/log/nocodb_backup.log

# Ручной запуск
/opt/claude-workspace/scripts/backup_nocodb.sh

Восстановление не работает

# Проверка файла бэкапа
gunzip -t /mnt/beget-s3/projects/pirotehnika/backups/nocodb_*.sql.gz

# Проверка контейнера
docker ps | grep nocodb-products-db

# Проверка логов Docker
docker logs nocodb-products-db

Автоочистка не запускается

# Проверка службы
systemctl status auto-cleanup-boot.service

# Просмотр логов
journalctl -u auto-cleanup-boot.service

# Ручной запуск
/opt/claude-workspace/scripts/auto_cleanup_on_boot.sh

✅ Проверка работоспособности

# 1. Проверка cron
crontab -l | grep backup

# 2. Проверка systemd
systemctl is-enabled auto-cleanup-boot.service

# 3. Проверка последнего бэкапа
ls -lht /mnt/beget-s3/projects/pirotehnika/backups/ | head -5

# 4. Тестовый бэкап
/opt/claude-workspace/scripts/backup_nocodb.sh

# 5. Тестовая очистка (dry-run)
df -h /
/opt/claude-workspace/scripts/auto_cleanup_on_boot.sh

# 6. Проверка GOLDEN
ls -lh /1/backup/golden/
ls -lh /mnt/beget-infra/dev-pro/backup/golden/

# 7. Создать GOLDEN вручную
/1/create_golden.sh

🆘 Recovery меню

Доступ

Из стартового меню:

/opt/claude-workspace/start.sh
# Выбрать: r → Recovery

Или напрямую:

recovery

Варианты восстановления

Приоритет проверки источников:
1. Локальный GOLDEN → /1/backup/golden/
2. Удаленный S3 → /mnt/beget-infra/dev-pro/backup/golden/
3. RECOVERY → /mnt/beget-infra/dev-pro/backup/RECOVERY/

Опции меню:
- 1 - Восстановить из GOLDEN ⭐
- 2 - Восстановить из архива (по дате)
- 3 - Восстановить из latest
- 4 - Переустановить npm
- 5 - Полное восстановление (GOLDEN + npm)
- 6 - Показать бэкапы

Что восстанавливается

GOLDEN:
- CLAUDE.md
- start.sh
- index.yaml
- settings.json
- claude.json
- credentials.json
- history.jsonl

RECOVERY (если GOLDEN недоступен):
- claude.tar.gz (150 MB) - все настройки Claude
- workspace.bundle (1.3 MB) - Git репозиторий
- credentials.tar.gz - учетные данные
- env.tar.gz - переменные окружения

Проверка целостности

Recovery меню автоматически:
1. Проверяет локальный GOLDEN
2. Если недоступен → проверяет S3
3. Если и S3 недоступен → использует RECOVERY
4. Показывает источник восстановления


Версия: 2.0.0
Дата: 2025-12-27
Автор: Claude Code