Установка#

Состав дистрибутива#

Объект

Тип

Описание

package/bh

директория

Директория с jar файлами

package/pl

директория

Директория с Frontend файлами

eureka-server-app.jar

файл

Приложение для поиска необходимых микросервисов

mock-core-app.jar

файл

Приложение для работы с Groovy-скриптами в заглушках

mock-audit-app.jar

файл

Приложение для работы аудита

mock-cloud.jar

файл

Приложение для взаимодействия frontend и backend-сервисов

mock-rest-cloud-app.jar

файл

Приложение для вызова REST-эмуляций

mock-kafka-app.jar

файл

Приложение для вызова Kafka-эмуляций

mock-esb-ibm-app.jar

файл

Приложение для вызова ActiveMQ Artemis-эмуляций

mock-audit.service

файл

Пример конфигурационного файла

mock-core-app.service

файл

Пример конфигурационного файла

mock-cloud.service

файл

Пример конфигурационного файла

mock-core-app.service

файл

Пример конфигурационного файла

nginx.conf

файл

Пример конфигурационного файла

upstream.conf

файл

Пример конфигурационного файла

Подготовка к установке#

Перед началом установки выполните следующие действия:

  1. Подготовьте чек-листы переменных запуска и работ по установке.

  2. Убедитесь в корректности заполненных и переопределенных переменных.

Чек-лист переменных для Mock-core-app#

Переменная

Значение по умолчанию

Необходимость переопределения

Описание

server.port

8090

Нет

Порт для работы приложения

mock.core.nexus.username

-

Да

ТУЗ Docker-nexus

mock.core.nexus.password

-

Да

ТУЗ Docker-nexus

mock.core.nexus.urls

-

Да

