Бэкап приложения и баз данных#

Примечание

Для работы скриптов резервного копирования требуется утилита rsync.

  • При бэкапе на текущий сервер достаточно установить rsync только на этом сервере.

  • При переносе на новый сервер rsync должен быть установлен на обоих серверах — исходном и целевом.

Установите rsync:

На DEB-системах:

sudo apt update && sudo apt install -y rsync

На RPM-системах:

sudo dnf install -y rsync

Как сделать бэкап приложения на текущем сервере?#

Сохранение данных на текущий сервер#

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

mkdir /opt/backup_compass

Выполните скрипт backup_all_data.py из директории установщика:

sudo python3 script/backup_all_data.py -dst /opt/backup_compass

После выполнения скрипта:

  • резервная копия данных будет сохранена в указанной директории /opt/backup_compass/compass;

  • установщик приложения также будет скопирован в директорию /opt/backup_compass/compass/installer;

  • отдельная копия также сохраняется в <root_mount_path>/backups, где root_mount_path — путь из global.yaml.

Вместо /opt/backup_compass можно указать любую другую директорию, где будет удобно хранить резервную копию приложения. Далее в инструкции директория /opt/backup_compass будет использоваться в качестве примера.

Восстановление приложения на текущем сервере#

Копирование установщика#

Перед восстановлением необходимо скопировать установщик из бэкапа. Это можно сделать двумя способами:

Способ 1. Восстановить в ту же директорию, где раньше был установщик (например, /opt/onpremise-installer).

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

mv /opt/onpremise-installer /opt/onpremise-installer.backup

Затем скопируйте установщик из бэкапа в прежнюю директорию:

cp -r /opt/backup_compass/compass/installer /opt/onpremise-installer

Способ 2. Восстановление в новую директорию (рекомендуется, если нужно сохранить старую установку нетронутой).

Создайте новую директорию:

mkdir -p /opt/on-premise/

Скопируйте установщик в эту директорию:

cp -r /opt/backup_compass/compass/installer /opt/on-premise/onpremise-installer

Примечание

Далее директория /opt/on-premise/onpremise-installer будет использоваться как основной установщик: для обновлений, изменения настроек и обслуживания приложения.

Восстановление данных#

Примечание

Если вы делаете обычный резервный бэкап на случай сбоя (без переноса или изменений конфигурации), рекомендуется использовать первый вариант — восстановление в ту же директорию, где уже установлено приложение. Это самый простой и быстрый способ, так как не требует копирования данных или изменения настроек.

Вариант 1. Восстановление в ту же директорию (root_mount_path не меняется)#

Перейдите в директорию скопированного установщика (вместо <путь-до-установщика> подставьте свой путь):

cd /<путь-до-установщика-onpremise-installer>

Запустите восстановление:

sudo python3 script/restore_db.py

При запуске скрипта:

  • будет предложено выбрать резервную копию из списка;

  • нужно подтвердить удаление текущих данных и остановку приложения;

  • при первом запуске скрипта может появиться предложение обновить приложение.

Если такое уведомление появится, подтвердите обновление — это необходимо для корректного запуска окружения. Если приложение не было установлено ранее, никакие данные удалены не будут. После подтверждения начнется восстановление данных и перезапуск компонентов приложения.

Вариант 2. Восстановление в новую директорию (изменение root_mount_path)#

Если вы хотите перенести данные приложения в другую директорию (например, /opt/compass_data), отличную от текущего root_mount_path, скопируйте данные приложения в новую директорию:

Создайте новую директорию:

sudo mkdir -p /opt/compass_data

Скопируйте данные в новую директорию:

