### ### WEB-Сервер-КС ### ### Copyright (c) 2021, ООО "Кейсистемс" ### ### Версия 3.1.15 ### ВНИМАНИЕ! Для выполнения операции необходимы права суперпользователя. Данная инструкция описывает пример для работы с экземпляром контейнера с идентификатором 1. После создания экземпляра контейнера с помощью платформы WEB-Сервер-КС Докер получаем следующее: 1) Контейнер с именем wsks-3.1.15_001 (посмотреть можно командой # docker ps -a) где, - wsks -> web server keysystems - 3.1.15 -> версия <>.<>.<> - 001 -> идентификатор контейнера 2) Каталог управления /opt/wsks-3.1.15_001/*.* Структура каталога управления: /opt/wsks-3.1.15_001 |-- /conf.ks # каталог конфигурационных файлов для http сервера |-- apache2.conf |-- sslks.conf |-- /ctl # каталог с файлами управления .NET Core приложениями |-- /app # каталог модулей запуска .NET Core приложений |-- /tar_files # каталог для архивов исходного кода для разворачивания .NET Core приложений |-- app_start.sh # bash скрипт запуска .NET Core приложений |-- app_stop.sh # bash скрипт остановки .NET Core приложений |-- readme.txt # текущий файл описания |-- ws_addapp.sh # bash скрипт развертывания нового .NET Core приложения |-- ws_const_var.sh # файл констант и параметров |-- ws_delapp.sh # bash скрипт удаления .NET Core приложения |-- ws_info.sh # bash скрипт просмотра процессов |-- ws_seteds.sh # bash скрипт коррекции установки провайдера |-- ws_setright.sh # bash скрипт установки прав |-- ws_start.sh # bash скрипт запуска web сервара (используется сервисом systemd) |-- ws_stop.sh # bash скрипт остановки web сервера (используется сервисом systemd) |-- ws_updapp.sh # bash скрипт обновления существующего .NET Core приложения |-- /log # каталог логирования работы http сервера |-- *.log |-- /ssl # Самоподписанные демо сертификаты для ssl соединения |-- wsks-19.08_demo.crt |-- wsks-19.08_demo.key |-- /template # каталог шаблонов файлов конфигурации и управления .NET Core приложениями |-- 5xxx_app.t |-- 5xxx_ks.conf.t.t |-- 5xxx_ks.ssl.conf.t.t |-- *appsettings.Production.json.t |-- ports_5xxx.conf.t |-- ports_5xxx.ssl.conf.t |-- /www # каталог для развертывания рабочих каталогов .NET Core приложений |-- /html |-- COPYRIGHT # файл лиценезии Структура каталога данных: /var/lib/wsks-3.1.15_001 # каталог для хранения каких-либо изменяемых данных приложений (например прикрепляемых файлов приложения "Сервис ОД и ЭЦП") 3) Файл в структуре systemd, который обеспечивает автоматический запуск контейнера и приложений, после перезапуска хоста. /lib/systemd/system/wsks-3.1.15_001.service Основные команды развертывания и удаления .Net Core приложений в экземпляре контейнера WEB-Сервер-КС Докер. 1) Развертывание нового .NET Core приложения. Последовательность действий: - поместить архив исходных файлов *.tar.gz в каталог /opt/wsks-3.1.15_001/ctl/tar_files Существуют определенные правила по формированию архива приложения - внутри архива на первом уровне должна присутствовать только одна единственная корневая папка с произвольным именем, а уже внутри нее исходные файлы. Например, архив можно сформировать следующей командой: tar -cvzf <имя архива>.tar.gz <имя каталога> - запустить развертывание приложения, выполнив команду: bash /opt/wsks-3.1.15_001/ctl/ws_addapp.sh -t <тип приложения> -a <имя файла архива> -p <порт> и т.д используя по необходимости те или иные параметры, где, параметры по умолчанию описание ------------------- ------------ ------------------------------------------------------------------------------------ -t | --app_type Тип устанавливаемого приложения. Параметр поддерживает указание запускающего модуля, если приложение нужно запустить нестандартно. Для этого необходимо после типа указать двоеточие и имя стартового модуля, например: wBKS:web_core.dll. Допустимые типы приложений и сервисов: "wBKS" - Бюджет-NEXT "sBKS" - Бюджет-СМАРТ "sSiUp" - Сервис ОД и ЭЦП "wSVOD" - Свод-СМАРТ (web) "sSVOD" - Свод-СМАРТ "wSA" - Сервис Авторизации "wRVZ" - Ревизор-СМАРТ (web) "sRVZ" - Ревизор-СМАРТ "wDWH" - Проект-СМАРТ Про (web) "sDWH" - Проект-СМАРТ Про "sSMT" - Смета-СМАРТ "wSWrk" - Сервис Воркеров -a | --app_tar_archive Имя архива *.tar.gz для развертывания, обязательное условие - наличие одной корневой папки внутри архива. -p | --app_port 5443 Внешний порт apache, для kestrel app_port + 0. При развертывании проверяем через утилиту ss "свободность порта" При развертывании проверяется наличие уже развернутых приложений по файлам в ./app по имени запускающего файла, в котором содержится используцемый порт. Используются для всех типов приложений. -st | --servertype Тип источника СУБД: 0 - MSSQL; 1 - Oracle; 2 - Sqllite; 3 - Postgres. -sn | --servername Имя или ip источника СУБД. -dn | --dbname Имя базы данных источника СУБД. Используются для типов "wBKS", "wDWH", "wRVZ", "wSVOD", "wSA". -du | --dbuser Имя пользователя для соединения с БД -dpwd| --dbpwd Пароль пользователя БД Используются для типа приложения "wSA". -wu | --wsuser Имя пользователя-администратора сайта приложения. -wpwd| --wspwd Пароль пользователя-администратора сайта. Используются для типа приложения "wSA", "wSWrk". -crtk| --crtkey Ключ шифрования информации в БД. Используются для типа приложения "wSA". -crtv| --cryptovendor cpro Имя криптопровайдера: "cpro" - КриптоПро; "vnet" - VipNet; "nocheck" - не проверять провайдера Используется для типа приложения "sSiUp". -s | --inet_source Интернет-ресурс для закачки файла архива. Закачка осуществляется через утилиту wget. Используется для всех типов приложений. Практические примеры: a) Задача - развернуть .NET Core приложение "Веб Бюджет" на базе архива /opt/wsks-3.1.15_001/ctl/tar_files/wBKS_20.1.1.tar.gz для работы с СУБД MSSQL с именем сервера "SRVDB_DEMO\SQL" и базы данных "bks_2021" по 5443 порту. выполняем команду: [root@demosrv]# bash /opt/wsks-3.1.15_001/ctl/ws_addapp.sh -t "wBKS" \ -a "wBKS_20.1.1.tar.gz" \ -p "5443" \ -st "0" \ -sn "SRVDB_DEMO\SQL" \ -dn "bks_2021" в логах выполнения видим что-то типа этого: ========================================================================================================================= ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~ Создание приложения WEB-Сервер-КС по порту = 5443 ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ OK ] Проверка доступности порта 5443 для устанавливаемого приложения. [ OK ] Проверка\Создание пользователя www-data. useradd: пользователь «www-data» уже существует [ OK ] Создание каталога приложения /opt/wsks-3.1.15_001/www/html/wsks_5443. [ OK ] Создание файла запуска приложения /opt/wsks-3.1.15_001/ctl/app/5443_app.sh. Приложение будет доступно по адресу - https://:5443. [ OK ] Создание файла конфигурации Apache для приложения /opt/wsks-3.1.15_001/conf.ks/5443_ks.conf. [ OK ] Создание файла конфигурации портов Apache для приложения /opt/wsks-3.1.15_001/conf.ks/ports_5443.conf. [ OK ] Создание файла настроек для приложения /opt/wsks-3.1.15_001/www/html/wsks_5443/appsettings.Production.json. [ OK ] FireWall: Создание\проверка правила для разрешения соединений по порту 5443. Warning: ALREADY_ENABLED: 5443:tcp [ OK ] Остановка сервиса wsks-3.1.15_001.service. [ OK ] Запуск сервиса wsks-3.1.15_001.service. ========================================================================================================================= Если установка выполнена успешно, то при запуске стартовой страницы в браузере: https://:5443 должна появится форма логина. Аналогично разворачивается сервис "Бюджет-СМАРТ", для это нужно указать тип "sBKS" и соответственно указать свой файл архива [root@demosrv]# bash /opt/wsks-3.1.15_001/ctl/ws_addapp.sh -t "sBKS" -a "sBKS_1902.tar.gz" -p "5443" Также, как и "Бюджет-СМАРТ", разворачиваются однотипные с ним сервисы "Смета-СМАРТ", "Ревизор-СМАРТ", "Проект-СМАРТ Про" и т.д. В клиентской части для работы с сервисом приложений "Бюджет-СМАРТ" нужно указать : https://:5443/service.ashx Примечание: Если вдруг в архиве используется нестандартная стартующая dll, то ее наименование необходимо передать в первом параметре типа после двоеточия ("wBKS:web_core.dll"), например: [root@demosrv]# bash /opt/wsks-3.1.15_001/ctl/ws_addapp.sh -t "wBKS:web_core.dll" -a "wBKS_20.1.1.tar.gz" -p "5443" -st "0" -sn "KSDB_DEMO\SQL" -dn "bks_192" т.о. стандартная стартующая dll будет перезаписана. б) Задача - развернуть .NET Core приложение "Сервис ОД и ЭЦП" на базе архива /opt/wsks-3.1.15_001/ctl/tar_files/sSiUp_3.3.7901.tar.gz - Для КриптоПро по порту 5444 выполняем команду: [root@demosrv]# bash /opt/wsks-3.1.15_001/ctl/ws_addapp.sh -t "sSiUp" \ -a "sSiUp_3.3.7901.tar.gz" \ -p "5444" \ -crtv "cpro" - Для ViPNet по порту 5445 выполняем команду: [root@demosrv]# bash /opt/wsks-3.1.15_001/ctl/ws_addapp.sh -t "sSiUp" \ -a "sSiUp_3.3.7901.tar.gz" \ -p "5445" \ -crtv "vnet" Перед установкой .NetCore приложения "Сервис ОД и ЭЦП" с поддержкой ЭЦП, необходимо чтобы провайдер ЭЦП был установлен на хосте до установки экземпляра (контенера докера). Если же провайдер устанавливался после создания контейнера, то необходимо выполнить коррекцию его установки (см. пункт ВАЖНО ниже). Если необходимо установить только сервис первички без работы с ЭЦП, то в параметр -crtv нужно передать "nocheck": [root@demosrv]# bash /opt/wsks-3.1.15_001/ctl/ws_addapp.sh -t "sSiUp" \ -a "sSiUp_3.3.7901.tar.gz" \ -p "5444" \ -crtv "nocheck" ВАЖНО !!! - В одном экземпляре (контейнере докера) допускается установка только одного приложения "Сервис ОД и ЭЦП". При установке двух и более, абсолютно точно НЕ ГАРАНТИРУЕТСЯ стабильная работа сервисов. - При установке приложений "Сервис ОД и ЭЦП" в разных экземплярах (контейнерах докера), необходимо указать различные значения портов (по умолчанию порт 9090) в параметре "WinCrypto.CryptoModule.Address" в конфигурационном файле uploadservice.config, например: - Если установка провайдера ЭЦП осуществляется после разворачивания сервиса, или экземпляра (контейнера докера), то в этом случае для корректной работы сервиса необходимо скорректировать установку провайдера внутри контейнера экземпляра. Для это необходимо выполнить следующую команду: [root@demosrv]# bash /opt/wsks-3.1.15_001/ctl/ws_seteds.sh -crtv "cpro" или [root@demosrv]# bash /opt/wsks-3.1.15_001/ctl/ws_seteds.sh -crtv "vnet" - Для предотвращения потери данных при случайном удалении приложения "Сервис ОД и ЭЦП", файловое хранилище создается на хосте по пути "/var/lib/<экземпляр контейнера>/wsks_/UPLOADS", который прописывается в параметре Storage.Location во время установки в файле конфигурации uploadservice.config, например: (подкаталог "/UPLOADS" не указывается, т.к. добавляется автоматически) в) Задача - развернуть .NET Core приложение "Сервис Авторизации" на базе архива /opt/wsks-3.1.15_001/ctl/tar_files/wSAuth_3.3.tar.gz по порту 5446 с ключом шифрования данных в БД ""abcd1234"", вспомогательной базой PostgreSQL расположенной на сервере "192.158.0.209", порт "5434", база данных "sa_database", для доступа к которой используется пользователь "dbo" с паролем "dbo_password". Для администрирования самого сервиса, создать пользователя "admin" с паролем "12345". - Для разворачивания по порту 5446 выполняем команду: [root@demosrv]# bash /opt/wsks-3.1.15_001/ctl/ws_addapp.sh -t "wSA" \ -a "wSAuth_3.3.tar.gz" \ -p "5446" \ -st "3" \ -sn "192.158.0.209:5434" \ -dn "sa_database" \ -du "sa_admin" \ -dpwd "sa12345" \ -wu "admin" \ -wpwd "12345" \ -crtk "abcd1234" г) Задача - развернуть .NET Core приложение "Сервис Воркеров" на базе архива /opt/wsks-3.1.15_001/ctl/tar_files/wSWrk_1.0.tar.gz по порту 5447 со строкой соединения к брокеру сообщений (RMQ-KS) "amqp://admin:1@192.158.1.237:5672", вспомогательной базой PostgreSQL расположенной на сервере "192.158.0.209", порт "5434", база данных "sa_database", для доступа к которой используется пользователь "dbo" с паролем "dbo_password". Для администрирования самого сервиса, создать пользователя "admin" с паролем "12345". Внимание: Перед разворачиванием необходимо убедиться, что база существует и брокер сообщений (RMQ-KS) установлен и доступен. - Для разворачивания по порту 5447 выполняем команду: [root@demosrv]# bash /opt/wsks-3.1.15_001/ctl/ws_addapp.sh -t "wSWrk" -a "wSWrk_1.0.tar.gz" -p "5447" \ -st "3" -sn "192.158.0.209:5434" -dn "worker_cache" -du "dbo" -dpwd "dbo_password" \ -mq "amqp://admin:1@192.158.1.237:5672" -wu "admin" -wpwd "12345" Общая информация: Также поддерживается автоматическая закачка файла обновлений с интернет-ресурса. Для этого необходимо указать параметр -s, например: [root@demosrv]# bash /opt/wsks-3.1.15_001/ctl/ws_addapp.sh -t "sBKS" \ -a "sBKS_19.3.1.2347.tar.gz" \ -p "5443" \ -s "https://keysystems.ru/files/smart/INSTALL/BUDGET_SMART/19.3" Таким образом во время работы производится закачивание файла с сайта источника и дальнейшее его разворачивание, без какого-либо локального копирования файла архива в каталог ../tar_files. После успешного развертывания приложения в структуре каталогов управления экземпляром контейнера дополнительно появляются: /opt/wsks-3.1.15_001/ctl/app |-- <порт>_app.sh - основной файл запуска .NET Core приложения |-- <порт>_app.err - файл ошибок запуска .NET Core приложения /opt/wsks-3.1.15_001/conf.ks |-- <порт>_ks.conf - конфигурационный файл для HTTP сервер |-- ports_<порт>.conf - конфигурационный файл порта для HTTP сервер /opt/wsks-3.1.15_001/www/html |-- /wsks_<порт> - целевой каталог файлов приложения |-- *.* где, <порт> - значение порта, по которому происходило разворачивание .Net Core приложения дианазон портов от 5443 до 5493 включительно. 2) Удаление существующего развернутого .NET Core приложения Для удаления необходимо запустить: [root@demosrv]# bash /opt/wsks-3.1.15_001/ctl/ws_delapp.sh -p <порт> Например, для удаление .NET Core приложения по порту 5443 выполняем команду: [root@demosrv]# bash /opt/wsks-3.1.15_001/ctl/ws_delapp.sh -p 5443 в логах выполнения должно быть: ========================================================================================================================= ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~ Удаление приложения WEB-Сервер-КС по порту = 5443 ~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ OK ] Удаление каталога приложения: /opt/wsks-3.1.15_001/www/html/wsks_5443. [ OK ] Удаление файла запуска приложения: /opt/wsks-3.1.15_001/ctl/app/5443_app.sh. [ OK ] Удаление файла конфигурации Apache для приложения: /opt/wsks-3.1.15_001/conf.ks/5443_ks.conf. [ OK ] Удаление файла конфигурации порта Apache для приложения: /opt/wsks-3.1.15_001/conf.ks/ports_5443.conf. [ OK ] Остановка сервиса wsks-3.1.15_001.service. [ Инфо ] Запуск сервиса wsks-3.1.15_001.service отменен. Отсутствуют установленные приложения. Для установки приложений используйте скрипт ws_addapp.sh. См. инструкция по разверыванию /opt/wsks-3.1.15_001/ctl/readme.txt ========================================================================================================================= Общая информация: При удаленни приложения, физически удаляются: - Файлы конфигурации http сервера для приложения - Файлы запуска приложения - целевой каталог файлов приложения ВАЖНО!!! 1) При удалении приложения "Сервис ОД и ЭЦП", в конфигурации по умолчанию вместе с каталогом приложения будут удалены и файлы ОД, если размещаются внутри корневого каталога .Net Core приложения. Будьте внимательны!!! 2) При удалении последнего приложения, сервис экземпляра контейнера не запускается (т.к. нет развернутых приложений), т.е. контейнер останавливается. 3) Обновление существующего развернутого .NET Core приложения Для обновления существующего развернутого приложения необходимо запустить: [root@demosrv]# bash /opt/wsks-3.1.15_001/ctl/ws_updapp.sh -t <тип> -a <имя файла архива> -p <порт> Например, для для обновления развернутого по 5443 порту .NET Core приложения "Бюджет-СМАРТ" на базе архива /opt/wsks-3.1.15_001/ctl/tar_files/sBKS_19.3.1.2347.tar.gz выполняем команду: [root@demosrv]# bash /opt/wsks-3.1.15_001/ctl/ws_updapp.sh -t "sBKS" -a "sBKS_19.3.1.2347.tar.gz" -p "5443" Также поддерживается автоматическая закачка файла обновлений с интернет-ресурса. Для этого необходимо указать параметр -s, например: [root@demosrv]# bash /opt/wsks-3.1.15_001/ctl/ws_updapp.sh -t "sBKS" \ -a "sBKS_19.3.1.2347.tar.gz" \ -p "5443" \ -s "https://keysystems.ru/files/smart/INSTALL/BUDGET_SMART/19.3" ВАЖНО!!! 1) При обновлении .NET Core приложения в его корневом каталоге не перезаписываются каталоги данных и логов работы: - \App_Data\ - \wwwroot\App_data\ файлы настроек и конфигураций: - appsettings.Production.json - uploadservice.config (для типа приложений "sSiUp") 2) Архив обновления должен включать полный набор файлов приложений. Поставка изменений не допускается, т.к. обновление производится путем полной заменой содержимого рабочего каталога приложения и последующей записи файлов из архива обновления, кроме файлов и каталогов указанных в пункте 1. 3) Если криптопровайдер установлен после разворачивания сервиса, который использует ЭЦП, то необходимо перезапустить контейнер с помощью команд: systemctl stop wsks-3.1.15_001.service и systemctl start wsks-3.1.15_001.service. Это необходимо для обновления ссылок на библиотеки криптопровайдера внутри контейнера $ docker exec -d -t wsks-3.1.15_001 su -c "ldconfig" 4) Просмотр информации об запущенных процессах Для просмотра запущенных процессов достаточно выполнить команду: [root@demosrv]# bash /opt/wsks-3.1.15_001/ctl/ws_info.sh ---------------------------------------------------------- Процессы HTTP сервера: ---------------------------------------------------------- PID PPID USERNAME %CPU% %MEM% CMD_apache 29 1 root 0.0 0.1 /usr/sbin/apache2 -f /etc/apache2/conf.ks/apache2.conf -k start 30 29 www-data 0.0 0.2 /usr/sbin/apache2 -f /etc/apache2/conf.ks/apache2.conf -k start 31 29 www-data 0.0 0.1 /usr/sbin/apache2 -f /etc/apache2/conf.ks/apache2.conf -k start ---------------------------------------------------------- Процессы контейнеров dotnet, транслируемые на хост: ---------------------------------------------------------- PID PPID USERNAME %CPU% %MEM% CMD_dotnet 152 109 www-data 0.1 3.2 /opt/.dotnet/dotnet /var/www/html/wsks_5448/Keysystems.Webservice_core.dll 162 116 www-data 0.2 3.0 /opt/.dotnet/dotnet /var/www/html/wsks_5447/Keysystems.RabbitWorker.Lib.dll 163 112 www-data 0.1 2.4 /opt/.dotnet/dotnet /var/www/html/wsks_5446/Keysystems.AuthorizationService.dll 165 124 www-data 0.1 2.3 /opt/.dotnet/dotnet /var/www/html/wsks_5445/Keysystems.UploadWebService.dll 167 134 www-data 0.1 3.3 /opt/.dotnet/dotnet /var/www/html/wsks_5443/Keysystems.Webservice_core.dll 172 150 www-data 0.5 6.0 /opt/.dotnet/dotnet /var/www/html/wsks_5444/web_core.dll ---------------------------------------------------------- Сервис (/lib/systemd/system/wsks-3.1.15_001.service) ---------------------------------------------------------- ● wsks-3.1.15_001.service - (WSKS)wsks-3.1.15:001 docker container web server Loaded: loaded (/lib/systemd/system/wsks-3.1.15_001.service; enabled; vendor preset: enabled) Active: active (exited) since Tue 2021-06-22 08:30:27 MSK; 15min ago Process: 8103 ExecStart=/opt/wsks-3.1.15_001/ctl/ws_start.sh (code=exited, status=0/SUCCESS) июн 22 08:30:24 debian1057 systemd[1]: Starting (WSKS)wsks-3.1.15:001 docker container web server... июн 22 08:30:24 debian1057 ws_start.sh[8103]: [ OK ] Запуск контейнера wsks-3.1.15_001. июн 22 08:30:27 debian1057 ws_start.sh[8103]: [ OK ] HTTP сервер Apache запущен. июн 22 08:30:27 debian1057 ws_start.sh[8103]: [ OK ] Запуск .NetCore приложений. июн 22 08:30:27 debian1057 systemd[1]: Started (WSKS)wsks-3.1.15:001 docker container web server. ---------------------------------------------------------- Общая информация: При выполнении каких-либо действий связанных с созданием, удалением и обновлением веб приложения всегда производится остановка сервиса и соотвественно контейнера. Нужно об этом помнить, т.к. другие развернутые в контейнере приложения в этот момент будут недоступны. В контейнере http сервер Apache 2.4 выступает в роли прокси сервера, который перенаправляет запросы на встроеный ASP.NET Core веб сервер Kestrel, который в свою очередь уже непосредственно связан с приложением. При разворачивании приложения веб серверу Kestrel назначается порт, равный порту Apache с добавлением цифры 0. Например, для порта Apache 5443, для Kestrel будет назначен порт 54430. Схема развертывания: Хост | | Реверсивный ______________________________________________________ | прокси сервер | | | Apache 2.4 | ASP.NET Core приложение 1 | | _______________ | ___________ ______________ | | | | | | | | | | | | порт=5443 | <---- Http --+-->| Kestrel |<- Http контекст -->| Приложение | | | | | | |___________| |______________| | | | | | порт=54430 | | | | |______________________________________________________| | | | Internet <-- Https -+-> | | ______________________________________________________ | | | | | | | | | ASP.NET Core приложение N | | | | | ___________ ______________ | | | | | | | | | | | | порт=54xx | <---- Http --+-->| Kestrel |<- Http контекст -->| Приложение | | | | | | |___________| |______________| | | |_______________| | порт=54xx0 | | |______________________________________________________|