ПРО. Продуктовая фабрика: Инструкция по развертыванию

1. Требования к программному обеспечению
Для функционирования Системы необходимо следующее системное программное
обеспечение:
  • Kafka, версия от 3.6.1, рекомендуется не менее 3-х инстансов
  • Keycloak, версия от 25.0.2
  • Fluentd, версия от 1.15.3
  • Postgres, версия от 16.1
  • Zookeeper, версия от 3.9.1
  • Elastic, версия 7.16.2, рекомендуется не менее 2-х инстансов
  • Docker, версия от 24.0.5
  • ОС: любая Linux-система с версией ядра не ниже 2.24

2. Требования к техническому обеспечению
Система должна быть построена на оборудовании платформы x86 и развернута в среде контейнеризации Docker версии не ниже 24.0.5 с системой управления
контейнеризированными приложениями Docker Swarm или Kubernetes.

Общие требования к стенду для запуска на одном хосте:
  • Процессор: серверный процессор на 16 ядер
  • Память: 32 GB
  • Диск: 240 GB SSD
  • Сеть: 100 mbit/s

3. Подготовка окружения

Postgres
Пример см. в environment/docker-compose.yaml Важно: проинициализировать
необходимые БД, см. environment/catalog-init/db/database-init.sql

Keycloak
Пример см. в environment/docker-compose.yaml Пример настройки realm находится в
файле deploy/environment/catalog-init/keycloak/realm-export.json (тестовый realm называется catalog)
Данные настройки предоставлены только для ознакомления,
импортировать их на продуктивной среде категорически нельзя.
Важно:
  • Сменить пароли в соответствующих env-переменных: KC_DB_PASSWORD, KEYCLOAK_PASSWORD, KEYCLOAK_ADMIN_PASSWORD
  • Указать актуальные хосты в env-переменных KC_HOSTNAME_ADMIN_URL, KC_HOSTNAME_URL и в секции command
Зайти в административную панель:
  • Создать realm msabs
  • Realm settings -> Localization: Internalization - On, Supported locales, добавить "Русский"
  • Создать клиента product-catalog-front в realm'е msabs,
  • Проверить наличие установленных чекбоксов Standard flow, Direct access grants
  • Установить значения Valid redirect URIs. Для dev/test среды допустимо
  • использовать значение *
  • Valid post logout redirect URIs. Для dev/test среды допустимо использовать значение +
  • Web origins. Для dev/test среды допустимо использовать значение *
  • Front channel logout: off
  • Создать клиента product-catalog-back в realm'е msabs
  • Client authentication - On
  • Проверить наличие установленных чекбоксов Standard flow, Direct access grants,
Service account roles:
  • Установить значения Valid redirect URIs. Для dev/test среды допустимо использовать значение *
  • Valid post logout redirect URIs. Для dev/test среды допустимо использовать значение +
  • Web origins. Для dev/test среды допустимо использовать значение *
  • Front channel logout: off
  • Проверить на вкладке Credentials: Client Authenticator д.б. Client Id and Secret
  • На вкладке Roles создать следующие роли:
  • Audit
  • DictionaryManager
  • FormulaManager
  • LibraryManager
  • ProductClassManager
  • ProductManager
  • RevisionControler
  • RevisionManager
  • Viewer
На вкладе Service Account Roles проверить наличие следующих ролей, в случае отсутствия добавить (Assign role, filter by client):
  • realm-management view-users
  • uma_authorization (realm roles)
  • product-catalog-back ProductManager
  • product-catalog-back Audit
  • tariff-cb-service Deploy (после создания клиента tariff-cb-service)
  • Создать клиента tariff-cb-service в realm'е msabs,
  • Client authentication - On
  • Проверить наличие установленных чекбоксов Standard flow, Direct access grants,
Service accounts roles:
  • Установить значения Valid redirect URIs. Для dev/test среды допустимо использовать значение *
  • Valid post logout redirect URIs. Для dev/test среды допустимо использовать значение +
  • Web origins. Для dev/test среды допустимо использовать значение *
  • Front channel logout: off
  • Проверить на вкладке Credentials: Client Authenticator д.б. Client Id and Secret
  • На вкладке Roles создать следующие роли:
  • Deploy
  • На вкладе Service Account Roles проверить наличие следующих ролей, в случае отсутствия добавить (Assign role, filter by client):
  • default-roles-catalog
  • product-catalog-back ProductManager
