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

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

Если вы используете одну из RPM-based систем, таких как RedOS, AlmaLinux или Fedora, следуйте инструкции ниже.

Для ALT Linux — используйте отдельную инструкцию

Примечание

В ALT Linux по умолчанию используется root-пользователь. Выполняйте все приведенные ниже команды от root. Для входа в root выполните:

su -

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

Перед установкой основных компонентов рекомендуется убедиться, что в системе установлен и обновлен пакетный менеджер. В ALT Linux пакетный менеджер apt-get предустановлен и, как правило, не требует дополнительной настройки.

Для обновления индекса пакетов выполните:

apt-get update

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

apt-get install git

Nginx#

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

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

apt-get upgrade
apt-get install nginx

После установки необходимо запустить и добавить Nginx в автозагрузку:

systemctl start nginx
systemctl enable nginx

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

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

Внимание

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

  1. Выдать права на директории Nginx:

    chown -R www-data:www-data /var/spool/nginx
    chmod 700 /var/spool/nginx/tmp
    chmod 700 /var/spool/nginx/tmp/proxy
    chmod 700 /var/spool/nginx
    
  2. Перезапустить Nginx:

    systemctl restart nginx
    

Docker#

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

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

apt-get install docker-engine

После установки необходимо запустить и добавить Docker в автозагрузку:

systemctl start docker
systemctl enable docker

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

docker swarm init || true
Если при активации Swarm-режима возникает ошибка
Error response from daemon:
--live-restore daemon configuration is incompatible with swarm mode

В настройках Docker включена опция live-restore, которая позволяет контейнерам продолжать работу при перезапуске Docker. Однако эта опция не поддерживается в режиме Docker Swarm.

  1. Внесите изменения в конфигурационный файл /etc/docker/daemon.json:

Необходимо заменить значение в live-restore: true на live-restore: false либо удалите эту строку.

live-restore: true
  1. Перезапустите Docker:

systemctl restart docker
  1. Повторно активируйте Swarm-режим:

docker swarm init || true

Python 3#

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

apt-get install python3-module-pip

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

  • pyyaml

  • pyopenssl

  • docker

  • mysql_connector_python

  • python-dotenv

  • psutil

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

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/ и разместите в ней файлы сертификата.

Внимание

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

Установка и активация Firewalld#

Для управления сетевыми правилами используется firewalld. Убедитесь, что он установлен и запущен:

apt-get install firewalld
systemctl enable --now 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'

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

Для функционирования звонков необходимо открыть порт для 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#

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

firewall-cmd --reload

При желании можно убедиться, что правила применились, выполнив:

firewall-cmd --list-all

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

systemctl restart docker

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

Для корректной работы компонентов системы в условиях высокой нагрузки рекомендуется увеличить лимиты на количество открытых файлов и процессов (потоков). Ниже приведены рекомендуемые параметры, которые необходимо задать в системе, 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)"

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

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

Установка плагинов для dnf (если еще не установлены):

sudo dnf -y install dnf-plugins-core

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

sudo dnf -y install git

Nginx#

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

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

sudo dnf upgrade
sudo dnf install nginx

После установки необходимо запустить и добавить Nginx в автозагрузку:

sudo systemctl start nginx
sudo systemctl enable nginx

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

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

Внимание

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

  1. Выдать права на директории Nginx:

    sudo chown -R www-data:www-data /var/lib/nginx
    sudo chmod 700 /var/lib/nginx
    sudo chmod 700 /var/lib/nginx/tmp
    sudo chmod 700 /var/lib/nginx/tmp/proxy
    
  2. Перезапустить Nginx:

    sudo systemctl restart nginx
    

Docker#

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

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

sudo docker swarm init || true
Если при активации Swarm-режима возникает ошибка
Error response from daemon:
--live-restore daemon configuration is incompatible with swarm mode

В настройках Docker включена опция live-restore, которая позволяет контейнерам продолжать работу при перезапуске Docker. Однако эта опция не поддерживается в режиме Docker Swarm.

  1. Внесите изменения в конфигурационный файл /etc/docker/daemon.json:

Необходимо заменить значение в live-restore: true на live-restore: false либо удалите эту строку.

live-restore: true
  1. Перезапустите Docker:

sudo systemctl restart docker
  1. Повторно активируйте Swarm-режим:

