Подготовка к развертыванию (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'

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

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

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

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

Настройка SELinux#

Для корректной работы компонентов (Docker, Nginx) рекомендуется перевести SELinux в режим Permissive.

  1. Проверьте, активен ли SELinux:

sestatus

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

  • command not found → SELinux не установлен, этот шаг можно пропустить;

  • Current mode: permissive или SELinux status: disabledэтот шаг можно пропустить;

  • Current mode: enforcingнеобходимо изменить режим на Permissive.

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

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

sudo reboot

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'

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

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

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

sudo firewall-cmd --reload

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

sudo firewall-cmd --list-all

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

sudo 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)"

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