Не забыть добавление клиенту product-catalog-back в Service Account Roles роли tariff-cb-
service Deploy
Создать группу ProductCatalogAdmin на вкладке Role Mapping, добавить следующие роли:
  • product-catalog-back FormulaManager
  • product-catalog-back ProductClassManager
  • product-catalog-back RevisionControler
  • product-catalog-back RevisionManagero product-catalog-back ProductManager
  • product-catalog-back DictionaryManager
  • product-catalog-back LibraryManager
  • product-catalog-back Audit
  • Создать пользователя (Create user), имя, email, установить сразу галку email verified
  • Задать пароль (Просмотр профиля, credentials, set password), temporary: off
  • На вкладке Groups добавить группу ProductCatalogAdmin
zookeeper
Пример см. в environment/docker-compose.yaml

kafka
Пример см. в environment/docker-compose.yaml Важно: поменять хост в env-переменной
KAFKA_CFG_ADVERTISED_LISTENERS

elasticsearch
Пример см. в environment/docker-compose.yaml
Важно:
  • Пока устанавливаем указанную версию, на более свежей работоспособность каталога еще не проверена
  • Необходимо поменять пароль в env-переменной ELASTIC_PASSWORD
Рекомендуется после запуска установить следующую конфигурацию шардов:
curl -X PUT http://elastic_host:9200/_cluster/settings -H "Content-Type: application/json" -d '{
"persistent": { "cluster.max_shards_per_node": "3000" } }'

fluentd
Пример см. в environment/docker-compose.yaml Сборка на основе 1.15
Важно: пока устанавливаем указанную версию, на более свежей работоспособность каталога еще не проверена

4. Развертывание Back-end

catalog-metadata
Пример см. в catalog/docker-compose.yaml
Важно:
  • KEYCLOAK_RESOURCE - product-catalog-back
  • KEYCLOAK_REALM - msabs
  • KEYCLOAK_USER_ID - Client Secret от клиента product-catalog-back
  • KEYCLOAK_AUTH_URL - указать host keycloak
  • CATALOG_DB_HOST - хост postgres
  • CATALOG_DB_PORT - порт postgres
  • CATALOG_DATA_DB_NAME - имя бд, catalog
  • CATALOG_DATA_DB_USER - имя пользователя бд, catalog
  • CATALOG_DATA_DB_PASSWORD - пароль для пользователя catalog
  • CATALOG_DOC_URL - url сервиса (внешний, https) для javadoc
  • FLUENTD_HOST - хост fluentd
  • FLUENTD_ENABLED - true
  • KEYCLOAK_CLIENT_CREDENTIALS - Client Secret от клиента product-catalog-back
  • KAFKA_HOST - хост, где развернута kafka
  • KAFKA_PORT - порт kafka
  • SPRING_PROFILES_ACTIVE - опционально, профили запуска, необходимо указать значение production для прод среды и поддержки SASL для Kafka
  • KAFKA_USERNAME - имя пользователя для kafka, необходимо если включе профиль production в SPRING_PROFILES_ACTIVE
  • KAFKA_PASSWORD - пароль для kafka, необходимо если включен профиль production в SPRING_PROFILES_ACTIVE
