infra/@backup.service/BACKUP-GUIDE.md

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

Версия: 3.0.0
Дата: 2025-12-18


Архитектура хранилищ

┌─────────────────────────────────────────────────────────────────┐
  beget-s3 (DATASPACE)           beget-infra (BACKUP)            
  /mnt/beget-s3/                 /mnt/beget-infra/               
  └── projects/                  ├── _settings/                  
      └── pirotehnika/              ├── AGENT.md                
          └── _shared/              └── recovery/               
                                 └── dev-pro/                    
                                     ├── INFO.md                 
                                     ├── backup/     АКТИВНЫЕ   
                                        ├── critical/           
                                        ├── golden/             
                                        ├── postgres/           
                                        ├── simple/             
                                        ├── git/                
                                        └── restic/             
                                     └── archive/    СТАРЫЕ     
└─────────────────────────────────────────────────────────────────┘

Расписание (cron)

Master: 0 * * * * backup-master.sh

Время Что Скрипт
*/6ч (0,6,12,18) Critical backup-critical.sh
*/4ч PostgreSQL backup-postgres.sh
05:00 Simple tar.gz simple-backup.sh
Вс 04:00 Git full git-backup.sh full
Пн-Сб 05:00 Git incr git-backup.sh incr
*/6ч Restic restic-backup.sh all
Вс 03:00 Restic prune restic-backup.sh prune

Быстрые команды

Ручной бекап

cd $WORKSPACE/infra/@backup.service/scripts

# Critical (CLAUDE.md, settings)
./backup-critical.sh

# Создать GOLDEN копию
./backup-critical.sh golden

# PostgreSQL
./backup-postgres.sh

# Git бекап
./git-backup.sh full    # полный
./git-backup.sh incr    # инкремент

# Restic полный
./restic-backup.sh all

# Simple tar.gz
./simple-backup.sh

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

# Последние бекапы
ls -lh /mnt/beget-infra/dev-pro/backup/critical/ | tail -5
ls -lh /mnt/beget-infra/dev-pro/backup/simple/ | tail -3
ls -lh /mnt/beget-infra/dev-pro/backup/git/ | tail -5

# Restic снапшоты
cd $WORKSPACE/infra/@backup.service/scripts
source ../.env
restic snapshots --latest 5

# Логи
tail -20 /var/log/backup-master.log
tail -20 /var/log/backup-critical.log
tail -20 /var/log/git-backup.log

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

Critical (CLAUDE.md, settings)

cd $WORKSPACE/infra/@backup.service/scripts
./restore-claude.sh

# Меню:
#   1. Восстановить из GOLDEN
#   2. Выбрать архив
#   3. Восстановить latest
#   4. NPM reinstall
#   5. Полное восстановление

Из Git bundle

cd /mnt/beget-infra/dev-pro/backup/git/

# Найти последнюю неделю
ls -d week-* | sort -r | head -1

# Восстановить
git clone week-2025-51/full.bundle /opt/claude-workspace-restored

# Применить инкременты
cd /opt/claude-workspace-restored
for f in ../week-2025-51/incr-*.bundle; do
    [ -f "$f" ] && git pull "$f" master
done

Из Simple tar.gz

# Список архивов
ls -lh /mnt/beget-infra/dev-pro/backup/simple/

# Распаковать в /tmp
tar -xzf /mnt/beget-infra/dev-pro/backup/simple/workspace-*.tar.gz -C /tmp/

Из Restic

cd $WORKSPACE/infra/@backup.service/scripts

# Список снапшотов
./restic-restore.sh list

# Восстановить workspace
./restic-restore.sh workspace

# Полное восстановление
./restic-restore.sh full

Типы бекапов

Critical (каждые 6ч)

Что: CLAUDE.md, start.sh, index.yaml, settings.json, claude.json, history.jsonl

Где: /mnt/beget-infra/dev-pro/backup/critical/YYYY-MM-DD_HHMM.tar.gz

Ротация:
- Сегодня: все копии
- Вчера: 1 копия
- 7-30 дней: воскресенья
- 30-365 дней: конец месяца

Golden (ручной)

Что: Эталонная копия рабочей конфигурации

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

./backup-critical.sh golden

Git bundle (еженедельно)

Что: Git репозиторий workspace

Стратегия:
- Воскресенье 04:00: полный bundle (~700MB)
- Пн-Сб 05:00: инкременты (~2-5MB)

Где: /mnt/beget-infra/dev-pro/backup/git/week-YYYY-WW/

PostgreSQL (каждые 4ч)

Что: Дампы всех баз данных

Где: /mnt/beget-infra/dev-pro/backup/postgres/DBNAME_YYYY-MM-DD_HHMM.sql

Simple tar.gz (ежедневно 05:00)

Что: Весь $WORKSPACE

Где: /mnt/beget-infra/dev-pro/backup/simple/workspace-YYYY-MM-DD_HHMM.tar.gz

Размер: ~1.2GB

Restic (каждые 6ч)

Что: Инкрементальные бекапы workspace, postgres, docker volumes

Где: S3 direct → beget-infra:dev-pro/backup/restic/

Retention: 24 hourly, 7 daily, 4 weekly, 6 monthly


Переменные окружения

# /etc/environment
WORKSPACE=/opt/claude-workspace
DATASPACE=/mnt/beget-s3

.env (секреты)

$WORKSPACE/infra/@backup.service/.env

AWS_ACCESS_KEY_ID=...
AWS_SECRET_ACCESS_KEY=...
RESTIC_REPOSITORY=s3:https://s3.ru1.storage.beget.cloud/fe2c1d30dc11-bs/dev-pro/backup/restic
RESTIC_PASSWORD=...

Disaster Recovery

При полной потере сервера

# 1. Примонтировать S3 (infra bucket)
rclone mount beget-infra:fe2c1d30dc11-bs /mnt/beget-infra --vfs-cache-mode full --daemon

# 2. Запустить recovery
/mnt/beget-infra/_settings/recovery/scripts/recovery-levels.sh

# Или вручную:
./bootstrap-recovery.sh

Подробнее: docs/DISASTER-RECOVERY.md


Мониторинг

Проверка здоровья

# S3 mounts
mountpoint /mnt/beget-s3 && echo "DATASPACE OK"
mountpoint /mnt/beget-infra && echo "BACKUP OK"

# Размеры бекапов
du -sh /mnt/beget-infra/dev-pro/backup/*/

# Restic check
source $WORKSPACE/infra/@backup.service/.env
restic check

Алерты (что проверять)


Скрипты

Скрипт Назначение
backup-master.sh Master cron — запускает всё
backup-critical.sh Critical + GOLDEN
backup-postgres.sh PostgreSQL дампы
git-backup.sh Git bundle бекапы
simple-backup.sh Workspace tar.gz
restic-backup.sh Restic операции
restic-restore.sh Восстановление из Restic
restore-claude.sh Меню восстановления Claude
bootstrap-recovery.sh Disaster recovery

Важно

  1. Пароль Restic — сохраните отдельно! Без него данные недоступны
  2. GOLDEN — создавайте после каждой успешной настройки
  3. Archive — старые бекапы в /mnt/beget-infra/dev-pro/archive/
  4. Логи/var/log/backup-*.log

Версия: 3.0.0