Развертывание сервиса глобального поиска через Docker

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

Подготовка к развертыванию

Перед установкой сервиса глобального поиска выполните следующее:

  1. Для предоставления доступа к архиву с файлами для развертывания обратитесь в Техническую поддержку BPMSoft.
  2. Перед установкой убедитесь в том, что среда, на которую вы хотите устанавливать сервис, соответствует системным требованиям.
  3. Для работы установите Docker Desktop версии 4.3.0 и выше.
  4. Убедитесь, что в файле ConnectionStrings.config на стороне BPMSoft присутствует параметр elasticsearchCredentials.
Микросервис рекомендуется развертывать на выделенной виртуальной машине, недоступной из внешней сети. Следует открыть только порты, необходимые для взаимодействия с основным приложением, и разрешить подключения к ним только с IP-адресов серверов основного приложения.

Развертывание сервиса глобального поиска

Для развертывания сервиса необходимо:

  1. Создайте директорию для файлов Docker Compose:
mkdir /usr/gs
  1. Переместите файл docker-compose в домашнюю папку пользователя (~).
  2. Скопируйте и разархивируйте файлы docker-compose в новую директорию, заменив <release> на номер версии релиза.
cp ~/gs-<release>-docker.zip /usr/gs && cd /usr/gs && unzip gs-<release>-docker.zip
  1. Откройте поддиректорию src. В ней вы найдете файлы docker-compose.
cd src
  1. Для запуска инфраструктуры GlobalSearch выполните следующую команду
docker-compose -f docker-compose.infr.yaml up -d
В первую очередь нужно создать инфраструктуру. Именно она формирует сеть, которая связывает между собой инфраструктурные сервисы и сервис глобального поиска.
  1. Перед запуском OpenSearch измените системную настройку:
sudo sysctl -w vm.max_map_count=262144
  1. Запустите поисковый движок OpenSearch. По умолчанию он будет доступен на порту 9200.
docker-compose -f docker-compose.opensearch.yml up -d

Перед запуском сервисов глобального поиска нужно настроить переменные окружения в файле .env.

Таблица 1 — Описание переменных окружения в файле .env

Переменная Описание Значение по умолчанию
GS_SEARCH_URL Укажите endpoint поискового движка OpenSearch По умолчанию для локального развертывания используется http://host.docker.internal:9200
DOCKER_TAG Задайте версию GlobalSearch -
DOCKER_REPO Укажите репозиторий, откуда берутся образы сервисов GlobalSearch По умолчанию используется bpmsoft/gs. Измените его, если используете прокси-репозиторий в закрытых сетях без доступа в интернет
  1. Установите сервис глобального поиска:
docker-compose up -d

После этого запустятся все компоненты сервиса глобального поиска.

Настройка сервиса глобального поиска

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

  1. Для выполнения http-запросов необходимо установить инструмент curl. В терминале надо выполнить команду apt-get install curl или yum install curl.
  2. Выполните http-запрос на регистрацию сайта в глобальном поиске, указав:
    • [DATABASE_TYPE] — тип базы данных системы (mssql или postgresql);
    • [DATABASE_CONNECTION_STRING] — строка подключения к базе данных системы;
    • [SITE_NAME] — название сайта системы, например, my-test-site;
    • [SERVER2_IP_ADDRESS] — IP-адрес сервера, на котором развернуты компоненты глобального поиска.
curl -v -X POST -d '{"databaseType": "[DATABASE_TYPE]", "databaseConnectionString": "[DATABASE_CONNECTION_STRING]"}' -H "Content-Type:  application/json" http://[SERVER2_IP_ADDRESS]:81/sites/[SITE_NAME]*
  1. Выполните http-запрос на подключение поиска к ранее добавленному сайту, указав:
    • [SITE_NAME] — название сайта системы, например, my-test-site;
    • [TEMPLATE_NAME] — название шаблона поиска, который используется в Search Engine. Перечень доступных к использованию шаблонов приведен в таблице ниже;
    • [SERVER2_IP_ADDRESS] — IP-адрес сервера, на котором развернуты компоненты глобального поиска.
curl -v -X POST -d '{"templateName": "[TEMPLATE_NAME]"}' -H "Content-Type: application/json" http://[SERVER2_IP_ADDRESS]:81/sites/[SITE_NAME]/search

Приведенный запрос вернет URL к созданному индексу в Search Engine. URL нужно сохранить и использовать для установки значений системных настроек. Подробнее: Настройка на стороне BPMSoft

Примечание. Значения системных настроек также можно изменить на стороне BPMSoft.
Создание индекса напрямую в поисковом движке OpenSearch может привести к некорректной работе сервиса. Рекомендуется использовать POST-запрос, указанный выше в инструкции.

