Docs/docs/11-backup.md
Administrator 6733688c69 Update 3 files
- /docs/10-security.md
- /docs/11-backup.md
- /docs/12-troubleshooting.md
2026-03-20 16:29:00 +05:00

148 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 11. Резервное копирование
## Обзор
Резервное копирование критически важно для защиты данных и возможности восстановления после сбоев, ошибок или атак. На момент аудита (март 2026) централизованная система резервного копирования **не настроена**. В данном разделе описаны требования, предлагаемая стратегия и план внедрения.
## Текущее состояние
- **Отсутствие регулярных бэкапов**: Нет автоматизированного процесса резервного копирования конфигураций, баз данных и пользовательских данных.
- **Разрозненные данные**: Данные хранятся на разных томах (RAID6, SSD) и в разных форматах (файлы, базы данных, Docker-тома).
- **Ручные копии**: Возможно, эпизодически создавались копии вручную, но это не систематизировано.
- **Риски**: Потеря данных при сбое RAID (хотя RAID6 защищает от отказа двух дисков, но не от случайного удаления, ошибок программ или вирусов), невозможность отката после неудачного обновления.
## Цели
1. **Надёжность**: Гарантированная возможность восстановления данных после любых инцидентов.
2. **Автоматизация**: Регулярные бэкапы по расписанию без участия администратора.
3. **Целостность**: Проверка создаваемых копий (тестирование восстановления).
4. **Безопасность**: Шифрование бэкапов и хранение вне основной инфраструктуры.
5. **Минимизация потерь**: RPO (Recovery Point Objective) не более 24 часов; RTO (Recovery Time Objective) не более 4 часов для критических сервисов.
## Что нужно бэкапить
### 1. Конфигурации
- Ansible: репозиторий с `group_vars`, ролями, плейбуками (включая зашифрованный `vault.yml`).
- Nginx Proxy Manager: база данных SQLite (контейнер `npm`), сертификаты Let's Encrypt.
- Системные конфигурации: `/etc/ssh`, `/etc/network`, `/etc/samba`, `/etc/fstab`, `/etc/cron*`.
- Docker: `docker-compose.yml` всех сервисов, пользовательские тома.
### 2. Базы данных
- **PostgreSQL**: Immich, BookStack, Nextcloud (внутри ВМ), GitLab, Grafana, Loki.
- **MySQL/MariaDB**: Ampache, Flibusta, Mealie (SQLite, но можно и файл).
- **SQLite**: Bitwarden, Mealie, BookStack (опционально), кастомные приложения.
- **Redis**: Nextcloud, GitLab.
### 3. Пользовательские данные
- **Медиафайлы**: `/mnt/video/*`, `/mnt/audio/*`, `/mnt/books/*` на хосте `media`.
- **Игры**: `/mnt/games/` на хосте `games`.
- **Фотографии**: Immich (папка загрузок, библиотека) на `photo`.
- **Документы**: BookStack, Nextcloud.
- **Торренты**: qBittorrent (метаданные, настройки).
### 4. Виртуальные машины и LXC
- **Proxmox**: конфигурации ВМ (файлы `.conf`), диски LVM-thin, шаблоны.
## Стратегия резервного копирования
### Рекомендуемый инструмент: Proxmox Backup Server (PBS)
- Установить PBS на отдельную ВМ или физический хост (можно на том же сервере, но лучше выделенный).
- Настроить хранилище (желательно на отдельном диске или NAS).
- Использовать дедупликацию, сжатие, шифрование.
- Настроить расписания бэкапов для каждой ВМ/LXC через Proxmox VE (интеграция с PBS).
### Альтернатива (если PBS не используется)
- **Для LXC и ВМ**: встроенные средства Proxmox (VZDump) с сохранением на NFS или SMB.
- **Для Docker-контейнеров**: скрипты с `docker exec` дампов БД, архивация томов.
- **Для файлов**: `rsync` или `restic` в cron.
## План внедрения
### Этап 1: Подготовка (12 дня)
- Определить список всех ресурсов, подлежащих бэкапу (таблица выше).
- Оценить объём данных: примерно (медиа ~8 ТБ, игры ~4 ТБ, фото ~200 ГБ, базы ~10 ГБ, конфиги ~1 ГБ).
- Выбрать место для хранения бэкапов: внешний HDD (USB) + дополнительно облако (например, Backblaze B2) для критических данных.
- Установить и настроить Proxmox Backup Server (можно в LXC на `olimp` или на отдельной машине).
### Этап 2: Настройка бэкапов ВМ и LXC (23 дня)
- В Proxmox VE добавить PBS как хранилище.
- Создать расписания для каждой ВМ/LXC:
- Критические (базы, GitLab, Nextcloud): ежедневно, хранить 7 дней, еженедельно 4 недели, ежемесячно 3 месяца.
- Некритические (медиа, игры): еженедельно, хранить 4 недели.
- Настроить уведомления об ошибках.
### Этап 3: Бэкап данных вне Proxmox (23 дня)
- Написать скрипты (на базе Ansible или shell) для:
- Дампов баз данных PostgreSQL, MySQL, SQLite.
- Копирования Docker-томов.
- Синхронизации файловых данных (медиа, игры) с бэкап-хранилищем (можно через `restic`).
- Запускать скрипты по расписанию (cron или systemd timer) до или после бэкапов ВМ.
- Проверить, что бэкапы не дублируют данные (например, диски ВМ уже содержат часть файлов можно исключить их из файлового бэкапа, если они уже входят в VZDump).
### Этап 4: Тестирование восстановления (1 день)
- Выполнить тестовое восстановление ВМ на изолированной среде (или с переименованием).
- Проверить восстановление базы данных из дампа.
- Восстановить несколько файлов из бэкапа.
### Этап 5: Автоматизация и мониторинг (1 день)
- Настроить алерты в Grafana на статус бэкапов (через API Proxmox или логи).
- Добавить проверку успешности бэкапов в мониторинг.
## Примеры команд
### Бэкап базы данных PostgreSQL (например, Immich)
```bash
pg_dump -U immich -h localhost immich > /backup/immich_$(date +%Y%m%d).sql
```
### Бэкап SQLite (Bitwarden)
```bash
sqlite3 /path/to/vaultwarden.db ".backup /backup/vaultwarden_$(date +%Y%m%d).db"
```
### Бэкап Docker-томов (например, Jellyfin)
```bash
tar -czf /backup/jellyfin_config_$(date +%Y%m%d).tar.gz /opt/service/jellyfin/config
```
### Синхронизация файлов с внешним хранилищем (restic)
```bash
restic -r /mnt/backup_drive/restic_repo backup /mnt/video /mnt/audio /mnt/books
```
### Восстановление ВМ из бэкапа через PBS
- В интерфейсе Proxmox: Datacenter → Storage → PBS → Backups → выбрать backup → Restore.
## Проблемы и рекомендации
### 🔴 Отсутствие резервных копий
**Проблема**: Критическая уязвимость потеря всех данных при сбое или ошибке.
**Решение**: Немедленно начать внедрение системы бэкапов по плану выше. Минимально: запустить ручной бэкап критических данных (базы, конфиги) на внешний диск.
### 🟡 Большой объём медиа
**Проблема**: Медиафайлы (~8 ТБ) сложно бэкапить часто и хранить в нескольких местах.
**Решение**:
- Для медиа достаточно еженедельного бэкапа.
- Использовать дедупликацию (PBS или restic).
- Рассмотреть бэкап только метаданных (библиотеки Jellyfin, настройки), а сами файлы можно перекачать заново (но если они уникальны, то бэкапить полностью).
### 🟢 Шифрование бэкапов
**Рекомендация**: Все бэкапы, хранящиеся вне сервера (на внешних дисках, в облаке), шифровать. PBS поддерживает шифрование на стороне клиента.
### 🟢 Хранение копий вне сети
**Рекомендация**: Хранить как минимум одну копию бэкапов вне основной сети (например, внешний USB-диск, отключаемый после бэкапа, или облачное хранилище).
---
**Связанные разделы:**
- [Гипервизор Proxmox](02-hypervisor.md)
- [Виртуальные машины и LXC](03-vms-lxcs.md)
- [Управление конфигурацией (Ansible)](09-ansible.md)
- [Безопасность](10-security.md)