Подготовка к развертыванию (RPM-based)#
Перед развертыванием приложения необходимо подготовить к работе систему и сгенерировать все конфигурационные файлы.
Если вы используете одну из RPM-based систем, таких как RedOS, AlmaLinux или Fedora, следуйте инструкции ниже.
Для ALT Linux — используйте отдельную инструкцию
Примечание
В ALT Linux по умолчанию используется root-пользователь. Выполняйте все приведенные ниже команды от root. Для входа в root выполните:
Необходимое программное обеспечение#
Перед установкой основных компонентов рекомендуется убедиться, что в системе установлен и обновлен пакетный менеджер. В ALT Linux пакетный менеджер apt-get предустановлен и, как правило, не требует дополнительной настройки.
Для обновления индекса пакетов выполните:
Для работы приложения необходим установленный Git, который используется для получения исходного кода:
Nginx#
Nginx является рекомендуемым веб-сервером для обработки входящих подключений. Для работы приложения необходимо открыть 443 порт в firewall и установить веб-сертификат, если он еще не установлен.
Установка Nginx выполняется следующими командами:
После установки необходимо запустить и добавить Nginx в автозагрузку:
Подробная информация доступна на официальном сайте.
Если вы планируете использовать промежуточный proxy-сервер перед сервером Compass, ознакомьтесь с разделом конфигурация прокси для NGINX.
Внимание
После развертывания приложения необходимо выполнить следующие действия:
Выдать права на директории Nginx:
Перезапустить Nginx:
Docker#
Docker является средой, необходимой для работы приложения. Минимальная поддерживаемая версия Docker Engine 20.10. Варианты установки описаны в документации на официальном сайте.
Установка в ALT Linux выполняется следующими командами:
После установки необходимо запустить и добавить Docker в автозагрузку:
Docker должен функционировать в Swarm-режиме (возможно развертывание приложения на одной ноде, являющейся одновременно рабочей и управляющей). Команда перевода Docker в Swarm-режим на управляющей ноде:
Если при активации Swarm-режима возникает ошибка
В настройках Docker включена опция live-restore, которая позволяет контейнерам продолжать работу при перезапуске Docker. Однако эта опция не поддерживается в режиме Docker Swarm.
Внесите изменения в конфигурационный файл
/etc/docker/daemon.json
:
Необходимо заменить значение в live-restore: true
на live-restore: false
либо удалите эту строку.
Перезапустите Docker:
Повторно активируйте Swarm-режим:
Python 3#
Python необходим для работы скриптов инсталлятора и генератора конфигурационных файлов на управляющих нодах. Как правило, Python 3 поставляется вместе с дистрибутивом. Дополнительно потребуется установить пакетный менеджер Pip:
Помимо самого Python также потребуются следующие пакеты:
pyyaml
pyopenssl
docker
mysql_connector_python
python-dotenv
psutil
Установка необходимых пакетов:
Настройка ssl-сертификата#
Необходимо заранее выпустить ssl-сертификат для домена, на котором будет выполняться развертывание решения.
Внимание
При использовании сертификатов без доверенной подписи работа клиентских приложений невозможна!
Создайте директорию /etc/nginx/ssl/
и разместите в ней файлы сертификата.
Внимание
Файл должен содержать полную цепочку сертификатов!
Установка и активация Firewalld#
Для управления сетевыми правилами используется firewalld. Убедитесь, что он установлен и запущен:
Если используется другой сетевой экран (например, iptables напрямую), адаптируйте последующие команды самостоятельно.
Настройки сетевого экрана#
Для корректной работы приложению требуется возможность получать входящие запросы от клиентских приложений и отправлять запросы на серверы Compass. На серверы Compass отправляется следующая информация:
Push-уведомления мобильных приложений.
Данные, позволяющие идентифицировать пользователя, для взаимодействия с оплатами и службой поддержки on-premise решения.
Примечание
Все команды, описанные в этом параграфе, подразумевают использование сетевого экрана firewalld
. Если вы используете другой
сетевой экран, адаптируйте команды в соответствии с документацией вашего сетевого экрана.
Внимание
Команды ниже актуальны для настроек по умолчанию. Часть настроек может быть изменена во время развертывания приложения, что повлечет за собой необходимость использовать другие значения портов в командах.
Веб-сервер#
Приложение использует стандартный https порт 443
. Данный порт должен быть открыт для функционирования приложения.
Если порт будет недоступен, клиентские приложения не смогут подключиться к серверу. Порт должен быть открыт
на том сервере, к которому привязан домен, где будет развернуто приложение.
firewall-cmd --permanent --zone=public --add-port=443/tcp
Внимание
Данный порт нельзя изменить, использование порта 443
является обязательным для функционирования приложения.
Внутренние разрешения и ограничения#
Поскольку приложение доставляется в контейнеризированном виде, для корректной работы необходимо разрешить среде Docker открыть порты в host-режиме. Данные порты используются базами данных и не должны быть доступны извне в целях безопасности.
# Разрешаем порты для внутренних сервисов
firewall-cmd --permanent --zone=trusted --add-port=35150-35165/tcp
firewall-cmd --permanent --zone=trusted --add-port=31101/tcp
firewall-cmd --permanent --zone=trusted --add-port=31102/tcp
# Запрещаем доступ к этим портам из внешней сети
for port in {35150..35165}; do
firewall-cmd --permanent --zone=public --add-rich-rule="rule family=\"ipv4\" port port=\"${port}\" protocol=\"tcp\" reject"
done
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" port port="31101" protocol="tcp" reject'
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" port port="31102" protocol="tcp" reject'
Аудио- и видеозвонки#
Для функционирования звонков необходимо открыть порт для tcp и udp трафика. Если данный порт не будет открыт, функционал аудио- и видеозвонков будет недоступен.
# Порт для передачи мультимедиа-данных конференции в приложении.
# Порт будет выделен под RTP соединения участников в конференции.
firewall-cmd --permanent --zone=public --add-port=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
.
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -d 45.92.177.63 -p tcp --dport 443 -j ACCEPT
Ограничение входящего трафика#
Если вы планируете ограничить входящий трафик на сервер приложения, необходимо разрешить входящий трафик
с сервера 45.92.177.63
. Это требуется для активации сервера с использованием подтверждающего запроса со стороны
сервера лицензий Compass. Входящий запрос будет поступать через порт 443
. После активации сервера данное правило
можно удалить из сетевого экрана.
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="45.92.177.63" port port="443" protocol="tcp" accept'
Внимание
При ограничении входящего трафика пользователи смогут получить доступ к приложению только при условии нахождения в доверенной сети.
Ограничения для TURN-сервера#
Примечание
TURN-сервер используется для маршрутизации трафика протокола WebRTC между клиентскими приложениями. Вы можете настроить собственный TURN-сервер или воспользоваться сервером по умолчанию, поставляемым Compass.
Если вы не планируете использовать собственный TURN-сервер, то нужно добавить в сетевой экран разрешения для
трафика TURN-сервера по умолчанию (поставляется Compass). Сетевой адрес TURN-сервера по умолчанию 77.223.115.66
,
используемые порты 443
и 10000
.
# Разрешаем входящий трафик от IP 77.223.115.66 по порту 443
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="77.223.115.66" port port="443" protocol="tcp" accept'
# Разрешаем исходящий трафик на IP 77.223.115.66 по порту 443
firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -d 77.223.115.66 -p tcp --dport 443 -j ACCEPT
# Разрешаем входящий трафик от IP 77.223.115.66 по порту 10000 (TURN-сервер)
firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="77.223.115.66" port port="10000" protocol="tcp" accept'
Перезагрузка конфигурации firewalld#
После добавления правил необходимо перезагрузить конфигурацию сетевого экрана, чтобы изменения вступили в силу:
При желании можно убедиться, что правила применились, выполнив:
Перезапустите Docker:
Настройка системных лимитов#
Для корректной работы компонентов системы в условиях высокой нагрузки рекомендуется увеличить лимиты на количество открытых файлов и процессов (потоков). Ниже приведены рекомендуемые параметры, которые необходимо задать в системе, Docker и сервисах, таких как Nginx.
Системные лимиты#
Проверка текущих лимитов systemd:
Если ваши текущие лимиты меньше рекомендуемых значений, создайте каталог для настройки systemd командой:
Создайте файл конфигурации с лимитами:
Добавьте в файл следующее содержимое:
Перезапустите менеджер systemd для обновления системных настроек:
Проверить успешно ли применены новые лимиты можно командой:
Проверка системного лимита потоков:
Если ваши текущие лимиты меньше рекомендуемых значений, создайте или отредактируйте файл конфигурации лимита потоков:
Добавьте в файл следующую строку:
Примените системные параметры:
Проверить успешно ли применены новые лимиты можно командой:
Docker лимиты#
Проверить установленные лимиты процесса службы Docker можно командой:
Если ваши текущие лимиты меньше рекомендуемых значений, создайте каталог для конфигурации командой:
Создайте файл с лимитами systemd для Docker:
Добавьте в файл следующее содержимое:
Примечание
Значение infinity
означает отсутствие ограничений для docker systemd override.
Обновите конфигурацию systemd:
Перезапустите службу Docker для применения новых лимитов командой:
Проверить успешно ли применены новые лимиты для демона Docker можно командой:
Установите лимиты для Docker контейнеров. Создайте или отредактируйте файл конфигурации:
Добавьте в файл следующее содержимое:
Перезапустите службу Docker для применения новых лимитов командой:
Nginx лимиты#
Проверить установленные лимиты для служб Nginx можно командой:
Если ваши текущие лимиты меньше рекомендуемых значений, создайте каталог с помощью команды:
Создайте файл с лимитами для Nginx:
Добавьте в файл следующее содержимое:
Обновите конфигурацию systemd:
Перезапустите службу Nginx:
Проверить были ли применены новые лимиты можно командой:
Необходимое программное обеспечение#
Перед установкой основных компонентов рекомендуется убедиться, что в системе установлен и обновлен пакетный менеджер. Это позволит корректно загружать и устанавливать необходимые пакеты из официальных репозиториев.
Установка плагинов для dnf (если еще не установлены):
Для работы приложения необходим установленный Git, который используется для получения исходного кода:
Настройка SELinux#
Для корректной работы компонентов (Docker, Nginx) рекомендуется перевести SELinux в режим Permissive
.
Проверьте, активен ли SELinux:
Если команда вернет ответ:
command not found
→ SELinux не установлен, этот шаг можно пропустить;Current mode: permissive
илиSELinux status: disabled
→ этот шаг можно пропустить;Current mode: enforcing
→ необходимо изменить режим наPermissive
.
Внесите изменения в конфигурационный файл
/etc/selinux/config
:
Перезагрузите систему:
Nginx#
Nginx является рекомендуемым веб-сервером для обработки входящих подключений. Для работы приложения необходимо открыть 443 порт в firewall и установить веб-сертификат, если он еще не установлен.
Установка Nginx выполняется следующими командами:
После установки необходимо запустить и добавить Nginx в автозагрузку:
Подробная информация доступна на официальном сайте.
Если вы планируете использовать промежуточный proxy-сервер перед сервером Compass, ознакомьтесь с разделом конфигурация прокси для NGINX.
Внимание
После развертывания приложения необходимо выполнить следующие действия:
Выдать права на директории Nginx:
Перезапустить Nginx:
Docker#
Docker является средой, необходимой для работы приложения. Минимальная поддерживаемая версия Docker Engine 20.10. Варианты установки описаны в документации на официальном сайте.
Docker должен функционировать в Swarm-режиме (возможно развертывание приложения на одной ноде, являющейся одновременно рабочей и управляющей). Команда перевода Docker в Swarm-режим на управляющей ноде:
Если при активации Swarm-режима возникает ошибка
В настройках Docker включена опция live-restore, которая позволяет контейнерам продолжать работу при перезапуске Docker. Однако эта опция не поддерживается в режиме Docker Swarm.
Внесите изменения в конфигурационный файл
/etc/docker/daemon.json
:
Необходимо заменить значение в live-restore: true
на live-restore: false
либо удалите эту строку.
Перезапустите Docker:
Повторно активируйте Swarm-режим:
Python 3#
Python необходим для работы скриптов инсталлятора и генератора конфигурационных файлов на управляющих нодах. Как правило, Python 3 поставляется вместе с дистрибутивом. Дополнительно потребуется установить пакетный менеджер Pip:
Помимо самого Python также потребуются следующие пакеты:
pyyaml
pyopenssl
docker
mysql_connector_python
python-dotenv
psutil
Установка необходимых пакетов:
Настройка ssl-сертификата#
Необходимо заранее выпустить ssl-сертификат для домена, на котором будет выполняться развертывание решения.
Внимание
При использовании сертификатов без доверенной подписи работа клиентских приложений невозможна!
Создайте директорию /etc/nginx/ssl/
и разместите в ней файлы сертификата.
Внимание
Файл должен содержать полную цепочку сертификатов!
Установка и активация Firewalld#
Для управления сетевыми правилами используется firewalld. Убедитесь, что он установлен и запущен:
Если используется другой сетевой экран (например, iptables напрямую), адаптируйте последующие команды самостоятельно.
Настройки сетевого экрана#
Для корректной работы приложению требуется возможность получать входящие запросы от клиентских приложений и отправлять запросы на серверы Compass. На серверы Compass отправляется следующая информация:
Push-уведомления мобильных приложений.
Данные, позволяющие идентифицировать пользователя, для взаимодействия с оплатами и службой поддержки on-premise решения.
Примечание
Все команды, описанные в этом параграфе, подразумевают использование сетевого экрана firewalld
. Если вы используете другой
сетевой экран, адаптируйте команды в соответствии с документацией вашего сетевого экрана.
Внимание
Команды ниже актуальны для настроек по умолчанию. Часть настроек может быть изменена во время развертывания приложения, что повлечет за собой необходимость использовать другие значения портов в командах.
Веб-сервер#
Приложение использует стандартный https порт 443
. Данный порт должен быть открыт для функционирования приложения.
Если порт будет недоступен, клиентские приложения не смогут подключиться к серверу. Порт должен быть открыт
на том сервере, к которому привязан домен, где будет развернуто приложение.
sudo firewall-cmd --permanent --zone=public --add-port=443/tcp
Внимание
Данный порт нельзя изменить, использование порта 443
является обязательным для функционирования приложения.
Внутренние разрешения и ограничения#
Поскольку приложение доставляется в контейнеризированном виде, для корректной работы необходимо разрешить среде Docker открыть порты в host-режиме. Данные порты используются базами данных и не должны быть доступны извне в целях безопасности.
# Разрешаем порты для внутренних сервисов
sudo firewall-cmd --permanent --zone=trusted --add-port=35150-35165/tcp
sudo firewall-cmd --permanent --zone=trusted --add-port=31101/tcp
sudo firewall-cmd --permanent --zone=trusted --add-port=31102/tcp
# Запрещаем доступ к этим портам из внешней сети
for port in {35150..35165}; do
sudo firewall-cmd --permanent --zone=public --add-rich-rule="rule family=\"ipv4\" port port=\"${port}\" protocol=\"tcp\" reject"
done
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" port port="31101" protocol="tcp" reject'
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" port port="31102" protocol="tcp" reject'
Аудио- и видеозвонки#
Для функционирования звонков необходимо открыть порт для tcp и udp трафика. Если данный порт не будет открыт, функционал аудио- и видеозвонков будет недоступен.
# Порт для передачи мультимедиа-данных конференции в приложении.
# Порт будет выделен под RTP соединения участников в конференции.
sudo firewall-cmd --permanent --zone=public --add-port=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 firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -d 45.92.177.63 -p tcp --dport 443 -j ACCEPT
Ограничение входящего трафика#
Если вы планируете ограничить входящий трафик на сервер приложения, необходимо разрешить входящий трафик
с сервера 45.92.177.63
. Это требуется для активации сервера с использованием подтверждающего запроса со стороны
сервера лицензий Compass. Входящий запрос будет поступать через порт 443
. После активации сервера данное правило
можно удалить из сетевого экрана.
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="45.92.177.63" port port="443" protocol="tcp" accept'
Внимание
При ограничении входящего трафика пользователи смогут получить доступ к приложению только при условии нахождения в доверенной сети.
Ограничения для TURN-сервера#
Примечание
TURN-сервер используется для маршрутизации трафика протокола WebRTC между клиентскими приложениями. Вы можете настроить собственный TURN-сервер или воспользоваться сервером по умолчанию, поставляемым Compass.
Если вы не планируете использовать собственный TURN-сервер, то нужно добавить в сетевой экран разрешения для
трафика TURN-сервера по умолчанию (поставляется Compass). Сетевой адрес TURN-сервера по умолчанию 77.223.115.66
,
используемые порты 443
и 10000
.
# Разрешаем входящий трафик от IP 77.223.115.66 по порту 443
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="77.223.115.66" port port="443" protocol="tcp" accept'
# Разрешаем исходящий трафик на IP 77.223.115.66 по порту 443
sudo firewall-cmd --permanent --direct --add-rule ipv4 filter OUTPUT 0 -d 77.223.115.66 -p tcp --dport 443 -j ACCEPT
# Разрешаем входящий трафик от IP 77.223.115.66 по порту 10000 (TURN-сервер)
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="77.223.115.66" port port="10000" protocol="tcp" accept'
Перезагрузка конфигурации firewalld#
После добавления правил необходимо перезагрузить конфигурацию сетевого экрана, чтобы изменения вступили в силу:
При желании можно убедиться, что правила применились, выполнив:
Перезапустите Docker:
Настройка системных лимитов#
Для корректной работы компонентов системы в условиях высокой нагрузки рекомендуется увеличить лимиты на количество открытых файлов и процессов (потоков). Ниже приведены рекомендуемые параметры, которые необходимо задать в системе, Docker и сервисах, таких как Nginx.
Системные лимиты#
Проверка текущих лимитов systemd:
Если ваши текущие лимиты меньше рекомендуемых значений, создайте каталог для настройки systemd командой:
Создайте файл конфигурации с лимитами:
Добавьте в файл следующее содержимое:
Перезапустите менеджер systemd для обновления системных настроек:
Проверить успешно ли применены новые лимиты можно командой:
Проверка системного лимита потоков:
Если ваши текущие лимиты меньше рекомендуемых значений, создайте или отредактируйте файл конфигурации лимита потоков:
Добавьте в файл следующую строку:
Примените системные параметры:
Проверить успешно ли применены новые лимиты можно командой:
Docker лимиты#
Проверить установленные лимиты процесса службы Docker можно командой:
Если ваши текущие лимиты меньше рекомендуемых значений, создайте каталог для конфигурации командой:
Создайте файл с лимитами systemd для Docker:
Добавьте в файл следующее содержимое:
Примечание
Значение infinity
означает отсутствие ограничений для docker systemd override.
Обновите конфигурацию systemd:
Перезапустите службу Docker для применения новых лимитов командой:
Проверить успешно ли применены новые лимиты для демона Docker можно командой:
Установите лимиты для Docker контейнеров. Создайте или отредактируйте файл конфигурации:
Добавьте в файл следующее содержимое:
Перезапустите службу Docker для применения новых лимитов командой:
Nginx лимиты#
Проверить установленные лимиты для служб Nginx можно командой:
Если ваши текущие лимиты меньше рекомендуемых значений, создайте каталог с помощью команды:
Создайте файл с лимитами для Nginx:
Добавьте в файл следующее содержимое:
Обновите конфигурацию systemd:
Перезапустите службу Nginx:
Проверить были ли применены новые лимиты можно командой:
Напишите нам в пространстве поддержки On-premise, Telegram или на почту support@getcompass.ru, чтобы получить индивидуальную демонстрацию функционала и помощь по вопросам интеграции мессенджера в вашей компании.