Чтобы изменить шаблон поиска, выполните DELETE запрос на /sites/{siteName}/search и http-запрос на подключение поиска, описанный выше, после чего будет выполнена полная переиндексация сайта.

Таблица 2 — Шаблоны поиска

  default.json ngram_2.json ngram_3.json without_ngram.json
Поиск по части слова – + + –
Поиск по слову с опечатками – + + –
Поиск по части номера телефона в средствах связи + + + –
Нечеткий поиск по средствам связи + + + –
Поиск с перестановкой слов + + + +
Поиск по точному совпадению + + + +
Поиск по двум символам – + – –
Примерная скорость поиска (чем меньше, тем лучше) 1х 13х 7х <1х
Размер индекса на Search Engine (чем меньше, тем лучше) 1х 4х 2,5х <1х
Время полной первичной индексации (чем меньше, тем лучше) 1х 1,8х 1,4х <1х

Настройка на стороне BPMSoft

На стороне BPMSoft для работы с сервисом необходимо:

  1. Заполнить системные настройки:
  • GlobalSearchUrl — ссылка на Search.Web.Api с названием индекса. Значение настройки возвращается при выполнении запроса на web-api для добавления поиска для сайта. Пример строки: http://[SERVER2_IP_ADDRESS]:[port]/[indexname]. Порт по умолчанию: 83;
  • GlobalSearchConfigServiceURL — ссылка на Web.Api глобального поиска http://[SERVER2_IP_ADDRESS]:[port]. Порт по умолчанию: 81;
  • GlobalSearchIndexingApiUrl — ссылка на Indexing.Web.Api глобального поиска http://[SERVER2_IP_ADDRESS]:[port]. Порт по умолчанию: 82.
  1. Включить в системе функциональность глобального поиска. Для включения функциональности глобального поиска (GlobalSearch, GlobalSearch_V2, GlobalSearchRelatedEntityIndexing) необходимо выполнить SQL-скрипт:
  1. Очистить кэш, перезапустить приложение системы и выполнить вход в приложение.
Примечание. Для подключения нескольких сайтов к одному серверу глобального поиска необходимо выполнить шаги Настройка сервиса глобального поиска и Настройка на стороне BPMSoft для каждого сайта отдельно. Обратите внимание, что при добавлении нового сайта может возрасти нагрузка на сервер, где размещен сервис.

Используемые порты

Список портов, используемых компонентами глобального поиска:

Таблица 3 — Список используемых портов

Название компонента Исходящий порт Входящий порт Примечание
Web.Api   81 Входящий порт настраивается переменной services.web-app.ports
Indexing.Web.Api   82 Входящий порт настраивается переменной services.indexing-service.ports
Search.Web.Api 9200 83 Входящий порт настраивается переменной services.search-service.ports
Executer.Api 9200   Необходимо соединение с сервером, на котором расположен Search Engine
Single.Executer.Api 9200   Необходимо соединение с сервером, на котором расположен Search Engine
OpenSearch   9200  

Ресурсы

Скрипт включения функциональности для Microsoft SQL Server

MSSQL_GlobalSearch_FeatureToggle.sql
DECLARE @GS_REIndexingFeature NVARCHAR(50) = 'GlobalSearchRelatedEntityIndexing';
DECLARE @GS_REIndexingFeatureId UNIQUEIDENTIFIER = (SELECT TOP 1 Id FROM Feature WHERE
Code = @GS_REIndexingFeature);

DECLARE @GlobalSearchFeature NVARCHAR(50) = 'GlobalSearch';
DECLARE @GlobalSearchFeatureId UNIQUEIDENTIFIER = (SELECT TOP 1 Id FROM Feature WHERE Code = @GlobalSearchFeature);

DECLARE @GlobalSearchV2Feature NVARCHAR(50) = 'GlobalSearch_V2';
DECLARE @GlobalSearchV2FeatureId UNIQUEIDENTIFIER = (SELECT TOP 1 Id FROM Feature WHERE Code = @GlobalSearchV2Feature);
DECLARE @allEmployeesId UNIQUEIDENTIFIER = 'A29A3BA5-4B0D-DE11-9A51-005056C00008';

IF (@GlobalSearchFeatureId IS NOT NULL)
 BEGIN
   IF EXISTS (SELECT * FROM AdminUnitFeatureState WHERE FeatureId = @GlobalSearchFeatureId)
     UPDATE AdminUnitFeatureState SET FeatureState = 1 WHERE FeatureId = @GlobalSearchFeatureId
    ELSE
     INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @GlobalSearchFeatureId)
 END;