sudo docker swarm init || true

Python 3#

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

sudo dnf 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/ и разместите в ней файлы сертификата.

Внимание

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

Установка и активация Firewalld#

Для управления сетевыми правилами используется firewalld. Убедитесь, что он установлен и запущен:

sudo dnf install firewalld
sudo systemctl enable --now 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'

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

Для функционирования звонков необходимо открыть порт для 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#

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

sudo firewall-cmd --reload

При желании можно убедиться, что правила применились, выполнив:

sudo firewall-cmd --list-all

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

sudo systemctl restart docker

Настройка SELinux#

SELinux — это механизм мандатного контроля доступа, который повышает безопасность системы, ограничивая действия процессов на основе политик безопасности. Подробнее о SELinux можно узнать в документации Red Hat и репозитории проекта SELinux.

Для корректной работы приложения с SELinux требуется предварительно настроить его политику безопасности.

Проверка режима работы SELinux#

Проверить, в каком режиме находится SELinux, можно командой:

sestatus

Если команда вернет ответ:

  • command not found → SELinux не установлен, настройку Selinux можно пропустить;

  • Current mode: permissive или SELinux status: disabled → настройку Selinux можно пропустить;

  • Current mode: enforcing → необходимо настроить SELinux согласно инструкции ниже.

В тестовой среде его можно временно отключить (режим disabled или permissive), но в продакшене рекомендуется использовать режим enforcing и настраивать SELinux согласно приведенным ниже шагам.

Отключение SELinux для тестовой среды
  1. Внесите изменения в конфигурационный файл /etc/selinux/config:

SELINUX=permissive
  1. Перезагрузите систему:

sudo reboot

Перед настройкой убедитесь, что установлен пакет policycoreutils-python-utils, он необходим для использования команды semanage.

Проверить наличие команды:

semanage -h

Если команда отсутствует, необходимо установить пакет командой ниже:

sudo dnf install -y policycoreutils-python-utils

Включение обязательных SELinux-флагов#

Эти флаги разрешают сетевое взаимодействие, доступ к ресурсам и работу контейнеров.

sudo setsebool -P container_manage_cgroup on
sudo setsebool -P selinuxuser_execmod on
sudo setsebool -P virt_sandbox_use_all_caps on
sudo setsebool -P httpd_can_network_connect on
sudo setsebool -P httpd_can_network_connect_db on
sudo setsebool -P httpd_setrlimit on

Подготовка volume-директории для Docker#

Требуется для того, чтобы контейнеры получали стандартный безопасный доступ к данным через SELinux-контекст.

sudo mkdir -p /data/docker
sudo semanage fcontext -a -t svirt_sandbox_file_t "/data/docker(/.*)?"
sudo restorecon -Rv /data/docker

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

Обеспечивает корректную работу временных файлов под SELinux.

sudo semanage fcontext -a -t httpd_cache_t "/var/lib/nginx(/.*)?"
sudo restorecon -Rv /var/lib/nginx

Маркировка SSL-сертификатов Nginx#

Чтобы добавить правило маркировки SSL-сертификатов, выполните команду:

sudo semanage fcontext -a -t cert_t "/etc/nginx/ssl(/.*)?"

Внимание

На данном этапе предварительная настройка SELinux выполнена. Чтобы активация сервера прошла корректно, после установки Compass On-Premise необходимо выполнить следующие действия:

  1. Примените SELinux-контексты для Nginx.

sudo restorecon -Rv /etc/nginx
  1. Добавьте разрешение чтения конфигураций Nginx из директории установки Compass On-premise.

Вместо root_mount_path укажите директорию, указанную в параметре root_mount_path в файле конфигурации global.yaml.

sudo semanage fcontext -a -t httpd_config_t "{root_mount_path}/nginx/conf(/.*)?"
sudo restorecon -Rv {root_mount_path}/nginx/conf
  1. Перезагрузите systemd и Nginx

sudo systemctl daemon-reexec
sudo systemctl restart nginx

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

Для корректной работы компонентов системы в условиях высокой нагрузки рекомендуется увеличить лимиты на количество открытых файлов и процессов (потоков). Ниже приведены рекомендуемые параметры, которые необходимо задать в системе, 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, чтобы получить индивидуальную демонстрацию функционала и помощь по вопросам интеграции мессенджера в вашей компании.