Подготовка к развертыванию (DEB-based)#

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

Если вы используете одну из DEB-based систем, таких как Debian или Ubuntu, следуйте инструкции ниже.

Необходимое программное обеспечение#

Nginx#

Nginx является рекомендуемым веб-сервером для обработки входящих подключений. Для работы приложения необходимо открыть 443 порт в firewall и установить веб-сертификат, если он еще не установлен.

Установка Nginx выполняется следующими командами:

sudo apt update && sudo apt install nginx;

Подробная информация доступна на официальном сайте.

Если вы планируете использовать промежуточный proxy-сервер перед сервером Compass, ознакомьтесь с разделом конфигурация прокси для NGINX.

Docker#

Docker является средой, необходимой для работы приложения. Минимальная поддерживаемая версия Docker Engine 20.10. Варианты установки описаны в документации на официальном сайте.

Docker должен функционировать в Swarm-режиме (возможно развертывание приложения на одной ноде, являющейся одновременно рабочей и управляющей). Команда перевода Docker в Swarm-режим на управляющей ноде:

sudo docker swarm init

Python 3#

Python необходим для работы скриптов инсталлятора и генератора конфигурационных файлов на управляющих нодах. Как правило, в ОС Ubuntu Python 3 поставляется вместе с дистрибутивом. Дополнительно потребуется установить пакетный менеджер Pip:

sudo apt-get update && sudo apt-get install python3-pip

Помимо самого Python также потребуются следующие пакеты:

  • pyyaml

  • pyopenssl

  • docker

  • mysql_connector_python

  • python-dotenv

  • psutil

Установка необходимых пакетов:

sudo pip3 install pyyaml==6.0.2 pyopenssl==24.0.0 docker==7.1.0 mysql_connector_python==8.2.0 python-dotenv==1.0.0 psutil==5.9.6 pycryptodome==3.21.0

Настройка ssl-сертификата#

Необходимо заранее выпустить ssl-сертификат для домена, на котором будет выполняться развертывание решения.

Внимание

При использовании сертификатов без доверенной подписи работа клиентских приложений невозможна!

Создайте директорию /etc/nginx/ssl/ и разместите в ней файлы сертификата.

Внимание

Файл должен содержать полную цепочку сертификатов!

Настройки сетевого экрана#

Для корректной работы приложению требуется возможность получать входящие запросы от клиентских приложений и отправлять запросы на серверы Compass. На серверы Compass отправляется следующая информация:

  • Push-уведомления мобильных приложений.

  • Данные, позволяющие идентифицировать пользователя, для взаимодействия с оплатами и службой поддержки on-premise решения.

Примечание

Все команды, описанные в этом параграфе, подразумевают использование сетевого экрана UFW. Если вы используете другой сетевой экран, адаптируйте команды в соответствии с документацией вашего сетевого экрана.

Внимание

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

Веб-сервер#

Приложение использует стандартный https порт 443. Данный порт должен быть открыт для функционирования приложения. Если порт будет недоступен, клиентские приложения не смогут подключиться к серверу. Порт должен быть открыт на том сервере, к которому привязан домен, где будет развёрнуто приложение.

sudo ufw allow 443/tcp;

Внимание

Данный порт нельзя изменить, использование порта 443 является обязательным для функционирования приложения.

Внутренние разрешения и ограничения#

Поскольку приложение доставляется в контейнеризированном виде, для корректной работы необходимо разрешить среде Docker открыть порты в host-режиме. Данные порты используются базами данных и не должны быть доступны извне в целях безопасности.

sudo ufw allow in on docker_gwbridge to any port 35150:35165 proto tcp;
sudo ufw allow in on docker_gwbridge to any port 31101 proto tcp;
sudo ufw allow in on docker_gwbridge to any port 31102 proto tcp;

sudo ufw deny 31101;
sudo ufw deny 31102;
sudo ufw deny 35150:35165/tcp;

Аудио- и видеозвонки#

Для функционирования звонков необходимо открыть порт для tcp и udp трафика. Если данный порт не будет открыт, функционал аудио- и видеозвонков будет недоступен.

# Порт для передачи мультимедиа-данных конференции в приложении.
# Порт будет выделен под RTP соединения участников в конференции.
sudo ufw allow 10000/udp;

Если сервер с Compass развернут за NAT, выполните следующие действия:

  • Убедитесь, что порт 10000 UDP открыт на firewall, через который идет трафик. Если порт закрыт, откройте его.

  • В настройках DNAT настройте проброс порта 10000 UDP с внешнего IP-адреса на порт 10000 UDP сервера Compass во внутренней сети.

Ограничение исходящего трафика#

Если вы планируете ограничить исходящий трафик от приложения, необходимо добавить сервер 45.92.177.63 (license.getcompass.ru и push-onpremise.getcompass.ru) в белый список. Через этот сервер происходит рассылка push-уведомлений и доставляются идентификационные данные пользователей для взаимодействия с лицензиями и службой поддержки on-premise решения. Используется порт 443.

sudo ufw allow out to 45.92.177.63 port 443

