====== РАСПРЕДЕЛЕННАЯ УСТАНОВКА TERMIDESK ====== Ссылка на документацию с wiki\\ [[https://wiki.astralinux.ru/termidesk-help/5.1/dokumentatsiya/termidesk-ustanovka-programmnogo-kompleksa/raspredelennaya-ustanovka-termidesk]] ---- vdi-disp1 ---- устанавливаем утилиту ''lsb_release'' которая потребуется при добавлении репозитория sudo apt install lsb-release -y подключаем репозиторий, добавляем ключ и обновляем сведения о пакетах если данная операция не была выполнен ранее echo "" | sudo tee -a /etc/apt/sources.list echo "deb http://10.2.0.11:8080/td/5.1.0.24335/repos/astra $(lsb_release -cs) non-free" | sudo tee -a /etc/apt/sources.list wget -O - http://10.2.0.11:8080/td/5.1.0.24335/repos/astra/GPG-KEY-PUBLIC | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/termidesk.gpg sudo apt update Установить клиентскую часть ''postgresql'' Необходимо для возможности прохождения теста соединения с БД во время установки sudo apt install postgresql-client -y Выполняем установку Если установка Termidesk версии 5.1 на ОС Astra Linux Special Edition версии 1.7.4 (и выше) завершается ошибкой: /usr/sbin/apache2: error while loading shared libraries: libastraevents.so.0: cannot open shared object file: No such file or directory То нужно обновить пакет ''libastraevents''\\ [[https://wiki.astralinux.ru/termidesk-help/5.1/dokumentatsiya/termidesk-ustanovka-programmnogo-kompleksa/podgotovka-sredy-funktsionirovaniya-pered-ustanovkoj/podgotovka-os-astra-linux-special-edition]] После этого выполнить переустановку Termidesk sudo apt install termidesk-vdi -y В диалоговых окнах указываем следующую информацию\\ Текст лицензионного соглашения - ''ознакамливаемся с лицензионным соглашением и жмем "Далее"''\\ Согласие с условиями - ''жмем "Да"''\\ Способ хранения паролей RabbitMQ - ''Конфигфайл''\\ Защищенное подключение к СУБД - ''Disable (Открытый, без защиты)''\\ Ввод данных (Адрес СУБД) - ''vdi-db.td.loc''\\ Ввод данных (Порт СУБД) - ''5432''\\ Ввод данных (Имя базы данных) - ''termidesk''\\ Ввод данных (Имя пользователя) - ''termidesk''\\ Ввод данных (Пароль) - ''ksedimret''\\ Защищенное подключение к RabbitMQ - ''Disable (Открытый, без защиты)''\\ Настройка подключений к RabbitMQ - ''выбираем 1-й слот "Empty"''\\ Новое подключение (Адрес сервера) - ''vdi-db.td.loc''\\ Новое подключение (Порт сервера) - ''5672''\\ Новое подключение (Виртуальный хост) - ''termidesk''\\ Новое подключение (Имя пользователя) - ''termidesk''\\ Новое подключение (Пароль) - ''ksedimret''\\ Настройка подключений к RabbitMQ - ''переходим к пункту "Далее" и жмем "Enter"''\\ Роли, выполняемые этим узлом - ''Портал администратора, Портал пользователя''\\ выставляем параметр ''AstraMode'' в значение ''off'' sudo nano /etc/apache2/apache2.conf ... # Astra security mode # AstraMode off ... перезагружаем веб-сервер sudo systemctl restart apache2 убедиться, что локальный пользователь под которым будем входить в интерфейс Termidesk, состоит в группе "astra-admin" sudo usermod -aG astra-admin astra **''копируем конфигурацию на оставшиеся узлы''** второй диспетчер sudo scp -r /etc/opt/termidesk-vdi astra@10.2.0.12:/tmp шлюзы, если в будущем планируем добавить роли диcпетчер или менеджер sudo scp -r /etc/opt/termidesk-vdi astra@10.2.0.13:/tmp sudo scp -r /etc/opt/termidesk-vdi astra@10.2.0.14:/tmp менеджеры ВРМ sudo scp -r /etc/opt/termidesk-vdi astra@10.2.0.15:/tmp sudo scp -r /etc/opt/termidesk-vdi astra@10.2.0.16:/tmp ---- vdi-disp2 ---- устанавливаем утилиту ''lsb_release'' которая потребуется при добавлении репозитория sudo apt install lsb-release -y подключаем репозиторий, добавляем ключ и обновляем сведения о пакетах если данная операция не была выполнен ранее echo "" | sudo tee -a /etc/apt/sources.list echo "deb http://10.2.0.11:8080/td/5.1.0.24335/repos/astra $(lsb_release -cs) non-free" | sudo tee -a /etc/apt/sources.list wget -O - http://10.2.0.11:8080/td/5.1.0.24335/repos/astra/GPG-KEY-PUBLIC | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/termidesk.gpg sudo apt update копируем конфигурацию переданную с первого диспетчера в папку назначения sudo mkdir -p /etc/opt sudo mv /tmp/termidesk-vdi /etc/opt/ Выполняем установку В ходе установки никаких диалоговых окон отобразиться не должно, будет использована та конфигурация, которая скопирована с первого диспетчера. Если установка Termidesk версии 5.1 на ОС Astra Linux Special Edition версии 1.7.4 (и выше) завершается ошибкой: /usr/sbin/apache2: error while loading shared libraries: libastraevents.so.0: cannot open shared object file: No such file or directory То нужно обновить пакет ''libastraevents''\\ [[https://wiki.astralinux.ru/termidesk-help/5.1/dokumentatsiya/termidesk-ustanovka-programmnogo-kompleksa/podgotovka-sredy-funktsionirovaniya-pered-ustanovkoj/podgotovka-os-astra-linux-special-edition]]\\ После этого выполнить переустановку Termidesk sudo apt install termidesk-vdi -y # выставляем параметр ''AstraMode'' в значение ''off'' sudo nano /etc/apache2/apache2.conf ... # Astra security mode # AstraMode off ... перезагружаем веб-сервер sudo systemctl restart apache2 убедиться, что локальный пользователь под которым будем входить в интерфейс Termidesk, состоит в группе "astra-admin" sudo usermod -aG astra-admin astra ---- vdi-gw1 vdi-gw2 ---- устанавливаем утилиту ''lsb_release'' которая потребуется при добавлении репозитория sudo apt install lsb-release -y подключаем репозиторий, добавляем ключ и обновляем сведения о пакетах если данная операция не была выполнен ранее echo "" | sudo tee -a /etc/apt/sources.list echo "deb http://10.2.0.11:8080/td/5.1.0.24335/repos/astra $(lsb_release -cs) non-free" | sudo tee -a /etc/apt/sources.list wget -O - http://10.2.0.11:8080/td/5.1.0.24335/repos/astra/GPG-KEY-PUBLIC | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/termidesk.gpg sudo apt update переносим конфигурацию переданную с первого диспетчера в папку назначения, если ранее её копировали с узла первого диспетчера sudo mkdir -p /etc/opt sudo mv /tmp/termidesk-vdi /etc/opt/ устанавливаем шлюз termidesk-gateway sudo apt install termidesk-gateway -y Генерация сертификатов\\ [[https://wiki.astralinux.ru/termidesk-help/5.1/dokumentatsiya/termidesk-nastrojka-programmnogo-kompleksa/nastrojki-posle-raspredelennoj-ustanovki-fermy-termidesk/nastrojka-balansirovshchika-dlya-raboty-s-samopodpisannymi-sertifikatami/sozdanie-samopodpisannogo-ssl-sertifikata]]\\ sudo openssl req -new -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/termidesk/gw.key -out /etc/termidesk/gw.crt sudo chown termidesk-gateway:termidesk-gateway /etc/termidesk/gw.* Настройка шлюза\\ [[https://wiki.astralinux.ru/termidesk-help/5.1/dokumentatsiya/shlyuz/shlyuz-parametry-konfigurirovaniya]] Делаем бекап конфигурации по-умолчанию sudo cp /etc/termidesk/gateway.yaml /etc/termidesk/gateway.yaml.default Смотрим значение параметра ''HEALTH_CHECK_ACCESS_KEY'' Это значение потребуется для настройки параметра ''mgtserver.token'' Если ранее было выполнено копироыание каталога с конфигурацией с первого диспетчера, то команду можно выполнить прямо на текущем узле. Иначе, команду следует выпонить на первом диспетчере или любом узле на котором есть копия каталога конфигурации с первого диспетчера. sudo grep HEALTH_CHECK_ACCESS_KEY /etc/opt/termidesk-vdi/termidesk.conf Открываем файл настроек шлюза на редактирование Значение токена должно совпадать со значением параметра ''HEALTH_CHECK_ACCESS_KEY'' из файла ''/etc/opt/termidesk-vdi/termidesk.conf'' sudo nano /etc/termidesk/gateway.yaml Приводим файл настроек шлюза к виду # # The default configuration file for Termidesk Gateway, please do not change it. # _val0: &sslprof0 # key: ${sslKey} # cert: ${sslCert} key: /etc/termidesk/gw.key cert: /etc/termidesk/gw.crt ca: ${sslCa} passphrase: ${sslPassPhrase} dhparams: ${sslDhParams} ciphers: ${sslCiphers} gwservers: - listen: ${wsServerIP:0.0.0.0}:${wsServerPort:5099} websocket: pingtimeout: ${wsIdleTimeout:30} checktoken: # url: ${urlCheckToken:https://127.0.0.1/api/wsproxy/v1/verify} url: https://vdi-lb.td.loc/api/wsproxy/v5.1/verify tcp_downstream: reconnect: ${gwTCPReconnect:0} # wss server - listen: 0.0.0.0:5199 ssl: *sslprof0 websocket: pingtimeout: 30 checktoken: url: https://vdi-lb.td.loc/api/wsproxy/v5.1/verify tcp_downstream: reconnect: 0 mgtserver: # listen: ${mgtServerIP:127.0.0.1}:${mgtServerPort:8102} listen: ${mgtServerIP:0.0.0.0}:${mgtServerPort:8102} path: ${healthCheckURL:/api/health} # token: ${healthCheckAccessKey} token: HEALTH_CHECK_ACCESS_KEY ssl: *sslprof0 metrics: path: ${metricsCheckURL:/api/health/metrics} token: ${metricsAccessKey} rabbitmq: # url: ${coordinatorUrl} # user: ${coordinatorUser} # pass: ${coordinatorPass} url: "amqp://vdi-db.td.loc:5672/termidesk" user: termidesk pass: ksedimret timeout: ${coordinatorTimeout} refreshtime: ${coordinatorRefreshTime:60} single: ${coordinatorSingle:true} exchange: ${coordinatorExchange} routingkey: ${coordinatorRoutingKey} loglevel: info: ${logInfo:true} debug: ${logDebug:false} Выполняем перезапуск сервиса sudo systemctl restart termidesk-gateway Проверяем, что при перезагрузке не было ошибок sudo journalctl -u termidesk-gateway -n 100 --no-pager Проверяем, что шлюз слушает на всех нужных портах sudo netstat -tupln ---- vdi-tsk1 ---- __//**''Способ 1''**//__ устанавливаем утилиту ''lsb_release'' которая потребуется при добавлении репозитория sudo apt install lsb-release -y подключаем репозиторий, добавляем ключ и обновляем сведения о пакетах если данная операция не была выполнен ранее echo "" | sudo tee -a /etc/apt/sources.list echo "deb http://10.2.0.11:8080/td/5.1.0.24335/repos/astra $(lsb_release -cs) non-free" | sudo tee -a /etc/apt/sources.list wget -O - http://10.2.0.11:8080/td/5.1.0.24335/repos/astra/GPG-KEY-PUBLIC | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/termidesk.gpg sudo apt update копируем конфигурацию переданную с первого диспетчера в папку назначения sudo mkdir -p /etc/opt sudo mv /tmp/termidesk-vdi /etc/opt/ меняем роль узла в файле конфигурации sudo nano /etc/opt/termidesk-vdi/termidesk.conf ... NODE_ROLES="TASKMAN,CELERYMAN" ... Выполняем установку В ходе установки никаких диалоговых окон отобразиться не должно, будет использована та конфигурация, которая скопирована с первого диспетчера. Единственное отличие в параметре ''NODE_ROLES'', который мы вручную изменили. Если установка Termidesk версии 5.1 на ОС Astra Linux Special Edition версии 1.7.4 (и выше) завершается ошибкой: /usr/sbin/apache2: error while loading shared libraries: libastraevents.so.0: cannot open shared object file: No such file or directory То нужно обновить пакет ''libastraevents''\\ [[https://wiki.astralinux.ru/termidesk-help/5.1/dokumentatsiya/termidesk-ustanovka-programmnogo-kompleksa/podgotovka-sredy-funktsionirovaniya-pered-ustanovkoj/podgotovka-os-astra-linux-special-edition]]\\ После этого выполнить переустановку Termidesk sudo apt install termidesk-vdi -y После установки нужно остановить и исключить службу termidesk-taskman из автоматического запуска Исключение службы из автоматического запуска необходимо, поскольку управление ее состоянием производится скриптами режима высокой доступности sudo systemctl disable termidesk-taskman --now ---- vdi-tsk2 ---- __//**''Способ 2''**//__ устанавливаем утилиту ''lsb_release'' которая потребуется при добавлении репозитория sudo apt install lsb-release -y подключаем репозиторий, добавляем ключ и обновляем сведения о пакетах если данная операция не была выполнен ранее echo "" | sudo tee -a /etc/apt/sources.list echo "deb http://10.2.0.11:8080/td/5.1.0.24335/repos/astra $(lsb_release -cs) non-free" | sudo tee -a /etc/apt/sources.list wget -O - http://10.2.0.11:8080/td/5.1.0.24335/repos/astra/GPG-KEY-PUBLIC | sudo gpg --dearmour -o /etc/apt/trusted.gpg.d/termidesk.gpg sudo apt update копируем конфигурацию переданную с первого диспетчера в папку назначения sudo mkdir -p /etc/opt sudo mv /tmp/termidesk-vdi /etc/opt/ Выполняем установку В ходе установки никаких диалоговых окон отобразиться не должно, будет использована та конфигурация, которая скопирована с первого диспетчера. Если установка Termidesk версии 5.1 на ОС Astra Linux Special Edition версии 1.7.4 (и выше) завершается ошибкой: /usr/sbin/apache2: error while loading shared libraries: libastraevents.so.0: cannot open shared object file: No such file or directory То нужно обновить пакет libastraevents\\ [[https://wiki.astralinux.ru/termidesk-help/5.1/dokumentatsiya/termidesk-ustanovka-programmnogo-kompleksa/podgotovka-sredy-funktsionirovaniya-pered-ustanovkoj/podgotovka-os-astra-linux-special-edition]]\\ После этого выполнить переустановку Termidesk sudo apt install termidesk-vdi -y Пользуемся утилитой termidesk-configure Получаем текущие роли sudo /opt/termidesk/sbin/termidesk-config get NODE_ROLES Устанавливаем новые роли sudo /opt/termidesk/sbin/termidesk-config set NODE_ROLES TASKMAN,CELERYMAN Применяем новую конфигурацию sudo /opt/termidesk/sbin/termidesk-config setup sudo /opt/termidesk/sbin/termidesk-config daemons_restart После установки нужно остановить и исключить службу termidesk-taskman из автоматического запуска Исключение службы из автоматического запуска необходимо, поскольку управление ее состоянием производится скриптами режима высокой доступности sudo systemctl disable termidesk-taskman --now ---- vdi-tsk1 ---- Ссылка на документацию в wiki\\ [[https://wiki.astralinux.ru/termidesk-help/5.1/dokumentatsiya/termidesk-nastrojka-programmnogo-kompleksa/nastrojki-posle-raspredelennoj-ustanovki-fermy-termidesk/nastrojka-menedyoera-rabochego-mesta-v-reyoime-vysokoj-dostupnosti]]\\ Запускаем службу, не добавляя ее в раздел автоматической загрузки (необязательный шаг) sudo systemctl start termidesk-taskman Устанавливаем пакеты программ для организации высокой доступности sudo apt install keepalived ipset -y Создаем файл настроек ''keepalived.conf'' sudo nano /etc/keepalived/keepalived.conf global_defs { router_id taskman script_user root enable_script_security } vrrp_script check_httpd { script "/usr/bin/pgrep apache" interval 1 timeout 3 rise 1 fall 2 init_fail } vrrp_instance termidesk-taskman { notify /etc/keepalived/notify.sh state MASTER interface eth0 virtual_router_id 20 priority 128 preempt_delay 5 advert_int 1 unicast_src_ip 10.2.0.15 authentication { auth_type PASS auth_pass ksedimret } virtual_ipaddress { 10.2.0.20/24 dev eth0 label eth0:20 } track_script { check_httpd } } Создаем файл настроек ''notify.sh'' sudo nano /etc/keepalived/notify.sh #!/bin/sh -e SELF_BIN=$(realpath ${0}) SELF_DIR=$(dirname ${SELF_BIN}) TYPE=${1} NAME=${2} STATE=${3} PRIORITY=${4} TASKMAN_SYSTEMCTL_NAME="termidesk-taskman" TASKMAN_SYSTEMCTL_DESCRIPTION="Termidesk-VDI Taskman daemon" TASKMAN_SYSTEMCTL_PIDFILE="/run/termidesk-taskman/pid" msg2log () { logger -i "Termidesk: ${1}" } taskman_stop () { msg2log "Stopping ${TASKMAN_SYSTEMCTL_NAME} service" systemctl is-active -q ${TASKMAN_SYSTEMCTL_NAME} && systemctl stop -q ${TASKMAN_SYSTEMCTL_NAME} } taskman_start () { msg2log "Starting ${TASKMAN_SYSTEMCTL_NAME} service" systemctl is-active -q ${TASKMAN_SYSTEMCTL_NAME} || systemctl start -q ${TASKMAN_SYSTEMCTL_NAME} } # VRRP event type: INSTANCE, name: lsb_40, state: BACKUP, priority: 64 msg2log "VRRP event type: ${TYPE}, name: ${NAME}, state: ${STATE}, priority: ${PRIORITY}" case ${STATE} in BACKUP) [ "${NAME}" = "${TASKMAN_SYSTEMCTL_NAME}" ] && taskman_stop ;; FAULT) [ "${NAME}" = "${TASKMAN_SYSTEMCTL_NAME}" ] && taskman_stop ;; MASTER) [ "${NAME}" = "${TASKMAN_SYSTEMCTL_NAME}" ] && taskman_start ;; *) msg2log "Error: unknown state ${STATE}" exit 1 ;; esac exit 0 Необходимо сделать файл ''notify.sh'' исполняемым sudo chmod +x /etc/keepalived/notify.sh Затем нужно добавить в автоматическую загрузку и запустить сервис keeaplived sudo systemctl enable keepalived --now Проверяем состояние сервиса sudo systemctl status keepalived Также можно воспользоваться командой sudo journalctl -u keepalived -n 100 --no-pager ---- vdi-tsk2 ---- Ссылка на документацию в wiki\\ [[https://wiki.astralinux.ru/termidesk-help/5.1/dokumentatsiya/termidesk-nastrojka-programmnogo-kompleksa/nastrojki-posle-raspredelennoj-ustanovki-fermy-termidesk/nastrojka-menedyoera-rabochego-mesta-v-reyoime-vysokoj-dostupnosti]]\\ Устанавливаем пакеты программ для организации высокой доступности sudo apt install keepalived ipset -y Создаем файл настроек ''keepalived.conf'' sudo nano /etc/keepalived/keepalived.conf global_defs { router_id taskman script_user root enable_script_security } vrrp_script check_httpd { script "/usr/bin/pgrep apache" interval 1 timeout 3 rise 1 fall 2 init_fail } vrrp_instance termidesk-taskman { notify /etc/keepalived/notify.sh state BACKUP interface eth0 virtual_router_id 20 priority 128 preempt_delay 5 advert_int 1 unicast_src_ip 10.2.0.16 authentication { auth_type PASS auth_pass ksedimret } virtual_ipaddress { 10.2.0.20/24 dev eth0 label eth0:20 } track_script { check_httpd } } Создаем файл настроек ''notify.sh'' sudo nano /etc/keepalived/notify.sh #!/bin/sh -e SELF_BIN=$(realpath ${0}) SELF_DIR=$(dirname ${SELF_BIN}) TYPE=${1} NAME=${2} STATE=${3} PRIORITY=${4} TASKMAN_SYSTEMCTL_NAME="termidesk-taskman" TASKMAN_SYSTEMCTL_DESCRIPTION="Termidesk-VDI Taskman daemon" TASKMAN_SYSTEMCTL_PIDFILE="/run/termidesk-taskman/pid" msg2log () { logger -i "Termidesk: ${1}" } taskman_stop () { msg2log "Stopping ${TASKMAN_SYSTEMCTL_NAME} service" systemctl is-active -q ${TASKMAN_SYSTEMCTL_NAME} && systemctl stop -q ${TASKMAN_SYSTEMCTL_NAME} } taskman_start () { msg2log "Starting ${TASKMAN_SYSTEMCTL_NAME} service" systemctl is-active -q ${TASKMAN_SYSTEMCTL_NAME} || systemctl start -q ${TASKMAN_SYSTEMCTL_NAME} } # VRRP event type: INSTANCE, name: lsb_40, state: BACKUP, priority: 64 msg2log "VRRP event type: ${TYPE}, name: ${NAME}, state: ${STATE}, priority: ${PRIORITY}" case ${STATE} in BACKUP) [ "${NAME}" = "${TASKMAN_SYSTEMCTL_NAME}" ] && taskman_stop ;; FAULT) [ "${NAME}" = "${TASKMAN_SYSTEMCTL_NAME}" ] && taskman_stop ;; MASTER) [ "${NAME}" = "${TASKMAN_SYSTEMCTL_NAME}" ] && taskman_start ;; *) msg2log "Error: unknown state ${STATE}" exit 1 ;; esac exit 0 Необходимо сделать файл ''notify.sh'' исполняемым sudo chmod +x /etc/keepalived/notify.sh Затем нужно добавить в автоматическую загрузку и запустить сервис keeaplived sudo systemctl enable keepalived --now Проверяем состояние сервиса sudo systemctl status keepalived Также можно воспользоваться командой sudo journalctl -u keepalived -n 100 --no-pager ---- vdi-lb ---- Ссылка на документацию в wiki\\ [[https://wiki.astralinux.ru/termidesk-help/5.1/dokumentatsiya/termidesk-nastrojka-programmnogo-kompleksa/nastrojki-posle-raspredelennoj-ustanovki-fermy-termidesk/nastrojka-balansirovshchika-dlya-raboty-s-samopodpisannymi-sertifikatami]]\\ Устанавливаем Nginx, если ранее он не был установлен на хосте. sudo apt install nginx -y Создаем самоподписанный сертификат\\ [[https://wiki.astralinux.ru/termidesk-help/5.1/dokumentatsiya/termidesk-nastrojka-programmnogo-kompleksa/nastrojki-posle-raspredelennoj-ustanovki-fermy-termidesk/nastrojka-balansirovshchika-dlya-raboty-s-samopodpisannymi-sertifikatami/sozdanie-samopodpisannogo-ssl-sertifikata]]\\ После исполнения команды надо последовательно ввести ряд параметров, запросы на которые отобразятся в командной строке\\ Наиболее важным параметром является ''Common Name'' (необходимо ввести FQDN-имя балансировщика). Как правило, в эту строку вносят доменное имя, с которым нужно связать сервер.\\ В случае если доменного имени нет, нужно внести в эту строку IP-адрес сервера sudo openssl req -new -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt Необходимо последовательно ввести ряд параметров, запросы на которые отобразятся в командной строке: Country Name (2 letter code) [AU]; State or Province Name (full name) [Some-State]; Locality Name (eg, city) []; Organization Name (eg, company) [Internet Widgits Pty Ltd]; Organizational Unit Name (eg, section) []; Common Name (e.g. server FQDN or YOUR name) []; Email Address []. Наиболее важным параметром является Common Name (необходимо ввести FQDN-имя балансировщика).\\ Как правило, в эту строку вносят доменное имя, с которым нужно связать сервер.\\ При использовании ''OpenSSL'' необходимо также создать ''ключи Диффи-Хеллмана''.\\ Ключи Диффи-Хеллмана используются для безопасного обмена криптографическими ключами по незащищенному каналу связи.\\ Этот метод позволяет двум сторонам согласовать общий секретный ключ, который затем может быть использован для шифрования дальнейшего обмена данными, не передавая сам ключ напрямую.\\ Процесс создания занимает около 15 минут. sudo openssl dhparam -out /etc/nginx/dhparam.pem 4096 Выполняем настройки Nginx для поддержки SSL создаем и заполняем необходимые сниппеты\\ [[https://wiki.astralinux.ru/termidesk-help/5.1/dokumentatsiya/termidesk-nastrojka-programmnogo-kompleksa/nastrojki-posle-raspredelennoj-ustanovki-fermy-termidesk/nastrojka-balansirovshchika-dlya-raboty-s-samopodpisannymi-sertifikatami/nastrojka-nginx-dlya-podderyoki-ssl]]\\ sudo nano /etc/nginx/snippets/self-signed.conf ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt; ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key; sudo nano /etc/nginx/snippets/ssl-params.conf ssl_protocols TLSv1.3; ssl_prefer_server_ciphers on; ssl_dhparam /etc/nginx/dhparam.pem; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384; ssl_ecdh_curve secp384r1; # Requires nginx >= 1.1.0 ssl_session_timeout 10m; ssl_session_cache shared:SSL:10m; ssl_session_tickets off; # Requires nginx >= 1.5.9 ssl_stapling on; # Requires nginx >= 1.3.7 ssl_stapling_verify on; # Requires nginx => 1.3.7 resolver 77.88.8.8 77.88.8.1 valid=300s; resolver_timeout 5s; # Disable strict transport security for now. You can uncomment the following # line if you understand the implications. # add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"; add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; Создаем нужную конфигурацию для веб-сервера\\ [[https://wiki.astralinux.ru/termidesk-help/5.1/dokumentatsiya/termidesk-nastrojka-programmnogo-kompleksa/nastrojki-posle-raspredelennoj-ustanovki-fermy-termidesk/nastrojka-balansirovshchika-dlya-raboty-s-samopodpisannymi-sertifikatami/konfigurirovanie-veb-servera]]\\ sudo nano /etc/nginx/sites-available/termidesk-lb.conf upstream daas-upstream-ws { least_conn; # PROXY TERMIDESK server 10.2.0.13:5099; server 10.2.0.14:5099; } upstream daas-upstream-nodes { least_conn; # DISPATCHER TERMIDESK server 10.2.0.11:443; server 10.2.0.12:443; } server { listen 0.0.0.0:80; listen 0.0.0.0:443 ssl; include snippets/self-signed.conf; include snippets/ssl-params.conf; location /websockify { # limit_req zone=fast nodelay; proxy_http_version 1.1; proxy_pass http://daas-upstream-ws/; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # Connection timeout proxy_connect_timeout 1000; proxy_send_timeout 1000; proxy_read_timeout 1000; send_timeout 1000; # Disable cache proxy_buffering off; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location / { proxy_pass https://daas-upstream-nodes/; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; } } Если необходимо добавить конфигурацию апстримов, работающих по WSS,\\ То следует добавить блок самого апстрима.\\ А также конфигурацию проксирования на этот апстрим. upstream daas-upstream-wss { least_conn; # PROXY TERMIDESK server 10.2.0.13:5199; server 10.2.0.14:5199; } ... server { ... location /wss { # limit_req zone=fast nodelay; proxy_http_version 1.1; proxy_pass https://daas-upstream-wss/; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # Connection timeout proxy_connect_timeout 1000; proxy_send_timeout 1000; proxy_read_timeout 1000; send_timeout 1000; # Disable cache proxy_buffering off; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } ... } Активируем конфигурацию sudo ln -s /etc/nginx/sites-available/termidesk-lb.conf /etc/nginx/sites-enabled/ Удаляем конфигурацию по-умолчанию sudo rm /etc/nginx/sites-enabled/default Проверяем корректность настроек sudo nginx -t Поскольку сертификат является самоподписанным, SSL stapling не будет использоваться. Сервер nginx выдаст предупреждение, отключит stapling для данного сертификата и продолжит работу. Если других предупреждений нет, то выполняем перезапуск сервиса sudo nginx -s reload