URL-адреса Docker-nexus, разделенные запятыми без пробелов (например, http://nexus/url/1,http://nexus/url/1).

mock.core.groovy.timeout-seconds

40

Нет

Таймаут для потоков, исполняющих Groovy-скрипт

mock.core.groovy.allow-network

true

Нет

Позволяет запретить сетевые соединения из Groovy-скриптов

mock.mmt-client.allow-mmt-policy

false

Нет

Включает/выключает расширенные полномочия, необходимые для клиентских вызовов MMT

mock.core.fixedDelayLimit

300000

Нет

Лимит задержки ответа эмуляции

eureka.client.serviceUrl.defaultZonet

change me

Да

URL-адреса подключения к сервису Eureka, разделенные запятыми без пробелов (например, http://{eureka\_host}:{eureka\_port}/eureka,http://{eureka\_host\_1}:{eureka\_port\_1}/eureka). Если этот параметр не задан, то значение по умолчанию будет равно http://localhost:8761/eureka.

mock.core.healthcheck.nexus

true

Если известно, что Nexus недоступен, установите значение false

Определяет необходимость проверки доступности при старте приложения. Необходим для проверки корректности настроек доступа к Docker-nexus и доступности самого Docker-nexus.

Чек-лист переменных для Mock-cloud#

Переменная

Значение по умолчанию

Необходимость переопределения

Описание

db.server

-

Да

IP-адрес сервера PostgreSQL

db.port

-

Да

Порт, по которому будет доступна PostgreSQL

db.instance

-

Да

Имя базы данных

db.schema

-

Да

Имя схемы базы данных приложения

db.user

-

Да

Имя пользователя базы данных приложения

db.password

-

Да

Пароль для подключения приложения к базе данных

db.owner-user

-

Да

Пользователь базы данных, используемый Liquibase для миграции

db.owner-password

-

Да

Пароль пользователя базы данных, используемого Liquibase для миграции

server.port

8080

Нет

Порт, по которому будет доступен сервис mock-cloud

mock.cloud.transport-path.mmt

-

Да

Путь к транспортному приложению ММТ (например, /var/apps/mmt-app.jar). Если задана переменная окружения MMT_TRANSPORT_PATH, указывать свойство не нужно. Если переменная окружения объявлена и задано свойство, то будет использовано значение из переданного свойства. (В текущей версии продукта не используется.)

mock.cloud.transport-path.rest

-

Да

Путь к транспортному приложению REST (например, /var/apps/rest-app.jar). Если задана переменная окружения REST_TRANSPORT_PATH, указывать свойство не нужно. Если переменная окружения объявлена и задано свойство, то будет использовано значение из переданного свойства.

mock.cloud.transport-path.scheduled

-

Да

Путь к приложению SCHEDULED APP (например, /var/apps/mock-scheduled-app.jar). Если задана переменная окружения SCHEDULED_APP_PATH, то указывать свойство не нужно. Если переменная окружения объявлена и задано свойство, то будет использовано значение из переданного свойства.

mock.cloud.ibm-instance-count

1

Да

Количество запускаемых экземпляров приложений для работы с MQ. (В текущей версии продукта не используется.)

mock.cloud.auth.url

${mock.cloud.meta-host}/oauth/token *

Нет

URL Mock для авторизации. Если значение не задано, оно будет сформировано с использованием свойства mock.cloud.meta-host. (В текущей версии продукта не используется.)

mock.cloud.auth.secret

-

Да

Secret для проверки подписи JWT-токена.

mock.cloud.auth.client.name

-

Да

Имя клиента для авторизации в Mock. (В текущей версии продукта не используется.)

mock.cloud.auth.client.secret

-

Да

Secret клиента для авторизации в Mock. (В текущей версии продукта не используется.)

mock.cloud.nexus.username

-

Да

ТУЗ Docker-nexus

mock.cloud.nexus.password

-

Да

ТУЗ Docker-nexus

mock.cloud.nexus.urls

-

Да

Список URL-адресов Docker-nexus, разделенных запятыми без пробелов (например, http://nexus/url/1,http://nexus/url/1)

mock.cloud.graphql.url

${mock.cloud.meta-host}/graphql

Нет

URL Mock для доступа к GraphQL. Если значение не задано, оно будет сформировано с использованием свойства mock.cloud.meta-host. (В текущей версии продукта не используется.)

eureka.client.serviceUrl.defaultZone

change me

Да

Адреса подключения к сервису Eureka, разделённые запятой без пробелов (например, http://{eureka_host}:{eureka\_port}/eureka,http://{eureka\_host\_1}:{eureka\_port\_1}/eureka). Если этот параметр не задан, то значение по умолчанию будет равно http://localhost:8761/eureka.

toggles.groovyEnable

true

Необходимо переопределить, если меняется адрес ответа ml задачи

Определяет доступность Groovy

toggles.mlEnable

true

Необходимо переопределить, если меняется адрес ответа ml задачи

Определяет доступность ml

mock.cloud.toggling.projectsEnable

true

Необходимо переопределить, если нужно указать доступность создания проектных областей через публичный endpoint

Определяет доступность публичного endpoint для создания проектных областей

mock.cloud.toggling.mmtEnable

true

Необходимо переопределить, если нужно указать доступность MMT заглушек

Определяет доступность MMT заглушек. (В текущей версии продукта не используется.)

mock.cloud.toggling.restEnable

true

Необходимо переопределить, если нужно указать доступность REST-заглушек

Определяет доступность REST-заглушек

mock.cloud.toggling.esbEnable

true

Необходимо переопределить, если нужно указать доступность ESB заглушек

Определяет доступность ESB заглушек

mock.cloud.toggling.metricsEnable

true

Необходимо переопределить, если нужно отключить REST-endpoint с метриками

Определяет доступность REST-endpoint с метриками

mock.cloud.toggling.metricsCronEnable

false

Необходимо переопределить, если нужно включить обновление cron метрик

Включает/выключает обновления cron метрик

mock.cloud.toggling.memoryThresholdEnable

true

Необходимо переопределить, если нужно отключить проверку превышения порога свободной оперативной памяти

Включает/выключает проверку превышения порога свободной оперативной памяти

mock.cloud.toggling.elkAuditEnable

false

Необходимо переопределить, если нужно отправлять сообщения в ELK-аудит

Включает/выключает отправку сообщений в ELK-аудит

mock.cloud.toggling.cleanupCronEnable

true

Необходимо переопределить, если нужно отключить очистку истории вызовов эмуляции

Включает/выключает задачи по очистке истории вызова эмуляций

mock.cloud.toggling.publicProjectsEnable

true

Необходимо переопределить, если нужно отключить публичные проекты

Включает/выключает публичные проекты

mock.cloud.toggling.use-artemis-mq

true

Необходимо переопределить, если ESB транспорт не будет использовать ActiveMQ Artemis

Включает конфигурацию ESB транспорта для работы с ActiveMQ Artemis.

matomo.url

-

Необходимо переопределить, если нужно отслеживать действия с помощью Matomo

Адрес сервера Matomo

matomo.siteId

-

Необходимо переопределить, если нужно отслеживать действия с помощью Matomo

Идентификатор сайта, который будет отслеживаться с помощью Matomo

matomo.clientTrackerName

piwik.js

Необходимо переопределить в соответствии с названием файла в Matomo

Файл, который хранит действия по отправке данных в Matomo

matomo.serverTrackerName

piwik.php

Необходимо переопределить в соответствии с названием файла в Matomo

Файл с обработкой запросов от клиента

matomo.enabled

true

Необходимо переопределить, если нужно указать доступность Matomo

Определяет доступность Matomo

cleanup.maxInRestCallHistory

2000

Необходимо переопределить, если нужно изменить максимально допустимое кол-во хранимых записей в истории вызовов REST-эмуляций

Максимально допустимое количество записей в истории вызовов REST-эмуляций

cleanup.maxInMmtCallHistory

2000

Необходимо переопределить, если нужно изменить максимально допустимое кол-во хранимых записей в истории вызовов MMT-эмуляций

Максимально допустимое количество записей в истории вызовов MMT-эмуляций

cleanup.maxInEsbCallHistory

2000

Необходимо переопределить, если нужно изменить максимально допустимое количество хранимых записей в истории вызовов ESB-эмуляций

Максимально допустимое количество записей в истории вызовов ESB-эмуляций

cron.cleanupEmulationCallHistory

0 0/10 * * * ?

Необходимо переопределить, если нужно изменить интервал между вызовами задачи, которая очищает историю вызовов эмуляций

Интервал вызова задачи по очистке истории вызовов эмуляций

mock.cloud.ibm-broker.host

-

Обязательно должно быть задано

IP-адрес хоста, на котором MQ ожидает подключения клиентов. (В текущей версии продукта не используется.)

mock.cloud.ibm-broker.port

-

Обязательно должно быть задано

Порт, на котором MQ ожидает подключения клиентов. (В текущей версии продукта не используется.)

mock.cloud.ibm-broker.queue-manager-name

-

Обязательно должно быть задано

Имя менеджера очередей для подключения. (В текущей версии продукта не используется.)

mock.cloud.ibm-broker.chanel-name

-

Обязательно должно быть задано

Имя канала для подключения. (В текущей версии продукта не используется.)

mock.cloud.ibm-broker.rest-username

-

Обязательно должно быть задано

Имя пользователя для подключения к REST-сервису брокера MQ. (В текущей версии продукта не используется.)

mock.cloud.ibm-broker.rest-secret

-

Обязательно должно быть задано

Пароль для подключения к REST-сервису брокера MQ. (В текущей версии продукта не используется.)

mock.cloud.keycloak.url

-

Обязательно должно быть задано

Адрес Keycloak

mock.cloud.keycloak.token-url

-

Необходимо задать, если изменился адрес сервиса получения пользователей

Адрес сервиса аутентификации Keycloak

mock.cloud.keycloak.users-url

-

Необходимо задать, если изменился адрес сервиса получения пользователей

Адрес сервиса получения списка пользователей Keycloak

mock.cloud.keycloak.client-id

-

Обязательно должно быть задано

Идентификатор клиента в сервисе аутентификации

mock.cloud.keycloak.client-secret

-

Нет

Параметр аутентификации

mock.cloud.keycloak.oauth-client-id

meta_mock

Нет

Идентификатор OAuth клиента в сервисе аутентификации Keycloak

mock.cloud.keycloak.oauth-client-secret

-

Да

Параметр аутентификации OAuth клиента client_secret из Keycloak

spring.kafka.bootstrap-servers

localhost:9092

Обязательно должно быть задано

Параметры соединения с кластером Kafka (список значений хост:порт, разделенных запятыми)

kafka.num-partitions

0

Обязательно должно быть задано

Количество разделов в создаваемых Kafka topics

kafka.consumer.auto-offset-reset

earliest

Нет

Настройка смещения диапазона

kafka.consumer.enable-auto-commit

false

Нет

Указывает, нужно ли периодически фиксировать смещения потребителя

kafka.consumer.max-poll-records

100

Нет

Максимальное количество записей, возвращаемых при одном вызове poll()

mock.cloud.index

-

Да

Уникальный целочисленный индекс приложения. Если был указан неуникальный индекс для разных экземпляров приложения, корректная работа приложения не гарантируется. Если приложение найдет в Eureka service registry другое приложение с таким же индексом, оно автоматически завершится.

mock.cloud.transport-manager-connection-try

12

Нет

Количество попыток поиска сервиса в Eureka service registry

mock.cloud.transport-manager-connection-wait

15000

Нет

Временной интервал между попытками поиска сервиса в Eureka service registry в миллисекундах

mock.cloud.transport-manager-process-respawn-interval

35000

Нет

Временной интервал между попытками повторного перезапуска процесса транспортного приложения в миллисекундах

mock.cloud.transport-manager-process-terminate-await

35000

Нет

Временной интервал ожидания остановки процесса транспортного приложения при перезапуске в миллисекундах

mock.cloud.transport-manager-memory-threshold

-

Пороговое значение свободной физической памяти на сервере в мегабайтах. Должно выбираться в зависимости от общего количества памяти на сервере. Если оно превышено, новые процессы с транспортными приложениями не будут порождаться.

mock.cloud.transport-manager-should-redirect-output

false

Нет

Включает/выключает вывод логов транспортных приложений в stdout, stderr после их запуска. Данный флаг может быть полезен для локальной отладки приложения.

mock.transport-manager.esb-properties.use-artemis-mq

Нет

Да, если необходимо включить конфигурацию ActiveMQ Artemis

Включает конфигурацию ESB транспорта для работы с ActiveMQ Artemis.

mock.cloud.healthcheck.nexus

true

Если известно, что Nexus недоступен, установите значение false

Определяет необходимость проверки доступности при старте приложения. Необходим для проверки корректности настроек доступа к Docker-nexus и доступности самого Docker-nexus.

mock.cloud.healthcheck.transport-jar

true

Нет

Определяет необходимость проверки наличия jar-файлов транспортных приложений

mock.cloud.healthcheck.ibm-mq

true

Нет

Определяет необходимость проверки доступности REST-сервиса брокера ActiveMQ Artemis. (В текущей версии продукта не используется.)

mock.cloud.healthcheck.meta-tech-acc

true

Если приложение должно быть развернуто без МЕТА, установите значение false

Определяет необходимость проверки работы ТУЗ (OAuth client) для доступа к МЕТА. Необходим для проверки возможности получения токена с использованием ТУЗ.

mock.cloud.meta.mock-url

/mock/public/meta/emulation

Если нужно изменить адрес сервиса эмуляций API для интеграционного тестирования в реестре метаданных об объектах проектирования и разработки

Ссылка на отфильтрованные эмуляции по заданным параметрам (methodId, apiId, versionId). (В текущей версии продукта не используется.)

mock.cloud.artemis.host

localhost

Да, если адрес ActiveMQ Artemis отличается

ActiveMQ Artemis хост

mock.cloud.artemis.port

61616

Да, если порт брокера ActiveMQ Artemis отличается

Порт брокера ActiveMQ Artemis

mock.cloud.artemis.login

moc01usr

Да, если для доступа к брокеру ActiveMQ Artemis используется другой пользователь

Имя пользователя, у которого есть доступ к брокеру ActiveMQ Artemis

mock.cloud.artemis.password

нет

Да

Пароль пользователя, у которого есть доступ к брокеру ActiveMQ Artemis

Примечание

* Здесь и далее используемые в названиях параметров и переменных сокращения «meta» или «meta_mock» являются ранее употребляемыми названиями сервиса AMCS (SberMock) и применимы для установки компонента AMCS в текущей версии продукта.

Чек-лист переменных для Mock-audit-app#

Переменная

Значение по умолчанию

Необходимость переопределения

Описание

db.server

-

Да

IP-адрес сервера PostgreSQL

db.port

-

Да

Порт, по которому будет доступна PostgreSQL

db.instance

-

Да

Имя базы данных

db.schema

-

Да

Имя схемы базы данных приложения

db.user

-

Да

Имя пользователя базы данных приложения

db.password

-

Да

Пароль для подключения приложения к базе данных

eureka.client.serviceUrl.defaultZone

change me

Да

Адреса подключения к сервису Eureka, разделенные запятыми без пробелов (например, http://{eureka\_host}:{eureka\_port}/eureka,http://{eureka\_host\_1}:{eureka\_port\_1}/eureka). Если этот параметр не задан, то значение по умолчанию будет равно http://localhost:8761/eureka.

spring.kafka.bootstrap-servers

localhost:9092

Обязательно должно быть задано

Параметры соединения с кластером Kafka (список значений хост:порт, разделенных запятыми)

kafka.num-partitions

0

Обязательно должно быть задано

Количество разделов в создаваемых топиках Kafka

meta.auth.user-cache-size

1000

Обязательно должно быть задано

Количество пользователей, время входа которых хранится в кэше перед отправкой в базу данных МЕТА

Чек-лист переменных для Eureka-server-app#

Переменная

Значение по умолчанию

Необходимость переопределения

Описание

server.port

8761

Нет

Порт, по которому будет доступен сервис Eureka

Чек-лист работ по установке#

Примечание

Заполнение чек-листа во время установки обязательно.

Шаг

Дата/Время выполнения

Результат выполнения *

Описание ошибки **

Скриншот (приложить как файл)

Логи (приложить как файл)

Создание резервной копии

[ ] Успех
[ ] Неудача

Конфигурирование PostgreSQL

[ ] Успех
[ ] Неудача

Создание БД PostgreSQL

[ ] Успех
[ ] Неудача

Конфигурирование сервера приложений JVM

[ ] Успех
[ ] Неудача

Конфигурирование Nginx

[ ] Успех
[ ] Неудача

Перезагрузка серверов приложений

[ ] Успех
[ ] Неудача

Сбор и передача логов

[ ] Успех
[ ] Неудача

* - обязательно для заполнения

** - обязательно для заполнения в случае ошибки

Подготовка дистрибутива#

Перед инсталляцией mock, необходимо подготовить(выполнить слияние разделенного дистрибутива) дистрибутив программного продукта и выгрузить его в репозиторий для дальнейшей инсталляции.
Подготовить дистрибутив можно одним из способов:

  1. С помощью автоматизированных job Solution pipeline.

  2. В ручную с помощью скриптов слияния, поставляемых с дистрибутивом(amcs-deploy)

Подготовка дистрибутива с помощью Solution pipeline#

  1. Запустите Jenkins job для объединения разделенного Solution(solution-merger). Как настроить Job можно посмотреть по ссылке: Видео Как настроить job Solution merger Пример конфигурации можно посмотреть в файле merger.yml.

  2. Запустите Jenkins job для раскладки компонентов Solution(solution-unpacker). Как настроить Job можно посмотреть по ссылке: Видео Как настроить job Solution unpacker Пример конфигурации можно посмотреть в файле environment.yml.

  3. После работы job, проверьте наличие файла amcs-bin--{VERSION}--distrib.zip в Nexus, для последующей инсталляции.

Ручная подготовка дистрибутива#

  1. Скачайте дистрибутив _amc-{VERSION}distrib.zip.

  2. Разархивируйте его в отдельную папку. В папке появятся два архива с программным продуктом и сторонними зависимостями: amc-{VERSION}-party-distrib.zip и amc-{VERSION}-owned-distrib.zip.

  3. Распакуйте архив amc-{VERSION}-owned-distrib.zip и перейдите в распакованную директорию amc-{VERSION}-owned-distrib.

  4. Распакуйте архив amcs-merger-{VERSION}-distrib.zip в директорию amcs-merger-{VERSION}-distrib(либо в любую другую).

  5. Скопируйте файл Report.json из текущей директории(amc-{VERSION}-owned-distrib) в директорию amcs-merger-{VERSION}-distrib.

  6. Перейдите в директорию amcs-merger-{VERSION}-distrib, сконфигурируйте и запустите следующий скрипт:

    ${PATH_TO_GROOVY_BIN}/groovy -cp ./src merge.groovy --report ./Report.json {PATH_TO_FILE}/amc-{VERSION}-party-distrib.zip {PATH_TO_FILE}/amc-{VERSION}-owned-distrib.zip
    

Результатом работы будет новый архив в корне директории amcs-merger-{VERSION}-distrib: owned.zip. 7. Распакуйте полученный архив owned.zip. 8. Перейдите в распакованную директорию и выложите архив amcs-bin-{VERSION}-distrib.zip в Nexus для последующей инсталляции на стенд.

Установка сертификатов для эмуляций#

Для работы https вызовов из groovy скриптов эмуляций, необходимо установить сертификаты.

Получите у уполномоченных лиц следующие PEM-сертификаты и разместите их в директории /var/cert/ на целевой сервер {MOCK-APP} для последующего запуска. Список сертификатов:

  • /var/cert/client.pem

  • /var/cert/certsCollection.pem

  • /var/cert/client_private_key.pem

Установка и настройка ФП Авторизации и Аутентификации#

Целевой продукт используемый как ФП Авторизации и Аутентификации является Keycloak.

  1. Установите Keycloak версии 9.0.3+.

  2. Войдите в консоль администратора Keycloak.

  3. Нажмите кнопку Add realm и импортируйте файл sbermock-realm.json.

Установка и настройка Kafka и Zookeeper#

  1. Установите Kafka и Zookeeper в директорию /var/kafka или любую другую.

  2. Сконфигурируйте Kafka следующим образом, внеся изменения в файл {KAFKA_DIR}/config/server.properties:

zookeeper.connect={kafka_host_ip}:2181
advertised.host.name={kafka_host_ip}
advertised.listeners=PLAINTEXT://{kafka_host_ip}:9092
auto.create.topics.enable=true
  1. Запустите Zookeeper:

$ ./bin/zookeeper-server-start.sh config/zookeeper.properties
  1. Запустите Kafka:

$ ./bin/kafka-server-start.sh config/server.properties

Установка и настройка External-Kafka и External-Zookeeper#

  1. Установите External-Kafka и External-Zookeeper в директорию /var/kafka или любую другую.

  2. Скопируйте файл kafka_server_jaas.conf на сервер и укажите необходимые данные. При этом постфикс XXX в ключе user_XXX должен соответствовать значению username.

  3. Сконфигурируйте Zookeeper следующим образом, внеся изменения в файл {KAFKA_DIR}/config/zookeeper.properties:

authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
jaasLoginRenew=3600000
  1. добавить jaas-файл с логином и паролем для zookeeper пример файла

  2. Сконфигурируйте Kafka следующим образом, внеся изменения в файл {KAFKA_DIR}/config/server.properties:

zookeeper.connect={kafka_host_ip}:2181
zookeeper.set.acl=true

security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN

authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer

allow.everyone.if.no.acl.found=true
auto.create.topics.enable=false
super.users=User:kafka

listeners=SASL_PLAINTEXT://:9093,PLAINTEXT://:9092
advertised.listeners=SASL_PLAINTEXT://{kafka_host_ip}:9093,PLAINTEXT://{kafka_host_ip}:9092   
  1. Запустите Zookeeper, указав путь к zookeeper_jaas.conf в переменной KAFKA_OPTS:

$ export KAFKA_OPTS="-Djava.security.auth.login.config=/etc/zookeeper/zookeeper_jaas.conf"
$ ./bin/zookeeper-server-start.sh config/zookeeper.properties
  1. Запустите Kafka, указав путь к kafka_server_jaas.conf в переменной KAFKA_OPTS:

$ export KAFKA_OPTS="-Djava.security.auth.login.config=/etc/kafka/kafka_server_jaas.conf"
$ ./bin/kafka-server-start.sh config/server.properties

Установка и настройка ActiveMQ Artemis#

  1. Установите ActiveMQ Artemis версии 2.19.1 и выше.

  2. Добавьте пользователя для управления очередями через экземпляр AMCS, сконфигурировав файл artemis-users.properties:
    userName = password

  3. Добавьте роль для пользователя, сконфигурировав файл artemis-roles.properties:
    roleName = userName

  4. Сконфигурируйте файл broker.xml:

    ...
    <security-settings>
          <security-setting match="#">
             <permission type="createNonDurableQueue" roles="amq,roleName"/>
             <permission type="deleteNonDurableQueue" roles="amq,roleName"/>
             <permission type="createDurableQueue" roles="amq,roleName"/>
             <permission type="deleteDurableQueue" roles="amq,roleName"/>
             <permission type="createAddress" roles="amq,roleName"/>
             <permission type="deleteAddress" roles="amq,roleName"/>
             <permission type="consume" roles="amq,roleName"/>
             <permission type="browse" roles="amq,roleName"/>
             <permission type="send" roles="amq,roleName"/>
             <!-- we need this otherwise ./artemis data imp wouldn't work -->
             <permission type="manage" roles="amq"/>
          </security-setting>
       </security-settings>
    
    <address-settings>
          ...
          <address-setting match="#">
             ...
             <auto-create-queues>false</auto-create-queues>
             <auto-create-addresses>true</auto-create-addresses>
             <auto-delete-queues>false</auto-delete-queues>
             <auto-delete-addresses>false</auto-delete-addresses>
          </address-setting>
    </address-settings>
    ...
    
  5. Запустите брокер.

  6. Проверьте запуск брокера, перейдя в консоль администратора по адресу http://<ARTEMIS_HOST>:8161/console.

Дополнительно:
В случае если консоль администратора по адресу http://<ARTEMIS_HOST>:8161/console не доступна, но при этом сервис запущен, проверьте следующие настройки:
bootstrap.xml:

...
      <!-- The web server is only bound to localhost by default -->
<web bind="http://0.0.0.0:8161" path="web">
 <app url="activemq-branding" war="activemq-branding.war"/>
 <app url="artemis-plugin" war="artemis-plugin.war"/>
 <app url="console" war="console.war"/>
</web>

...

jolokia-access.xml:

...

<cors>
 <!-- Allow cross origin access from localhost ... -->
 <allow-origin>*</allow-origin>


 <!-- Options from this point on are auto-generated by Create.java from the Artemis CLI -->
 <!-- Check for the proper origin on the server side, too -->
 <strict-checking/>
</cors>

...

Установка Nginx#

Выполните следующие шаги для конфигурирования Nginx.

  1. Выполните стандартную установку Nginx в директорию <NGINX_INSTALL>. Дополнительная информация представлена в официальной документации Nginx.

  2. Разместите сертификат и файл ключа certificate.crt, privateKey.key в директорию /etc/nginx/ssl.

  3. Сконфигурируйте файл <NGINX_INSTALL>/nginx.conf. Пример конфигурации: пример файла.

  4. Сконфигурируйте файл <NGINX_INSTALL>/upstreams.conf. Пример конфигурации: пример файла.

  5. Замените значения <MOCK_APP_IP_*> в файле upstreams.conf на соответствующие вашей конфигурации стенда. При кластерной конфигурации Mock необходимо указать все сервера Mock в файле upstreams.conf.

Установка Nginx Mono-rest#

Выполните следующие шаги для конфигурирования Nginx mono-rest, предназначенный для вызова REST-заглушек.

  1. Выполните стандартную установку Nginx в директорию <NGINX_INSTALL>. Дополнительная информация представлена в официальной документации Nginx.

  2. Разместите сертификат и файл ключа certificate.crt, privateKey.key в директорию /etc/nginx/ssl.

  3. Сконфигурируйте файл <NGINX_INSTALL>/nginx.conf. Пример конфигурации: пример файла.

  4. Сконфигурируйте файл <NGINX_INSTALL>/upstreams.conf. Пример конфигурации: пример файла.

  5. Замените значение переменной <MOCK_APP_IP> в файле upstreams.conf на соответствующее вашей конфигурации стенда. При кластерной конфигурации Mock необходимо указать все сервера Mock в файле upstreams.conf.

Установка PostgreSQL#

Информация о версии PostgreSQL: PostgreSQL 11.14 (PostgreSQL Sber Edition 5.1.0) on x86_64-pc-linux-gnu, compiled by x86_64-alt-linux-gcc (GCC) 8.4.1 20200305 (ALT p9 8.4.1-alt0.p91), 64-bit.

Выполните следующие шаги для конфигурирования PostgreSQL:

  1. Выполните стандартную установку PostgreSQL. Дополнительная информация представлена в официальной документации PostgreSQL.

    -$su–
    -#systemctl edit postgresql - 11.14.service - [Service] - Environment = PGDATA = < DB_INSTALL > // Директория размещения файлов экземпляра БД
    -#/usr/pgsql - 11.14 / bin / postgresql11.14 - setup initdb
    
  2. Разрешите обращение к серверу БД со всех IP-адресов (опционально):

    1. Внесите в файл <DB_INSTALL>/pg_hba.conf значение host all all all md5.

    2. Внесите в файл <DB_INSTALL>/postgresql.conf следующие строки:

      - listen_addresses ='*'
      - port = 5432
      - shared_preload_libraries =
      -'auto_explain,pg_stat_statements'
      -#$libdir/passwordcheck
      
    3. Для применения изменений перезапустите службу PostgreSQL с помощью следующей команды:

      <DB_BIN>/pg_ctl restart -D <DB_INSTALL>

    4. Выполните запуск приложений и инициализацию базы данных вручную или через скрипты развертывания для Jenkins.

Установка Mock при помощи скриптов развертывания#

Подготовка скриптов развертывания#

Перед началом работы со скриптами развертывания убедитесь в наличии рабочего Jenkins с подключенным Ansible плагином.

  1. Распакуйте содержимое zip-архива amcs-deploy-{VERSION}-distrib.zip (находится в owned архиве поставляемого дистрибутива) в удобную директорию. Данный архив содержит скрипты развертывания.

  2. Создайте репозиторий в Git (или аналоге) и перенесите в него скрипты.

  3. Замените значения указанных переменных соответствующими вашим КТС в файле hosts:

    • <MOCK_DB_IP>: IP сервера базы данных

    • <MOCK_APP_IP_*>: IP серверов Java приложений Mock

    • <EUREKA_IP_*>: IP серверов Eureka.

    • <NGINX_UI_IP_*>: IP серверов Nginx UI (mock-front)

    • <KAFKA_IP_*>: IP серверов Kafka

    • <EXT_KAFKA_IP_*>: IP серверов External-Kafka

    • <KEYCLOAK_URL>: полный адрес сервера Keycloak

    • <MQ_IP>: IP сервера ActiveMQ Artemis

    • <NEXUS_URL>: Ссылка на репозиторий в Nexus, для интеграции с Nexus

  4. Внесите изменения в файл group_vars/dzo_DEV_Mock/mock.yml:

           DNS:
    190      ZONE_NAME: ".<ZONE_NAME>"
           DNS:
    269      ZONE_NAME: ".<ZONE_NAME>"
           HOST: "<NGINX_UI_IP>"
    

    Замените значение <ZONE_NAME> на соответствующую запись в DNS (при наличии) для REST-заглушек (слева указаны номера строк в файле). Замените значение <NGINX_UI_IP> на соответствующий адрес сервера Nginx UI (слева указаны номера строк в файле).

  5. Внесите изменения в файл group_vars/dzo_DEV_Mock/pwd.yml (обратите внимание: наименование логинов должно быть в нижнем регистре):

    
    # TUZ DEV - используется для приложений MOCK интеграции с NEXUS 
    mock_apps_tuzdev_nexus_user:               "<NEXUS_TUZ>"
    mock_apps_tuzdev_nexus_pwd:               "<NEXUS_TUZ_PWD>"
    
    # PSQL USERS
    psql_users_mock_keycloak_user:        "<PSQL_KEYCLOAK_USER>" #  произвольный пользователь-keycloak базы данных
    psql_users_mock_keycloak_user_pwd:    "<PSQL_KEYCLOAK_USER_PWD>"
    
    psql_users_mock_user_pwd:               "<PSQL_MOCK_USER_PWD>" # произвольный пароль для пользователя meta_mock
    
    psql_users_mock_admin:                "<PSQL_MOCK_ADMIN_USER>" # произвольный пользователь-администратор базы данных
    psql_users_mock_admin_pwd:            "<PSQL_MOCK_ADMIN_USER_PWD>" 
    
    # KAFKA
    mock_extkafka_user: "<EXT_KAFKA_USER>"
    mock_extkafka_pwd: "<EXT_KAFKA_PWD>"
    
    # MQ
    mock_mq_user: "<MQ_USER>"
    mock_mq_pwd: "<MQ_PWD>"
    

    Опционально:

    # GIT Для выгрузки эмуляций в GIT репозиторий
    mock_git_username: "***"
    mock_git_secret: "***"
    

    Замените значения <SOME_PARAMS> на соответствующее вашей конфигурации. Обратите внимание, что значения с <SOME_PARAMS> регистрозависимы.
    Замените значение <NEXUS_TUZ> на соответствующую ТУЗ для интеграции с Nexus. Замените значение <EXT_KAFKA_USER> и <EXT_KAFKA_PWD> на соответствующее вашей конфигурации (super.user) External-Kafka. Замените значение <MQ_USER> и <MQ_PWD> на данные пользователя, который был создан/добавлен на шаге конфигурации ActiveMQ Artemis.

    Опционально: зашифруйте данные файлы, используя Ansible_Vault.

  6. Внесите изменения в файлы host_vars/dzo_devmock_***_mock/vars.yml:

    ansible_ssh_user: "***"
    ansible_ssh_pass: "***"
    

    Введите данные пользователя для доступа по SSH к соответствующим КТС. IP-адреса были ранее сконфигурированы в файле hosts.

    Опционально: зашифруйте данные файлы, используя Ansible_Vault.

  7. Опционально: При необходимости изменить параметры в файле group_vars/all/general.yml:

    pg_os_user: "***"
    pg_os_group: "***"
    

Указания по работе с профилями приложения#

Mock имеет несколько профилей запуска приложения, указанные в переменной spring_profiles_active в файле hosts на КТС.
Профили указываются через запятую и по умолчанию имеют значение:

dev,cloud,outer

Так же при необходимости можно сконфигурировать приложение, дополнительно указав еще профили. Указываются через запятую после профилей по умолчанию.
Описание доступных профилей:

outer: Профиль для внешних организаций(заказчиков)
devops: Указать при интеграции с Devops portal

Пример конфигурации:

dev,cloud,outer,devops 

Дополнительная подготовка скриптов для кластерной конфигурации(опционально)#

При использовании кластерной конфигурации Mock или СПО необходимо дополнительно настроить скрипты следующим образом:

Подготовка скриптов для кластерной конфигурации MOCK#

  1. Добавить описание всех серверов приложений Eureka, Mock и Nginx(при необходимости) в файле hosts. Название хостов должно соответствовать паттерну уже существующих записей. Пример конфигурации:

# Кластер Eureka
dzo_devmock_d_sbermock_eureka_01_eureka_oc_mock       ansible_host=<EUREKA_IP_1> ansible_ssh_host=<EUREKA_IP_1>
dzo_devmock_d_sbermock_eureka_02_eureka_oc_mock       ansible_host=<EUREKA_IP_2> ansible_ssh_host=<EUREKA_IP_2>
   
# Кластер Mock
dzo_devmock_d_sbermock_mock_01_app_node_oc_mock       ansible_host=<MOCK_APP_IP_1> ansible_ssh_host=<MOCK_APP_IP_1> mock_cloud_index=1
dzo_devmock_d_sbermock_mock_02_app_node_oc_mock       ansible_host=<MOCK_APP_IP_2> ansible_ssh_host=<MOCK_APP_IP_2> mock_cloud_index=2

# Кластер Nginx
dzo_devmock_d_sbermock_nginx_01_nginx_mock          ansible_host=<NGINX_UI_IP_1> ansible_ssh_host=<NGINX_UI_IP_1>
dzo_devmock_d_sbermock_nginx_02_nginx_mock          ansible_host=<NGINX_UI_IP_2> ansible_ssh_host=<NGINX_UI_IP_2>
   
# Пример кластерной конфигурации BASIC-PROXY. Хосты указываются через запятую
proxy_hosts=<MOCK_APP_IP_1>,<MOCK_APP_IP_2>

# Пример кластерной конфигурации EUREKA:
eureka_instance_name_host1=<EUREKA_IP_1>
eureka_instance_name_host2=<EUREKA_IP_2>
  1. Далее необходимо добавить информацию с пользователями для доступа к КТС по ssh.

  • Создайте новую директорию соответствующую названию КТС(из конфига выше) в директории host_vars/{Название КТС} (например dzo_devmock_d_sbermock_eureka_02_eureka_oc_mock). Название директорий должно соответствовать текущим паттернам уже созданных директорий.

  • Создайте в новой директории файл vars.yml и внесите туда данные пользователя(с правами sudo) для доступа по SSH. Пример файла:

ansible_ssh_user: "***"
ansible_ssh_pass: "***"

Подготовка скриптов для кластерной конфигурации СПО#

  1. При использовании кластерной конфигурации СПО необходимо указать их IP в файле hosts:

# Пример кластерной конфигурации KAFKA:
kafka_host1=<KAFKA_IP_1>
kafka_host2=<KAFKA_IP_2>

#Пример кластерной конфигурации EXT_KAFKA:
ext_kafka_host1=<EXT_KAFKA_IP_1>
ext_kafka_host2=<EXT_KAFKA_IP_2>

# Пример кластерной конфигурации ELK_KAFKA:
elk_kafka_host1=<KAFKA_IP_1>
elk_kafka_host2=<KAFKA_IP_2>
  1. Далее, в зависимости от вашей конфигурации СПО, необходимо внести изменения в файл group_vars/dzo_DEV_Mock/mock.yml. Ниже приведен пример для двух нодовой конфигурации:

MOCK:
   KAFKA:
      SERVERS: "{{kafka_host1}}:9092,{{kafka_host2}}:9092" # Указать через запятую все сервера Kafka.
   EXTKAFKA:
      REPLICATION_FACTOR: "2" # Указать кол-во серверов Ext_Kafka
      SASL: "{{ext_kafka_host1}}:9093,{{ext_kafka_host2}}:9093" # Указать через запятую все сервера Ext_Kafka.
      PLAIN: "{{ext_kafka_host1}}:9092,{{ext_kafka_host2}}:9092" # Указать через запятую все сервера Ext_Kafka.
   EUREKA:
      SERVERS: "http://{{eureka_instance_name_host1}}:8761/eureka,http://{{eureka_instance_name_host2}}:8761/eureka" # Указать через запятую все сервера Eureka.
   AUDITELK:
      ELK_KAFKA:
        SERVERS: "{{elk_kafka_host1}}:9092,{{elk_kafka_host2}}:9092" # Указать через запятую все сервера Elk_Kafka.
  1. Сделайте commit и push в репозиторий.

Создание Jenkins Pipeline#

  1. Перейдите в рабочую директорию Jenkins и добавьте новую Job типа Pipeline.

  2. Укажите путь к репозиторию со скриптами развертывания и учетную запись для доступа к репозиторию:

    Pipeline->Definition->Pipeline script from SCM->GIT->Repositories
    
  3. Укажите ветку для репозитория со скриптами развертывания(например */master):

    Pipeline->Definition->Pipeline script from SCM->GIT->Branches to build
    
  4. Укажите файл deploy.groovy для запуска (в данном файле необходимо обратить внимание на наименование агента, с помощью которого будет производиться сборка):

    Pipeline->Definition->Script Path
    
  5. Запустите Job (собрать сейчас), дождитесь окончания и перезагрузите страницу. Job создана и автоматически конфигурирована.

Инициализация PostgreSQL#

  1. Запустите подготовленный выше Jenkins Pipeline, нажав кнопку Собрать с параметрами.

  2. Выставите параметры:

    • VERSION: версия дистрибутива (например SP-2.29.0)

    • STEND: dzo_DEV_Mock

    • TAGS: DB

  3. Нажмите кнопку Собрать.

В результате выполнения в PostgreSQL должны создаться необходимые БД, пользователи и привилегии.

Первичная настройка КТС#

  1. Запустите подготовленный выше Jenkins Pipeline, нажав кнопку Собрать с параметрами.

  2. Выставите параметры:

    • VERSION: версия дистрибутива (например SP-2.29.0)

    • STEND: dzo_DEV_Mock

    • TAGS: SERVICE

  3. Нажмите кнопку Собрать.

В результате выполнения будут установлено необходимое ПО на КТС и созданы сервисы для дальнейшего запуска MOCK app.

Установка MOCK#

  1. Запустите подготовленный выше Jenkins Pipeline, нажав кнопку Собрать с параметрами.

  2. Выставите параметры:

    • VERSION: версия дистрибутива (например SP-2.29.0)

    • STEND: dzo_DEV_Mock

    • TAGS: DEPLOY

  3. Нажмите кнопку Собрать.

В результате выполнения будут развернуты (запущены) все приложения Mock.

Перезапуск MOCK#

В случае необходимости перезапуска mock, выполните следующие действия:

  1. Запустите подготовленный выше Jenkins Pipeline, нажав кнопку Собрать с параметрами.

  2. Выставите параметры:

    • VERSION: версия дистрибутива (например SP-2.29.0)

    • STEND: dzo_DEV_Mock

    • TAGS: RESTART

  3. Нажмите кнопку Собрать.

Ручная установка#

Инициализация PostgreSQL#

Выполните следующие шаги для создания БД PostgreSQL.

Примечание

  • Все команды необходимо выполнять от имени postgres: $su postgres;

  • При необходимости введите пароль.

  1. Выполните команду $psql.

  2. Создайте базу данных:

    create role meta_mock_owner;
    create user meta_mock_admin login password 'db.owner-password' in role meta_mock_owner;
    create database metamockdb owner meta_mock_owner encoding 'UTF-8';
    create role mock_cloud_app;
    create user meta_mock login password' db.password ' in role mock_cloud_app;
    
  3. Создайте схему mock:

    create schema meta_mock authorization meta_mock_admin;
    GRANT CONNECT ON DATABASE metamockdb TO meta_mock;
    GRANT USAGE ON SCHEMA meta_mock to mock_cloud_app;
    ALTER USER meta_mock_admin SET search_path = meta_mock, public;
    ALTER USER meta_mock SET search_path = meta_mock;
    
  4. Выполните команду \q для выхода из PSQL.

  5. Для применения изменений перезапустите службу PSQL:

    - <DB_BIN>/pg_ctl restart -D <DB_INSTALL>

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

Выполните следующие шаги для конфигурирования сервера приложений JVM.

  1. Установите Java в соответствии с требованиями к аппаратным ресурсам среды. Пример команды:

    -$su- #yum install - y java - 1.8.0 - openjdk.x86_64

  2. Проверьте версию, используя следующую команду:

    - java -version

  3. Создайте пользователя <USER_JVM> или используйте существующего.

  4. Создайте директорию для установки Mock:

    sudo mkdir <MOCK_INSTALL>;

  5. Выдайте пользователям необходимые привилегии:

    sudo chown-R <USER_JVM>:<USER_JVM> <MOCK_INSTALL> // Перейдите в директорию <MOCK_INSTALL>

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

  1. Перенесите архив mock-front на Nginx UI сервер для дальнейшей распаковки и установки.

  2. Перенесите jar файлы из архива pvwmct-SP-{VERSION}-owned-distrib/package/bh на целевой сервер для последующего запуска.

Выполните следующие шаги для создания сервиса запуска приложений.

  1. Создайте следующие файлы в директории /etc/systemd/system/:

    • eureka.service

    • mock-basic-proxy.service

    • mock-audit-elk.service

    • mock-core-app.service

    • mock_transport-manager.service

    • mock-cloud.service

  2. Отредактируйте файлы следующим образом:

  3. eureka.service

    [Unit]
    Description={{MOCK.EUREKA.NAME}}
    After=syslog.target
    
    [Service]
    User={{ansible_ssh_user}}
    Group={{ansible_ssh_user}}
    Type=simple
    ExecStart=/usr/bin/java -Xmx128m -Xms128m -XX:+UseParallelGC \
    -DlogDir={{MOCK.EUREKA.LOG}} \
    -Deureka.instance.hostname={{ansible_host}} \
    -Deureka.client.serviceUrl.defaultZone=http://{{eureka_instance_name_host1}}:{{MOCK.EUREKA.PORT}}/eureka \
    -jar {{MOCK.EUREKA.DIR}}/{{MOCK.EUREKA.NAME}}.jar
    
    [Install]
    WantedBy=multi-user.target
    

    mock-basic-proxy.service

    [Unit]
    Description={{MOCK.BASICPROXY.NAME}}
    After=syslog.target
    
    [Service]
    User={{ansible_ssh_user}}
    Group={{ansible_ssh_user}}
    Type=simple
    ExecStart=/usr/bin/java\
    DlogDir={{MOCK.BASICPROXY.LOG}} \
    -Dsbermock.proxy.refreshTokenEnable={{MOCK.BASICPROXY.PROXY.REFRESH_TOKEN_ENABLE}} \
    -Dkeycloak.realm={{MOCK.BASICPROXY.KEYCLOAK.REALM}}\
    -Dkeycloak.username={{MOCK.BASICPROXY.KEYCLOAK.USER_NAME}} \
    -Dkeycloak.password={{MOCK.BASICPROXY.KEYCLOAK.USER_PWD}} \
    -Dkeycloak.client-secret={{MOCK.BASICPROXY.KEYCLOAK.CLIENT_SECRET}} \
    -Dsbermock.proxy.realm={{MOCK.BASICPROXY.PROXY.REALM}} \
    -Dsbermock.proxy.gui-client-id={{MOCK.BASICPROXY.PROXY.GUI_CLIENT_ID}} \
    -Dsbermock.proxy.gui-client-secret={{MOCK.BASICPROXY.PROXY.GUI_CLIENT_SECRET}} \
    -Dsbermock.proxy.token-minimum-lifetime={{MOCK.BASICPROXY.PROXY.TOKEN_MINIMUM_LIFETIME}} \
    -Deureka.client.serviceUrl.defaultZone=http://{{eureka_instance_name_host1}}:{{MOCK.EUREKA.PORT}}/eureka \
    -Dsbermock.proxy.keycloak-server={{mock_keycloak_url}}:{{MOCK.BASICPROXY.KEYCLOAK.PORT}} \
    -Dkeycloak.server-Url={{mock_keycloak_url}}:{{MOCK.BASICPROXY.KEYCLOAK.PORT}}/auth\
    -Dsbermock.proxy.sbermockUrl={{proxy_nginx_cloud_url}} \
    -Dhaselcast.node.ip={{proxy_hosts}} \
    -jar {{MOCK.BASICPROXY.DIR}}/{{MOCK.BASICPROXY.NAME}}.jar
    
    [Install]
    WantedBy=multi-user.target
    

    mock-core.service

    [Unit]
    Description={{MOCK.CORE.NAME}}
    After=syslog.target
    
    [Service]
    User={{ansible_ssh_user}}
    Group={{ansible_ssh_user}}
    Type=simple
    ExecStart=/usr/bin/java\
    -Deureka.client.serviceUrl.defaultZone=http://{{eureka_instance_name_host1}}:{{MOCK.EUREKA.PORT}}/eureka \
    -DlogDir={{MOCK.CORE.LOG}} \
    -Dsbermock.log.enable={{MOCK.CORE.ELK_LOG.ENABLE}} \
    -Dsbermock.log.serviceName={{MOCK.CORE.ELK_LOG.SERVICE_NAME}} \
    -Dsbermock.log.serviceNodeName={{MOCK.CORE.ELK_LOG.SERVICE_NODE_NAME}} \
    -Dsbermock.log.servers={{elk_kafka_host1}}:{{MOCK.AUDITELK.ELK_KAFKA.PORT}} \
    -Dsbermock.log.topic={{MOCK.CORE.ELK_LOG.TOPIC}} \
    -Dsbermock.log.truststoreLocation={{MOCK.AUDITELK.ELK_KAFKA.TRUST_LOCATION}} \
    -Dsbermock.log.truststorePassword={{MOCK.AUDITELK.ELK_KAFKA.TRUST_PASS}} \
    -Dsbermock.log.keystoreLocation={{MOCK.AUDITELK.ELK_KAFKA.KEYSTORE_LOCATION}} \
    -Dsbermock.log.keystorePassword={{MOCK.AUDITELK.ELK_KAFKA.KEYSTORE_PASS}} \
    -Dmock.core.healthcheck.nexus={{MOCK.CORE.HEALTHCHECK.NEXUS}} \
    -Dmock.core.nexus.username={{MOCK.CORE.NEXUS.USER}} \
    -Dmock.core.nexus.password={{MOCK.CORE.NEXUS.PWD}} \
    -Dmock.core.nexus.urls={{MOCK.CORE.NEXUS.URLS}} \
    -jar {{MOCK.CORE.DIR}}/{{MOCK.CORE.NAME}}.jar
    [Install]
    WantedBy=multi-user.target
    

    mock-transport-manager.service

    [Unit]
    Description={{MOCK.TRANSPORTMANAGER.NAME}}
    After=syslog.target
    
    [Service]
    User={{ansible_ssh_user}}
    Group={{ansible_ssh_user}}
    Type=simple
    ExecStart=/usr/bin/java\
    -Dspring.kafka.bootstrap-servers={{kafka_host1}}:{{MOCK.KAFKA.PORT}} \
    -Deureka.client.serviceUrl.defaultZone=http://{{eureka_instance_name_host1}}:{{MOCK.EUREKA.PORT}}/eureka \
    -DlogDir={{MOCK.TRANSPORTMANAGER.LOG}} \
    -Dsbermock.log.enable={{MOCK.TRANSPORTMANAGER.ELK_LOG.ENABLE}} \
    -Dsbermock.log.serviceName={{MOCK.TRANSPORTMANAGER.ELK_LOG.SERVICE_NAME}} \
    -Dsbermock.log.serviceNodeName={{MOCK.TRANSPORTMANAGER.ELK_LOG.SERVICE_NODE_NAME}} \
    -Dsbermock.log.servers={{elk_kafka_host1}}:{{MOCK.AUDITELK.ELK_KAFKA.PORT}} \
    -Dsbermock.log.topic={{MOCK.TRANSPORTMANAGER.ELK_LOG.TOPIC}} \
    -Dsbermock.log.truststoreLocation={{MOCK.AUDITELK.ELK_KAFKA.TRUST_LOCATION}} \
    -Dsbermock.log.truststorePassword={{MOCK.AUDITELK.ELK_KAFKA.TRUST_PASS}} \
    -Dsbermock.log.keystoreLocation={{MOCK.AUDITELK.ELK_KAFKA.KEYSTORE_LOCATION}} \
    -Dsbermock.log.keystorePassword={{MOCK.AUDITELK.ELK_KAFKA.KEYSTORE_PASS}} \
    -Dmock.transport-manager.kafka-log.rest-log-topic={{MOCK.TRANSPORTMANAGER.ELK_LOG.REST_LOG_TOPIC}} \
    -Dmock.transport-manager.kafka-log.rest-log-enable={{MOCK.TRANSPORTMANAGER.ELK_LOG.REST_LOG_ENABLE}} \
    -Dmock.transport-manager.kafka-log.kafka-log-topic={{MOCK.TRANSPORTMANAGER.ELK_LOG.KAFKA_LOG_TOPIC}} \
    -Dmock.transport-manager.kafka-log.kafka-log-enable={{MOCK.TRANSPORTMANAGER.ELK_LOG.KAFKA_LOG_ENABLE}} \
    -Dmock.transport-manager.kafka-log.esb-log-topic={{MOCK.TRANSPORTMANAGER.ELK_LOG.ESB_LOG_TOPIC}} \
    -Dmock.transport-manager.kafka-log.esb-log-enable={{MOCK.TRANSPORTMANAGER.ELK_LOG.ESB_LOG_ENABLE}} \
    -Dmock.transport-manager.kafka-log.mmt-log-topic={{MOCK.TRANSPORTMANAGER.ELK_LOG.MMT_LOG_TOPIC}} \
    -Dmock.transport-manager.kafka-log.mmt-log-enable={{MOCK.TRANSPORTMANAGER.ELK_LOG.MMT_LOG_ENABLE}} \
    -Dmock.transport-manager.kafka-log.servers={{elk_kafka_host1}}:{{MOCK.AUDITELK.ELK_KAFKA.PORT}} \
    -Dmock.transport-manager.kafka-log.truststore-location={{MOCK.AUDITELK.ELK_KAFKA.TRUST_LOCATION}} \
    -Dmock.transport-manager.kafka-log.truststore-password={{MOCK.AUDITELK.ELK_KAFKA.TRUST_PASS}} \
    -Dmock.transport-manager.kafka-log.keystore-location={{MOCK.AUDITELK.ELK_KAFKA.KEYSTORE_LOCATION}} \
    -Dmock.transport-manager.kafka-log.keystore-password={{MOCK.AUDITELK.ELK_KAFKA.KEYSTORE_PASS}} \
    -Dkafka.num-partitions={{MOCK.KAFKA.PARTITIONS}} \
    -Dmock.transport-manager.index={{mock_cloud_index}} \
    -Dmock.transport-manager.memory-threshold-enabled={{MOCK.CLOUD.TOGGLES.MEMORY_THRESHOLD}} \
    -Dmock.transport-manager.dns.zone-name={{MOCK.TRANSPORTMANAGER.DNS.ZONE_NAME}} \
    -Dmock.transport-manager.dns.port={{MOCK.TRANSPORTMANAGER.DNS.PORT}} \
    -Dmock.transport-manager.nexus.username={{MOCK.TRANSPORTMANAGER.NEXUS.USER}} \
    -Dmock.transport-manager.nexus.password={{MOCK.TRANSPORTMANAGER.NEXUS.PWD}} \
    -Dmock.transport-manager.nexus.urls={{MOCK.TRANSPORTMANAGER.NEXUS.URLS}} \
    -Dmock.transport-manager.transport-path.mmt={{MOCK.TRANSPORTMANAGER.DIR}}/{{MOCK.MMT.NAME_CLOUD}}.jar \
    -Dmock.transport-manager.transport-path.rest={{MOCK.TRANSPORTMANAGER.DIR}}/{{MOCK.REST.NAME}}.jar \
    -Dmock.transport-manager.transport-path.ibm={{MOCK.TRANSPORTMANAGER.DIR}}/{{MOCK.ESB.NAME_IBM}}.jar \
    -Dmock.transport-manager.transport-path.scheduled={{MOCK.TRANSPORTMANAGER.DIR}}/{{MOCK.SCHEDULED.NAME}}.jar \
    -Dmock.transport-manager.transport-path.kafka={{MOCK.TRANSPORTMANAGER.DIR}}/{{MOCK.EXTKAFKA.NAME}}.jar \
    -Dmock.transport-manager.external-kafka.sasl-listeners={{ext_kafka_host1}}:{{MOCK.EXTKAFKA.SASLPORT}},{{ext_kafka_host2}}:{{MOCK.EXTKAFKA.SASLPORT}},{{ext_kafka_host3}}:{{MOCK.EXTKAFKA.SASLPORT}} \
    -Dmock.transport-manager.external-kafka.plain-listeners={{ext_kafka_host1}}:{{MOCK.EXTKAFKA.PLAINPORT}},{{ext_kafka_host2}}:{{MOCK.EXTKAFKA.PLAINPORT}},{{ext_kafka_host3}}:{{MOCK.EXTKAFKA.PLAINPORT}} \
    -Dmock.transport-manager.external-kafka.admin-login={{MOCK.EXTKAFKA.USER}} \
    -Dmock.transport-manager.external-kafka.admin-password={{MOCK.EXTKAFKA.PWD}} \
    -Dmock.transport-manager.external-kafka.num-partitions={{MOCK.EXTKAFKA.PARTITIONS}} \
    -Dmock.transport-manager.external-kafka.replication-factor={{MOCK.EXTKAFKA.REPLICATION_FACTOR}} \
    -Dmock.transport-manager.external-kafka.container-concurrency={{MOCK.EXTKAFKA.CONTAINER_CONCURRENCY}} \
    -jar {{MOCK.TRANSPORTMANAGER.DIR}}/{{MOCK.TRANSPORTMANAGER.NAME}}.jar
    [Install]
    WantedBy=multi-user.target
    

    mock-audit-elk.service

    [Unit]
    Description={{MOCK.AUDITELK.NAME}}
    After=syslog.target
    
    [Service]
    User={{ansible_ssh_user}}
    Group={{ansible_ssh_user}}
    Type=simple
    ExecStart=/usr/bin/java-Xmx128m -Xms128m -XX:+UseParallelGC \
    -Dspring.kafka.bootstrap-servers={{kafka_host1}}:{{MOCK.KAFKA.PORT}} \
    -Dkafka.num-partitions={{MOCK.KAFKA.PARTITIONS}} \
    -DlogDir={{MOCK.AUDITELK.LOG}} \
    -Dsbermock.log.enable={{MOCK.AUDITELK.ELK_LOG.ENABLE}} \
    -Dsbermock.log.serviceName={{MOCK.AUDITELK.ELK_LOG.SERVICE_NAME}} \
    -Dsbermock.log.serviceNodeName={{MOCK.AUDITELK.ELK_LOG.SERVICE_NODE_NAME}} \
    -Dsbermock.log.servers={{elk_kafka_host1}}:{{MOCK.AUDITELK.ELK_KAFKA.PORT}} \
    -Dsbermock.log.topic={{MOCK.AUDITELK.ELK_LOG.TOPIC}} \
    -Dsbermock.log.truststoreLocation={{MOCK.AUDITELK.ELK_KAFKA.TRUST_LOCATION}} \
    -Dsbermock.log.truststorePassword={{MOCK.AUDITELK.ELK_KAFKA.TRUST_PASS}} \
    -Dsbermock.log.keystoreLocation={{MOCK.AUDITELK.ELK_KAFKA.KEYSTORE_LOCATION}} \
    -Dsbermock.log.keystorePassword={{MOCK.AUDITELK.ELK_KAFKA.KEYSTORE_PASS}} \
    -Dsbermock.tier={{MOCK.AUDITELK.ELK_KAFKA.TIER}} \
    -Dsbermock.audit.kafka.servers={{elk_kafka_host1}}:{{MOCK.AUDITELK.ELK_KAFKA.PORT}} \
    -Dsbermock.audit.kafka.topic={{MOCK.AUDITELK.ELK_KAFKA.TOPIC}} \
    -Dsbermock.audit.kafka.ssl_enable={{MOCK.AUDITELK.ELK_KAFKA.SSL_ENABLE}} \
    -Dsbermock.audit.kafka.truststore.type={{MOCK.AUDITELK.ELK_KAFKA.TRUST_TYPE}} \
    -Dsbermock.audit.kafka.truststore.location={{MOCK.AUDITELK.ELK_KAFKA.TRUST_LOCATION}} \
    -Dsbermock.audit.kafka.truststore.password={{MOCK.AUDITELK.ELK_KAFKA.TRUST_PASS}} \
    -Dsbermock.audit.kafka.keystore.type={{MOCK.AUDITELK.ELK_KAFKA.KEYSTORE_TYPE}} \
    -Dsbermock.audit.kafka.keystore.location={{MOCK.AUDITELK.ELK_KAFKA.KEYSTORE_LOCATION}} \
    -Dsbermock.audit.kafka.keystore.password={{MOCK.AUDITELK.ELK_KAFKA.KEYSTORE_PASS}} \
    -Deureka.client.serviceUrl.defaultZone=http://{{eureka_instance_name_host1}}:{{MOCK.EUREKA.PORT}}/eureka \
    -jar {{MOCK.AUDITELK.DIR}}/{{MOCK.AUDITELK.NAME}}.jar
    
    [Install]
    WantedBy=multi-user.target
    

    mock-cloud.service

    [Unit]
    
    Description={{MOCK.CLOUD.NAME}}
    After=syslog.target
    
    [Service]
    User={{ansible_ssh_user}}
    Group={{ansible_ssh_user}}
    Type=simple
    ExecStart=/usr/bin/java\
    -Dspring.kafka.bootstrap-servers={{kafka_host1}}:{{MOCK.KAFKA.PORT}} \
    -Dkafka.num-partitions={{MOCK.KAFKA.PARTITIONS}} \
    -DlogDir={{MOCK.CLOUD.LOG}} \
    -Dsbermock.log.enable={{MOCK.CLOUD.ELK_LOG.ENABLE}} \
    -Dsbermock.log.serviceName={{MOCK.CLOUD.ELK_LOG.SERVICE_NAME}} \
    -Dsbermock.log.serviceNodeName={{MOCK.CLOUD.ELK_LOG.SERVICE_NODE_NAME}} \
    -Dsbermock.log.servers={{elk_kafka_host1}}:{{MOCK.AUDITELK.ELK_KAFKA.PORT}} \
    -Dsbermock.log.topic={{MOCK.CLOUD.ELK_LOG.TOPIC}} \
    -Dsbermock.log.truststoreLocation={{MOCK.AUDITELK.ELK_KAFKA.TRUST_LOCATION}} \
    -Dsbermock.log.truststorePassword={{MOCK.AUDITELK.ELK_KAFKA.TRUST_PASS}} \
    -Dsbermock.log.keystoreLocation={{MOCK.AUDITELK.ELK_KAFKA.KEYSTORE_LOCATION}} \
    -Dsbermock.log.keystorePassword={{MOCK.AUDITELK.ELK_KAFKA.KEYSTORE_PASS}} \
    -Dspring.profiles.active=dev,cloud,outer \
    -Dmock.cloud.meta-host={{metaHubUrl}} \
    -Dmock.cloud.hub.meta-url={{metaHubAPIUrl}} \
    -Deureka.client.serviceUrl.defaultZone=http://{{eureka_instance_name_host1}}:{{MOCK.EUREKA.PORT}}/eureka \
    -Dmock.cloud.healthcheck.nexus={{MOCK.CLOUD.HEALTHCHECK.NEXUS}} \
    -Dmock.cloud.healthcheck.transport-jar={{MOCK.CLOUD.HEALTHCHECK.TRANSPORT_JAR}} \
    -Dmock.cloud.healthcheck.meta-tech-acc={{MOCK.CLOUD.HEALTHCHECK.META_TECH_ACC}} \
    -Dmock.cloud.nexus.username={{MOCK.CLOUD.NEXUS.USER}} \
    -Dmock.cloud.nexus.password={{MOCK.CLOUD.NEXUS.PWD}} \
    -Dmock.cloud.nexus.urls={{MOCK.CLOUD.NEXUS.URLS}} \
    -Dmock.cloud.keycloak.client-secret={{MOCK.CLOUD.KEYCLOAK.MOCK.CLIENT_SECRET}} \
    -Dmock.cloud.transport-path.mmt={{MOCK.CLOUD.DIR}}/{{MOCK.MMT.NAME_CLOUD}}.jar \
    -Dmock.cloud.transport-path.rest={{MOCK.CLOUD.DIR}}/{{MOCK.REST.NAME}}.jar \
    -Dmock.cloud.transport-path.ibm={{MOCK.CLOUD.DIR}}/{{MOCK.ESB.NAME_IBM}}.jar \
    -Dmock.cloud.transport-path.scheduled={{MOCK.CLOUD.DIR}}/{{MOCK.SCHEDULED.NAME}}.jar \
    -Dmock.cloud.transport-path.kafka={{MOCK.CLOUD.DIR}}/{{MOCK.EXTKAFKA.NAME}}.jar \
    -Dmock.cloud.transport-manager-should-redirect-output={{transport_manager_should_redirect_output}} \
    -Dmock.cloud.external-kafka.sasl-listeners={{ext_kafka_host1}}:{{MOCK.EXTKAFKA.SASLPORT}} \
    -Dmock.cloud.external-kafka.plain-listeners={{ext_kafka_host1}}:{{MOCK.EXTKAFKA.PLAINPORT}} \
    -Dmock.cloud.external-kafka.admin-login={{MOCK.EXTKAFKA.USER}} \
    -Dmock.cloud.external-kafka.admin-password={{MOCK.EXTKAFKA.PWD}} \
    -Dmock.cloud.external-kafka.num-partitions={{MOCK.EXTKAFKA.PARTITIONS}} \
    -Dmock.cloud.external-kafka.replication-factor={{MOCK.EXTKAFKA.REPLICATION_FACTOR}} \
    -Dmock.cloud.external-kafka.container-concurrency={{MOCK.EXTKAFKA.CONTAINER_CONCURRENCY}} \
    -Dml.service.url=http://{{ml_host}}:{{MOCK.ML.PORT}} \
    -Dmock.cloud.healthcheck.ibm-mq={{MOCK.CLOUD.HEALTHCHECK.IBM_MQ}} \
    -Dmock.cloud.ibm-broker.host={{ibm_broker_host}} \
    -Dmock.cloud.ibm-broker.port={{MOCK.MQ.PORT}} \
    -Dmock.cloud.ibm-broker.queue-manager-name={{MOCK.MQ.QUEUE_MGR}} \
    -Dmock.cloud.ibm-broker.channel-name={{MOCK.MQ.CHANNEL}} \
    -Dmock.cloud.ibm-broker.rest-username={{MOCK.MQ.USER}} \
    -Dmock.cloud.ibm-broker.rest-secret={{MOCK.MQ.PWD}} \
    -Dmock.cloud.index={{mock_cloud_index}} \
    -Dmock.cloud.transport-manager-memory-threshold={{transport_manager_memory_threshold}} \
    -Dmock.cloud.devops-api.token={{MOCK.CLOUD.DEVOPS_API.TOKEN}} \
    -Dmock.cloud.devops-api.system={{MOCK.CLOUD.DEVOPS_API.SYSTEM}} \
    -Dmock.cloud.devops-api.widget-url={{MOCK.CLOUD.DEVOPS_API.WIDGET_URL}} \
    -jar {{MOCK.CLOUD.DIR}}/{{MOCK.CLOUD.NAME}}.jar \
    --db.url=jdbc:postgresql://{{db_mock_host}}:{{PSQL.CTL.MOCK.PORT}}/{{PSQL.DB.MOCK.NAME}}?prepareThreshold=0 \
    --db.server={{db_mock_host}} \
    --db.port={{PSQL.CTL.MOCK.PORT}} \
    --db.instance={{PSQL.DB.MOCK.NAME}} \
    --db.schema={{PSQL.USERS.MOCK.USER.SCHEMA}} \
    --db.user={{PSQL.USERS.MOCK.USER.NAME}} \
    --db.password={{PSQL.USERS.MOCK.USER.PWD}} \
    --db.owner-user={{PSQL.USERS.MOCK.ADMIN.NAME}} \
    --db.owner-password={{PSQL.USERS.MOCK.ADMIN.PWD}} \
    --mock.cloud.keycloak.realm={{MOCK.CLOUD.KEYCLOAK.MOCK.REALM}} \
    --mock.cloud.keycloak.clientsUrl={{mock_keycloak_url}}:{{MOCK.CLOUD.KEYCLOAK.MOCK.PORT}}/auth/admin/realms/{{MOCK.CLOUD.KEYCLOAK.MOCK.REALM}}/clients\
    --mock.cloud.keycloak.url={{mock_keycloak_url}}:{{MOCK.CLOUD.KEYCLOAK.MOCK.PORT}}/auth  \
    --mock.cloud.keycloak.client-id={{MOCK.CLOUD.KEYCLOAK.MOCK.CLIENT_ID}} \
    --mock.cloud.keycloak.oauth-client-id={{MOCK.CLOUD.KEYCLOAK.MOCK.OAUTH_CLIENT_MOCK_ID}} \
    --mock.cloud.keycloak.oauth-client-secret={{MOCK.CLOUD.KEYCLOAK.MOCK.OAUTH_CLIENT_SECRET}} \
    --mock.cloud.hub.keycloak.realm={{MOCK.CLOUD.KEYCLOAK.HUB.REALM}} \
    --mock.cloud.hub.keycloak.clientsUrl={{meta_keycloak_url}}:{{MOCK.CLOUD.KEYCLOAK.HUB.PORT}}/auth/admin/realms/{{MOCK.CLOUD.KEYCLOAK.HUB.REALM}}/clients\
    --mock.cloud.hub.keycloak.url={{meta_keycloak_url}}:{{MOCK.CLOUD.KEYCLOAK.HUB.PORT}}/auth\
    --mock.cloud.hub.keycloak.token-url={{meta_keycloak_url}}:{{MOCK.CLOUD.KEYCLOAK.HUB.PORT}}/auth/realms/{{MOCK.CLOUD.KEYCLOAK.HUB.REALM}}/protocol/openid-connect/token\
    --mock.cloud.hub.keycloak.users-url={{meta_keycloak_url}}:{{MOCK.CLOUD.KEYCLOAK.HUB.PORT}}/auth/admin/realms/{{MOCK.CLOUD.KEYCLOAK.HUB.REALM}}/users\
    --mock.cloud.hub.keycloak.client-id={{MOCK.CLOUD.KEYCLOAK.HUB.CLIENT_ID}} \
    --mock.cloud.hub.keycloak.oauth-client-id={{MOCK.CLOUD.KEYCLOAK.HUB.OAUTH_CLIENT_MOCK_ID}} \
    --mock.cloud.hub.keycloak.oauth-client-secret={{MOCK.CLOUD.KEYCLOAK.HUB.OAUTH_CLIENT_SECRET}} \
    --mock.cloud.git-settings.username={{MOCK.CLOUD.GIT.USERNAME}} \
    --mock.cloud.git-settings.secret={{MOCK.CLOUD.GIT.SECRET}} \
    --mock.cloud.support.support-url={{MOCK.CLOUD.SUPPORT.SUPPORT_URL}} \
    --mock.cloud.support.cookbook-url={{MOCK.CLOUD.SUPPORT.COOKBOOK_URL}} \
    --mock.cloud.support.create-project-url={{MOCK.CLOUD.SUPPORT.CREATE_PROJECT_URL}} \
    --mock.cloud.support.add-transport-url={{MOCK.CLOUD.SUPPORT.TRANSPORT_URL}} \
    --mock.cloud.support.editor-info-url={{MOCK.CLOUD.SUPPORT.EDITOR_INFO_URL}} \
    --mock.cloud.support.connect-url-info={{MOCK.CLOUD.SUPPORT.CONNECT_INFO_URL}} \
    --mock.cloud.dns.zone-name={{MOCK.CLOUD.DNS.ZONE_NAME}} \
    --mock.cloud.dns.port={{MOCK.CLOUD.DNS.PORT}} \
    --mock.cloud.dns.max-domains={{MOCK.CLOUD.DNS.MAX_DOMAINS}} \
    --mock.cloud.host={{MOCK.CLOUD.HOST}} \
    --mock.cloud.artemis.host={{MOCK.CLOUD.ARTEMIS.HOST}} \
    --mock.cloud.artemis.port={{MOCK.CLOUD.ARTEMIS.PORT}} \
    --mock.cloud.artemis.login={{MOCK.CLOUD.ARTEMIS.LOGIN}} \
    --mock.cloud.artemis.password={{MOCK.CLOUD.ARTEMIS.PASSWORD}} \
    --spring.datasource.hikari.maximumPoolSize=30
    
    
    [Install]
    WantedBy=multi-user.target
    
  4. Скопируйте следующие файлы из поставки в директорию <META_MOCK_INSTALL>:

    • eureka-server-app.jar

    • sbermock-basic-proxy-server.jar

    • mock-core-app.jar

    • mock-audit-elk-app.jar

    • mock-cloud.jar

    • mock-transport-manager-app.jar

  5. Скопируйте файлы из поставки в директорию {{MOCK.TRANSPORTMANAGER.DIR}} :

    • mock-rest-cloud-app.jar

    • mock-kafka-app.jar

    • mock-esb-ibm-app.jar

  6. Выполните следующие команды:

    systemctl start eureka.service
    systemctl start basic-proxy-server.service
    systemctl start mock-audit-elk.service
    systemctl start mock-core-app.service
    systemctl start mock_transport-manager.service
    systemctl start mock-cloud.service
    

Установка mock-front#

  1. Перейдите на сервер, на котором установлен Nginx.

  2. Распакуйте содержимое файла /package/pl/mock-front-{ver}-dist.zip из дистрибутива поставки в директорию /var/mockfront/html.

Использование дополнительного СПО#

Prometheus#

В случае необходимости использования Prometheus установите и настройте его в соответствии с официальной документацией данного СПО.

Интеграция с Prometheus включена в следующих сервисах:

  • mock-cloud

  • mock-core-app

  • mock-audit-elk-app

  • mock-transport-manager-app

  • mock-rest-cloud-app

Filebeat#

В случае необходимости использования Filebeat установите и настройте его в соответствии с официальной документацией данного СПО.

Файл аудита по умолчанию располагается на сервере Mock в директории /tmp/logs/mock-audit-elk-app.log.