В этой статье:
При установке продукта «Форсайт. Мобильная платформа» автоматически устанавливаются сервисы, которые включены в комплект поставки продукта:
Вместо встроенных сервисов можно подключить внешние, корпоративные сервисы. Примеры решения задач при замене встроенных сервисов на внешние:
использование СУБД Postgres Pro. По умолчанию используется PostgreSQL;
ускорение обработки запросов к серверу мобильной платформы, если количество пользователей больше 10000. Число пользователей может менять в зависимости от постановки задачи;
использование разных операторов для резервного копирования данных и защиты информации. По умолчанию для локальных баз данных используется оператор StackGres;
повышение безопасности системы и усиление контроля над администрированием подсистем мобильной платформы за счёт хранения данных «Форсайт. Мобильная платформа» в корпоративных сервисах Minio/Ceph, Elasticsearch/Opensearch, Redis.
При выделении контура разработки, тестирования и промышленной эксплуатации могут использоваться несколько установленных экземпляров продукта «Форсайт. Мобильная платформа». Для каждого экземпляра продукта логическая область внешних сервисов должна быть уникальной.
Для обеспечения уникальности логической области внешних сервисов выберите один из способов:
подключение одного/нескольких экземпляров продукта к одному и тому же сервису за счёт указания разных наименований, номеров баз данных и префиксов в файле конфигурации. Для получения подробной информации обратитесь к подразделу «Задание параметров подключения к внешним сервисам»;
подключение нескольких экземпляров продукта к разным сервисам за счёт защиты логической области уникальным ключом. Уникальный ключ генерируется:
для баз данных СУБД PostgreSQL и Redis. Если один экземпляр продукта подключён к конкретному набору баз данных, то при попытке подключения другого экземпляра к этому набору баз данных будет выдана ошибка. Каждый экземпляр должен быть подключён к уникальному набору баз данных в рамках одного сервиса;
для сервисов Minio/Ceph, Elasticsearch/Opensearch. Если один экземпляр продукта подключён к конкретному сервису, то при попытке подключения другого экземпляра к этому сервису будет выдана ошибка.
Для получения подробной информации о генерации уникального ключа обратитесь к подразделу «Генерация уникального ключа».
Процесс задания параметров подключения к внешним сервисам отличается в зависимости от конфигурации продукта.
Для задания параметров подключения к внешним сервисам при использовании одиночной конфигурации:
Откройте на редактирование файл .env, который расположен на сервере мобильной платформы.
Задайте параметры подключения к внешним сервисам в соответствующих разделах:
Для каждой базы данных СУБД 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
Сохраните изменения в файле.
После выполнения действий будут использоваться внешние сервисы вместо встроенных компонентов.
Для задания параметров подключения к внешним сервисам при использовании кластерной конфигурации:
Откройте на редактирование файл values.yaml, который расположен в папке fmp на сервере мобильной платформы.
Задайте параметры подключения к внешним сервисам в соответствующих разделах:
Для каждой базы данных 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
Сохраните изменения в файле.
После выполнения действий будут использоваться внешние сервисы вместо встроенных компонентов.
Процесс генерации уникального ключа отличается в зависимости от конфигурации продукта.
Для генерации уникального ключа при использовании одиночной конфигурации:
Сгенерируйте уникальный ключ в переменной EXTERNAL_DB_UNIQUE_KEY в директории хранения файла .env, который расположен на сервере мобильной платформы:
EXTERNAL_DB_UNIQUE_KEY=$(echo "$(grep '^COMPOSE_PROJECT_NAME=' .env | cut -d= -f2)-$(hostname)")
Измените представление значения сгенерированного уникального ключа в переменной EXTERNAL_DB_UNIQUE_KEY:
EXTERNAL_DB_UNIQUE_KEY=$(echo "$EXTERNAL_DB_UNIQUE_KEY" | tr -cd 'a-zA-Z0-9-_' | cut -c1-40 | sed 's/^[-_+]*//')
Сохраните уникальный ключ в файле .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 символов.
Для генерации уникального ключа при использовании кластерной конфигурации:
Объявите переменные 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
Сгенерируйте уникальный ключ в переменной EXTERNAL_DB_UNIQUE_KEY:
EXTERNAL_DB_UNIQUE_KEY=$(echo "${CLUSTER_RELEASE_NAME}-$(kubectl get ns ${CLUSTER_NAMESPACE} -o=jsonpath='{.metadata.uid}')")
Измените представление значения сгенерированного уникального ключа в переменной EXTERNAL_DB_UNIQUE_KEY:
EXTERNAL_DB_UNIQUE_KEY=$(echo "$EXTERNAL_DB_UNIQUE_KEY" | tr -cd 'a-zA-Z0-9-_' | cut -c1-40 | sed 's/^[-_+]*//')
Сохраните уникальный ключ в переменную .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 символов.
См. также:
Установка и настройка продукта «Форсайт. Мобильная платформа» | Дополнительные настройки сервера мобильной платформы | Добавление альтернативных доменов