148 lines
11 KiB
Markdown
148 lines
11 KiB
Markdown
# 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: Подготовка (1–2 дня)
|
||
- Определить список всех ресурсов, подлежащих бэкапу (таблица выше).
|
||
- Оценить объём данных: примерно (медиа ~8 ТБ, игры ~4 ТБ, фото ~200 ГБ, базы ~10 ГБ, конфиги ~1 ГБ).
|
||
- Выбрать место для хранения бэкапов: внешний HDD (USB) + дополнительно облако (например, Backblaze B2) для критических данных.
|
||
- Установить и настроить Proxmox Backup Server (можно в LXC на `olimp` или на отдельной машине).
|
||
|
||
### Этап 2: Настройка бэкапов ВМ и LXC (2–3 дня)
|
||
- В Proxmox VE добавить PBS как хранилище.
|
||
- Создать расписания для каждой ВМ/LXC:
|
||
- Критические (базы, GitLab, Nextcloud): ежедневно, хранить 7 дней, еженедельно 4 недели, ежемесячно 3 месяца.
|
||
- Некритические (медиа, игры): еженедельно, хранить 4 недели.
|
||
- Настроить уведомления об ошибках.
|
||
|
||
### Этап 3: Бэкап данных вне Proxmox (2–3 дня)
|
||
- Написать скрипты (на базе 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) |