Настройка ПО SEMNEXT

В среде развертывания Medium и Large рекомендуем развернуть СУБД на отдельном сервер, в среде развертывания POC и Small использовать отдельный диск.

Например, диск /dev/sdb1 c каталогом '/pgstore', для этого:

Создаем каталог

mkdir /pgstore

определяем UUID разеделов

blkid

в файле

/etc/fstab 

добавить необходимый раздел

UUID=4b2a649f-9668-4637-9d2c-c1d5eaf4fad1 /pgstore               ext4    errors=remount-ro 0       1

выполнить

mount /pgstore 

Создание кластера postgreSQL в локали ru_RU.UTF-8 Если в системе локали нету, то

locale-gen ru_RU.UTF-8

При этом локаль должна быть установлена

dpkg-reconfigure locales

Включаем локаль в консоли

export LC_ALL=ru_RU.UTF-8

Перейти под пользователя postgres:

sudo su - postgres

Удаляем старый кластер базы данных, если он существует:

pg_dropcluster --stop 11(версия кластера) main(имя кластера, получить можно pg_lsclusters)

Остановить процесс postgresql и выйти из-под postgres:

sudo systemctl stop postgresql@11-main
logout

изменить владельца каталога:

sudo chown -R postgres:postgres /pgstore

Перейти под пользователя postgres:

sudo su - postgres  

Создаем новый кластер

pg_createcluster -d /pgstore/11 --locale ru_RU.UTF-8 --start 11 main

Выйти из-под postgres и запустить службу СУБД:

logout
sudo systemctl daemon-reload
sudo systemctl start postgresql@11-main

(В случае необходимости) в файле /etc/postgresql/11/main/postgresql.conf предоставить внешний доступ к Postgresql, например:

listen_addresses = '*' 

или указать ip-адрес/адреса сервера БД.

(В случае необходимости) в конфигурационном файле

/etc/postgresql/11/main/pg_hba.conf

разрешить доступ к БД с сервера приложений и хранилища MongoDB, добавив следующие строчки:

host    all             all             IP-сервера приложений/маска         md5
host    all             all             IP-хранилища Моngo DB/маска         md5

Пользователем postgres в psql выполнить:

CREATE DATABASE SEMDB WITH TEMPLATE = template0 ENCODING = 'UTF8' LC_COLLATE = 'ru_RU.UTF-8' LC_CTYPE = 'ru_RU.UTF-8';
ALTER DATABASE SEMDB OWNER TO postgres;

В конфигурационном файле postgresql.conf для параметра max_prepared_transactions установить значение равным 200, значение по умолчанию для ПО SEMNEXT

max_prepared_transactions = 200         # zero disables the feature

Скопировать JDBC-драйвер ppostgresql-9.4.1212.jre6.jar в директорию /opt/wildfly/standalone/deployments
Перезапустить сервер приложений

service wildfly restart

Зайти в административную консоль

http://ip_сервера_приложений:9990/

перейти в Configuration→Subsystem→Datasources→Non XA нажать Add выбираем «PostgreSQL Datasource», задать:

  Name: DefaultDataSource
  JNDI name: java:/jdbc/SEM 

перейти на вкладку Detected Drivers и выбираем JDBS-драйвер postgresql-9.4.1212.jre6.jar, настроить параметры в конфигурационном файле /opt/wildfly/standalone/configuration/standalone-full.xml.
Все ниже описанные настройки производятся в секциях конфигурационного файла standalone-full.xml

В конфигурационном файле /opt/wildfly/standalone/configuration/standalone-full.xml Найти секцию <subsystem xmlns=«urn:jboss:domain:datasources:4.0»>. Настроить параметры для связи с базой данных:

  
  <subsystem xmlns="urn:jboss:domain:datasources:4.0">
            <datasources>
                    <xa-datasource jndi-name="java:/jdbc/SEM" pool-name="DefaultDataSource" enabled="true" use-ccm="true">
                    <xa-datasource-property name="ServerName">
                        ИМЯ_СЕРВЕРА_БД
                    </xa-datasource-property>
                    <xa-datasource-property name="PortNumber">
                        ПОРТ_СЕРВЕРА_БД_ПО_УМОЛЧАНИЮ_5433
                    </xa-datasource-property>
                    <xa-datasource-property name="DatabaseName">
                        ИМЯ_БД_РЕКОМЕНДУЕМ_SEMDB//
                    </xa-datasource-property>
                    <xa-datasource-property name="currentSchema">
                        ИМЯ_СХЕМЫ_РЕКОМЕНДУЕМ_sem
                    </xa-datasource-property>
                    <driver>postgres</driver>
                    <xa-pool>
                        <min-pool-size>10</min-pool-size>
                        <max-pool-size>20</max-pool-size>
                        <prefill>true</prefill>
                    </xa-pool>
                    <security>
                        <user-name>ИМЯ_ПОЛЬЗОВАТЕЛЯ_БД_SEM_NEXT_ПО_УМОЛЧАНИЮ_postgres</user-name>
                        <password>ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ_БД_SEM_NEXT</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>
                </xa-datasource>
                <drivers>
                        <driver name="postgres" module="org.postgres">
                        <xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
                    </driver>
                </drivers>
            </datasources>
        </subsystem>

