Установка сервера приложений
Contents
Установка сервера приложений#
Автономный режим используется когда нагрузка позволяет использовать один экземпляр сервера приложений.
Необходимое программное обеспечение под ОС Astra Linux / Debian#
postgresql-client (версия клиента должна совпадать с версией сервера)
jre 8 или jdk 8
ГосJava https://lab50.net/gosjava/
Axiom JDK (Liberica) https://axiomjdk.ru/pages/downloads/
Oracle Java https://java.com/ru/download/
другой дистрибутив на основе OpenJDK https://openjdk.java.net/
expect
htop
iotop
sysstat
ssh (клиент и сервер SSH)
mc (Midnight Commander)
tar
zip
unzip
cifs-utils
Если планируется работать с большим количеством прикрепленных файлов, необходимо подключить дополнительный раздел большого объема. Например сетевой ресурс samba/cifs
Пример подключения через конфигурационный файл /etc/fstab
# 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
Создайте временную директорию и загрузите файлы дистрибутива на сервер
mkdir -p /tmp/global
создайте пользователя и группу global
sudo groupadd global
sudo useradd -g global global
Распакуйте сервер приложений
sudo mkdir -p /opt/global/globalserver
sudo unzip /tmp/global/globalserver.zip -d /opt/global/globalserver
Распакуйте образ прикладного решения
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
Смените владельца
sudo chown -R global:global /opt/global/globalserver
Выдайте разрешение на запуск
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
sudo cp /opt/global/globalserver/admin/linux/global3.service.origin /lib/systemd/system/global3.service
или создать новый файл
sudo touch /usr/lib/systemd/system/global3.service
Содержимое
[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
Разрешите автозагрузку сервиса
sudo systemctl daemon-reload
sudo systemctl enable global3
Сервис globalscheduler#
Процесс настройки сервиса описан в документации GlobalScheduler.
Настройка сервера приложений#
Конфигурация Global#
Основной конфигурационный файл системы Global расположен в каталоге /opt/global/globalserver/application/config/global3.config.xml
Пропишите бд в основную конфигурацию
<?xml version="1.0" encoding="UTF-8" ?>
<configuration xmlns="http://www.global-system.ru/xsd/global3.config.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.global-system.ru/xsd/global3.config.1.0">
<databases>
<database alias="<ПсевдонимБД>" driver="org.postgresql.Driver" schema="PUBLIC"
url="jdbc:postgresql://<host>:5432/<ИмяБД>" connectionType="proxyShared" authenticationType="btk">
<users>
<user name="<ИмяПользователяБД>" password="<ПарольПользователяБД>"/>
</users>
<metaManager
mode="Xml"
defaultNamespace="ru.bitec.app.btk"
sbtName="main"
/>
<eclipseLink
persistenceUnitName="pgdev"
autoCommit="false"
/>
</database>
</databases>
<sbts>
<sbt name="main"
sourceMode="Jar"
jarFolder="/opt/global/globalserver/application/applib"
binaryFolder="/opt/global/globalserver/application/applibBin"
source="/opt/global/globalserver/application/applib"
dirWatcherEnabled="false"
>
<fileStorages>
<fileStorage name="Default"
path="/mnt/attach/"/>
</fileStorages>
</sbt>
</sbts>
<security>
<!--В секции могут быть указаны значения парметров подключения по умолчанию-->
<!--user - имя пользователя-->
<!--password - пароль-->
<!--dataBase - база данных-->
<!--application - приложение-->
<loginDefaults user="admin" password="admin" dataBase="DEVBTK"/>
<!--Управляет сохранением параметров последнего входа в куках браузера-->
<loginSavable user="true" password="true"/>
<!--Ограничения на стойкость паролей.-->
<!--<passwordStrength-->
<!--minLength="6"-->
<!--maxLength="20"-->
<!--digitCount="1"-->
<!--specialCharCount="0"-->
<!--lowercaseCharCount="0"-->
<!--uppercaseCharCount="0"-->
<!--rejectUserName="false"-->
<!--rejectWhitespace="false"-->
<!--/>-->
<users>
<user name="admin" password="admin" roles="ssh,http-monitor"/>
<!--Роль "system" предоставляет право открытия пользовательских сессий при нахождении сервера в сервисном режиме-->
<user name="system" password="system" roles="system"/>
</users>
</security>
<quotas>
<server maxOldGenMemory="0" maxEdenSpaceMemory="80%"/>
<session maxUiCellCount="100M" maxFormCount="30"/>
<transaction maxTxCellCount="100M"/>
</quotas>
<!--minPoolSize - Минимальное число соединений в пуле-->
<!--maxPoolSize - Максимальное число соединений в пуле-->
<!--initialPoolSize - Начальное число соединений в пуле-->
<!--inactiveConnectionTimeout - Время в течении которого сессия остаётся в пуле после освобождения, в секундах.-->
<!--poolTimeout - Максимальное время ожидания получения соединения из пула, в секундах.-->
<!--maxActiveThreadCount - Максимальное количество потоков работающих с базой данных.-->
<!--activeThreadTimeout - Максимальное время ожидания потока для начала работы с базой данных, в секундах.-->
<connectionPool minPoolSize="2"
maxPoolSize="200"
initialPoolSize="2"
inactiveConnectionTimeout="60"
poolTimeout="10"
maxActiveThreadCount="170"
activeThreadTimeout="10"/>
<!--clientTimeout - Максимальное время бездействия сокета. В секундах.-->
<!--clientPingInterval - Интервал выполнения пинга клиентского приложения, для предотвращения закрытия веб-сокета по таймауту. В секундах.-->
<!--clientPingEnabled - Если true, сервер будет периодически пинговать клиента, что бы сокет не закрывался-->
<!--sessionTimeout - Время жизни сессии после разрыва соединения с браузером. Интервал в секундах.-->
<!--maxSessionCount - Максимальное число запущенных сессий-->
<!--maxSessionsPerUser - Максимальное число запущенных сессий для пользователя-->
<!-- (лишние будут закрываться при закрытии окна браузера)-->
<!--cookieExpiresTime - Время жизни Cookies в секундах-->
<sessionPool clientTimeout="600"
clientPingInterval="300"
clientPingEnabled="true"
sessionTimeout="900"
maxSessionCount="200"
passiveSessionsMax="2"
cookieExpiresTime="86400"
/>
<!--host - Адрес web-сервера:порт, на котором запущен сервис построения отчётов FastReport.Mono.
Этот же адрес должен быть указан на прокси-узле -->
<!--proxyaddress - Корнерой адрес куда клинетское приложение будет полысать запрос на получение отчёта.-->
<!-- Абсолютный, если необходимо направить запросы напрямую к серверу отчётов или на внешний сервис.-->
<!-- Относительный, если на текущем web-сервере настроен proxy к серверу отчётов.-->
<fastReportMonoServer host="http://global3:90" proxyaddress="fastreportmono"/>
<!--host - Адрес web-сервера:порт, на котором запущен сервис построения отчётов FastReport.VCL.
Этот же адрес должен быть указан на прокси-узле -->
<!--proxyaddress - Корнерой адрес куда клинетское приложение будет полысать запрос на получение отчёта.-->
<!-- Абсолютный, если необходимо направить запросы напрямую к серверу отчётов или на внешний сервис.-->
<!-- Относительный, если на текущем web-сервере настроен proxy к серверу отчётов.-->
<fastReportServer host="http://global3:8010" proxyaddress="fastreport"/>
<!--<fastReportServer host="http://localhost:8080/fastreport" handler="CreateReport.ashx" proxyaddress="fastreport"/>-->
<!--enableNetworkPrinting - Включает режим печати отчётных форм на принтерах в подсети сервера приложений. -->
<!-- В противном случае печать осуществляется на клиентской стороне.-->
<printing enableNetworkPrinting="false"/>
<!--selectionMetaExpireTimeInSeconds - Время, в течение которого в кэше метаданные выборки считаются валидными-->
<cache selectionMetaExpireTimeInSeconds="300"/>
<!--operationLevel - Минимальный уровень логов операций отправляемых на клиент-->
<!--sqlLevel - Минимальный уровень логов SQL отправляемых на клиент-->
<!--scriptLevel - Минимальный уровень логов скриптовых методов отправляемых на клиент-->
<clientLog operationLevel="INFO" sqlLevel="OFF" scriptLevel="OFF"/>
<client>
<automation metaDataAttributes="false"
jexlExecution="false"
operExecution="false"/>
</client>
<!--enabled - флаг доступности службы оповещения-->
<instantMessenger enabled="true"/>
<development>
<!--enabled - режим отладки. Делает видимым панель отладки в главном меню приложения-->
<debugMode enabled="true"/>
<!--enabled - Доступность флага "Конфигуратор" в диалоге подключения-->
<configurator enabled="true"/>
</development>
<!--jmxServiceUrl - Пользователь/пароль, под которым создаются временные таблицы для olap-кубов-->
<!--user - пользователь доступа к олап серверу-->
<!--password - пароль доступа к олап серверу-->
<olap jmxServiceUrl="service:jmx:rmi:///jndi/rmi://:1999/jmxrmi" user="olap" password="olap"/>
<!-- Можно вручную указать директорию для временных файлов, используемую Global3 для своих нужд.
По умолчанию берется директория для временных файлов вашего пользователя.
На win7/8 это обычно "C:\Users\<yourUserName>\AppData\Local\Temp\.global3"
Меняйте значение по умолчанию ТОЛЬКО В ТОМ СЛУЧАЕ, если по каким-то причинам вы не имеете доступа к директории по умолчанию.
Для этого раскомментируйте следующую строку и установите путь к необходимой директории. -->
<!--<temporaryDir>C:\temp</temporaryDir>-->
<cluster enabled="false" name="GlobalAppServerCluster">
<broker>
<database alias="cluster_broker" driver="org.postgresql.Driver" schema="global_system"
url="jdbc:postgresql://v39:5432/test">
<users>
<user name="test" password="test"/>
</users>
</database>
</broker>
<node>
<balancerTypes>["prod","dev"]</balancerTypes>
</node>
</cluster>
<languages>
<language name="ru-RU"/>
<language name="en-US"/>
</languages>
<ssh defaultDb="PostgreSql" port="22"/>
</configuration>
Где:
<ПсевдонимБД> - сокращенное название организации, или доменное имя.
<host> - адрес сервера postgres
<ИмяБД> - имя базы данных, подготовленоой для работы Global System
<ИмяПользователяБД> - пользователь БД
<ПарольПользователяБД> - пароль пользователя БД
Конфигурация запуска#
Параметры запуска расположены в файле /opt/global/globalserver/default.sh
, их можно переопределить в файле /opt/global/globalserver/parameters.sh
#!/bin/bash
set -x
# Настройки портов
export JETTY_HTTP_PORT=8080
#память: 1000M - в мегабайтах 1G - в гигабайтах
export globalMemory=3G
Параметры запуска назначают порты для http сервера, максимальный размер оперативной памяти, а также порты для вспомогательных служб.
Конфигурация планировщика заданий#
Процесс конфигурации описан в документации GlobalScheduler.
Конфигурация утилиты обновления#
В дистрибутив сервера приложений Global входит утилита обновления, которая обновляет сам сервер приложений или прикладной код образа проектного решения.
Для настройки утилиты обновления скопируйте и переименуйте поставочный конфигурационный файл /opt/global/globalserver/update/config.sh.origin
sudo cp /opt/global/globalserver/update/config.sh.origin /opt/global/globalserver/update/config.sh
#!/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 - Имя сервиса менеджера заданий
Выдайте права на запуск
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
start.sh -encryptPassword password -masterPassword masterpassword
Где:
-encryptPassword
Пароль который необходимо зашифровать-masterPassword
Ключ шифрования, если не указан используется секретный ключ по умолчанию.
Результатом выполнения будет вывод в консоль строки, полученной в
результате шифрования пароля переданного параметром -encryptPassword
.
Использование шифрованных паролей#
Шифрованные пароли можно использовать во всех местах файла global3.config.xml где требуется указание пароля пользователя. Вместо тэга password
зашифрованный пароль необходимо указывать в тэге encryptedPassword
.
Пример:
<databases>
<database alias="<ПсевдонимБД>" driver="org.postgresql.Driver" schema="PUBLIC"
url="jdbc:postgresql://<host>:5432/<ИмяБД>" connectionType="proxyShared" authenticationType="btk">
<users>
<user name="<ИмяПользователяБД>" encryptedPassword="<ЗашифрованныйПарольПользователяБД>"/>
</users>
</database>
</databases>
Мастер-пароль может быть указан следующими способами:
Параметром запуска сервера приложений
-masterPassword
start.sh -masterPassword masterpassword
Параметром конфигурационного файла
global3.config.xml
с указанием файла, хранящего мастер пароль.
<security>
<masterPassword file="<ПутьКФайлуСПаролем>">
</security>
Шифрование паролей планировщика заданий#
В файле quartz.properties зашифрованный пароль может быть указан в отдельном параметре
ru.bitec.jobscheduler.quartz.dataSource.quartzDS.encryptedpassword=encryptedPassword
Ключ шифрования может быть указан следующими способами:
Параметром запуска планировщика
-masterPassword
Путь до файла с ключом шифрования указывается в конфигурационном файле в параметре
ru.bitec.jobscheduler.masterpass.path=/some/path/to/file
Примечание
Если в пути до файла используются символ \ (обратный слэш), то его требуется экранировать вторым слэшем. Пример пути:
ru.bitec.jobscheduler.masterpass.path=C:\\some\\path\\to\\file
Для шифрования пароля требуется запустить планировщик заданий c парамерами encryptPassword и masterPassword
globalscheduler.sh -encryptPassword password -masterPassword masterpassword
Где:
-encryptPassword
Пароль который необходимо зашифровать-masterPassword
Ключ шифрования, если не указан то используется стандартная логика определения мастер-пароля, так же как и при обычном запуске планировщика.
Шифрование паролей утилиты обновления#
В файле config.sh хранится пароль доступа к ssh сервису сервера приложений в открытом виде и не может быть зашифрован. Если в этом файле не указывать параметры sSshLogin и sSshPass, то они будут запрошены у запускающего пользователя.
Ключи шифрования для токенов#
Процесс генерации и установки ключей шифрования для планировщика описан в документации GlobalScheduler.
Первичная инициализация БД#
Перед началом работы или установки поставочного дампа пустую базу данных системы требуется инициализировать. При инициализации БД будут созданы все необходимые схемы, таблицы, функции, а так же будут установленны первоначальные данные в таблицах.
Для инициализации выполните следующие действия:
Подключитесь терминалом ssh к серверу приложений. По умолчанию порт 2299, логин admin, пароль admin
ssh admin@localhost -p 2299
Примечание
Если при подключении к серверу у вас появляется ошибка
No matching host key type found. Their offer: ssh-rsa
То для её исправления добавте в файл конфигурации ssh:
Host localhost
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa
Где admin
- это имя пользователя из конфигурационного файла global3.config.xml, localhost
- адрес сервера Global
Подключитесь к системе в режиме sys
attach db Global as sys
Где Global
- это псевдоним БД из конфигурационного файла global3.config.xml
Выполните команду нагона релиза:
upgrade
Получение и установка лицензии#
Процесс получения и установки лицензии описан в документации по первому входу в систему.