catalog-data
Пример см. в catalog/docker-compose.yaml
Важно:
  • KEYCLOAK_RESOURCE - product-catalog-back KEYCLOAK_REALM - msabs
  • KEYCLOAK_USER_ID - Client Secret от клиента product-catalog-back
  • KEYCLOAK_AUTH_URL - указать host keycloak
  • CATALOG_DB_HOST - хост postgres
  • CATALOG_DB_PORT - порт postgres
  • CATALOG_DATA_DB_NAME - имя бд, catalog
  • CATALOG_DATA_DB_USER - имя пользователя бд, catalog
  • CATALOG_DATA_DB_PASSWORD - пароль для пользователя catalog
  • CATALOG_DOC_URL - url сервиса (внешний, https) для javadoc
  • FLUENTD_HOST - хост fluentd
  • FLUENTD_ENABLED - true
  • KEYCLOAK_CLIENT_CREDENTIALS - Client Secret от клиента product-catalog-back
  • KAFKA_HOST - хост, где развернута kafka
  • KAFKA_PORT - порт kafka
  • ELASTIC_SEARCH_HOST - хост elasticsearch
  • ELASTIC_SEARCH_PORT - порт elasticsearch
  • SPRING_PROFILES_ACTIVE - опционально, профили запуска, необходимо указать значение production для прод среды и поддержки SASL для Kafka
  • KAFKA_USERNAME - имя пользователя для kafka, необходимо если включен профиль production в SPRING_PROFILES_ACTIVE
  • KAFKA_PASSWORD - пароль для kafka, необходимо если включен профиль production в SPRING_PROFILES_ACTIVE
catalog-notifications
Пример см. в catalog/docker-compose.yaml
Важно:
  • KEYCLOAK_RESOURCE - product-catalog-back
  • KEYCLOAK_REALM - msabs
  • KEYCLOAK_USER_ID - Client Secret от клиента product-catalog-back
  • KEYCLOAK_CLIENT_CREDENTIALS - Client Secret от клиента product-catalog-back
  • KEYCLOAK_AUTH_URL - указать host keycloak
  • CATALOG_DB_HOST - хост postgres
  • CATALOG_DB_PORT - порт postgres
  • CATALOG_NOTIFICATIONS_DB_NAME - notifications
  • CATALOG_NOTIFICATIONS_DB_USER - пользователь db notifications
  • CATALOG_NOTIFICATIONS_DB_PASSWORD - пароль для пользователя db notifications
  • CATALOG_DOC_URL - url сервиса (внешний, https) для javadoc
  • FLUENTD_HOST - хост fluentd
  • FLUENTD_ENABLED - true
  • KAFKA_HOST - хост, где развернута kafka
  • KAFKA_PORT - порт kafka
  • SPRING_PROFILES_ACTIVE - опционально, профили запуска, необходимо указать значение production для прод среды и поддержки SASL для Kafka
  • KAFKA_USERNAME - имя пользователя для kafka, необходимо если включен профиль production в SPRING_PROFILES_ACTIVE
  • KAFKA_PASSWORD - пароль для kafka, необходимо если включен профиль production в SPRING_PROFILES_ACTIVE
catalog-lifecycle
Пример см. в catalog/docker-compose.yaml
Важно:
  • KEYCLOAK_RESOURCE - product-catalog-back
  • KEYCLOAK_REALM - msabs
  • KEYCLOAK_USER_ID - Client Secret от клиента product-catalog-back
  • KEYCLOAK_AUTH_URL - указать host keycloak
  • CATALOG_DB_HOST - хост postgres
  • CATALOG_DB_PORT - порт postgres
  • CATALOG_DATA_DB_NAME - имя бд, catalog
  • CATALOG_DATA_DB_USER - имя пользователя бд, catalog CATALOG_DATA_DB_PASSWORD - пароль для пользователя catalog
  • CATALOG_DOC_URL - url сервиса (внешний, https) для javadoc
  • FLUENTD_HOST - хост fluentd
  • FLUENTD_ENABLED - true
  • ELASTIC_SEARCH_HOST - хост elasticsearch
  • ELASTIC_SEARCH_PORT - порт elasticsearch
  • KEYCLOAK_CLIENT_CREDENTIALS - Client Secret от клиента product-catalog-back
  • CATALOG_DATA_URL - url сервиса catalog-data, http://catalog-data:8090/
  • CATALOG_NOTIFICATIONS_URL - url сервиса catalog-notifications, http://catalog-notifications:8084/
  • CASHBACK_TARIFF_DEPLOY_URL=http://:/deploy - URL + route core-cashback-tariff-service, используется для внедрения тарифов cashback
  • SPRING_PROFILES_ACTIVE - опционально, профили запуска, необходимо указать значение production для прод среды и поддержки SASL для Kafka
  • KAFKA_USERNAME - имя пользователя для kafka, необходимо если включен профиль production в SPRING_PROFILES_ACTIVE
  • KAFKA_PASSWORD - пароль для kafka, необходимо если включен профиль production в SPRING_PROFILES_ACTIVE