Переходим в секцию <subsystem xmlns=«urn:jboss:domain:messaging-activemq:1.0»> И добавляем очереди:

  <jms-queue name="ExpiryQueue" entries="java:/jms/queue/ExpiryQueue"/>
  <jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/>
  <jms-queue name="Measure" entries="java:/jndi/Measure"/>
  <jms-queue name="Event" entries="java:/jndi/Event"/>
  <jms-queue name="AdminLog" entries="java:/jndi/AdminLog"/>
  <jms-queue name="Command" entries="java:/jndi/Command"/>
  <jms-queue name="CalcParam" entries="java:/jndi/CalcParam"/>
  <jms-queue name="Collector" entries="java:/jndi/Collector"/>
  <jms-queue name="ParamControl" entries="java:/jndi/ParamControl"/>
  <jms-queue name="Rule" entries="java:/jndi/Rule"/>
  <jms-queue name="RuleExec" entries="java:/jndi/RuleExec"/>
  <jms-queue name="SetValue" entries="java:/jndi/SetValue"/>
  <jms-queue name="Notify" entries="java:/jndi/Notify"/>
  <jms-queue name="EventNotify" entries="java:/jndi/EventNotify"/>
  <jms-queue name="EventImport" entries="java:/jndi/EventImport"/>
  <jms-topic name="EventExport" entries="java:/jndi/EventExport"/>
  <jms-topic name="ParamChange" entries="java:/jndi/ParamChange"/>

Так же очереди можно добавить через административную консоль.

Переходим в секцию <subsystem xmlns=«urn:jboss:domain:undertow:3.1»> находим <servlet-container name=«default»> и меняем на:

  <servlet-container name="default" default-encoding="UTF-8" use-listener-encoding="true">

Переходим в секцию <subsystem xmlns=«urn:jboss:domain:undertow:3.1»> Настраиваем параметры статистики:

  <subsystem xmlns="urn:jboss:domain:undertow:3.1">
    <buffer-cache name="default"/>
    <server name="default-server">
        <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true"/>
        <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true"/>
        <host name="default-host" alias="localhost">
            <location name="/" handler="welcome-content"/>
            <location name="/files" handler="files"/>
            <filter-ref name="server-header"/>
            <filter-ref name="x-powered-by-header"/>
        </host>
       </server>
       <servlet-container name="default" default-encoding="UTF-8">
           <jsp-config/>
           <websockets/>
       </servlet-container>
       <handlers>
           <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
           <file name="files" path="/files"/>
       </handlers>
       <filters>
            <response-header name="server-header" header-name="Server" header-value="WildFly/10"/>
            <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
       </filters>
  </subsystem>

В зависимости от MQTT сервера, название настроек может иметь другие названия. Ниже приведены названия параметров для EMQ. Установить размер пакета MQTT не меньше 2 Мб.

# Maximum MQTT packet size allowed. Value: Bytes Default: 64K
mqtt.max_packet_size = 2MB

Назначить порт администрирования EMQ

## The IP Address and Port that the EMQ HTTP API will bind.
## Value: IP:Port | Port. Default: 0.0.0.0:8080
listener.api.mgmt = 0.0.0.0:8081

Переходим в секцию <subsystem xmlns=«urn:jboss:domain:mail:2.0»> Настраиваем параметры почты:

  <mail-session name="default" jndi-name="java:jboss/mail/Default">
     <smtp-server outbound-socket-binding-ref="mail-smtp"/>
  </mail-session>
  <mail-session name="semona-smtp" jndi-name="java:jboss/mail/semona-smtp" from="ПОЧТОВЫЙ_ЯЩИК_СЛУЖБЫ_ПОДДЕРЖКИ">
     <smtp-server outbound-socket-binding-ref="semona-smtp" username="ПОЧТОВЫЙ_ЯЩИК_СЛУЖБЫ_ПОДДЕРЖКИ" password="ПАРОЛЬ_УЗ_ПОЧТОВОГО_ЯЩИКА_СЛУЖБЫ_ПОДДЕРЖКИ"/>
  </mail-session>

