Руководство по установке#

Универсальный Геопортал – это платформа для визуализации геопространственных данных и обеспечения совместной работы с ними множества пользователей, построенная на современной микросервисной архитектуре с использованием технологий .NET 8, Docker и контейнеризации.

Архитектурные компоненты#

Система состоит из следующих основных компонентов:

  • 6 основных микросервисов – Project Service, Spatial Service, Workspace Service, Elements Service, Comments Service, User Service;

  • 5 служебных сервисов – Image Service, Preview Service, GIS Server, GIS Consumer, Notifications Service, Screenshotter;

  • 2 SignalR хаба – для обеспечения совместной работы в режиме реального времени;

  • Web UI – пользовательский интерфейс;

  • Инфраструктурные сервисы – PostgreSQL с PostGIS, MinIO, RabbitMQ, Keycloak, Nginx, GeoServer.

Модуль «Библиотека портала» состоит из следующих основных компонентов:

  • 6 основных микросервисов – API Service;

  • 5 служебных сервисов – ETL Service, Preview Service, GIS Server, Screenshotter;

  • Web UI – пользовательский интерфейс;

  • Инфраструктурные сервисы – PostgreSQL с PostGIS, MinIO, Nginx, GeoServer, Kafka, Kafka Connect, Debezium Consumer.

Модуль «Конфигуратор репликации данных» состоит из следующих основных компонентов:

  • 5 служебных сервисов – Replica Service;

  • Инфраструктурные сервисы – PostgreSQL с PostGIS, MinIO, Nginx, GeoServer, Kafka Connect, Debezium Consumer, Debezium Producer, Consul.

Принципы развертывания#

  • Контейнеризация: все компоненты упакованы в Docker-контейнеры.

  • Оркестрация: управление через Docker Compose.

  • Автоматизация: развертывание через Ansible.

Технические требования к серверной инфраструктуре#

Развертывание GeoPortal Platform предполагает использование 3 выделенных серверов:

Сервер приложений (GeoPortal Services):

  • Операционная система: AstraLinux 1.8 / AltLinux 10.4;

  • CPU: 16 ядер (x86_64);

  • RAM: 64 GB;

  • Дисковое пространство: 250 GB HDD или SSD;

  • Назначение: все микросервисы GeoPortal Platform, Web UI, MinIO.

Сервер базы данных (Database Server):

  • Операционная система: AstraLinux 1.8 / AltLinux 10.4;

  • CPU: 16 ядер (x86_64);

  • RAM: 64 GB;

  • Дисковое пространство: 500 GB SSD;

  • Назначение: PostgreSQL/PostGIS, RabbitMQ;

  • СУБД: PostgresPro 15 (AstraLinux) / PostgreSQL 15 (AltLinux).

Сервер геоданных (GeoServer):

  • Операционная система: AstraLinux 1.8 / AltLinux 10.4;

  • CPU: 16 ядер (x86_64) ;

  • RAM: 64 GB;

  • Дисковое пространство: 250 GB SSD;

  • Назначение: GeoServer, пространственные данные.

Требования к DNS-именам#

Необходимо 3 доменных имени для сервисов универсального портала:

  1. Для самого универсального портала. Например, geoportal.region.ru.

  2. Для s3-хранилища универсального портала. Например, s3-geoportal.region.ru.

  3. Для сервиса авторизации и аутентификации Keycloack. Например, oauth.region.ru.

Важно

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

Перечень необходимого стороннего ПО#

Обязательные компоненты:

  1. Docker и Docker Compose. Версии:

    • Docker Engine: 20.10+

    • Docker Compose: 1.29+

  2. Внешняя СУБД. Требования к внешней СУБД:

    • AstraLinux 1.8: PostgresPro 15+ с PostGIS 3.3+

    • AltLinux 10.4: PostgreSQL 15+ с PostGIS 3.3+

Необходимые расширения PostgreSQL:

  • PostGIS (пространственная БД)

  • PostGIS Topology (топологические функции)

  • UUID-OSSP (генерация UUID)

  1. Ansible. Версии:

    • Ansible: 4.0+ (ansible-core 2.11+)

    • Python: 3.8+