catalog-utils
Пример см. в catalog/docker-compose.yaml Важно:
  • KEYCLOAK_RESOURCE - product-catalog-back
  • KEYCLOAK_REALM - msabs
  • KEYCLOAK_USER_ID - Client Secret от клиента product-catalog-back
  • KEYCLOAK_AUTH_URL - указать host keycloak
  • CATALOG_DOC_URL - url сервиса (внешний, https) для javadoc
  • FLUENTD_HOST - хост fluentd
  • KEYCLOAK_CLIENT_CREDENTIALS - Client Secret от клиента product-catalog-back
  • CATALOG_UTILS_BASE_URL - url сервиса catalog-utils, http://catalog-utils:8091/
  • RULES_ENGINE_URL - url сервиса rules-engine, http://rules-engine:8071
  • SPRING_PROFILES_ACTIVE - опционально, профили запуска, необходимо указать значение production для прод среды и поддержки SASL для Kafka
  • KAFKA_USERNAME - имя пользователя для kafka, необходимо если включен профиль production в SPRING_PROFILES_ACTIVE
  • KAFKA_PASSWORD - пароль для kafka, необходимо если включен профиль production в SPRING_PROFILES_ACTIVE

5. Развертывание Front-end

catalog-ui
Пример см. в catalog/docker-compose.yaml
добавить volume ./conf/.env_bspb:/usr/share/nginx/html/.env с заменой localhost на хост продуктового каталога

Gateway
Пример см. в gateway/docker-compose.yaml Важно:
  • Предварительно сгенерировать ключи и сертификаты для защищенного соединения и указать их в gateway/docker-compose.yaml
  • Установить нужные хосты в gateway.template (заменить localhost на нужный хост)

6. Настройка конфигурации

Настройка кастомных имен топиков Kafka и аутентификация
По сервисам прод каталога, в формате ENV:значение по умолчанию, одинаковые энвы должны иметь одинаковые значения.

catalog-metadata:
  • KAFKA_TOPIC_METADATA:metadataQueue
  • KAFKA_TOPIC_CONFIGURATIONS:configurationsQueue
  • KAFKA_TOPIC_DICTIONARIES:dictionariesQueue
  • KAFKA_TOPIC_REVISION_STATUS_CHANGE:revisionStatusChanges
  • KAFKA_DATA_INPUT_TOPIC:dataInputQueue
  • catalog-data:
  • KAFKA_TOPIC_METADATA:metadataQueue
  • KAFKA_DATA_TOPIC:dataQueue
  • KAFKA_DATA_INPUT_TOPIC:dataInputQueue
  • KAFKA_RECORD_INPUT_TOPIC:recordInputQueue
  • KAFKA_DATA_ERROR_TOPIC:dataErrorQueue
  • KAFKA_RECORD_ERROR_TOPIC:recordErrorQueue
catalog-lifecycle:
  • KAFKA_TOPIC_METADATA:metadataQueue
  • KAFKA_DATA_TOPIC:dataQueue
catalog-notifications:
  • KAFKA_TOPIC_REVISION_STATUS_CHANGE:revisionStatusChanges

Для запуска в тест/прод среде необходимо передать следующие Java options:
  • Dspring.cloud.stream.kafka.binder.configuration.security.protocol=SASL_SSL
  • Dspring.cloud.stream.kafka.binder.configuration.sasl.mechanism=SCRAM-SHA-512
  • Dspring.cloud.stream.kafka.binder.configuration.sasl.jaas.config="org.apache.kafka.common.s
  • ecurity.plain.PlainLoginModule required username="USRNAME" password="PASSWORD";"

Итоги
После всех проведенных действий должен быть доступен фронт на http:///ui и на него можно залогиниться созданным ранее пользователем