# Установка сервера приложений
Автономный режим используется когда нагрузка позволяет использовать один экземпляр сервера приложений.
## Необходимое программное обеспечение под ОС 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)
Система предложит сформировать файл запроса лицензии.
Полученный файл запроса нужно отправить контактному лицу в ООО «Бизнес-Технологии» и получить от него файл с лицензией.