cp -r /opt/backup_compass/compass/* /opt/compass_data/

Откройте конфигурационный файл в скопированном установщике configs/global.yaml и задайте в параметре root_mount_path путь к новой директории:

root_mount_path: /opt/compass_data

Назначьте корректные права доступа, задав переменную ROOT_PATH со значением параметра root_mount_path из файла configs/global.yaml (в примере — /opt/compass_data):

export ROOT_PATH=/opt/compass_data && \
sudo chown -R root:root "$ROOT_PATH" && \
sudo chown -R www-data:www-data \
 "$ROOT_PATH/files" \
 "$ROOT_PATH/tmp_files" \
 "$ROOT_PATH/default_file" \
 "$ROOT_PATH/company_configs"

Перейдите в директорию установщика:

cd /<путь-до-установщика>/onpremise-installer

Запустите восстановление:

sudo python3 script/restore_db.py

При запуске скрипта:

  • будет предложено выбрать резервную копию из списка;

  • нужно подтвердить удаление текущих данных и остановку приложения;

  • при первом запуске скрипта может появиться предложение обновить приложение.

Если такое уведомление появится, подтвердите обновление — это необходимо для корректного запуска окружения. Если приложение не было установлено ранее, никакие данные удалены не будут. После подтверждения начнется восстановление данных и перезапуск компонентов приложения.

Как перенести Compass на новый сервер?#

Подготовка нового сервера#

Характеристики нового сервера должны быть такими же или выше характеристик текущего сервера, где расположен Compass. В случае переноса для экономии ресурсов допустимо использовать сервер с меньшими характеристиками, но при этом они должны соответствовать рекомендуемым значениям, приведённым в требованиях к серверу.

Команды для проверки характеристик
# cpu
lscpu

# ram
free -h

# объем диска
df -h

Создайте пользователя www-data:

sudo useradd -u 33 -g www-data -M -s /usr/sbin/nologin www-data
Если при создании пользователя появится ошибка
  1. Ошибка: группа www-data не существует:

useradd: group 'www-data' does not exist

Создайте группу с GID 33:

sudo groupadd -g 33 www-data
  1. Ошибка: GID 33 уже занят:

groupadd: GID '33' already exists

Проверьте, какая группа использует этот ID:

getent group 33

Если, например, это группа tape:

tape:x:33:

Переназначьте её на другой ID (например 3333):

sudo groupmod -g 3333 tape
sudo groupadd -g 33 www-data

Создайте пользователя:

После того как группа существует (и свободна):

sudo useradd -u 33 -g www-data -M -s /usr/sbin/nologin www-data
  1. Проверьте результат:

id www-data
getent group 33
getent passwd www-data

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

Скопируйте сертификаты в /etc/nginx/ssl/, проверьте конфигурацию и перезапустите nginx:

sudo nginx -t
sudo systemctl restart nginx

Если у вас был настроен автоматический перевыпуск сертификатов, то настройте его и на новом сервере.

Создать директорию, где будет располагаться бэкап:

sudo mkdir -p /opt/backup_compass

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

sudo chmod 750 /opt/backup_compass

Сохранение и отправка данных на новый сервер#

Для переноса приложения на новый сервер выполните следующие шаги:

Сгенерируйте SSH-ключ без passphrase (оставьте поле пустым при создании):

ssh-keygen -t rsa -b 4096

Прокиньте ключ на новый сервер:

ssh-copy-id remote_user@remote_host
Если подключение на новый сервер происходит только по ключу:

Прежде чем вводить команду ниже, необходимо сгенерировать ключ по первому шагу.

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

cat /root/.ssh/id_rsa.pub

Данный ключ необходимо добавить в /root/.ssh/authorized_keys на новом сервере.

Создайте на новом сервере директорию /opt/backup_folder для проверки подключения:

mkdir /opt/backup_folder

И проверьте подключение, выполнив команду на сервере с которого будет происходить перенос данных, , передав путь до удалённого сервера и директории /opt/backup_folder:

ssh -o IdentitiesOnly=yes -i /root/.ssh/id_rsa remote_user@<new_server_ip> 'echo OK && whoami && mkdir -p /opt/backup_folder'

Если в выводе отобразится OK — значит ключ успешно был прокинут.

Выполните скрипт backup_all_data.py, передав путь до удаленного сервера и директории, куда следует сохранить данные:

sudo python3 script/backup_all_data.py -dst remote_user@remote_host:/opt/backup_compass

После выполнения:

  • Резервная копия будет сохранена на новом сервере в /opt/backup_compass/compass.

  • В каталоге /opt/backup_compass/compass/installer будет находиться копия установщика приложения.

Разворачивание приложения на новом сервере#

Скопируйте установщик из /opt/backup_compass/installer в отдельную директорию, например /opt/onpremise-installer :

cp -r /opt/backup_compass/compass/installer /opt/onpremise-installer

Отредактируйте конфигурационный файл configs/global.yaml:

  • host_ip — IP нового сервера;

  • root_mount_path — путь, в котором будут размещены данные приложения;

  • jitsi.service.jvb.media_advertise_ips — заполнить, если сервер с Compass находится на NAT.

Скопируйте данные из архива в директорию, указанную в параметре root_mount_path, файла configs/global.yaml.

Например, если в конфигурации задан путь /opt/compass:

cp -r /opt/backup_compass/compass /opt/compass

Примечание

Если вы хотите использовать другую директорию, укажите ее в параметре root_mount_path в файле configs/global.yaml и скопируйте данные именно туда.

Назначьте корректные права доступа, задав переменную ROOT_PATH со значением параметра root_mount_path из файла configs/global.yaml (в примере — /opt/compass_data):

export ROOT_PATH=/opt/compass && \
sudo chown -R root:root "$ROOT_PATH" && \
sudo chown -R www-data:www-data \
 "$ROOT_PATH/files" \
 "$ROOT_PATH/tmp_files" \
 "$ROOT_PATH/default_file" \
 "$ROOT_PATH/company_configs"

Перейдите в директорию установщика:

cd /opt/onpremise-installer

Запустите восстановление:

sudo python3 script/restore_db.py

При запуске скрипта:

  • будет предложено выбрать резервную копию из списка;

  • нужно подтвердить удаление текущих данных и остановку приложения;

  • появится предложение обновить приложение. Подтвердите обновление — это необходимо для корректного запуска окружения.

После подтверждения начнется восстановление данных и перезапуск компонентов приложения.

Развертывание приложения занимает некоторое время. В зависимости от мощности сервера время может варьироваться от 3 до 15 минут. Текущее состояние развертывания можно узнать с помощью команды:

sudo docker service ls | grep -vE "default-file|jitsi-custom"

У всех сервисов правое и левое число в колонке REPLICAS должны совпадать (ниже пример, количество строк и значения в полях могут быть другими):

ID             NAME              MODE         REPLICAS   IMAGE                                                     PORTS
jrnsa5illaao   pivot_nginx       replicated   1/1        dockerhub.com/nginx/nginx:apline-latest                   *:31000->443/tcp
7wismhojfze5   pivot_php_pivot   replicated   1/1        docker.getcompass.com/compass-on-premise/php_pivot:1.1.0
3meydkmdpx3j   pivot_go_event    replicated   1/1        docker.getcompass.com/compass-on-premise/go_event:1.1.0

Если по истечении ожидаемого времени сервис не готов к работе, то можно получить дополнительную информацию командой:

sudo docker service ps <ID_или_NAME_сервиса> --no-trunc

После успешного разворачивания приложения на новом сервере:

  • необходимо поменять А-запись у домена на новый IP сервера (если внешний IP изменялся) и проверить, что она изменилась:

 dig +short <domain.ru> @8.8.8.8
  • Проверить основной функционал приложения работает (авторизация, отправка сообщений, звонки)

После выполненных проверок, можно удалить приложение на предыдущем сервере.

Как сделать резервные копии баз данных?#

Создание резервной копии баз данных#

Для снятия резервных копий баз данных необходимо выполнить скрипт backup_db.py из директории установщика:

sudo python3 script/backup_db.py

После выполнения скрипта резервная копия данных будет сохранена по пути root_mount_path/backups/data_time, где:

  • data_time — метка времени создания бэкапа.

  • root_mount_path — путь к данным приложения, указанный в файле global.yaml.

Создаются следующие архивы:

  • mysql.tgz — архив с общими данными приложения (база пользователей, очереди задач и т.д.).

  • mysql_company_1.tgz — архив с данными пространства для общения (сообщения, данные файлов, участники и т.д.). Каждое пространство для общения имеет свою собственную базу данных.

  • configs.tgz — архив конфигурационных файлов (global.protected.yaml, global.yaml).

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

Запустите скрипт для восстановления резервной копии:

sudo python3 script/restore_db.py

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

  • Выбрать нужный бэкап из списка доступных копий.

  • Подтвердить удаление текущих данных и завершение работы приложения.

После подтверждения начнется процесс восстановления данных из выбранного бэкапа и обновления приложения.

Как настроить регулярное создание бэкапов?#

Чтобы настроить регулярное создание резервных копий баз данных или приложения, добавьте выполнение скрипта в root-crontab.

Откройте crontab для редактирования, выполнив команду:

sudo crontab -e

Затем добавьте нужное задание (все они будут выполняться от имени root):

  1. Резервное копирование баз данных каждый день в 02:00:

0 2 * * * python3 /полный/путь/к/backup_db.py >> /var/log/backup_db.log 2>&1
  1. Полный бэкап приложения (данные + БД) каждый день в 03:00:

0 3 * * * python3 /полный/путь/к/backup_all_data.py -dst /opt/backup_compass >> /var/log/backup_app.log 2>&1
  1. Полный бэкап приложения с отправкой на другой сервер каждый день в 04:00 (замените remote_user, remote_host и путь на актуальные):

0 4 * * * python3 /полный/путь/к/backup_all_data.py -dst remote_user@remote_host:/opt/backup_compass >> /var/log/backup_remote.log 2>&1

Для настройки расписания выполнения бэкапа, можно воспользоваться сайтом crontab guru, который поможет легко подобрать нужное время. Полный путь к файлам backup_db.py и backup_all_data.py можно получить командой, выполняемой в директории установщика:

realpath script/backup_db.py
realpath script/backup_all_data.py

Внимание

Пожалуйста, обратитесь к специалистам Compass в пространстве поддержки On-premise, Telegram или на почту support@getcompass.ru, чтобы получить индивидуальную поддержку.


Напишите нам в пространстве поддержки On-premise, Telegram или на почту support@getcompass.ru, чтобы получить индивидуальную демонстрацию функционала и помощь по вопросам интеграции мессенджера в вашей компании.