Загружается...
 

Резервное копирование и восстановление

Резервное копирование данных


В каждой коробочной версии S2ERP преднастроено резервное копирование данных по расписанию. Резервные копии создаются в каталоге box-backups, который по-умолчанию располагается по пути /mnt/box-backups.

Расположение резервных копий в Вашей коробке можно узнать, если выполнить команду:

sudo cat /etc/backup/config.rb | grep -i 'local.path'
# пример вывода:
# local.path        = '/var/box-backups'


Для изменения расположения резервных копий обратитесь в службу техподдержки S2. Также через службу поддержки S2 можно перенастроить тип хранения резервных копий с локального (или сетевого) каталога на S3/SFTP/SCP.

Все резервные копии создаются соответствующими инструментами (утилитами):

  • базы данных PostgreSQL (PG) - pg_dump
  • базы данных Redis - redis-cli --rdb + копирование файла RDB
  • все остальные случаи - обычное копирование файлов


После создания резервной копии во временном каталоге (для любого из сервисов), данный (временный) каталог архивируется с использованием утилиты tar для уменьшения потребляемого места в каталоге резервных копий.

Расписание резервного копирования

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

cron-строкаКоличество хранимых бэкаповОбъект резервированияКомментарий
15 */3 * * *5Основная PG-база данных (box-crm)Каждые 3 часа
10 */6 * * *5PG-база сервиса чата (box-chat)Каждые 6 часов
1 * * * *3In-memory БД RedisКаждый час
10 3,11,165S3-like хранилище файлов (minio)3 раза в сутки
3 15 * * *7Данные web-сервера CaddyРаз в сутки, сохраняются TLS-сертификаты сервисных поддоменов, выпущенные через LetsEncrypt
3 3,15 * * *5Sqlite3 БД сервиса kkm-serverДва раза в сутки (если компонент ККМ-сервер подключен в коробке)
6 3,15 * * *5Sqlite3 БД сервиса webhook-converterДва раза в сутки


Проверить актуальное расписание можно командой

sudo crontab -l


Для изменения расписания резервного копирования обратитесь в службу техподдержки S2, т.к. "ручное" изменение (через crontab -e) не рекомендуется.

Восстановление данных из резервных копий

Во всех инструкциях ниже используются следующие обозначения:
<путь_к_каталогу_с_бэкапами> - путь к каталогу с резервными копиями. По-умолчанию он имеет значение /mnt/box-backups. Расположение резервных копий в Вашей коробке можно узнать, если выполнить команду:

sudo cat /etc/backup/config.rb | grep -i 'local.path' 
# пример вывода: 
# local.path        = '/var/box-backups'

Восстановление БД PostgreSQL

Важное примечание:
Процесс восстановления базы данных PostgreSQL (особенно, БД основного приложения, т.е. box-crm) может занять более 30 минут (зависит от размера вашей базы данных) и приведет к downtime Вашей CRM-системы на время восстановления. Т.е. прежде, чем восстанавливать базу данных, нужно согласовать с пользователями CRM "техническое окно" на нужное время.

Восстановление ОСНОВНОЙ базы данных PostgreSQL (box-crm) из резервной копии можно выполнить с помощью следующих шагов:

  1. Получите пароль от базы данных через службу техподдержки S2
  2. Войдите на сервер коробки по SSH и переключитесь на пользователя s2support
    sudo su - s2support
  3. Остановите все сервисы, использующие базу данных:
    # удаляем все сервисы
    docker service rm box-chat box-chat-sidekiq box-crm box-crm-CatcrmIntegrationsConsumer box-crm-CatcrmTelephonyConsumer box-crm-migrator box-crm-sidekiq box-crm-rufus box-kkm-server box-phone-location box-phone-location-batch box-telephony box-telephony-sidekiq box-webhook-converter box-document-converter box-chat-anycable-rpc box-crm-anycable-rpc box-developers box-telephony-TelephonyConsumer
  4. На всякий случай, создайте резервную копию текущей базы данных:
    PGPASSWORD="пароль_от_базы_данных" pg_dump -W -Fc -v --username=box-crm --dbname=box-crm -f box-crm-current.dump -p 5429
  5. Удалите текущую базу данных (это обязательно, чтобы при восстановлении копии не возникло конфликтов)
    sudo dropdb -Upostgres box-crm
  6. Извлеките дамп базы данных из нужного архива резервной копии:
    tar xvf <путь_к_каталогу_с_бэкапами>/box_pg_crm/<дата_бэкапа>/box_pg_crm.tar
    # например: tar xvf /mnt/box-backups/box_pg_crm/2023.03.13.09.15.02/box_pg_crm.tar
    
    # распаковываем дамп из gzip
    gzip -d box_pg_crm/databases/PostgreSQL.sql.gz
    
    # в результате в каталоге box_pg_crm/databases должен появиться файл PostgreSQL.sql, содержащий pg-дамп (именно бинарный дамп, НЕ SQL-код)
  7. Восстановите базу данных из резервной копии
    PGPASSWORD="пароль_от_базы_данных" pg_restore -C -Fc -W -v --username=box-crm -S postgres --dbname=postgres -p 5429 box_pg_crm/databases/PostgreSQL.sql
  8. Если ошибок при восстановлении не возникло, то заново создайте все сервисы, которые работают с базой данных.
    Для этого запустите скрипт и дождитесь его завершения:
    ~/box-updater.rb -d -a
  9. Проверьте работоспособность всех сервисов