Переходим в секцию <socket-binding-group name=«standard-sockets» default-interface=«public» port-offset=«${jboss.socket.binding.port-offset:0}»>

Настраиваем параметры почтового сервера:

  <outbound-socket-binding name="semona-smtp" source-port="0" fixed-source-port="false">
            <remote-destination host="ИМЯ_ПОЧТОВОГО_СЕРВЕРА" port="ПОРТ_ПОЧТОВОГО_СЕРВЕРА_ПО_УМОЛЧАНИЮ_25"/>
        </outbound-socket-binding>

Переходим в секцию <subsystem xmlns=«urn:jboss:domain:logging:3.0»> Настраиваем логер:

 
 <size-rotating-file-handler name="FILE" autoflush="true">
      <formatter>
          <named-formatter name="PATTERN"/>
      </formatter>
      <file relative-to="jboss.server.log.dir" path="server.log"/>
      <rotate-size value="500m"/>
      <max-backup-index value="5"/>
      <append value="true"/>
      <suffix value=""/>
  </size-rotating-file-handler>

1. Интеграция с MS Active Directory настраивается в конфигурационном файле sem-next.xml. Пример секции настройки приведен ниже:

<ActiveDirectory description="Определяет параметры подключения к Microsoft Active Directory">        
   <enabled description="Разрешена авторизация в MS AD">true</enabled>        
   <order description="0 - авторизации в MS AD, при неуспехе в SEM или 1 - авторизации в SEM, при неуспехе в MS AD">1
   </order>        
   <url description="адрес подключения к MS AD">ldap://XX.XX.XX.XX:389</url>       
   <searchBase description="Вершина каталога от которой искать пользователей">
    dc=portal,dc=cbr,dc=ru
   </searchBase>        
   <user description="Пользователь для подключения к MS AD">
      cn=melkartsync,cn=Users,dc=portal,dc=cbr,dc=ru
   </user>        
   <password description="Пароль пользователя">****</password> 
   <principalSuffix description="Суффикс домена пользователя, если AD требует полного указания имени 
   пользователя.">@example_dns.com</principalSuffix>
</ActiveDirectory>

2. Секция <order description> определяет порядок авторизации пользователя. Поддерживается вариант <MS AD- SEMNEXT>, в этом случае пользователь авторизуется сначала в MS AD и при неуспехе в SEMNEXT, и обратный вариант <SEMNEXT - MS AD>.
3. principalSuffix обязательно указывать для всех версий MS AD.
4. При <order>0</order> атрибуты пользователя синхронизируются со следующими полями в MS AD:

Атрибут Поле SEMNEXT Поле MS AD
login Логин пользователя sAMAccountName
firstname Имя пользователя givenName
lastname Фамилия пользователя sn
post Должность title
phone Телефоны telephoneNumber
mail Адрес электронной почты mail
state Состояние msDS-UserAccountDisabled
ilocale Локаль preferredLanguage
comment Заметки о пользователе displayName

5. При создании пользователя в SEMNEXT, при настроенной интеграции, производится поиск пользователя в MS AD. Если пользователь найден в MS AD, создается пользователь в SEMNEXT с атрибутами из MS AD (см. выше). Если в дереве MS AD не поддерживается уникальность login, то следует указывать имя пользователя с учетом principalSuffix, например: user_login@xx.exammple.com
6. При интеграции, обновление пароля в SEMNEXT не поддерживается.
7. Редактирование атрибутов пользователя работает только для тех атрибутов, которые не соответствуют атрибутам MS AD.

Для настройки времени сессии пользователя в секцию <Configuration> внесите настройку:

<auth description="таймаут сеансов пользователей, минут">
    <sessionTimeout>60</sessionTimeout>
</auth>

Установка приложений

Осталось установить приложения на сервер J2EE. Копируем приложения semona.ear, sem365angular.war в директорию развертывания /opt/wildfly/standalone/deployments. Перезапускаем сервер приложений

  service wildfly restart 

Проверяем что работает:

curl -X POST "http://localhost:8080/sem-restservices/auth/login?username=<username>&password=<password>" 

Проверяем через браузер:

  http://ip_cервера_приложений:9990
  http://ip_сервера_приложений:8080/semux/