Наблюдаемость системы#

Система поддерживает централизованный сбор метрик, трассировок и журналов по протоколу OpenTelemetry. При установке Системы рекомендуется убедиться в том, что сбор метрик приложения включен и работает корректно. Для мониторинга работы Системы создана информационная панель в Grafana.

Диаграмма развертывания#

Для понимания контекста работы системы см. диаграмму развертывания «Контекст системы»:

Для понимания распределения сервисов по трем указанным серверам см. диаграмму развертывания «Универсальный геопортал»:

При развертывании сервисов геопортала можно использовать уже установленные на серверах публичного (открытого) контура сервис Keycloack в качестве замены сервиса OAuth Service.

Важно

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

  • Остальные сервисы общаются друг с другом внутри сетей докера и не открывают свои порты для внешнего доступа.

Порты:

  • сервер БД – 5432;

  • сервер GeoServer – 8080;

  • сервер приложений – 443 и 80.

Установка через Ansible#

  1. Укажите следующие переменные в файле vars.yml.

Название переменной

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

Описание переменной

gvGEOPORTAL_PRIVATE_INSTALL_DIR

/opt/geoportal

Директория установки

gvGEOPORTAL_DNS_NAME

geoportal.region.ru

DNS-имя портала, по которому он будет доступен в сети Internet

gvGEOPORTAL_MINIO_DNS_NAME

s3-geoportal.region.ru

DNS-имя S3 файлового хранилища портала, по которому он будет доступен в сети Internet

gvGEOPORTAL_POSTGRES_HOST

272.13.7.12

IP сервера БД портала

gvGEOPORTAL_POSTGRES_PORT

5440

Порт БД портала

gvGEOPORTAL_POSTGRES_DB

geoportal

Имя БД портала

gvGEOPORTAL_POSTGRES_USER

postgres

Имя пользователя БД портала

gvGEOPORTAL_POSTGRES_PASSWORD

poupres

Пароль пользователя БД портала

gvGEOPORTAL_GEOSERVER_URL

http://geoportal-geoserver:8080

Адрес, по которому доступен GeoServer портала

gvGEOPORTAL_GEOSERVER_LOGIN

admin

Логин пользователя GeoServer портала

gvGEOPORTAL_GEOSERVER_PASSWORD

geogeo

Пароль пользователя GeoServer портала

gvGEOPORTAL_INSTALL_KEYCLOACK

true

Указывает на необходимость установки сервиса Keycloack. Если сервис уже существует в открытом контуре, можно указать false

gvGEOPORTAL_KEYKLOACK_HOSTNAME

geoportal.region.ru

DNS-имя сервера авторизации и аутентификации Keycloak, по которому он доступен в сети Internet. Можно здесь указать уже существующий сервис Keycloack

gvGEOPORTAL_SMTP_HOST

smtp.region.com

IP почтового SMTP сервера для рассылки уведомлений с портала

gvGEOPORTAL_SMTP_PORT

587

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

gvGEOPORTAL_SMTP_USER

noreply

Логин пользователя почтового SMTP сервера для рассылки уведомлений с портала

gvGEOPORTAL_SMTP_PASSWORD

smtptptp

Пароль пользователя почтового SMTP сервера для рассылки уведомлений с портала

gvGEOPORTAL_SMTP_FROM

noreply@region.com

Email, с которого производится рассылка уведомлений с портала

gvGEOPORTAL_SMTP_FROM_DISPLAY_NAME

Region No-reply

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

gvGEOPORTAL_GEMS_TELEMETRY_URL

http://273.12.8.001:4318

Адрес, по которому доступен сервер телеметрии Gems, на который отправляется информация о метриках, трассировках и логах приложения

gvGEOPORTAL_GEMS_DATAHUB_URL

https://datahub.gemsdev.ru

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

  1. Установите приложение с помощью тега install_geoportal.

Перенос данных из ГИСОГД/Geometa#

