В этой статье:

Задание параметров подключения к внешним сервисам

Одиночная конфигурация

Кластерная конфигурация

Генерация уникального ключа

Одиночная конфигурация

Кластерная конфигурация

Подключение к внешним сервисам

При установке продукта «Форсайт. Мобильная платформа» автоматически устанавливаются сервисы, которые включены в комплект поставки продукта:

PostgreSQL

MinIO

Elasticsearch

Redis

Вместо встроенных сервисов можно подключить внешние, корпоративные сервисы. Примеры решения задач при замене встроенных сервисов на внешние:

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

Для обеспечения уникальности логической области внешних сервисов выберите один из способов:

Для получения подробной информации о генерации уникального ключа обратитесь к подразделу «Генерация уникального ключа».

Задание параметров подключения к внешним сервисам

Процесс задания параметров подключения к внешним сервисам отличается в зависимости от конфигурации продукта.

Одиночная конфигурация

Для задания параметров подключения к внешним сервисам при использовании одиночной конфигурации:

  1. Откройте на редактирование файл .env, который расположен на сервере мобильной платформы.

  2. Задайте параметры подключения к внешним сервисам в соответствующих разделах:

Для каждой базы данных СУБД PostgreSQL задайте параметры в разделе postgres:

POSTGRES_MAIN_IS_EXTERNAL=true
POSTGRES_MAIN_HOST=<хост>
POSTGRES_MAIN_PORT=<порт>
POSTGRES_MAIN_NAME=<наименование базы данных maindb>
POSTGRES_MAIN_USERNAME=<имя пользователя>
POSTGRES_MAIN_PASSWORD=<пароль>

POSTGRES_CACHE_IS_EXTERNAL=true
POSTGRES_CACHE_HOST=<хост>
POSTGRES_CACHE_PORT=<порт>
POSTGRES_CACHE_NAME=<наименование базы данных cachedb>
POSTGRES_CACHE_USERNAME=<имя пользователя>
POSTGRES_CACHE_PASSWORD=<пароль>

POSTGRES_LOCAL_IS_EXTERNAL=true
POSTGRES_LOCAL_HOST=<хост>
POSTGRES_LOCAL_PORT=<порт>
POSTGRES_LOCAL_NAME=<наименование базы данных localdb>
POSTGRES_LOCAL_USERNAME=<имя пользователя>
POSTGRES_LOCAL_PASSWORD=<пароль>

Для подключения нескольких экземпляров продукта к одной и той же СУБД PostgreSQL укажите наименования баз данных, которые не используются в других экземплярах, в параметрах POSTGRES_MAIN_NAME, POSTGRES_CACHE_NAME и POSTGRES_LOCAL_NAME, например:

POSTGRES_MAIN_NAME=pg_main_name1
POSTGRES_CACHE_NAME=pg_cache_name1
POSTGRES_LOCAL_NAME=pg_local_name1

Для локального файлового хранилища MinIO/Ceph задайте параметры в разделе s3:

S3_SERVICE_IS_EXTERNAL=true
S3_SERVICE_IS_SSL=false
S3_SERVICE_HOST=<хост>
S3_SERVICE_PORT=<порт>
S3_SERVICE_ACCESS_KEY=<ключ доступа (идентификатор пользователя)>
S3_SERVICE_SECRET_KEY=<секретный ключ (пароль)>

Для подключения нескольких экземпляров продукта к одному и тому же сервису MinIO/Ceph укажите префикс для наименований разделов, которые не используется в других экземплярах, в параметре S3_SERVICE_BUCKET_PREFIX, например:

S3_SERVICE_BUCKET_PREFIX=fmp-instance1-prefix

Префикс можно указать вручную или сгенерировать автоматически, аналогично генерации уникального ключа. При указании префикса вручную убедитесь, что соблюдены требования: префикс может содержать латинские буквы (a-z, A-Z), цифры 0-9, дефисы и иметь длину не более 40 символов.

Для системы логирования Elasticsearch задайте параметры в разделе log_service, при подключении OpenSearch измените значение параметра LOG_SERVICE_USE_OPENSEARCH на true:

LOG_SERVICE_IS_EXTERNAL=true
LOG_SERVICE_USE_OPENSEARCH=false
LOG_SERVICE_IS_SSL=false
LOG_SERVICE_HOST=<хост>
LOG_SERVICE_PORT=<порт>
LOG_SERVICE_USERNAME=<имя пользователя>
LOG_SERVICE_PASSWORD=<пароль>

Для подключения нескольких экземпляров продукта к одному и тому же сервису Elasticsearch/OpenSearch укажите префикс для индексов, который не используется в других экземплярах, в параметре LOG_SERVICE_INDEX_PREFIX, например:

LOG_SERVICE_INDEX_PREFIX=fmp-instance1-prefix

Префикс можно указать вручную или сгенерировать автоматически, аналогично генерации уникального ключа. При указании префикса вручную убедитесь, что соблюдены требования: префикс может содержать латинские буквы (a-z, A-Z), цифры 0-9, дефисы и иметь длину не более 40 символов.

Для сервиса Redis задайте параметры в разделе redis:

REDIS_IS_EXTERNAL=true
REDIS_HOST=<хост>
REDIS_PORT=<порт>
REDIS_PASSWORD=<пароль>
REDIS_SENTINEL_ENABLED=false

Для подключения нескольких экземпляров продукта к одному и тому же сервису Redis дополнительно укажите номера баз данных, которые не используются в других экземплярах, в параметрах REDIS_DEFAULT_DB, REDIS_LOG_DB, REDIS_USER_THROTTLES_DB и REDIS_RESOURCE_CACHE_DB, например:

REDIS_DEFAULT_DB=0
REDIS_LOG_DB=1
REDIS_USER_THROTTLES_DB=2
REDIS_RESOURCE_CACHE_DB=3

  1. Сохраните изменения в файле.

После выполнения действий будут использоваться внешние сервисы вместо встроенных компонентов.

Кластерная конфигурация

Для задания параметров подключения к внешним сервисам при использовании кластерной конфигурации:

  1. Откройте на редактирование файл values.yaml, который расположен в папке fmp на сервере мобильной платформы.

  2. Задайте параметры подключения к внешним сервисам в соответствующих разделах:

Для каждой базы данных PostgreSQL задайте параметры в разделе externalPostgres:

externalPostgres:
  maindb:
    useInternal: false
    host: <хост>
    port: <порт>
    database: "<наименование базы данных maindb>"
    username: "<имя пользователя>"
    password: "<пароль>"
  cachedb:
    useInternal: false
    host: <хост>
    port: <порт>
    database: "<наименование базы данных cachedb>"
    username: "<имя пользователя>"
    password: "<пароль>"
localdb:
    useInternal: false
    host: <хост>
    port: <порт>
    database: "<наименование базы данных localdb>"
    username: "<имя пользователя>"
    password: "<пароль>"

Примечание. При подключении к внешним базам данных PostgreSQL соответствующие StackGres-ресурсы не создаются.

Для подключения нескольких экземпляров продукта к одной и той же СУБД PostgreSQL укажите наименования баз данных, которые не используются в других экземплярах, в параметре database, например:

externalPostgres:
  maindb:
    database: "pg_main_name1"
  cachedb:
    database: "pg_cache_name1"
  localdb:
    database: "pg_local_name1"

Для локального файлового хранилища MinIO/Ceph задайте параметры в разделе externalS3Service:

externalS3Service:
  useInternal: false
  host: <хост>
  port: <порт>
  accessKeyId: "<ключ доступа (идентификатор пользователя)>"
  secretKey: "<секретный ключ (пароль)>"
  isSSL: false

Для подключения нескольких экземпляров продукта к одному и тому же сервису MinIO/Ceph укажите префикс для наименований разделов, которые не используется в других экземплярах, в параметре bucketPrefix, например:

externalS3Service:
  bucketPrefix: fmp-instance1-prefix

Префикс можно указать вручную или сгенерировать автоматически, аналогично генерации уникального ключа. При указании префикса вручную убедитесь, что соблюдены требования: префикс может содержать латинские буквы (a-z, A-Z), цифры 0-9, дефисы и иметь длину не более 40 символов.

Для системы логирования Elasticsearch задайте параметры в разделе externalLogService, при подключении OpenSearch измените значение параметра useOpensearch на true:

externalLogService:
  useInternal: false
  useOpensearch: false
  host: <хост>
  port: <порт>
  username: "<имя пользователя>"
  password: "<пароль>"
  isSSL: false
  userLogAge: "30d" # значение задаётся в днях
  serviceLogAge: "30d" # значение задаётся в днях

Для подключения нескольких экземпляров продукта к одному и тому же сервису Elasticsearch/OpenSearch укажите префикс для индексов, который не используется в других экземплярах, в параметре indexPrefix, например:

externalLogService:
  indexPrefix: fmp-instance1-prefix

Префикс можно указать вручную или сгенерировать автоматически, аналогично генерации уникального ключа. При указании префикса вручную убедитесь, что соблюдены требования: префикс может содержать латинские буквы (a-z, A-Z), цифры 0-9, дефисы и иметь длину не более 40 символов.

Для сервиса Redis задайте параметры в разделе externalRedis:

