Установка 2ГИС Про
Важное примечание
Все пароли и ключи в этом разделе приведены в иллюстративных целях.
При реальной установке рекомендуется использовать более сложные и надёжные пароли.
1. Перед установкой
-
Ознакомьтесь с основной информацией:
-
Выполните предварительные шаги:
-
Соберите необходимые данные, заданные или полученные на предыдущих шагах:
Объект Пример значения Как получить значение Endpoint реестра Docker для хранения образов сервисов docker.registry.example.comСм. Получение артефактов установки Endpoint S3-совместимого хранилища артефактов установки artifacts.example.comСм. Получение артефактов установки Имя бакета для хранения артефактов onpremise-artifactsСм. Получение артефактов установки Идентификатор ключа для доступа к артефактам установки AKIAIOSFODNN7EXAMPLEСм. Получение артефактов установки Секрет ключа для доступа к артефактам установки wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEYСм. Получение артефактов установки Endpoint сервиса лицензий https://licenseСм. Установка сервиса лицензий Endpoint MapGL JS API http://mapgl-js-apiСм. Установка API для работы с картами Endpoint Catalog APIs http://catalog-apiСм. Установка API для работы с поиском Endpoint API навигации http://navi-frontСм. Установка API для работы с навигацией API-ключи MAPGL_KEY
CATALOG_KEY
NAVI_KEYСм. Установка сервиса API-ключей -
Убедитесь, что удовлетворены требования к ресурсам, приведенные в Helm-чартах:
Подробнее о том, как это сделать, см. в документе Системные требования.
Примечание
Содержание Helm-чартов, описанное в данном разделе, актуально для последней версии 2ГИС Про (см. Релизы 2ГИС Про). Чтобы изучить параметры для предыдущих версий, откройте нужный values.yaml в GitHub и в списке тегов слева выберите тег
Pro-<версия>. -
Определите доменные имена для сервиса 2ГИС Про. Например:
- Доменное имя для API-бэкенда:
pro-api.example.com - Доменное имя для фронтенда:
pro-ui.example.com
- Доменное имя для API-бэкенда:
2. Подготовьте инфраструктуру
Примечание
Если вместо PostgreSQL и Apache Kafka вы используете аналоги из реестра Минцифры, для инструкций по их настройке обратитесь к официальной документации этих сервисов.
Настройте PostgreSQL
-
Разместите кластер PostgreSQL с доменным именем
pro-postgresql.storage.example.localв приватной сети. Предполагается, что кластер работает на стандартном порту5432. -
Подключитесь к кластеру от имени суперпользователя (обычно это
postgres). -
Создайте пользователя баз данных и установите пароль для него:
create user dbuser_pro password ''; -
Создайте базы данных, принадлежащие этому пользователю:
create database onpremise_pro owner dbuser_pro;
create database onpremise_pro_tasks owner dbuser_pro;
Настройте S3-хранилище
-
Разместите S3-совместимое хранилище с доменным именем
pro-s3.storage.example.localв приватной сети. Предполагается, что хранилище работает на стандартном порту80. -
Создайте ключи для подключения к сервису. Запомните реквизиты.
Пример:
- Ключ доступа:
AKIAIOSFODNN7EXAMPLE. - Секретный ключ:
wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY.
- Ключ доступа:
-
Определите названия бакетов, которые будут использоваться для сервиса.
Пример:
- Бакет с наборами данных, агрегатами и фильтрами (
assetsDataBucket):assets. - Бакет с наборами данных, агрегатами и фильтрами, созданными пользователем (
userAssetsDataBucket):user_assets. - Бакет с подготовленными данными слоя (
layerDataBucket):layer_data. - Бакет для хранения снапшотов (
snapshotBucket):snapshots. - Бакет для хранения статичных ресурсов (
resourcesBucket):resources.
- Бакет с наборами данных, агрегатами и фильтрами (
Настройте Elasticsearch
-
Разместите кластер Elasticsearch с доменным именем
pro-elastic.storage.example.localв приватной сети. Предполагается, что кластер работает на порту9200. -
Создайте пользователя для подключения к сервису. Запомните его реквизиты.
Пример:
- Имя пользователя:
elasticsearch. - Пароль:
elasticsearch_password.
- Имя пользователя:
Настройте Apache Kafka
-
Разместите кластер Apache Kafka с доменным именем
pro-kafka.storage.example.localв приватной сети. Предполагается, что кластер работает на стандартном порту9092. -
Создайте пользователя для подключения к сервису. Запомните его реквизиты.
Пример:
- Имя пользователя:
kafka. - Пароль:
kafka_password.
- Имя пользователя:
-
(Рекомендуется) Настройте топики Apache Kafka следующим образом:
Имя топика Передаваемые данные Рекомендуемые настройки kafka.importTasksTopic.nameЗадачи на импорт пользовательских наборов данных - Максимальный размер сообщения — 5 Мб (
max.message.bytes: 5242880); - Период хранения файла лога — 3 дня (
retention.ms: 259200000); - Формат сжатия — Gzip (
compression.type: gzip).
kafka.assetDataTopic.nameОбъекты пользовательских наборов данных - Максимальный размер сообщения — 5 Мб (
max.message.bytes: 5242880); - Период хранения файла лога — 5 дней (
retention.ms: 432000000); - Формат сжатия — Gzip (
compression.type: gzip).
kafka.permissionsTopic.nameСообщения об изменении прав доступа - Максимальный размер сообщения — 5 Мб (
max.message.bytes: 5242880); - Период хранения файла лога — 1 день (
retention.ms: 86400000); - Формат сжатия — Gzip (
compression.type: gzip).
kafka.eventsTopic.nameРазличные события - Максимальный размер сообщения — 20 Мб (
max.message.bytes: 20000000); - Период хранения файла лога — 1 день (
retention.ms: 86400000); - Максимальный размер данных для хранения — 500 Мб (
retention.bytes: 524288000); - Формат сжатия — Gzip (
compression.type: gzip).
Полное описание настроек см. в документации Apache Kafka.
- Максимальный размер сообщения — 5 Мб (
3. Установите 2ГИС Про
Установите Pro API
-
Создайте конфигурационный файл для Helm. Подробное описание доступных параметров см. здесь.
Пример файла уже заполнен всеми необходимыми данными, собранными на предыдущих этапах.
values-pro-api.yamldgctlDockerRegistry: docker.registry.example.com
dgctlStorage:
host: artifacts.example.com
secure: true
bucket: onpremise-artifacts
accessKey: AKIAIOSFODNN7EXAMPLE
secretKey: wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY
manifest: manifests/pro/1640661259.json
region: ''
disablePayloadSigning: false
api:
ingress:
enabled: true
className: nginx
annotations:
nginx.ingress.kubernetes.io/proxy-body-size: 100m
nginx.ingress.kubernetes.io/proxy-connect-timeout: '120'
nginx.ingress.kubernetes.io/proxy-read-timeout: '120'
nginx.ingress.kubernetes.io/proxy-send-timeout: '120'
nginx.ingress.kubernetes.io/enable-cors: 'true'
nginx.ingress.kubernetes.io/cors-allow-credentials: 'true'
nginx.ingress.kubernetes.io/cors-allow-methods: 'GET, PUT, POST, DELETE, PATCH, OPTIONS'
nginx.ingress.kubernetes.io/cors-allow-headers: 'DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization,x-share-token,x-auth-token,x-brand,pragma'
nginx.ingress.kubernetes.io/proxy-buffer-size: 256k
nginx.ingress.kubernetes.io/proxy-buffering: 'on'
nginx.ingress.kubernetes.io/proxy-buffers-number: '4'
hosts:
- host: pro-api.example.com
paths:
- path: /
pathType: Prefix
tls: []
# - hosts:
# - pro-api.example.com
# secretName: secret.tls
pod:
imagePullSecrets: [onpremise-registry-creds]
resources:
requests:
cpu: 400m
memory: 256M
limits:
cpu: 1
memory: 1024M
settings:
licenseKey: ''
corsOrigins: ''
auth:
url: https://keycloak.example.com
apiKey: ''
type: openid10
userInfoEndpoint: realms/Pro/protocol/openid-connect/userinfo
autoRegisterUsers: true
shareKeys:
- ''
permissions:
settings:
auth:
apiKey: ''
# Только для новых пользователей
default_permissions:
open_pro_ui: true
assets: ['*']
territories: ['*']
add_user_assets:
allow: true
quantity: 1000
file_size: 100
isochrones: 1000
license:
url: 'https://license.svc'
s3:
assetsDataBucket: 'pro-assets'
userAssetsDataBucket: 'pro-userassets'
layerDataBucket: 'pro-layers'
snapshotBucket: 'pro-snapshot'
resourcesBucket: 'pro-resources'
postgres:
api:
rw:
host: 'pro-postgresql.storage.example.local'
port: 5432
name: 'onpremise_pro'
username: 'dbuser_pro'
password: ''
ro: {}
tasks:
rw:
host: 'pro-postgresql.storage.example.local'
port: 5432
name: 'onpremise_pro_tasks'
username: 'dbuser_pro'
password: ''
ro: {}
permissions:
rw:
host: 'pro-postgresql.storage.example.local'
port: 5432
name: 'onpremise_pro'
username: 'dbuser_pro'
password: ''
ro: {}
kafka:
bootstrapServers: 'kafka:9092'
securityProtocol: SaslPlaintext
createTopics: true
sasl:
mechanism: PLAIN
username: kafka-user
password: kafka-password
assetTopicsReaderGroupId: pro.asset.gr
importTasksTopic:
name: pro.tasks
readerGroupId: pro.import.gr
assetDataTopic:
name: pro.assetdata
permissionsTopic:
name: pro.permissions
readerGroupId: pro.permissions.gr
eventsTopic:
name: pro.events
readerGroupId: pro.events.gr
refreshAssetsIntervalMinutes: 60
elastic:
username: ''
password: ''
secure: false
nodes:
- port: 9200
host: pro-elastic.storage.example.local
redis:
host: 'redis.svc'
port: '6379'
catalog:
url: 'http://catalog-api.svc'
key: ''
navi:
url: 'http://navi-front.svc'
key: ''
search:
url: 'http://search-api.svc'
assetImporter:
appName: asset-importer
repository: 2gis-on-premise/pro-importer
schedule: 0 18 * * *
backoffLimit: 2
successfulJobsHistoryLimit: 3
failedJobsHistoryLimit: 3
nodeSelector: {}
settings:
maxParallelJobs: 4
startOnDeploy: trueГде:
-
dgctlDockerRegistry: endpoint вашего реестра Docker, в котором находятся образы сервисов программного комплекса 2ГИС в форматеHOST:PORT. -
dgctlStorage: настройки доступа к хранилищу артефактов установки.host: endpoint S3-совместимого хранилища артефактов установки в форматеHOST:PORT.secure: использовать ли HTTPS для работы с S3-совместимым хранилищем. Значение по умолчанию:false.bucket: имя бакета S3.accessKey: идентификатор ключа для доступа к бакету S3.secretKey: секретный ключ для доступа к бакету S3.manifest: путь до файла с манифестом в форматеmanifests/pro/1640661259.json. Этот файл содержит в себе описания фрагментов данных, которые требуются сервисам для работы. См. Жизненный цикл артефактов установки.region: регион S3-совместимого хранилища.disablePayloadSigning: отключить ли проверку целостности данных. Если S3-совместимое хранилище не поддерживает AWS Signature Version 4 streaming, значение должно бытьtrue. Значение по умолчанию:false.
-
api: переменные окружения.ingress: конфигурация ресурса Ingress. Адаптируйте приведенную конфигурацию для соответствия используемому вами Ingress. URL, указанный в параметреapi.ingress.hosts.host, должен быть доступен извне вашего кластера Kubernetes, чтобы пользователи из приватного сегмента сети могли получить доступ к ресурсам по этому URL.annotations: аннотации Kubernetes, предназначенные для настройки поведения nginx Ingress-контроллера.
pod.imagePullSecrets: Kubernetes Secrets для доступа к реестру Docker, в котором находятся образы сервисов программного комплекса 2ГИС.pod.resources: настройки вычислительных ресурсов для сервиса. Чтобы узнать рекомендуемые значения ресурсов, см. Вычислительные ресурсы.settings.licenseKey: ключ лицензии On-Premise.settings.corsOrigins: политика CORS. Если значение пустое, любому источнику разрешается выполнять запросы к сервису Pro API.settings.auth: настройки сервиса аутентификации.url: URL сервиса аутентификации.apiKey: API-ключ для доступа к сервису аутентификации.type: тип аутентификации. Возможные значения:openid10для протокола OpenId 1.0/OAuth 2.0;urbiдля внутреннего протокола Urbi.userInfoEndpoint: путь к endpoint-у Userinfo.autoRegisterUsers: регистрировать ли новых пользователей автоматически при первом входе.shareKeys: один или несколько секретных ключей для генерации защищённых ссылок или валидации уже существующих. Для генерации используется последний указанный в параметре ключ. Длина ключа должна быть не меньше 32 символов.
-
permissions.settings.auth.apiKey: ключ доступа к Permissions API для выполнения авторизованных действий. -
permissions.settings.default_permissions: настройки доступа по умолчанию для новых пользователей.open_pro_ui: доступ к Pro UI. Значение по умолчанию:true.assets: список идентификаторов системных наборов данных, к которым предоставляется доступ. Значение*предоставляет доступ ко всем наборам данных.territories: список идентификаторов территорий, к которым предоставляется доступ. Значение*предоставляет доступ ко всем территориям.add_user_assets: блок настроек, который управляет возможностью добавления пользовательских наборов данных новыми пользователями.isochrones: максимальное количество зон доступности, которые может создать пользователь.
-
license.url: URL сервиса лицензий. -
s3: настройки доступа к S3-совместимому хранилищу.assetsDataBucket: имя бакета S3 с подготовленными наборами данных, агрегатами и фильтрами.userAssetsDataBucket: имя бакета S3 с наборами данных, агрегатами и фильтрами, созданными пользователем.layerDataBucket: имя бакета S3 с подготовленными данными слоя.snapshotBucket: имя бакета S3 для хранения снапшотов пошагового обновления данных.resourcesBucket: имя бакета S3 для хранения статичных ресурсов.
-
postgres: настройки PostgreSQL.-
api: настройки доступа к базе данныхonpremise_proдля чтения и записи (postgres.api.rw) или только для чтения (postgres.api.ro).host: имя или IP-адрес хоста.port: номер порта.name: имя базы данных.username: имя пользователя базы данных.password: пароль пользователя базы данных.
-
tasks: настройки доступа к базе данныхonpremise_pro_tasksмикросервиса для управления фоновыми задачами для чтения и записи (postgres.tasks.rw) или только для чтения (postgres.tasks.ro). Набор параметров аналогичен группеpostgres.api, но используется отдельная база данных. -
permissions: настройки доступа к базе данныхonpremise_proмикросервиса для управления правами доступа (Permissions API) для чтения и записи (postgres.permissions.rw) или только для чтения (postgres.permissions.ro). Набор параметров аналогичен группеpostgres.api, и используется та же база данных.
-
-
kafka: настройки Apache Kafka.-
bootstrapServers: endpoints брокера Kafka. Пример:HOST1:PORT1,HOST2:PORT2. -
securityProtocol: протокол безопасности Kafka. -
createTopics: включить автоматическое создание топиков или нет. -
sasl: настройки SASL.mechanism: механизм SASL.username: имя пользователя SASL.password: пароль пользователя SASL.
-
assetTopicsReaderGroupId: ID потребительской группы Kafka для чтения данных из стриминговых наборов данных. -
importTasksTopic: настройки топика Kafka для задач импорта пользовательских наборов данных.name: название топика.readerGroupId: ID потребительской группы Kafka для чтения задач импорта.
-
assetDataTopic: настройки топика Kafka для объектов в пользовательских наборах данных.name: название топика.
-
permissionsTopic: настройки топика Kafka для чтения событий, связанных с изменениями прав доступа.name: название топика.readerGroupId: ID потребительской группы Kafka для чтения данных о правах доступа.
-
eventsTopic: настройки топика Kafka для событий.name: название топика.readerGroupId: ID потребительской группы Kafka для чтения событий.
-
refreshAssetsIntervalMinutes: интервал обновления настроек для стриминговых наборов данных в минутах.
-
-
elastic: настройки Elasticsearch.username: имя пользователя Elasticsearch.password: пароль пользователя Elasticsearch.secure: использовать ли HTTPS для работы с Elasticsearch. Значение по умолчанию:false.nodes[0].host: адрес хоста Elasticsearch.nodes[0].port: номер порта Elasticsearch.
-
redis: настройки Redis.host: адрес хоста Redis. Пример:HTTP(S)://HOST.port: номер порта.
-
catalog: настройки доступа к Catalog APIs.url: URL-адрес Catalog APIs. Пример:HTTP(S)://HOST.key: ключ доступа к Catalog APIs.
-
navi: настройки доступа к Isochrone API.url: URL-адрес Isochrone API. Пример:HTTP(S)://HOST.key: ключ доступа к Isochrone API.
-
search: настройки доступа к Search API.url: URL-адрес Search API. Пример:HTTP(S)://HOST.
-
assetImporter: настройки cron-задания для импорта данных.appName: имя cron-задания для импорта данных.repository: адрес репозитория с Docker-образом.schedule: расписание выполнения задания в cron-формате. Например:*/10 * * * *.backoffLimit: количество повторных попыток, после которых задание будет считаться неуспешным.successfulJobsHistoryLimit: ограничение на размер истории выполненных заданий.failedJobsHistoryLimit: ограничение на размер истории невыполненных заданий.nodeSelector: селектор узлов Kubernetes.settings.maxParallelJobs: количество заданий импорта, которые могут быть запущены одновременно.startOnDeploy: импорт данных должен начинаться при установке или обновлении сервиса.
-
-
Установите сервис с помощью Helm, используя подготовленный конфигурационный файл
values-pro-api.yaml:helm upgrade --install --version=VERSION --atomic --wait --timeout 3600s --values ./values-pro-api.yaml pro-api 2gis-on-premise/pro-apiВ параметре
--versionукажите нужную версию 2ГИС Про. Список версий см. в разделе Релизы 2ГИС Про.
Установите Pro UI
-
Создайте конфигурационный файл для Helm. Подробное описание доступных параметров см. здесь.
Пример файла уже заполнен всеми необходимыми данными, собранными на предыдущих этапах.
values-pro-ui.yamldgctlDockerRegistry: docker.registry.example.com
imagePullSecrets: [onpremise-registry-creds]
dgctlStorage:
host: artifacts.example.com
secure: true
bucket: onpremise-artifacts
accessKey: AKIAIOSFODNN7EXAMPLE
secretKey: wJalrXUtnFEMIK7MDENGbPxRfiCYEXAMPLEKEY
manifest: manifests/pro/1640661259.json
region: ''
disablePayloadSigning: false
ui:
auth:
sso: true
secure: true
appTheme: 2gis
appLocale: ru_RU
whiteLabel:
configUrl: "/static/theme/pro.json"
appInitialMapCenter: '[37.64, 55.74]'
publicS3Url: https://artifacts.example.com/
styles:
s3Bucket: 'pro-ui-styles'
configUrl: 'https://artifacts.example.com/pro-ui-styles/config/production/styleConfig.json'
api:
url: 'https://pro-api.example.com/'
mapgl:
host: 'mapgl-js-api.example.com'
key: ''
styleUrl: 'https://artifacts.example.com/pro-ui-styles/styles/default/'
stylePreview: ''
resources:
requests:
cpu: 300m
memory: 256Mi
limits:
cpu: 1
memory: 384Mi
ingress:
enabled: true
className: nginx
hosts:
- host: pro-ui.example.com
paths:
- path: /
pathType: Prefix
tls: []
# - hosts:
# - pro-ui.example.com
# secretName: secret.tls
stylesImporter:
startOnDeploy: trueГде:
-
dgctlDockerRegistry: endpoint вашего реестра Docker, в котором находятся образы сервисов программного комплекса 2ГИС в форматеHOST:PORT. -
imagePullSecrets: Kubernetes Secrets для доступа к реестру Docker, в котором находятся образы сервисов программного комплекса 2ГИС. -
dgctlStorage: настройки доступа к хранилищу артефактов установки.host: endpoint S3-совместимого хранилища артефактов установки в форматеHOST:PORT.secure: использовать ли HTTPS для работы с S3-совместимым хранилищем. Значение по умолчанию:false.bucket: имя бакета S3.accessKey: идентификатор ключа для доступа к бакету S3.secretKey: секретный ключ для доступа к бакету S3.manifest: путь до файла с манифестом в форматеmanifests/pro/1640661259.json. Этот файл содержит в себе описания фрагментов данных, которые требуются сервисам для работы. См. Жизненный цикл артефактов установки.region: регион S3-совместимого хранилища.disablePayloadSigning: отключить ли проверку целостности данных. Если S3-совместимое хранилище не поддерживает AWS Signature Version 4 streaming, значение должно бытьtrue. Значение по умолчанию:false.
-
ui: настройки приложения.-
auth: настройки аутентификации.sso: включить ли аутентификацию по технологии единого входа (SSO). Значение по умолчанию:true.secure: использовать ли HTTPS для работы с аутентификацией. Значение по умолчанию:true.
-
appTheme: брендирование внутри приложения. -
appLocale: язык приложения по умолчанию. -
whiteLabel.configUrl: URL конфигурационного файла для настройки пользовательского логотипа, фавиконки и других. Пример:/static/theme/pro.json. -
appInitialMapCenter: координаты карты по умолчанию в формате[lng, lat]. Пример:[37.64, 55.74]для Москвы. -
publicS3Url: URL публичного S3-совместимого хранилища, в котором будут размещены стили. -
styles: настройки стилей карты.s3Bucket: имя бакета S3 для стилей. Бакет должен быть публичным и иметь настроенный CORS.configUrl: URL конфигурационного файла для стилей. Пример:https://artifacts.example.com/pro-ui-styles/config/production/styleConfig.json.
-
api.url: базовый URL для Pro API со слэшем в конце. Пример:HTTP(S)://HOST/. -
mapgl: настройки сервиса MapGL JS API.host: хост сервиса MapGL JS API без протокола и без слэша в конце.key: ключ доступа для сервиса MapGL JS API.styleUrl: путь к директории с конфигурационным файлом (styles.json) для управления стилями карты. Пример:https://artifacts.example.com/pro-ui-styles/styles/default/.stylePreview: URL для миниатюры изображения, которая будет отображаться в менеджере стилей карты для стиля по умолчанию.
-
-
resources: настройки вычислительных ресурсов для сервиса. Чтобы узнать рекомендуемые значения ресурсов, см. Вычислительные ресурсы. -
ingress: конфигурация ресурса Ingress. Адаптируйте приведенную конфигурацию для соответствия используемому вами Ingress. URL, указанный в параметреingress.hosts.host, должен быть доступен извне вашего кластера Kubernetes, чтобы пользователи из приватного сегмента сети могли получить доступ к ресурсам по этому URL. -
stylesImporter.startOnDeploy: включить ли импорт собственных стилей для Про при установке или обновлении сервиса.
-
-
Установите сервис с помощью Helm, используя подготовленный конфигурационный файл
values-pro-ui.yaml:helm upgrade --install --version=VERSION --atomic --values ./values-pro-ui.yaml pro-ui 2gis-on-premise/pro-uiВ параметре
--versionукажите нужную версию 2ГИС Про. Список версий см. в разделе Релизы 2ГИС Про.
4. Проверьте работоспособность установленных сервисов
Выполните запрос с использованием cURL или аналогичного инструмента:
curl -X 'GET' \
'https://PRO-API/items/1,14,164' \
-H 'accept: application/json' \
-H 'Authorization: Bearer TOKEN' # Или см. settings.auth.apiKey
Для авторизации используйте Bearer-токен или см. установленное значение параметра settings.auth.apiKey в конфигурационном файле Pro API.
Ответ должен иметь код состояния HTTP 200 и содержать список элементов в формате JSON.
5. Настройте аутентификацию пользователей
Настройте внешнего поставщика OpenID Connect для аутентификации конечных пользователей в 2ГИС Про.
Что дальше?
-
Узнайте, как обновить 2ГИС Про.
-
Установите другие продукты программного комплекса 2ГИС:
-
Изучите рекомендации по обслуживанию системы.