Поддерживается развёртывание системы в двух конфигурациях:

Без интеграции с данными ГИСОГД/Geometa – только в публичном окружении (открытом контуре). В таком случае Система устанавливается целиком в открытом контуре. И текущий раздел является неактуальным.

С интеграцией данных ГИСОГД/Geometa – часть программного решения в публичном окружении, а часть в защищенном окружении (закрытом контуре) в контуре с ГИСОГД/Geometa. В таком случае необходимо обеспечить доступ из защищённого окружения в публичное для организации репликации данных (см. диаграмму развёртывания «Библиотека»), а также осуществить установку модуля «Библиотека портала» в открытом контуре и модуля «Конфигуратор репликации данных» в закрытом.

На диаграмме отражен состав контейров сервисов необходимых для работы библиотеки. Сервера, указанные в зеленой рамке совпадают с серверами, используемыми Универсальным геопорталом. Часть из сервисов библиотеки уже поставляется при установке Универсального портала и используется при работе библиотеки. Повторная их установка не требуется.

Если на серверах открытого контура уже установлена Kafka, то рекомендуется использовать её при настройке и не устанавливать дополнительную в пакете библиотеки.

Важно

  • Передача данных из ГИСОГД/Geometa осуществляется посредством Kafka. Из закрытого контура требуется открытие порта Kafka, указанного красным (к нему ведут жирные красные стрелки). А также обеспечение доступа сервисов с сервера приложений до БД ГИСОГД/Geometa по её порту.

  • Для корректной работы сервисов на серверах должны быть открыты порты, указанные красным, к которым ведут красные стрелки.

  • Остальные сервисы общаются друг с другом внутри сетей докера и не открывают свои порты для внешнего доступа.

Порты:

  • сервер БД открытого контура геопортала – 5432;

  • сервер GeoServer открытого контура геопортала – 8080;

  • сервер приложений открытого контура геопортала – 443 и 80;

  • сервер приложения открытого контура геопортала – 9093;

  • сервер приложения ГИСОГД/Geometa – организован доступ до порта 9093 сервера приложений открытого контура геопортала.

Для установки Библиотеки портала следует выполнить следующие шаги:

  1. Укажите следующие переменные в файле vars.yml:

Название переменной

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

Описание переменной

gvGEOPORTAL_LIBRARY_HOST_IP

272.13.7.12

IP сервера, на котором осуществляется установка библиотеки портала

gvGEOPORTAL_LIBRARY_KAFKA_HOST_IP

272.13.7.12

IP сервера, на котором доступна Kafka. Если на серверах открытого контура уже установлена Kafka, используемая приложениями Gems, то указать её IP

gvGEOPORTAL_LIBRARY_KAFKA_PORT

9093

Порт, на котором доступна Kafka. Если на серверах открытого контура уже установлена Kafka, используемая приложениями Gems, то указать её порт

gvGEOPORTAL_LIBRARY_INSTALL_KAFKA

true

Если значение true - будет установлена Kafka. Если на серверах открытого контура уже установлена Kafka, используемая приложениями Gems, то указать false

gvGEOPORTAL_LIBRARY_DNS_NAME

geoportal.region.ru

DNS-имя портала, по которому будет доступна библиотека в сети Internet

gvGEOPORTAL_POSTGRES_HOST

272.13.7.12

IP сервера БД портала

gvGEOPORTAL_POSTGRES_PORT

5440

Порт БД портала

gvGEOPORTAL_POSTGRES_DB

geoportal

Имя БД портала

gvGEOPORTAL_POSTGRES_USER

postgres

Имя пользователя БД портала

gvGEOPORTAL_POSTGRES_PASSWORD

poupres

Пароль пользователя БД портала

gvGEOPORTAL_POSTGRES_PASSWORD

poupres

Пароль пользователя БД портала

  1. Установите приложение с помощью тега install_geoportal_library.