ELSE
 BEGIN
   SET @GlobalSearchFeatureId = NEWID()
   INSERT INTO Feature (Id, Name, Code) VALUES (@GlobalSearchFeatureId, @GlobalSearchFeature, @GlobalSearchFeature)
   INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @GlobalSearchFeatureId)
 END;

IF (@GlobalSearchV2FeatureId IS NOT NULL)
 BEGIN
   IF EXISTS (SELECT * FROM AdminUnitFeatureState WHERE FeatureId = @GlobalSearchV2FeatureId)
     UPDATE AdminUnitFeatureState SET FeatureState = 1 WHERE FeatureId = @GlobalSearchV2FeatureId
    ELSE
     INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1',@GlobalSearchV2FeatureId)
 END;
ELSE
 BEGIN
   SET @GlobalSearchV2FeatureId = NEWID()
   INSERT INTO Feature (Id, Name, Code) VALUES (@GlobalSearchV2FeatureId, @GlobalSearchV2Feature, @GlobalSearchV2Feature)
   INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1',@GlobalSearchV2FeatureId)
 END;

IF (@GS_REIndexingFeatureId IS NOT NULL)
BEGIN
 IF EXISTS (SELECT * FROM AdminUnitFeatureState WHERE FeatureId = @GS_REIndexingFeatureId)
  UPDATE AdminUnitFeatureState SET FeatureState = 1 WHERE FeatureId = @GS_REIndexingFeatureId
  ELSE
  INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @GS_REIndexingFeatureId)
END;
ELSE
BEGIN
 SET @GS_REIndexingFeatureId = NEWID()
 INSERT INTO Feature (Id, Name, Code) VALUES (@GS_REIndexingFeatureId, @GS_REIndexingFeature, @GS_REIndexingFeature)
 INSERT INTO AdminUnitFeatureState (SysAdminUnitId, FeatureState, FeatureId) VALUES (@allEmployeesId, '1', @GS_REIndexingFeatureId)
END;

↑ Вернуться к шагу Настройка на стороне BPMSoft

Скрипт включения функциональности для PostgreSQL

PostgreSQL_GlobalSearch_FeatureToggle.sql
DO $$

DECLARE 
    GlobalSearchFeature VARCHAR(50) := 'GlobalSearch';
    GlobalSearchFeatureId uuid;
    GlobalSearchV2Feature VARCHAR(50) := 'GlobalSearch_V2';
    GlobalSearchV2FeatureId uuid;
    GS_RelatedEntityIndexingFeature VARCHAR(50) :=   'GlobalSearchRelatedEntityIndexing';
    GS_RelatedEntityIndexingFeatureId uuid;
    Bulk_ES_DD_Feature VARCHAR(50) := 'BulkESDeduplication';
    Bulk_ES_DD_FeatureId uuid;
    allEmployeesId uuid := 'A29A3BA5-4B0D-DE11-9A51-005056C00008';

BEGIN

   SELECT "Id" INTO GlobalSearchFeatureId FROM "Feature"
   WHERE "Code" = GlobalSearchFeature
   LIMIT 1;
   IF (GlobalSearchFeatureId IS NOT NULL)
      THEN
          IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = GlobalSearchFeatureId) THEN
             UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GlobalSearchFeatureId;
          ELSE
              INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchFeatureId);
          END IF;
   ELSE
       GlobalSearchFeatureId := uuid_generate_v4();
       INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GlobalSearchFeatureId, GlobalSearchFeature, GlobalSearchFeature);
       INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchFeatureId);
   END IF;

   SELECT "Id" INTO GlobalSearchV2FeatureId FROM "Feature"
   WHERE "Code" = GlobalSearchV2Feature
   LIMIT 1;
   IF (GlobalSearchV2FeatureId IS NOT NULL)
    THEN
        IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = GlobalSearchV2FeatureId) THEN
            UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GlobalSearchV2FeatureId;
        ELSE
           INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchV2FeatureId);
        END IF;
   ELSE
       GlobalSearchV2FeatureId := uuid_generate_v4();
       INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GlobalSearchV2FeatureId, GlobalSearchV2Feature, GlobalSearchV2Feature);
       INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState", "FeatureId") VALUES (allEmployeesId, '1', GlobalSearchV2FeatureId);
   END IF;
  SELECT "Id" INTO Bulk_ES_DD_FeatureId FROM "Feature"
  WHERE "Code" = Bulk_ES_DD_Feature
  LIMIT 1;
  SELECT "Id" INTO GS_RelatedEntityIndexingFeatureId FROM "Feature" WHERE "Code" =GS_RelatedEntityIndexingFeature LIMIT 1;
  IF (GS_RelatedEntityIndexingFeatureId IS NOT NULL)
  THEN
  IF EXISTS (SELECT * FROM "AdminUnitFeatureState" WHERE "FeatureId" = Bulk_ES_DD_FeatureId) THEN
