Инструменты для создания резервной копии ECCM представляют из себя набор bash-скриптов для автоматического/ручного создания резервных копий PostgreSQL-базы ECCM внутри Docker-контейнера и файлов конфигурации ECCM, с логированием и возможностью запуска по расписанию с помощью "cron":

Создание резервной копии ECCM

Скрипты создания резервной копии (backup.sh, setup-cron-backup.sh) поддерживают следующие флаги:

ФлагНазначение

--all (используется по умолчанию)

Резервная копия БД и файлов конфигурации
--databaseРезервная копия БД
--configsРезервная копия файлов конфигурации

Для корректной работы скрипта создания резервной копии (backup.sh) необходимо определить следующие переменные окружения:

ПеременнаяНазначениеОбязательнаЗначение по умолчанию

ECCM_DATABASE

Название базы данных ECCM

При использовании флагов --all, --database-

POSTGRES_HOST

Хост PostgreSQL-сервера

При использовании флагов --all, --database-

POSTGRES_PORT

Порт PostgreSQL

Нет'5432'

ROOT_POSTGRES_USER

PostgreSQL-пользователь с правами на dump

При использовании флагов --all, --database-

ROOT_POSTGRES_PASSWORD

Пароль к PostgreSQL

При использовании флагов --all, --database -

CONFIG_DIR

Путь к директории с файлами конфигурации ECCM

При использовании флагов --all, --configs-

BACKUPS_DIR

Путь к директории для резервных копий

При использовании флагов --all, --database'/tmp/backups'

BACKUP_LOG

Путь к лог-файлу

Нет '/tmp/backups/log/eccm_backup.log'

BACKUP_CRON

Cron-выражение для периодичности резервного копирования

Да-

MAX_BACKUPS_COUNT

Количество резервных копий после ротации

Нет 'не ограничено'

Для корректной работы скрипта создания резервной копии с задаваемой периодичностью (setup-cron-backup.sh) необходимо дополнительно определить следующие переменные окружения:

ПеременнаяНазначениеОбязательнаЗначение по умолчанию

BACKUP_CRON

Cron-выражение для периодичности резервного копирования

Да-

Во избежание потери файлов резервных копий при перезагрузке сервера рекомендуется изменить значения по умолчанию для переменных BACKUPS_DIR и BACKUP_LOG.

Создать резервную копию можно двумя способами:

1. запустить скрипт backup.sh вручную;

2. создать cron-task для запуска скрипта backup.sh с заданным расписанием.

Результатом работы будет сжатый файл .dump и/или файлы конфигурации, размещенные в директории $BACKUPS_DIR. При указании переменной $MAX_BACKUPS_COUNT после вызова ./backup.sh в директории $BACKUPS_DIR останется только ($MAX_BACKUPS_COUNT) последних резервных копий, а более старые — автоматически удалятся.

Так как crontab не может самостоятельно создавать директории, перед запуском скрипта необходимо создать директории из BACKUPS_DIR и передать в команду.


Для того чтобы запустить скрипт вручную, можно использовать следующую команду:

ECCM_DATABASE="eccm" POSTGRES_HOST="host" POSTGRES_PORT="5432" ROOT_POSTGRES_USER="tester" ROOT_POSTGRES_PASSWORD="tester" BACKUPS_DIR="/tmp/backups" CONFIG_DIR="/eccm" /bin/bash ./backup.sh

Для того чтобы настроить запуск скрипта создания резервной копии по заданному расписанию, можно использовать следующую команду:

ECCM_DATABASE="eccm" POSTGRES_HOST="host" POSTGRES_PORT="5432" ROOT_POSTGRES_USER="tester" ROOT_POSTGRES_PASSWORD="tester" BACKUP_CRON="0 2 * * *" BACKUPS_DIR="/tmp/backups" CONFIG_DIR="/eccm" /bin/bash ./setup-cron-backup.sh


Восстановление ECCM из резервной копии

Скрипт восстановления из резервной копии (restore.sh) предназначен для восстановления базы данных ECCM и/или файлов конфигурации из ранее созданной резервной копии. Работает в среде Docker с PostgreSQL и поддержкой TimescaleDB. Для корректной работы скрипта восстановления из резервной копии необходимо определить следующие переменные окружения:

ПеременнаяНазначениеОбязательнаЗначение по умолчанию

ECCM_DATABASE

Название базы данных для восстановления

При использовании флагов --all, --database-

POSTGRES_HOST

Хост PostgreSQL-сервера

При использовании флагов --all, --database-

POSTGRES_PORT

Порт PostgreSQL

Нет'5432'

ROOT_POSTGRES_USER

PostgreSQL-пользователь с правами на восстановление

При использовании флагов --all, --database-

ROOT_POSTGRES_PASSWORD

Пароль пользователя PostgreSQL

При использовании флагов --all, --database-

CONFIG_DIR

Директория для восстановления файлов конфигурации

При использовании флагов --all, --configs

BACKUPS_DIR

Директория для поиска резервной копии (если не указан файл)

Нет'/tmp/backups'

RESTORE_LOG

Путь к лог-файлу восстановления

Нет '/tmp/restore/log/eccm_restore.log'

Во избежание потери лог-файлов при перезагрузке сервера рекомендуется изменить значение по умолчанию для переменной RESTORE_LOG.

Произвести восстановление из резервной копии можно: 

1. из конкретного файла резервной копии;

2. из последней резервной копии. 

Результаты работы скрипта сохраняются в файл $RESTORE_LOG.


Для восстановления из конкретного файла резервной копии используется флаг -f с последующим указанием расположения $BACKUPS_DIR/имя_резервной_копии.dump:

Перед выполнением восстановления скрипт останавливает работу ECCM.

ECCM_DATABASE="eccm" POSTGRES_HOST="host" POSTGRES_PORT="5432" ROOT_POSTGRES_USER="tester" ROOT_POSTGRES_PASSWORD="tester" CONFIG_DIR="/eccm" /bin/bash ./restore.sh -f /tmp/backups/eccm_2025-06-02_12-00-00_123.dump

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

ECCM_DATABASE="eccm" POSTGRES_HOST="host" POSTGRES_PORT="5432" ROOT_POSTGRES_USER="tester" ROOT_POSTGRES_PASSWORD="tester" BACKUPS_DIR="/tmp/backups" CONFIG_DIR="/eccm" /bin/bash ./restore.sh

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

./compose-tools.sh --start <ip_address>