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

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

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

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

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

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

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

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

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

```bash
tar -cvjf sw-backup-configs.tbz /root/swarmica\
    /root/.docker/
```

### База данных

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

```bash
cd /root/swarmica
source .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
```

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

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

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

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

*   swarmica\_ugc
*   swarmica\_runtime
*   swarmica\_cron\_d
*   swarmica\_ai\_assistant

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

```bash
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_ai_assistant/_data/
```

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

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

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



:::danger
BAЖНО! Данная процедура полностью восстановит ВСЕ данные Swarmica, в том числе и настройки почты - если вы хотите создать клон системы для тестов, но не отправлять существующим пользователям уведомления, **обязательно измените настройку Email конфигурация на FILE в разделе Настройки > Настройки Swarmica**
:::

Перед восстановлением резервной копии на другом сервере необходимо установить все требуемое ПО для работы Swarmica.



::::tabs
:::tab-item{title="Ubuntu \ Astra"}


```shell
apt-get update && \
apt-get install --no-install-recommends -y \
      curl \
      jq \
      host \
      python3 \
      docker.io \
      docker-compose-v2
```


:::

:::tab-item{title="RedOS"}


```bash
dnf install -y \
      curl \
      jq \
      bzip2 \
      python3.12 \
      docker-ce \
      docker-compose
```


:::
::::



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

```bash
tar -xvjf sw-backup-files.tbz -C /
tar -xvjf sw-backup-configs.tbz -C /
```

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

```bash
cd /root/swarmica
docker compose pull
```

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

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

```bash
docker compose up -d postgres
```

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

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

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

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

```bash
cd /root/swarmica
source .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\. Поднимите остальные контейнеры:

```bash
docker compose up -d
```

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

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