externalRedis:
  useInternal: false
  host: redis-external-host.com
  port: 6379
  password: "red-pass"
  sentinel:
    enabled: false
    masterSet: "mymaster"

Примечание. Убедитесь, что в Redis доступна команда FLUSHDB.

Для подключения нескольких экземпляров продукта к одному и тому же сервису Redis дополнительно укажите номера баз данных, которые не используются в других экземплярах, в параметрах redisDefaultDB, redisLogDB, redisUserThrottlesDB и redisResourceCacheDB, например:

externalRedis:
  redisDefaultDB: 0
  redisLogDB: 1
  redisUserThrottlesDB: 2
  redisResourceCacheDB: 3

  1. Сохраните изменения в файле.

После выполнения действий будут использоваться внешние сервисы вместо встроенных компонентов.

Генерация уникального ключа

Процесс генерации уникального ключа отличается в зависимости от конфигурации продукта.

Одиночная конфигурация

Для генерации уникального ключа при использовании одиночной конфигурации:

  1. Сгенерируйте уникальный ключ в переменной EXTERNAL_DB_UNIQUE_KEY в директории хранения файла .env, который расположен на сервере мобильной платформы:

EXTERNAL_DB_UNIQUE_KEY=$(echo "$(grep '^COMPOSE_PROJECT_NAME=' .env | cut -d= -f2)-$(hostname)")

  1. Измените представление значения сгенерированного уникального ключа в переменной EXTERNAL_DB_UNIQUE_KEY:

EXTERNAL_DB_UNIQUE_KEY=$(echo "$EXTERNAL_DB_UNIQUE_KEY" | tr -cd 'a-zA-Z0-9-_' | cut -c1-40 | sed 's/^[-_+]*//')

  1. Сохраните уникальный ключ в файле .env:

sed -i "s/^EXTERNAL_DB_UNIQUE_KEY=.*/EXTERNAL_DB_UNIQUE_KEY=${EXTERNAL_DB_UNIQUE_KEY}/" .env

После выполнения действий в файле конфигурации .env будет содержаться переменная EXTERNAL_DB_UNIQUE_KEY со значением сгенерированного уникального ключа. Если ключ получился не уникальным среди контуров системы, то замените его вручную. Ключ может содержать латинские буквы (a-z, A-Z), цифры 0-9, дефисы и иметь длину не более 40 символов.

Кластерная конфигурация

Для генерации уникального ключа при использовании кластерной конфигурации:

  1. Объявите переменные CLUSTER_RELEASE_NAME, CLUSTER_NAMESPACE на главном узле кластера:

CLUSTER_RELEASE_NAME=fmp
CLUSTER_NAMESPACE=fmp

Данные значения указывались при установке продукта «Форсайт. Мобильная платформа» на кластере в команде:

helm install fmp ./fmp/chart -n ${CLUSTER_NAMESPACE} -f ./fmp/values.production.yaml --set django.deployment.image.registry=<IP-адрес рабочего узла>:5000/${CLUSTER_NAMESPACE} --set global.imageRegistry=<IP-адрес рабочего узла>:5000/${CLUSTER_NAMESPACE} --set nginx.ingress.hostname=<хост сервера мобильной платформы> --set fluentd.enabled=true --timeout 30m0s

  1. Сгенерируйте уникальный ключ в переменной EXTERNAL_DB_UNIQUE_KEY:

EXTERNAL_DB_UNIQUE_KEY=$(echo "${CLUSTER_RELEASE_NAME}-$(kubectl get ns ${CLUSTER_NAMESPACE} -o=jsonpath='{.metadata.uid}')")

  1. Измените представление значения сгенерированного уникального ключа в переменной EXTERNAL_DB_UNIQUE_KEY:

EXTERNAL_DB_UNIQUE_KEY=$(echo "$EXTERNAL_DB_UNIQUE_KEY" | tr -cd 'a-zA-Z0-9-_' | cut -c1-40 | sed 's/^[-_+]*//')

  1. Сохраните уникальный ключ в переменную .global.externalDBUniqueKey файла .values.production.yaml:

yq e -i '.global.externalDBUniqueKey = "'${EXTERNAL_DB_UNIQUE_KEY}'"' fmp/values.production.yaml

После выполнения действий в файле .values.production.yaml будет содержаться переменная .global.externalDBUniqueKey со значением сгенерированного уникального ключа. Если ключ получился не уникальным среди контуров системы, то замените его вручную. Ключ может содержать латинские буквы (a-z, A-Z), цифры 0-9, дефисы и иметь длину не более 40 символов.

См. также:

Установка и настройка продукта «Форсайт. Мобильная платформа» | Дополнительные настройки сервера мобильной платформы | Добавление альтернативных доменов