# Установка сервера приложений Автономный режим используется когда нагрузка позволяет использовать один экземпляр сервера приложений. ## Необходимое программное обеспечение под ОС Astra Linux / Debian - postgresql-client (версия клиента должна совпадать с версией сервера) - jre 8 или jdk 8 - ГосJava - Axiom JDK (Liberica) - Oracle Java - другой дистрибутив на основе OpenJDK - expect - htop - iotop - sysstat - ssh (клиент и сервер SSH) - mc (Midnight Commander) - tar - zip - unzip - cifs-utils Если планируется работать с большим количеством прикрепленных файлов, необходимо подключить дополнительный раздел большого объема. Например сетевой ресурс samba/cifs Пример подключения через конфигурационный файл `/etc/fstab` ```text # share global attach //172.16.1.120/globalfiles /mnt/attach cifs _netdev,username=global@testdomain.local,password=123Global321,iocharset=utf8,file_mode=0777,dir_mode=0777 0 0 ``` ## Установка Скачайте архив дистрибутива и прикладного решения с предоставленного ресурса (Предоставляется через контактное лицо, файлы `globalserver.zip` и `applib.zip`). Подключитесь терминалом к серверу Global под пользователем root Создайте временную директорию и загрузите файлы дистрибутива на сервер ```bash mkdir -p /tmp/global ``` создайте пользователя и группу `global` ```bash sudo groupadd global sudo useradd -g global global ``` Распакуйте сервер приложений ```bash sudo mkdir -p /opt/global/globalserver sudo unzip /tmp/global/globalserver.zip -d /opt/global/globalserver ``` Распакуйте образ прикладного решения ```bash sudo mkdir -p /opt/global/globalserver/application/applib /opt/global/globalserver/application/applibBin sudo unzip /tmp/global/applib.zip -d /opt/global/globalserver/application/applib ``` Смените владельца ```bash sudo chown -R global:global /opt/global/globalserver ``` Выдайте разрешение на запуск ```bash sudo chmod ug+x /opt/global/globalserver/start.sh sudo chmod ug+x /opt/global/globalserver/stop.sh sudo chmod ug+x /opt/global/globalserver/globalscheduler.sh ``` ## Настройка сервисов Сервис нужен для работы системы global в качестве фонового процесса ### Сервис global Для настройки сервиса нужно скопировать файл `/opt/global/globalserver/admin/linux/global3.service.origin` в каталог `/lib/systemd/system` и переименовать `global3.service` ```bash sudo cp /opt/global/globalserver/admin/linux/global3.service.origin /lib/systemd/system/global3.service ``` или создать новый файл ```bash sudo touch /usr/lib/systemd/system/global3.service ``` Содержимое ```text [Unit] Description=Система Global After=multi-user.target [Service] User=global Group=global AmbientCapabilities=CAP_NET_BIND_SERVICE # Env Vars Environment=JAVA_OPTS=-Dfile.encoding=UTF-8 Type=idle WorkingDirectory=/opt/global/globalserver ExecStart=/opt/global/globalserver/start.sh ExecStop=/opt/global/globalserver/stop.sh TimeoutStopSec=110 [Install] WantedBy=multi-user.target ``` Разрешите автозагрузку сервиса ```bash sudo systemctl daemon-reload sudo systemctl enable global3 ``` ### Сервис globalscheduler Для настройки сервиса нужно скопировать файл `/opt/global/globalserver/admin/linux/scheduler/globalscheduler.service.origin` в каталог `/lib/systemd/system` и переименовать `globalscheduler.service` ```bash sudo cp /opt/global/globalserver/admin/linux/scheduler/globalscheduler.service.origin /lib/systemd/system/globalscheduler.service ``` или создать новый файл ```bash sudo touch /usr/lib/systemd/system/globalscheduler.service ``` Содержимое ```text [Unit] Description=Менеджер заданий Global SE Postgres After=multi-user.target [Service] Type=idle WorkingDirectory=/opt/global/globalserver ExecStart=/opt/global/globalserver/globalscheduler.sh TimeoutStopSec=110 [Install] WantedBy=multi-user.target ``` Разрешите автозагрузку сервиса ```bash sudo systemctl daemon-reload sudo systemctl enable globalscheduler ``` ## Настройка сервера приложений ### Конфигурация Global Основной конфигурационный файл системы Global расположен в каталоге `/opt/global/globalserver/application/config/global3.config.xml` Пропишите бд в основную конфигурацию ```xml ``` Где: \<ПсевдонимБД> - сокращенное название организации, или доменное имя. \ - адрес сервера postgres \<ИмяБД> - имя базы данных, подготовленоой для работы Global System \<ИмяПользователяБД> - пользователь БД \<ПарольПользователяБД> - пароль пользователя БД ### Конфигурация запуска Параметры запуска расположены в файле `/opt/global/globalserver/default.sh`, их можно переопределить в файле `/opt/global/globalserver/parameters.sh` ```bash #!/bin/bash set -x # Настройки портов export JETTY_HTTP_PORT=8080 #память: 1000M - в мегабайтах 1G - в гигабайтах export globalMemory=3G ``` Параметры запуска назначают порты для http сервера, максимальный размер оперативной памяти, а также порты для вспомогательных служб. ### Конфигурация планировщика заданий Расположение основного файла конфигурации: `/opt/global/globalserver/application/config/tools/scheduler/quartz.properties` Создайте файл конфигурации планировщика ```bash sudo mkdir -p /opt/global/globalserver/application/config/tools/scheduler sudo touch /opt/global/globalserver/application/config/tools/scheduler/quartz.properties ``` Вставьте содержимое ```text org.quartz.scheduler.instanceName = PostgresScheduler org.quartz.scheduler.instanceId = AUTO org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool org.quartz.threadPool.threadCount = 500 org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.PostgreSQLDelegate org.quartz.jobStore.dataSource = quartzDS org.quartz.jobStore.dontSetAutoCommitFalse=false org.quartz.dataSource.quartzDS.driver = org.postgresql.Driver org.quartz.dataSource.quartzDS.URL = jdbc:postgresql://:5432/?ApplicationName=Global-Scheduler org.quartz.dataSource.quartzDS.user = org.quartz.dataSource.quartzDS.password = org.quartz.jobStore.tablePrefix=btk_qrtz_ org.terracotta.quartz.skipUpdateCheck=true ``` Где \ - адрес сервера postgres \ - имя БД \ - пользователь БД \ - пароль пользователя БД Создайте файл конфигурации лога планировщика ```bash sudo touch /opt/global/globalserver/application/config/tools/scheduler/logback.xml ``` Вставьте содержимое ```xml %d{dd.MM.yyyy HH:mm:ss.SSS} | [%-5level] | [%thread] | %logger | %msg%n ${LOG_DIR}/jobscheduler.%d{yyyy-MM-dd_HH}.log %d{dd.MM.yyyy HH:mm:ss.SSS} | [%-5level] | [%thread] | %logger | %msg%n ``` ### Конфигурация утилиты обновления В дистрибутив сервера приложений Global входит утилита обновления, которая обновляет сам сервер приложений или прикладной код образа проектного решения. Для настройки утилиты обновления скопируйте и переименуйте поставочный конфигурационный файл `/opt/global/globalserver/update/config.sh.origin` ```bash sudo cp /opt/global/globalserver/update/config.sh.origin /opt/global/globalserver/update/config.sh ``` ```bash #!/bin/sh # # Global Postgres update # параметры утилиты обновления системы # #ssh сервера приложений sSshHost="localhost" #ssh порт sSshPort="2299" #ssh логин sSshLogin="admin" #ssh пароль sSshPass="admin" #наименование бд sDbName="<ПсевдонимБД>" #наименование SBT sSbtName="main" # имя сервиса сервера приложений sGlobalService="global3" # имя сервиса менеджера заданий sSchedulerService="globalscheduler" # временный каталог обновлений sTmp="/opt/global/globalupdate" ``` Где: sSshPort - порт внутреннего ssh сервера Global sSshLogin - логин из `global3.config.xml` в разделе security\users sSshPass - пароль из `global3.config.xml` в разделе security\users sDbName - Псевдоним БД из `global3.config.xml` в разделе databases\database:alias sSbtName - Имя SBT из `global3.config.xml` в разделе databases\database\metaManager:sbtName sGlobalService - Имя сервиса сервера приложений sSchedulerService - Имя сервиса менеджера заданий Выдайте права на запуск ```bash sudo find /opt/global/globalserver/update -type f -name '*.sh' -exec chmod a+x {} \; ``` ### Шифрование паролей в конфигурационных файлах В конфигурационных файлах системы пароли по умолчанию хранятся в открытом виде. Для шифрования паролей используется генератор шифрованных паролей, интегрированный в сервер приложений. Шифрованные пароли указываются в отдельных тэгах конфигурационных файлов. Пароли могут указываться в следующих файлах: - global3.config.xml, описан в разделе `Конфигурация Global` - quartz.properties, описан в разделе `Конфигурация планировщика заданий` - config.sh, описан в разделе `Конфигурация утилиты обновления` #### Общие принципы шифрования Для шифрования пароля необходимо запустить Global 3 Server c парамерами `-encryptPassword` и `-masterPassword` ```bash start.sh -encryptPassword password -masterPassword masterpassword ``` Где: - `-encryptPassword` \ Пароль который необходимо зашифровать - `-masterPassword` \ Ключ шифрования, если не указан используется секретный ключ по умолчанию. Результатом выполнения будет вывод в консоль строки, полученной в результате шифрования пароля переданного параметром `-encryptPassword`. #### Использование шифрованных паролей Шифрованные пароли можно использовать во всех местах файла global3.config.xml где требуется указание пароля пользователя. Вместо тэга `password` зашифрованный пароль необходимо указывать в тэге `encryptedPassword`. Пример: ```xml ``` Мастер-пароль может быть указан следующими способами: - Параметром запуска сервера приложений `-masterPassword` ```bash start.sh -masterPassword masterpassword ``` - Параметром конфигурационного файла `global3.config.xml` с указанием файла, хранящего мастер пароль. ```xml ``` #### Шифрование паролей планировщика заданий В файле quartz.properties зашифрованный пароль может быть указан в отдельном параметре ```text ru.bitec.jobscheduler.quartz.dataSource.quartzDS.encryptedpassword=encryptedPassword ``` Ключ шифрования может быть указан следующими способами: - Параметром запуска планировщика `-masterPassword` - Путь до файла с ключом шифрования указывается в конфигурационном файле в параметре ```text ru.bitec.jobscheduler.masterpass.path=/some/path/to/file ``` ```{note} Если в пути до файла используются символ \\ (обратный слэш), то его требуется экранировать вторым слэшем. Пример пути: ```text ru.bitec.jobscheduler.masterpass.path=C:\\some\\path\\to\\file ``` Для шифрования пароля требуется запустить планировщик заданий c парамерами encryptPassword и masterPassword ```bash globalscheduler.sh -encryptPassword password -masterPassword masterpassword ``` Где: - `-encryptPassword` \ Пароль который необходимо зашифровать - `-masterPassword` \ Ключ шифрования, если не указан то используется стандартная логика определения мастер-пароля, так же как и при обычном запуске планировщика. #### шифрование паролей утилиты обновления В файле config.sh хранится пароль доступа к ssh сервису сервера приложений в открытом виде и не может быть зашифрован. Если в этом файле не указывать параметры sSshLogin и sSshPass, то они будут запрошены у запускающего пользователя. ### Ключи шифрования для токенов #### Закрытый ключ В основном файле конфигурации планировщика `quartz.properties` можно указать путь до файла с закрытым ключом шифрования в параметре ```text ru.bitec.jobscheduler.privatekey.path = /some/path/to/file ``` ```{note} Если в пути до файла используются символ \\ (обратный слеш), то его требуется экранировать вторым слешем. Пример пути: ``` ru.bitec.jobscheduler.privatekey.path=C:\\some\\path\\to\\file ``` ``` Этот ключ будет использоваться для подписания токена авторизации для пользователя, который является исполнителем задачи планировщика. Файл, до которого указан путь, должен содержать в себе только массив байт закрытого ключа, созданного по алгоритму `RSA`, с размером 2048 бит, и закодированный в `Base64`. Пример содержимого файла с закрытым ключом: ```text MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAst2dVRFXdMJOSvpz0ryXtGaOmxMiPZiXC/5rCzX7Zl/kUnct16mqGbkqVeO+B04gOpOkSgyE1bnhpNbLxt4Rnywc6EAMKrF6pxaux592zi8QF0CjT2jWfjU+ps9HBo3WH9lRRRMCnNtf+11UH8aOSHS5KV5RkQvsyp6V8pXdorAcKqhmJcO3UHHhj+jM6yzP5O8eDVunwpb+/KeweQVKDRAJ/mkNXKyHQDPoAuB/0e8tQilzKMk4FspgjJPI0cyn2j88vNVKVIWES5Uq+7ENuzhbwGau78i2nEbw5Eh5MSZFsmGGcjBxtC2FKMDtQVfod+5qjr3YcAWt4NFkbF2rpwIDAQAB ``` #### Открытый ключ Открытый ключ используется для проверки подписанного закрытым ключом токена авторизации. Данный ключ хранится в системе Global, поэтому его задание необходимо производить на этапе `Администрирование системы`. ## Первичная инициализация БД Перед началом работы или установки поставочного дампа пустую базу данных системы требуется инициализировать. При инициализации БД будут созданы все необходимые схемы, таблицы, функции, а так же будут установленны первоначальные данные в таблицах. Для инициализации выполните следующие действия: Подключитесь терминалом ssh к серверу приложений. По умолчанию порт 2299, логин admin, пароль admin ```bash ssh admin@localhost -p 2299 ``` Где `admin` - это имя пользователя из конфигурационного файла global3.config.xml, `localhost` - адрес сервера Global Подключитесь к системе в режиме `sys` ```bash attach db Global as sys ``` Где `Global` - это псевдоним БД из конфигурационного файла global3.config.xml Выполните команду инициализации схемы ```bash init schema ``` Выполните команду инициализации первоначальных данных ```bash init data ``` ## Получение и установка лицензии Лицензирование системы привязано к базе данных. Уникальный код базы формируется с учетом аппаратно-программного окружения СУБД и привязано к конкретной БД. Любые изменения программно-аппаратного окружения (Тип процессора, материнская плата, мак-адрес сетевой карты, версия СУБД, имя базы данных и т.д.) приведут к потере лицензии. Лицензия устанавливается при первой авторизации в системе. Позже лицензия может быть изменена или дополнена. Для регистрации необходимо зайти в систему Global с помощью браузера ```text http://Адрес_хоста_системы_Global/ ``` ![Окно входа в систему](img/LoginPage.png) Для входа используются учетные данные: Логин: admin Пароль: admin ```{note} Если используется поставочный дамп, контактное лицо передает логин и пароль для входа в систему. ``` После входа будет предложено зарегистрировать базу данных: ![Регистрация БД](img/RegisterDB.png) Система предложит сформировать файл запроса лицензии. Полученный файл запроса нужно отправить контактному лицу в ООО «Бизнес-Технологии» и получить от него файл с лицензией.