Ограничение входящего трафика#

Если вы планируете ограничить входящий трафик на сервер приложения, необходимо разрешить входящий трафик с сервера 45.92.177.63. Это требуется для активации сервера с использованием подтверждающего запроса со стороны сервера лицензий Compass. Входящий запрос будет поступать через порт 443. После активации сервера данное правило можно удалить из сетевого экрана.

sudo ufw allow from 45.92.177.63 port 443

Внимание

При ограничении входящего трафика пользователи смогут получить доступ к приложению только при условии нахождения в доверенной сети.

Ограничения для TURN-сервера#

Примечание

TURN-сервер используется для маршрутизации трафика протокола WebRTC между клиентскими приложениями. Вы можете настроить собственный TURN-сервер или воспользоваться сервером по умолчанию, поставляемым Compass.

Если вы не планируете использовать собственный TURN-сервер, то нужно добавить в сетевой экран разрешения для трафика TURN-сервера по умолчанию (поставляется Compass). Сетевой адрес TURN-сервера по умолчанию 77.223.115.66, используемые порты 443 и 10000.

sudo ufw allow out to 77.223.115.66 port 443;
sudo ufw allow from 77.223.115.66 port 443;

sudo ufw allow from 77.223.115.66 port 10000;

Настройка системных лимитов#

Для корректной работы компонентов системы в условиях высокой нагрузки рекомендуется увеличить лимиты на количество открытых файлов и процессов (потоков). Ниже приведены рекомендуемые параметры, которые необходимо задать в системе, Docker и сервисах, таких как Nginx.

Системные лимиты#

Проверка текущих лимитов systemd:

sudo systemctl show --property DefaultLimitNOFILE,DefaultLimitNPROC

Если ваши текущие лимиты меньше рекомендуемых значений, создайте каталог для настройки systemd командой:

sudo mkdir -p /etc/systemd/system.conf.d

Создайте файл конфигурации с лимитами:

sudo vim /etc/systemd/system.conf.d/50-limits.conf

Добавьте в файл следующее содержимое:

[Manager]
DefaultLimitNOFILE=512000:1048576
DefaultLimitNPROC=65536:131072

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

sudo systemctl daemon-reexec

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

sudo systemctl show --property DefaultLimitNOFILE,DefaultLimitNPROC

Проверка системного лимита потоков:

cat /proc/sys/kernel/threads-max

Если ваши текущие лимиты меньше рекомендуемых значений, создайте или отредактируйте файл конфигурации лимита потоков:

sudo vim /etc/sysctl.d/99-threads-max.conf

Добавьте в файл следующую строку:

kernel.threads-max = 200000

Примените системные параметры:

sudo sysctl --system

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

cat /proc/sys/kernel/threads-max

Docker лимиты#

Проверить установленные лимиты процесса службы Docker можно командой:

sudo systemctl show docker | grep -iE 'LimitNOFILE|LimitNPROC|TasksMax'

Если ваши текущие лимиты меньше рекомендуемых значений, создайте каталог для конфигурации командой:

sudo mkdir -p /etc/systemd/system/docker.service.d

Создайте файл с лимитами systemd для Docker:

sudo vim /etc/systemd/system/docker.service.d/limits.conf

Добавьте в файл следующее содержимое:

[Service]
LimitNOFILE=infinity
LimitNPROC=infinity
TasksMax=infinity

Примечание

Значение infinity означает отсутствие ограничений для docker systemd override.

Обновите конфигурацию systemd:

sudo systemctl daemon-reload

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

sudo systemctl restart docker

Проверить успешно ли применены новые лимиты для демона Docker можно командой:

sudo systemctl show docker | grep -iE 'LimitNOFILE|LimitNPROC|TasksMax'

Установите лимиты для Docker контейнеров. Создайте или отредактируйте файл конфигурации:

sudo vim /etc/docker/daemon.json

Добавьте в файл следующее содержимое:

{
  "default-ulimits": {
    "nofile": {
      "Name": "nofile",
      "Hard": 1048576,
      "Soft": 512000
    },
    "nproc": {
      "Name": "nproc",
      "Hard": 65536,
      "Soft": 32768
    }
  }
}

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

sudo systemctl restart docker

Nginx лимиты#

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

nginx_pid=$(systemctl show nginx --property MainPID --value)
cat /proc/$nginx_pid/limits | grep -E "(open files|processes)"

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

sudo mkdir -p /etc/systemd/system/nginx.service.d

Создайте файл с лимитами для Nginx:

sudo vim /etc/systemd/system/nginx.service.d/limits.conf

Добавьте в файл следующее содержимое:

[Service]
LimitNOFILE=1048576
LimitNPROC=131072

Обновите конфигурацию systemd:

sudo systemctl daemon-reload

Перезапустите службу Nginx:

sudo systemctl restart nginx

Проверить были ли применены новые лимиты можно командой:

nginx_pid=$(systemctl show nginx --property MainPID --value)
cat /proc/$nginx_pid/limits | grep -E "(open files|processes)"

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