Установка серверной части (вне докера) ====================================== Установка и настройка PostgreSQL в CentOS 7 ----------------------------------------------------- Добавляем репозиторий PostgreSQL в ``yum`` и устанавливаем все пакеты ``PostgreSQL 11``: :: sudo yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm sudo yum install postgresql11 postgresql11-server postgresql11-contrib Инициализируем базу данных PostgreSQL следующей командой: :: sudo /usr/pgsql-11/bin/postgresql-11-setup initdb Добавляем СУБД в автозапуск и запускаем: :: sudo systemctl enable postgresql-11 sudo systemctl start postgresql-11 Задать пароль для пользователя ``postgres``: :: su postgres Запускаем интерпретатор командной строки PostgreSQL :: psql И устанавливаем пароль для пользователя ``postgres`` :: \password postgres В ``/var/lib/pgsql/11/data/postgresql.conf`` в параметре ``listen_addresses`` указываем IP, который СУБД будет слушать В ``/var/lib/pgsql/11/data/pg_hba.conf`` указываем адреса с которых можно будет подключаться к СУБД. В качестве метода проверки указываем ``md5``. Перезагружаем СУБД для принятия изменений: :: sudo systemctl restart postgresql-11 Суперпользователем postgres выполнить первоначальную инициализацию БД: Создать пользователя ``user_robin`` .. code:: sql CREATE ROLE user_robin WITH LOGIN NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT NOREPLICATION CONNECTION LIMIT -1 PASSWORD 'xxxxxx'; Создать БД robin и назначить владельцем ``user_robin`` .. code:: sql CREATE DATABASE robin_2 WITH OWNER = user_robin ENCODING = 'UTF8' CONNECTION LIMIT = -1; Создать пользователей схем .. code:: sql CREATE USER user_orch LOGIN PASSWORD 'Qwerty123'; CREATE USER user_quartz LOGIN PASSWORD 'Qwerty123'; CREATE USER user_rpm LOGIN PASSWORD 'Qwerty123'; Выполнить скрипт ``initial.sql`` с созданием схем и функций ``C`` Внимание: в файле ``initial.sql`` содержатся скрипты указанные выше, их необходимо закомментировать или удалить. Установка и настройка FlyWay 6.4.3 ---------------------------- Скачиваем Flyway с официального сайта по ссылке: ``https://flywaydb.org/documentation/commandline/#download-and-installation`` Сконфигурировать инструмент миграции FlyWay: ``conf/flyway.conf``: :: flyway.url=jdbc:postgresql://localhost:5432/robin_2 flyway.user=user_robin flyway.password=Qwerty123 flyway.schemas=flyway flyway.baselineVersion=1.0 flyway.baselineDescription=Base Migration Далее распаковываем скрипты из архива ``sql.zip`` в каталог ``flyway/sql/`` Выполнить: :: flyway baseline Запускаем миграцию базы данных в Flyway следующей командой: :: flyway migrate Статус работы Flyway и скриптов можно посмотреть командой :: flyway info Установка, настройка и запуск ``WildFly 18`` в ``standalone`` режиме ------- Скачиваем издание Java EE Full & Web Distribution с официального сайта WildFly ``https://wildfly.org/downloads/`` (приложения протестированы на версии wildfly-18.0.1.Final) *На сервере должна быть установлена JDK не ниже 8\_202!* Распакуем скачанный дистрибутив в директорию ``/opt/wildfly/`` :: # mkdir -p /opt/wildfly/ # unzip wildfly*.zip -d /opt/wildfly/ Активируем и обновляем пароль для учетной записи admin. Для этого запускаем ``$wildfly_home/bin/add-user.sh`` В интерактивном режиме пошагово выполняем следующие действия. 1. Выбираем пункт "a" и в поле ``username`` указываем ``admin``. 2. Выбираем пункт "b", затем пункт "a". - При выводе сообщения - *What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[PowerUser,BillingAdmin,]* - нажимаем ``Enter`` - При выводе сообщения - *Is this new user going to be used for one AS process to connect to another AS process? e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls. yes/no?* - отвечаем "``no``\ " Из дистрибутива ``RMS 2.0`` распаковываем архив ``rms2.zip`` в директорию ``$wildfly_home/modules/`` В данном архиве находятся wildfly-модуль с файлами свойств приложений. В файлах свойств ``/rms2/main/properties/rms2.properties``, ``/rms2/main/properties/quartz2.properties``, ``/rms2/main/properties/rpm.properties`` прописываем свои параметры для подключения к RabbitMQ и LDAP. Скачиваем драйвер ``PostgreSQL для JDBC`` по следующей ссылке ``https://jdbc.postgresql.org/download.html`` Запускаем сервер приложений WildFly следующей командой: :: $wildfly_home/bin/standalone.sh Выполняем команду, указав путь до скачанного драйвера: :: $wildfly_home/bin/jboss-cli.sh -c command="module add --name=org.postgresql --resources=/opt/postgresql-42.2.12.jar --dependencies=javax.api,javax.transaction.api" Выполняем команду: :: $wildfly_home/bin/jboss-cli.sh -c command="/subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql,driver-module-name=org.postgresql,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)" Выполняем следующие команды, изменив адрес СУБД с ``localhost`` и значения ``--password`` на свои соответственно: :: $wildfly_home/bin/jboss-cli.sh -c command="data-source add --name=OrchestratorDS2 --jndi-name=java:jboss/datasources/OrchestratorDS2 --driver-name=postgresql --connection-url=jdbc:postgresql://localhost/robin_2?currentSchema=orchestrator&ApplicationName=RobinManagementServer --user-name=user_orch --password=Qwerty123 --use-java-context=true --min-pool-size=5 --max-pool-size=30 --pool-prefill=true --statistics-enabled=true" :: $wildfly_home/bin/jboss-cli.sh -c command="data-source add --name=QuartzDS2 --jndi-name=java:jboss/datasources/QuartzDS2 --driver-name=postgresql --connection-url=jdbc:postgresql://localhost/robin_2?currentSchema=quartz&ApplicationName=RobinManagementServer --user-name=user_quartz --password=Qwerty123 --use-java-context=true --min-pool-size=5 --max-pool-size=30 --pool-prefill=true --statistics-enabled=true" :: $wildfly_home/bin/jboss-cli.sh -c command="data-source add --name=PackageManagerDS2 --jndi-name=java:jboss/datasources/PackageManagerDS2 --driver-name=postgresql --connection-url=jdbc:postgresql://localhost/robin_2?currentSchema=package_manager --user-name=user_rpm --password=Qwerty123 --use-java-context=true --min-pool-size=5 --max-pool-size=30 --pool-prefill=true --statistics-enabled=true" Меняем ip для интерфейсов: :: $wildfly_home/bin/jboss-cli.sh -c command="/interface=management/:write-attribute(name=inet-address,value=${jboss.bind.address.management:0.0.0.0})" $wildfly_home/bin/jboss-cli.sh -c command="/interface=public/:write-attribute(name=inet-address,value=${jboss.bind.address:0.0.0.0})" Перезапускаем ``WildFly`` следующей командой: :: $wildfly_home/bin/jboss-cli.sh --connect command=:reload Настройка шифрования пакета аутентификации ------------------------------------------- Для того чтобы клиентское приложение RMC могло проходить аутентификацию при подключении к серверу RMS на машине пользователя должен быть установлен сертификат, используемый для шифрования пакета аутентификации. Чтобы решить проблему с его отсутствием на машине пользователя сервер Wildfly предоставляет точку входа, откуда скачивается данный сертификат. RMS расшифровывает полученный от клиента пакет приватным ключом. 1)Создать хранилище и сгенерировать пару ключей указав свои параметры :: keytool -genkey -alias orchestrator-client -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -validity 3650 -keystore orchestrator-client.jks -storepass Qwerty123 -keypass Qwerty123 -dname "cn=RMS, ou=Robin, o=ITBR, L=Moscow, ST=Moscow, C=RU" 2)Экспортировать публичный сертификат из хранилища :: keytool -v -exportcert -alias orchestrator-client -keystore orchestrator-client.jks -rfc -file orchestrator-client.cer 3)Скопировать полученные файлы в директории сервера Wildfy :: # mv orchestrator-client.cer $wildfly_home/certificate/client/ # mv orchestrator-client.jks $wildfly_home/certificate/server/ 4)Создать Wildfly Handler - ендпоинт для скачивания сертификата. Настройка осуществляется командами jboss-cli :: $wildfly_home/bin/jboss-cli.sh –connect В интерактивном режиме JBoss CLI выполняем следующие команды: :: /subsystem=undertow/configuration=handler/file=client-cert:add(path="${jboss.home.dir}/certificate/client", directory-listing="true") /subsystem=undertow/server=default-server/host=default-host/location="/rms/client-cert":add(handler="client-cert") quit 5)Проверить и исправить свойства приложения ``rms2.properties`` В конфигурационном файле ``$wildfly_home/modules/rms2/main/properties/rms2.properties`` в блоке настройки криптографии прописываются соответствующие сертификатам параметры. Значения по умолчанию: :: # Блок настроек сервиса криптографии # Настройка позволяющие включать/выключать сервис. cryptography.enable=true # Путь к каталогу в файловой системе до keystore, в котором хранится пара закрытый и публичный ключ. # Публичный ключ из пары используется клиентом RMC для шифрования данных пакета аутентификации. crypto.keyStore.path=/opt/wildfly/certificate/server/ # Название keystore в котором хранится пара закрытый и публичный ключ. # Публичный ключ из пары используется клиентом RMC для шифрования данных пакета аутентификации. crypto.keyStore.name=orchestrator-client.jks # Тип keystore (JKS или PKCS12). JKS по умолчанию. crypto.keyStore.type=JKS # Пароль от keystore. crypto.keyStore.password=Qwerty123 # Алиас пары закрытый ключ/публичный сертификат, хранящихся в keystore. crypto.keyPair.alias=orchestrator-client # Пароль для пары закрытый ключ/публичный сертификат, хранящихся в keystore. crypto.keyPair.password=Qwerty123 В ``crypto.keyStore.path`` указывается абсолютный путь Настройка логирования Wildfly ----------------------------- Открыть файл ``$wildfly_home/standalone/configuration/standalone.xml`` По умолчанию ротация логов происходит ежедневно без удаления старых логов: .. code:: xml Необходимо заменить этот блок настроек следующим блоком (добавить две новые строки с тегами ``rotate-size`` и ``max-backup-index``: .. code:: xml В этом случае ротация будет происходить после того, как размер файла логов превысит 300 Мбайт, а максимальное число архивных логов равно 256, при достижении которого старые файлы логов будут удаляться. Месторасположение файлов логов в домашнем каталоге Wildfly: ``./standalone/log``. Если вы хотите изменить месторасположение файлов логов, то необходимо заменить строку: .. code:: xml следующей строкой: .. code:: xml После всех изменений перезапустите Wildfly. Развертывание приложений RMS 2.0 -------------------------------- Загрузить приложения в Wildfly командой, указав путь до файлов ``rms2.war``, ``rpm.war`` :: $wildfly_home/bin/jboss-cli.sh --connect --command="deploy /opt/rms2.war --force" $wildfly_home/bin/jboss-cli.sh --connect --command="deploy /opt/rpm.war --force" Теперь можно подключить клиента RMC Создание демона для Wildfly ---------------------------- Предполагается что домашняя директория сервера Wildfly - /opt/wildfly/. Если другая, то необходимо это учесть в скриптах и конфигурационных файлах Создаем пользователя для запуска демона Wildfly :: # useradd -r -d /opt/wildfly -s /sbin/nologin wildfly Назначаем созданного пользователя владельцем директории Wildfly :: # chown -RH wildfly:wildfly /opt/wildfly Создаем сервис Systemd для WildFly, копируя пример из дистрибутива :: # mkdir /etc/wildfly # cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly.conf /etc/wildfly/ Содержимое wildfly.conf, если Wildfly запускается в standalone режиме :: # The configuration you want to run WILDFLY_CONFIG=standalone.xml # The mode you want to run WILDFLY_MODE=standalone # The address to bind to WILDFLY_BIND=0.0.0.0 Копируем сценарий launch.sh в /opt/wildfly/bin/. Этот файл необходим для запуска WildFly как службы. :: # cp /opt/wildfly/docs/contrib/scripts/systemd/launch.sh /opt/wildfly/bin/ Копируем служебный модуль WildFly в каталог конфигурации Systemd :: # cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly.service /usr/lib/systemd/system/ Создаем каталог для хранения PID-файла для службы WildFly :: # mkdir /var/run/wildfly/ # chown -R wildfly:wildfly /var/run/wildfly/ Запускаем службу WildFly :: # systemctl enable wildfly # systemctl start wildfly Перезапустить Wildlfy можно командой :: # systemctl restart wildfly