Восстановление БД Redis

Все шаги ниже нужно выполнять от пользователя root.

  1. Получите <путь_к_каталогу_redis>:
    cat /etc/redis/6380.conf |grep -i ^dir
  2. Получите <пароль_redis>:
    cat /etc/redis/6380.conf |grep -i ^masterauth
  3. Извлеките дамп Redis из нужного архива резервной копии:
    tar xvf <путь_к_каталогу_с_бэкапами>/box_redis/<дата_бэкапа>/box_redis.tar
    # например: tar xvf /mnt/box-backups/box_redis/2023.03.13.09.15.02/box_redis.tar
    
    # распаковываем дамп из gzip
    gzip -d box_redis/databases/Redis.rdb.gz
    
    # в результате в каталоге box_redis/databases должен появиться файл Redis.rdb
  4. В файле /etc/redis/6380.conf исправить appendonly на no.
  5. Останавливаем Redis:
    systemctl stop redis_6380.service
  6. Скопировать бэкап в <путь_к_каталогу_redis> под именем dump.rdb:
    cp -f box_redis/databases/Redis.rdb <путь_к_каталогу_redis>/dump.rdb
    # например
    # cp -f box_redis/databases/Redis.rdb /var/lib/redis/6380/dump.rdb
    
    # ОБЯЗАТЕЛЬНО меняем права на скопированный файл
    chown redis:redis <путь_к_каталогу_redis>/dump.rdb
  7. Запускаем Redis
    systemctl start redis_6380.service
  8. Пересоздаем appendonly-файл:
    # заходим в клиент redis
    redis-cli -p 6380
    
    # далее вводим команды внутри клиента redis
    auth <пароль_redis>
    BGREWRITEAOF
    exit
  9. В файле /etc/redis/6380.conf исправить appendonly на yes.
  10. Перезапустить Redis:
    systemctl restart redis_6380.service
  11. Убедиться, что Redis запустился и готов принимать соединения:
    journalctl -f -u redis_6380.service

Восстановление данных прочих сервисов

Процесс восстановления данных для других сервисов заключается в простом восстановлении файлов из архива резервной копии в каталог с данными нужного сервиса из таблицы ниже:

СервисОписаниеКаталог с данными сервиса
box-minioS3-like сервис хранения файлов<каталог_swarm>/minio/data
box-caddyВеб-сервер<каталог_swarm>/caddy
box-kkm-serverСервер контрольно-кассовых машин (ККМ)<каталог_services>/box-kkm-server/shared/shared/db
box-webhook-converterСервис конвертации данных различных внешних сервисов в формат, понятный CRM<каталог_services>/box-webhook-converter/shared/shared/db


<каталог_swarm> (по-умолчанию: /box/swarm) можно выяснить выполнив команду:

# запускать под пользователем s2support
sudo -u s2support ~/box_updater.rb -d -r -t show_config
# в параметре swarm_dir будет требуемое значение


<каталог_services> (по-умолчанию: /box/services) можно выяснить выполнив команду:

# запускать под пользователем s2support
sudo -u s2support ~/box_updater.rb -d -r -t show_config
# в параметре services_dir будет требуемое значение