Вступление
Статья описывает ручную установку PC v5.2.
Подготовка БД
- Создать базу данных и пользователя на сервере СУБД, где будет работать база данных PC Server.
- Предоставить права на доступ пользователю к БД.
Установка Java
Установить последнюю версию JRE ветки 1.8 или 11
Обновление Security
JRE 1.8
- Скачать архив по адресу http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html
- Распаковать и скопировать файлы по адресу
JRE\lib\security\
, заменив старые версии.
JRE 11
Замена файлов библиотек не требуется.
Установка Wildfly
- Скачать актуальную версию WildFly Server – https://wildfly.org/downloads/
Linux
- Распаковать Wildfly, например, в
/opt/
. - Создать символьную ссылку
/opt/wildfly
на распакованную директорию:
ln -s /opt/wildfly-23.0.1.Final/ /opt/wildfly
Далее по тексту, под WF_PATH
имеется в виду адрес созданной символьной ссылки.
Windows
- Распаковать Wildfly, например, в
C:\
. - Создать символьную ссылку, к примеру
C:\wildfly
, на распакованную директорию. Пример команды:
mklink /D C:\wildfly C:\wildfly-23.0.1.Final\
Удаление настроек WildFly по-умолчанию
При конфигурировании Wildfly можно (при переводе системы в промышленную эксплуатацию - рекомендуется) удалить пример источника данных и страницу-приветствие. Для этого в файле standalone.xml
необходимо убрать (либо закомментировать) следующие объекты:
<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
<driver>h2</driver>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
</datasource>
<default-bindings context-service="java:jboss/ee/concurrency/context/default" datasource="java:jboss/datasources/ExampleDS" managed-executor-service="java:jboss/ee/concurrency/executor/default" managed-scheduled-executor-service="java:jboss/ee/concurrency/scheduler/default" managed-thread-factory="java:jboss/ee/concurrency/factory/default"/>
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
</driver>
<handlers>
<file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
</handlers>
<location name="/" handler="welcome-content"/>
Настройка подключения к БД
Добавление JDBC-драйвера СУБД
PostgreSQL
- Скачать актуальный JDBC-драйвер по адресу https://jdbc.postgresql.org/
- Создать директорию
WF_PATH/modules/org/postgresql/main/
- В директорию
WF_PATH/modules/org/postgresql/main/
поместить скачанныйpostgresql-42.*.*.jar
- Создать в этой же папке файл
module.xml
следующего содержания, указав имя файла драйвера вместоJAR_PATH
:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="org.postgresql">
<resources>
<resource-root path="JAR_PATH"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
<module name="javax.servlet.api" optional="true"/>
</dependencies>
</module>
- Добавить установленный модуль в качестве драйвера для подключения к СУБД в файл
WF_PATH/standalone/configuration/standalone.xml
, в секцию<datasources/drivers>
, добавив следующий блок:
<driver name="postgresql" module="org.postgresql">
<driver-class>org.postgresql.Driver</driver-class>
</driver>
MS SQL
- Скачать JDBC-драйвер с сайта Microsoft - https://docs.microsoft.com/ru-ru/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15
- Создать директорию
WF_PATH/modules/system/layers/base/com/microsoft/sqlserver/main/
- В директорию распаковать файлы и директории драйвера. Файлы драйвера (*.jar) должны располагаться непосредственно в директории
main/
- Создать в этой же папке файл
module.xml
следующего содержания, заменивJAR_PATH
на имя файла драйвера, например наmssql-jdbc-8.*.*.jre8.jar
:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.3" name="com.microsoft.sqlserver">
<resources>
<resource-root path="JAR_PATH"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
<module name="javax.xml.bind.api"/>
</dependencies>
</module>
- Добавить установленный модуль в качестве драйвера для подключения к СУБД в файл
WF_PATH/standalone/configuration/standalone.xml
, в секцию<datasources/drivers>
, добавив следующий блок:
<driver name="mssql" module="com.microsoft.sqlserver">
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
</driver>
Oracle
- Скачать актуальный JDBC-драйвер по адресу https://www.oracle.com/database/technologies/appdev/jdbc-downloads.html
- Создать директорию
WF_PATH/modules/org/postgresql/main/
- В директорию
WF_PATH/modules/system/layers/base/com/oracle/main/
поместить скачанныйojdbc*.jar
. - Создать в этой же папке файл
module.xml
следующего содержания, указав имя файла драйвера вместоJAR_PATH
:
<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="com.oracle">
<resources>
<resource-root path="JAR_PATH"/>
</resources>
<dependencies>
<module name="javax.api"/>
<module name="javax.transaction.api"/>
</dependencies>
</module>
- Добавить установленный модуль в качестве драйвера для подключения к СУБД в файл
WF_PATH/standalone/configuration/standalone.xml
, в секцию<datasources/drivers>
, добавив следующий блок:
<driver name="com.oracle" module="com.oracle">
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
</driver>
Добавление источников данных для модуля PC Server
PostgreSQL
В файл WF_PATH/standalone/configuration/standalone.xml
внести следующие изменения добавить новый источник данных в секцию <datasources></datasources>
заменив pcs-db-host
, port
, pcs-db
, pcs-user
, pcs-pass
:
<datasource jta="true" jndi-name="java:jboss/datasources/PCServerDS" pool-name="PCServerDS" enabled="true" use-ccm="true">
<connection-url>jdbc:postgresql://pcs-db-host:port/pcs-db</connection-url>
<driver-class>org.postgresql.Driver</driver-class>
<driver>postgresql</driver>
<security>
<user-name>pcs-user</user-name>
<password>pcs-pass</password>
</security>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
<background-validation>true</background-validation>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
</validation>
</datasource>
MS SQL
В файл WF_PATH/standalone/configuration/standalone.xml
внести следующие изменения добавить новый источник данных в секцию <datasources></datasources>
заменив pcs-db-host
, port
, pcs-db
, pcs-user
, pcs-pass
:
<datasource jta="true" jndi-name="java:jboss/datasources/PCServerDS" pool-name="PCServerDS" enabled="true" use-ccm="true">
<connection-url>jdbc:sqlserver://pcs-db-host:port;databaseName=pcs-db</connection-url>
<driver>mssql</driver>
<security>
<user-name>pcs-user</user-name>
<password>pcs-pass</password>
</security>
<pool>
<min-pool-size>5</min-pool-size>
<max-pool-size>50</max-pool-size>
<prefill>false</prefill>
<use-strict-min>false</use-strict-min>
<flush-strategy>FailingConnectionOnly</flush-strategy>
</pool>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.mssql.MSSQLValidConnectionChecker"></valid-connection-checker>
</validation>
</datasource>
Oracle
В файл WF_PATH/standalone/configuration/standalone.xml
внести следующие изменения добавить новый источник данных в секцию <datasources></datasources>
заменив pcs-db-host
, port
, pcs-db
, pcs-user
, pcs-pass
, sid(или service name)
:
<datasource jta="true" jndi-name="java:jboss/datasources/PCServerDS" pool-name="PCServerDS" enabled="true" use-ccm="true">
<connection-url>jdbc:oracle:thin:@pcs-db-host:port:sid</connection-url>
<driver>oracle</driver>
<security>
<user-name>pcs-user</user-name>
<password>pcs-pass</password>
</security>
<pool>
<min-pool-size>1</min-pool-size>
<max-pool-size>5</max-pool-size>
<prefill>true</prefill>
</pool>
<validation>
<check-valid-connection-sql>select 1 from dual</check-valid-connection-sql>
<validate-on-match>false</validate-on-match>
<background-validation>true</background-validation>
<background-validation-millis>10000</background-validation-millis>
</validation>
</datasource>
Настройка подключения PC External к PC Server
На сервере PC External необходимо установить адрес сервера PC Server (host и port заменить на реальные значения). Для этого:
- на Linux в файл
WF_PATH/bin/standalone.conf
нужно добавить
JAVA_OPTS="$JAVA_OPTS -Dpc_url=http://<host>:<port>/pc-api/"
- на Windows в файл
WF_PATH/bin/standalone.conf.bat
нужно добавить
set "JAVA_OPTS=%JAVA_OPTS% -Dpc_url=http://<host>:<port>/pc-api/"
выше метки :JAVA_OPTS_SET
Настройка выделения памяти серверу
На всех серверах установить максимальный объем доступной для использования памяти:
- на Linux в
WF_PATH/bin/standalone.conf
указать объём «ОбщийОбъёмОЗУ - 512MB» - на Windows в
WF_PATH\bin\standalone.conf.bat
указать объём «ОбщийОбъёмОЗУ - 1536MB»
Для этого в строке
JAVA_OPTS="-Xms64m -Xmx512m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=256m -Djava.net.preferIPv4Stack=true"
поменять значение параметра Xmx
на выделяемый объём.
Запуск проекта
Скопировать файл приложения сервера
WF_PATH\standalone\deployments\
:- на PC Server - файл
pc-server-<VERSION>.ear
- на PC Server - файл
- на PC Pusher - файл
pc-pusher-<VERSION>.war
- на PC Pusher - файл
- на PC External - файл
pc-external-<VERSION>.war
- на PC External - файл
Один сервер WildFly может запускать одно или несколько приложений сервера
Запустить
- Linux
WF_PATH/bin/standalone.sh -b 0.0.0.0
- Linux
- Windows
WF_PATH\bin\standalone.bat -b 0.0.0.0
: где-b 0.0.0.0
- позволяет подключаться к серверу используя любой его интерфейс (опция bind)
- Windows
Дождаться старта WF, проверить, что нет ошибок запуска.
Настройка автозапуска службы сервера
Linux
Для настройки автозапуска службы, перейти в каталог WF_PATH/docs/contrib/scripts/systemd/
и выполнить шаги, описанные в файле README в этом каталоге, за исключением пунктов распаковки и создания символьной ссылки на каталог.
Пункт chown -R wildfly:wildfly /opt/wildfly
необходимо выполнить с параметрами -RH
(параметр «H» указывает, что если на вход подана символьная ссылка, то нужно пойти вглубь каталога, на который она ссылается). Таким образом команда должна выглядеть следующим образом:
chown -RHv wildfly:wildfly /opt/wildfly
При запуске в качестве службы, возможно отклонение запросов. В таком случае необходимо установить параметры JAVA_OPTS
в файле standalone.conf
:
JAVA_OPTS="$JAVA_OPTS -Djboss.bind.address=0.0.0.0"
Windows
Скопировать папку
WF_PATH\docs\contrib\scripts\service\
в папку
WF_PATH\bin\
Выполнить
WF_PATH\bin\service\service.bat install /startup
При запуске в качестве службы, возможно отклонение запросов. В таком случае необходимо установить параметры JAVA_OPTS
в файле standalone.conf.bat
выше метки :JAVA_OPTS_SET
.
set "JAVA_OPTS=%JAVA_OPTS% -Djboss.bind.address=0.0.0.0"
URL-фильтрация при совмещении PC Pusher и PC External
При совмещении ролей PC Pusher и PC External на одном сервере необходимо исключить возможность выполнения запросов PC Pusher со стороны сети интернет.
Для этого необходимо со стороны сети интернет разрешить подключения только на конечную точку PC External.
Конечная точка PC External - <host>:<port>/pc-client-api/*
Доступ к другим конечным точкам должен быть запрещен.
При этом доступ к PC Pusher со стороны PC Server должен сохраниться.
Конечная точка PC Pusher - <host>:<port>/pc-pusher-api/*
Внесение изменений в БД
Регистрация системы
После успешного запуска приложения PC Server до начала работы необходимо зарегистрировать прикладную систему.
Это действие выполняется путем отправки на PC Server HTTP POST запроса, сформированного ST/Airome. Содержание запроса предоставляется дополнительно.
Для отправки запроса можно использовать любое средство отправки HTTP-запросов.
Примеры
PowerShell
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Content-Type", "application/json")
$body = "{n "request`":"eyJyZXF1ZXN0Ijp7InFyVVJMU2NoZW1lIjEE9NoZ+W1lIjEE9NoZW... ...9NoZW1lIjEE+9NoZW1lIjEE9NoZW1lIjEE9PSJ9"`n}"
$response = Invoke-RestMethod 'https://dev.paycontrol.org/v5.0/pc-api/' -Method 'POST' -Headers $headers -Body $body
$response | ConvertTo-Json
cURL
curl --location --request POST 'http://<host>:<port>/pc-api/' --header 'Content-Type: application/json' --data '{"request":"eyJyZXF1ZXN0Ijp7InFyVVJMU2NoZW1lIjEE9NoZ+W1lIjEE9NoZW1lIjEE9... ...IjEE9NoZW1lIjEE9PSJ9"}'
Доступ к сервисам
Адреса конечных точек по умолчанию:
PC Server - http://<host>:8080/pc-api/
PC Pusher - http://<host>:8080/pc-pusher-api/
PC External - http://<host>:8080/pc-client-api/
Health Check
Адреса конечных точек health check:
PC Server - http://<host>:8080/pc-api/health_check
PC Pusher - http://<host>:8080/pc-pusher-api/health_check
PC External - http://<host>:8080/pc-client-api/health_check
Корректировка (смена) адресов компонентов серверов PC (при необходимости)
Учёт изменения адреса сервера PC Server
Для учёта изменения адреса PC Server необходимо произвести изменения в настройках PC External. В файле /opt/wildfly/bin/standalone.conf
, в следующей строке, указав правильный адрес и при необходимости порт сервера PC Server, а также уточнив протокол подключения (HTTP/HTTPS):
JAVA_OPTS="$JAVA_OPTS -Dpc_url=http[s]://<IP или DNS-имя>[:PORT]/pc-api/ -Duser.language=ru"
Изменение локализации ошибок на PC External
Данная настройка позволит изменить язык сообщений об ошибках, возвращаемых сервером мобильному приложению.
Добавьте в файл файл /opt/wildfly/bin/standalone.conf
текст -Dpc_locale=ru
, как на примере ниже:
JAVA_OPTS="$JAVA_OPTS -Dpc_url=http[s]://<IP или DNS-имя>[:PORT]/pc-api/ -Duser.language=ru -Dpc_locale=ru"
Учёт изменения адреса сервера PC Pusher
Для учёта изменения адреса сервера PC Pusher, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PC Server:
update pc_system set pc_is_internal_url = 'http[s]://<IP или DNS-имя>[:PORT]/pc-pusher-api/' where systemid='<SYSTEMID>';
Учёт изменения внешнего адреса сервера PC External
Для учёта изменения внешнего адреса сервера PC, по которому связываются мобильное приложение с сервером PC, необходимо, предварительно указав корректные данные (протокол (HTTP/HTTPS), имя или IP сервера, порт, идентификатор системы), выполнить запрос к БД PC Server:
update pc_system set pc_is_external_url = 'http[s]://<IP или DNS-имя>[:PORT]/pc-client-api/' where systemid='<SYSTEMID>';