#408: Резервное копирование и восстановление Swarmica на своем оборудовании

Описание

Данная статья описывает процедуру резервного копирования (бэкапа/backup) и восстановления (рестора/restore) приложения Swarmica, установленного в контуре заказчика (on-premise) с использованием стандартных функций базовой операционной системы.

ВАЖНО! Рекомендуется использовать специализированные решения для создания резервных копий на уровне всего сервера, чтобы обеспечить гарантированную целостность данных и скорость восстановления после сбоя.

В данной статье предлагаются минимальные инструкции для создания резервных копий для восстановления после сбоя или переноса данных на другой сервер без гарантии скорости восстановления (RTO) для всех данных на момент бэкапа.

Что необходимо сохранять:

  • Файлы конфигурации, которые находятся в папке установки Swarmica (по умолчанию /root/swarmica)
  • База данных (средствами Postgres)
  • Пользовательские файлы (Docker Volumes)

Создание резервной копии (backup)

Файлы конфигурации

Сохраните содержимое папки /root/swarmica:

tar -cvjf sw-backup-configs.tbz /root/swarmica

База данных

Выполните команду pg_dump в контейнере swarmica-postgres:

cd /root/swarmica
. .env
docker exec -it --env-file .env swarmica-postgres pg_dump -Fc --clean -U$POSTGRES_USER $POSTGRES_DB -f /backups/db.`date +%Y%m%d%H%M%S`.sql

При необходимости, скопируйте файл с дампом на сервер (это может понадобиться, если вы планируете восстанавливать только базу данных на каком-то другом сервере, например, для тестирования):

docker cp swarmica-postgres:/backups/db.YOURDATE.sql ./

Пользовательские файлы

Пользовательские данные хранятся в Docker Volume с названиями:

  • swarmica_ugc
  • swarmica_runtime
  • swarmica_cron_d

Если вы используете модуль SFTP, то вам потребуется копирование следующих Docker Volume:

  • swarmica_uploads
  • sftp_persistent

Для резервного копирования всех файлов выполните следующую команду:

tar -cvjf sw-backup-files.tbz \
    /var/lib/docker/volumes/swarmica_swarmica_postgres_data_backups/_data/ \
    /var/lib/docker/volumes/swarmica_swarmica_ugc/_data/ \
    /var/lib/docker/volumes/swarmica_swarmica_runtime/_data/ \
    /var/lib/docker/volumes/swarmica_swarmica_cron_d/_data/ \
    /var/lib/docker/volumes/swarmica_swarmica_uploads/_data/ \
    /var/lib/docker/volumes/swarmica_sftp_persistent/_data/

ВАЖНО! Убедитесь в наличии свободного места на диске, на котром вы создаете архив с резервной копией - там должно быть достаточно места, чтобы вместить все пользовательские данные.

  • Команда для проверки свободного места df -h
  • Команда для проверки размера пользовательских данных docker system df | grep Volumes

Восстановление резервной копии (restore)

BAЖНО! Данная процедура полностью восстановит ВСЕ данные Swarmica, в том числе и настройки почты - если вы хотите создать клон системы для тестов, но не отправлять существующим пользователям уведомления, обязательно измените настройку на EMAIL_CONFIG=file в файле /root/swarmica/.env перед стартом контейнеров

1. Скопируйте на целевой сервер и распакуйте файлы архивов, созданные на предыдущем шаге:

tar -xvjf sw-backup-files.tbz -C /
tar -xvfj sw-backup-configs.tbz -C /

2. Стяните образы контейнеров:

cd /root/swarmica
docker compose pull

Этот шаг можно пропустить, если вы восстанавливаете данные на том же сервере, где создавалась резервная копия

3. Поднимите контейнер с Postgres:

docker compose up -d postgres

4. Если вы восстанавливаете дамп базы на "чистой" инсталляции, то сначала скопируйте его в контейнер:

docker cp db.YOURDATE.sql swarmica-postgres:/backups/

Этот шаг можно пропустить, если вы восстанавливаете данные из бэкапа, созданного по всем шагам данной статьи.

5. Восстановите дамп:

cd /root/swarmica
. .env
docker exec -it --env-file .env swarmica-postgres pg_restore --if-exists --clean -U$POSTGRES_USER -d$POSTGRES_DB /backups/db.YOURDATE.sql

6. Поднимите остальные контейнеры:

docker compose up -d

7. Выполните завершающие процедуры:

docker exec --env-file .env -it swarmica-django-1 python manage.py post_start