Резервное копирование данных
В каждой коробочной версии 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 * * * | 5 | PG-база сервиса чата (box-chat) | Каждые 6 часов |
1 * * * * | 3 | In-memory БД Redis | Каждый час |
10 3,11,16 | 5 | S3-like хранилище файлов (minio) | 3 раза в сутки |
3 15 * * * | 7 | Данные web-сервера Caddy | Раз в сутки, сохраняются TLS-сертификаты сервисных поддоменов, выпущенные через LetsEncrypt |
3 3,15 * * * | 5 | Sqlite3 БД сервиса kkm-server | Два раза в сутки (если компонент ККМ-сервер подключен в коробке) |
6 3,15 * * * | 5 | Sqlite3 БД сервиса 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) из резервной копии можно выполнить с помощью следующих шагов:
- Получите пароль от базы данных через службу техподдержки S2
- Войдите на сервер коробки по SSH и переключитесь на пользователя s2support
sudo su - s2support
- Остановите все сервисы, использующие базу данных:
# удаляем все сервисы 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
- На всякий случай, создайте резервную копию текущей базы данных:
PGPASSWORD="пароль_от_базы_данных" pg_dump -W -Fc -v --username=box-crm --dbname=box-crm -f box-crm-current.dump -p 5429
- Удалите текущую базу данных (это обязательно, чтобы при восстановлении копии не возникло конфликтов)
sudo dropdb -Upostgres box-crm
- Извлеките дамп базы данных из нужного архива резервной копии:
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-код)
- Восстановите базу данных из резервной копии
PGPASSWORD="пароль_от_базы_данных" pg_restore -C -Fc -W -v --username=box-crm -S postgres --dbname=postgres -p 5429 box_pg_crm/databases/PostgreSQL.sql
- Если ошибок при восстановлении не возникло, то заново создайте все сервисы, которые работают с базой данных.
Для этого запустите скрипт и дождитесь его завершения:
~/box-updater.rb -d -a
- Проверьте работоспособность всех сервисов
Восстановление БД Redis
Все шаги ниже нужно выполнять от пользователя root.
- Получите <путь_к_каталогу_redis>:
cat /etc/redis/6380.conf |grep -i ^dir
- Получите <пароль_redis>:
cat /etc/redis/6380.conf |grep -i ^masterauth
- Извлеките дамп 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
- В файле /etc/redis/6380.conf исправить appendonly на no.
- Останавливаем Redis:
systemctl stop redis_6380.service
- Скопировать бэкап в <путь_к_каталогу_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
- Запускаем Redis
systemctl start redis_6380.service
- Пересоздаем appendonly-файл:
# заходим в клиент redis redis-cli -p 6380 # далее вводим команды внутри клиента redis auth <пароль_redis> BGREWRITEAOF exit
- В файле /etc/redis/6380.conf исправить appendonly на yes.
- Перезапустить Redis:
systemctl restart redis_6380.service
- Убедиться, что Redis запустился и готов принимать соединения:
journalctl -f -u redis_6380.service
Восстановление данных прочих сервисов
Процесс восстановления данных для других сервисов заключается в простом восстановлении файлов из архива резервной копии в каталог с данными нужного сервиса из таблицы ниже:
Сервис | Описание | Каталог с данными сервиса | |
box-minio | S3-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 будет требуемое значение