UPDATE "AdminUnitFeatureState" SET "FeatureState" = 1 WHERE "FeatureId" = GS_RelatedEntityIndexingFeatureId;
  ELSE
  INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState","FeatureId") VALUES (allEmployeesId, '1', GS_RelatedEntityIndexingFeatureId);
  END IF;
  ELSE
  GS_RelatedEntityIndexingFeatureId := uuid_generate_v4();
  INSERT INTO "Feature" ("Id", "Name", "Code") VALUES (GS_RelatedEntityIndexingFeatureId, GS_RelatedEntityIndexingFeature, GS_RelatedEntityIndexingFeature);
  INSERT INTO "AdminUnitFeatureState" ("SysAdminUnitId", "FeatureState","FeatureId") VALUES (allEmployeesId, '1', GS_RelatedEntityIndexingFeatureId);
  END IF;
END $$;

↑ Вернуться к шагу Настройка на стороне BPMSoft

Рекомендуем изучить

Сервис глобального поиска
Настройка дополнительных параметров сервиса глобального поиска

Материал был полезен для вас?
Запросить демонстрацию
Купить приложение
Заявка на индивидуальный тренинг
Заявка на обучение в формате тренинга
Заявка на консультацию по обучению
Готовы сделать выбор CRM? (детальная)
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Предпочитаемый способ связи
Вебинар: 10 ноября в 11:00
Разберём, как повысить эффективность управления ИТ-инфраструктурой с помощью ITSM и Service Desk. Обсудим, как сократить операционные затраты и ускорить бизнес-процессы в 2 раза, на реальном опыте ПАО «Трубная металлургическая компания» (ТМК) и Группы Rubytech.
Готовы сделать выбор CRM?
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Предпочитаемый способ связи
Готовы сделать выбор CRM? (детальная)
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Предпочитаемый способ связи
Готовы сделать выбор CRM?
Оставьте заявку, и наши эксперты бесплатно проконсультируют вас, подберут подходящую конфигурацию и рассчитают стоимость проекта.
Предпочитаемый способ связи
Регистрация на мероприятие
Типовое внедрение
Внедрите BPMSoft CRM в свою компанию всего за 8 рабочих дней по фиксированной цене! Заполните заявку для уточнения условий.
Предпочитаемый способ связи
Оставить заявку
Оставьте свои контакты, и наш менеджер свяжется с Вами в ближайшее время.
Предпочитаемый способ связи
Демонстрационная версия BPMSoft
Заполните заявку для получения бесплатного доступа к демонстрационному стенду на 14 дней.
Заказать презентацию
Наш менеджер свяжется с Вами в ближайшее время.
Предпочитаемый способ связи
Рассчитать стоимость
Предпочитаемый способ связи
Лучшие CRM-системы в России: выводы Фонда «Сколково»
Задать вопрос
Предпочитаемый способ связи
Есть вопросы?
Не нашли для себя подходящую вакансию, или остались вопросы?
*
Есть вопросы?
Не нашли для себя подходящую вакансию, или остались вопросы?
*
Присоединяйтесь к партнерской сети BPMSoft
Оставьте свои контакты, и наш менеджер свяжется с Вами в ближайшее время
Тип партнерства*
Управление полным жизненным циклом клиента: от генерации лидов и продаж до внедрения, поддержки и продления подписки.
Разработка собственного Приложения – производного программного обеспечения, созданного на платформе BPMSoft (Базовое ПО).
Заявка на онлайн-консультации по BPMSoft
Оставьте свои контакты, и наш менеджер свяжется с Вами в ближайшее время
Стать образовательным партнёром
Оставьте свои контакты, и наш менеджер свяжется с Вами в ближайшее время.
Заявка на консультацию
Оставьте свои контакты, и наш менеджер свяжется с Вами в ближайшее время.
Подписка
Спасибо!
Ваша заявка принята.
Спасибо!
Ваша заявка принята.
Наш сотрудник свяжется с вами в течение 1-2 рабочих дней.
Внимание!
Обнаружена ошибка.
Внимание!
Обнаружена ошибка.
Вы подписаны на новостную рассылку от BPMSoft.
Вы подписаны на новостную рассылку от BPMSoft.
MAX Подписаться
Уважаемые клиенты! Предупреждаем о случаях недобросовестной конкуренции и мошенничестве в сети Интернет.
Подробнее