Для установки Конфигуратора репликации данных в закрытом контуре ГИСОГД/Geometa следует выполнить следующие шаги:

  1. Настройте возможность логической репликации на БД ГИСОГД/Geometa:

    1.1. Откройте файл postgresql.conf на сервере БД Postgres. Например, в папке /opt/pgsql/14/data/postgresql.conf.

    1.2. Добавьте строчку wal_level=logical.

    1.3. Перезапустите БД.

При этом на сервере библиотеки будет развернута Kafka для получения данных слоёв библиотеки из закрытого контура.

  1. Укажите следующие переменные в файле vars.yml.

Название переменной

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

Описание переменной

gvGEOPORTAL_LIBRARY_KAFKA_HOST_IP

272.13.7.12

IP сервера публичного контура, на котором доступна Kafka. Если на серверах открытого контура уже установлена Kafka, используемая приложениями Gems, то указать её IP

gvGEOPORTAL_LIBRARY_KAFKA_PORT

9093

Порт, на котором доступна Kafka. Если на серверах открытого контура уже установлена Kafka, используемая приложениями Gems, то указать её порт

gvGEOPORTAL_LIBRARY_HOST_IP

272.13.7.12

IP сервера, на котором осуществляется установка библиотеки портала

gvGEOMETA_POSTGRES_HOST

272.13.7.12

IP сервера БД портала

gvGEOMETA_POSTGRES_PORT

5440

Порт БД портала

gvGEOMETA_POSTGRES_DB

geoportal

Имя БД портала

gvGEOMETA_POSTGRES_USER

postgres

Имя пользователя БД портала

gvGEOMETA_POSTGRES_PASSWORD

poupres

Пароль пользователя БД портала

  1. Установите приложение с помощью тега install_geometa_geoportal_library_replica.

Конфигурирование публикуемых в библиотеке слоёв#

  1. Откройте интерфейс управления конфигурациями Consul приложения ГИСОГД/Geometa.

  2. В папке Gems.GeoPortal.Library.ReplicationConfigurator/layers располагаются файлы json, описывающие отдельные слои, репликация которых настраивается в библиотеку портала.

  3. Добавьте новый файл или измените существующий для управления передаваемыми данными.

В поле [Condition] есть возможность указать как конкретную схему для таблиц, из которых извлекаются данные, так и выражение %SCHEMA%. В таком случае слой будет объединен из всех найденных таблиц из SQL из всех схем БД реплики посредством вызова UNION.

JSON в поле [Description] имеет следующую структуру:

{
    //список атрибутов слоя, доступных для просмотра по ним данных и для стилизации данных
    "Attributes": [{
            "DisplayName": "Кадастровая площадь, кв.м",
        //имя столбца из итоговой таблицы слоя
            "Name": "area",
        //тип: text, number, timestamp, boolean
            "Type": "number"
        }, {
            "DisplayName": "Кадастровый номер",
            "Name": "kn",
            "Type": "text"
        }
    ],
    //время жизни браузерного кэша для тайлов слоя библиотеки
    "BrowserCacheLifetime": 14400,
    //описание слоя
    "Description": "Слой предоставляет ключевую информацию о участках ЕГРН",
    //русское наименование слоя, отображаемое в библиотеке
    "DisplayName": "Земельные участки ЕГРН",
    //тип геометрии: polygon, line, point
    "GeometryType": "polygon",
    //идентификатор слоя в библиотеке
    "LayerId": "land_plot_egrn",
    //адрес превью изображения слоя. Сюда можно вставить ссылку на картинку или оставить как есть, чтобы картинка генерировалась сама
    "PreviewImageUrl": "/placeholder.png",
    //время жизни серверного кэша для тайлов слоя библиотеки
    "ServerCacheLifetime": 14400,
    //стиль слоя в формате MapLibre style https://maplibre.org/maplibre-gl-js/docs/style-spec/
    "Style": "{\"type\\":\"fill\ ",\"paint\":{\"fill-color\":\"rgba(255, 0, 0, 1)\",\"fill-opacity\":0.5,\"fill-antialias\":true}}",
    //имя таблицы слоя, из которой он отдает данные
    "TableName": "land_plot_egrn"
}