Руководство по установке#
Универсальный Геопортал – это платформа для визуализации геопространственных данных и обеспечения совместной работы с ними множества пользователей, построенная на современной микросервисной архитектуре с использованием технологий .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 доменных имени для сервисов универсального портала:
Для самого универсального портала. Например, geoportal.region.ru.
Для s3-хранилища универсального портала. Например, s3-geoportal.region.ru.
Для сервиса авторизации и аутентификации Keycloack. Например, oauth.region.ru.
Важно
Если в открытом контуре уже имеется сервис Keycloack, используемый для других продуктов Gems, можно использовать его доменное для дальнейшей конфигурации установки и не регистрировать дополнительное.
Перечень необходимого стороннего ПО#
Обязательные компоненты:
Docker и Docker Compose. Версии:
Docker Engine: 20.10+
Docker Compose: 1.29+
Внешняя СУБД. Требования к внешней СУБД:
AstraLinux 1.8: PostgresPro 15+ с PostGIS 3.3+
AltLinux 10.4: PostgreSQL 15+ с PostGIS 3.3+
Необходимые расширения PostgreSQL:
PostGIS (пространственная БД)
PostGIS Topology (топологические функции)
UUID-OSSP (генерация UUID)
Ansible. Версии:
Ansible: 4.0+ (ansible-core 2.11+)
Python: 3.8+
Наблюдаемость системы#
Система поддерживает централизованный сбор метрик, трассировок и журналов по протоколу OpenTelemetry. При установке Системы рекомендуется убедиться в том, что сбор метрик приложения включен и работает корректно. Для мониторинга работы Системы создана информационная панель в Grafana.
Диаграмма развертывания#
Для понимания контекста работы системы см. диаграмму развертывания «Контекст системы»:
Диаграмма «Контекст системы»
Для понимания распределения сервисов по трем указанным серверам см. диаграмму развертывания «Универсальный геопортал»:
При развертывании сервисов геопортала можно использовать уже установленные на серверах публичного (открытого) контура сервис Keycloack в качестве замены сервиса OAuth Service.
Важно
Для корректной работы сервисов на серверах должны быть открыты порты, указанные на диаграмме красным, к которым ведут красные стрелки.
Остальные сервисы общаются друг с другом внутри сетей докера и не открывают свои порты для внешнего доступа.
Порты:
сервер БД – 5432;
сервер GeoServer – 8080;
сервер приложений – 443 и 80.
Установка через Ansible#
Укажите следующие переменные в файле 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, предоставляющий доступ к данным о рельефе и векторным подложкам |
Установите приложение с помощью тега
install_geoportal.
Перенос данных из ГИСОГД/Geometa#
Поддерживается развёртывание системы в двух конфигурациях:
Без интеграции с данными ГИСОГД/Geometa – только в публичном окружении (открытом контуре). В таком случае Система устанавливается целиком в открытом контуре. И текущий раздел является неактуальным.
С интеграцией данных ГИСОГД/Geometa – часть программного решения в публичном окружении, а часть в защищенном окружении (закрытом контуре) в контуре с ГИСОГД/Geometa. В таком случае необходимо обеспечить доступ из защищённого окружения в публичное для организации репликации данных (см. диаграмму развёртывания «Библиотека»), а также осуществить установку модуля «Библиотека портала» в открытом контуре и модуля «Конфигуратор репликации данных» в закрытом.
На диаграмме отражен состав контейров сервисов необходимых для работы библиотеки. Сервера, указанные в зеленой рамке совпадают с серверами, используемыми Универсальным геопорталом. Часть из сервисов библиотеки уже поставляется при установке Универсального портала и используется при работе библиотеки. Повторная их установка не требуется.
Если на серверах открытого контура уже установлена Kafka, то рекомендуется использовать её при настройке и не устанавливать дополнительную в пакете библиотеки.
Важно
Передача данных из ГИСОГД/Geometa осуществляется посредством Kafka. Из закрытого контура требуется открытие порта Kafka, указанного красным (к нему ведут жирные красные стрелки). А также обеспечение доступа сервисов с сервера приложений до БД ГИСОГД/Geometa по её порту.
Для корректной работы сервисов на серверах должны быть открыты порты, указанные красным, к которым ведут красные стрелки.
Остальные сервисы общаются друг с другом внутри сетей докера и не открывают свои порты для внешнего доступа.
Порты:
сервер БД открытого контура геопортала – 5432;
сервер GeoServer открытого контура геопортала – 8080;
сервер приложений открытого контура геопортала – 443 и 80;
сервер приложения открытого контура геопортала – 9093;
сервер приложения ГИСОГД/Geometa – организован доступ до порта 9093 сервера приложений открытого контура геопортала.
Для установки Библиотеки портала следует выполнить следующие шаги:
Укажите следующие переменные в файле 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 |
Пароль пользователя БД портала |
Установите приложение с помощью тега
install_geoportal_library.
Для установки Конфигуратора репликации данных в закрытом контуре ГИСОГД/Geometa следует выполнить следующие шаги:
Настройте возможность логической репликации на БД ГИСОГД/Geometa:
1.1. Откройте файл postgresql.conf на сервере БД Postgres. Например, в папке /opt/pgsql/14/data/postgresql.conf.
1.2. Добавьте строчку
wal_level=logical.1.3. Перезапустите БД.
При этом на сервере библиотеки будет развернута Kafka для получения данных слоёв библиотеки из закрытого контура.
Укажите следующие переменные в файле 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 |
Пароль пользователя БД портала |
Установите приложение с помощью тега
install_geometa_geoportal_library_replica.
Конфигурирование публикуемых в библиотеке слоёв#
Откройте интерфейс управления конфигурациями Consul приложения ГИСОГД/Geometa.
В папке Gems.GeoPortal.Library.ReplicationConfigurator/layers располагаются файлы json, описывающие отдельные слои, репликация которых настраивается в библиотеку портала.
Добавьте новый файл или измените существующий для управления передаваемыми данными.
Пример структуры файлов
{
//имя будущей таблицы слоя
"Name": "land_plot_egrn",
//условие, по которому необходимо осуществлять материализацию данных в таблицу слоя из исходных реплицируемых таблиц данных
"Condition": "select d_su.key as id, d_su.kn as kn, d_su.permitted_use_grad_reg as permited_use, ST_Area(d_geo.geoloc_orig) as area, st_collectionextract(st_makevalid(d_geo.geoloc_orig), 3) AS geoloc_orig, st_collectionextract(st_makevalid(d_geo.geoloc), 3) AS geoloc from %SCHEMA%.d_su_gkn_parcel d_su join %SCHEMA%.d_geo_gkn_parcel d_geo on d_su.key = d_geo.owner_key and d_geo.sys_status = 0 where d_su.sys_status = 0",
//расписание того, как часто осуществлять материализацию данных в таблицу слоя в формате CRON
"Cron": "0 15 * * * ?",
//JSON, экранированный в строку описывающий слой
"Description": "{\"Attributes\":[{\"DisplayName\":\"Кадастровая площадь, кв.м\",\"Name\":\"area\",\"Type\":\"number\"},{\"DisplayName\":\"Кадастровый номер\",\"Name\":\"kn\",\"Type\":\"text\"}],\"BrowserCacheLifetime\":14400,\"Description\":\"Слой предоставляет ключевую информацию о участках ЕГРН\",\"DisplayName\":\"Земельные участки ЕГРН\",\"GeometryType\":\"polygon\",\"LayerId\":\"land_plot_egrn\",\"PreviewImageUrl\":\"/placeholder.png\",\"ServerCacheLifetime\":14400,\"Style\":\"{\\\"type\\\":\\\"fill\\\",\\\"paint\\\":{\\\"fill-color\\\":\\\"rgba(255,0,0,1)\\\",\\\"fill-opacity\\\":0.5,\\\"fill-antialias\\\":true}}\",\"TableName\":\"land_plot_egrn\"}",
//информация о том, с каких схем БД источника реплицируем таблицы исходных данных для слоя
"Schemas": "chelyabinskgo",
"Tables": [
{
"Name": "d_su_gkn_parcel",
"Columns": [
"key",
"kn",
"sys_status",
"full_name",
"permitted_use_grad_reg"
]
},
{
"Name": "d_geo_gkn_parcel",
"Columns": [
"geoloc_orig",
"geoloc",
"sys_status",
"owner_key",
"key"
]
}
]
}
В поле [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"
}

