Установка#

Состав дистрибутива#

Компонент

Элемент дистрибутива

Описание

GDCE

./pl/

Файлы для репозитория шаблона сайта (site-template)

./bh/GetDocs

Расширение для Visual Studio Code

./bh/GetDocs_x86_64_mac

Бинарный файл для MacOS для локальной сборки документации

./bh/GetDocs_x86_64_win

Бинарный файл для Windows для локальной сборки документации

./conf/helm/application/services/workflows

helm-chart, содержащий workflows

./conf/helm/application/infra/s3-sync

helm-chart сервиса s3-sync

./conf/helm/application/infra/argo-workflows

helm-chart сервиса argo-workflows

./conf/helm/application/services/config-sync

helm-chart сервиса config-sync

./conf/helm/application/infra/morris

helm-chart сервиса Morris

./conf/helm/application/services/eliza-bge-embedder

helm-chart сервиса eliza-bge-embedder

./conf/helm/application/services/eliza-converter

helm-chart сервиса eliza-converter

./conf/helm/application/services/eliza-embedder

helm-chart сервиса eliza-embedder

./conf/helm/application/services/eliza-index

helm-chart сервиса eliza-index

./conf/helm/application/services/eliza-query

helm-chart сервиса eliza-query

./conf/helm/application/services/eliza-writer

helm-chart сервиса eliza-writer

./conf/helm/application/services/qdrant

helm-chart сервиса qdrant

./conf/helm/application/services/eliza-stack

helm-chart сервиса eliza-stack

./conf/helm/application/services/eliza-reader

helm-chart сервиса eliza-reader

GDCS

./conf/helm/application/site

helm-chart сервиса отображения документации на основе Nginx

./conf/helm/application/services/app-chat

helm-chart сервиса app-chat

./conf/helm/application/services/app-styleguide

helm-chart сервиса app-styleguide

Подготовка окружения#

  1. Переключитесь на нужный контекст:

    kubectl config get-contexts
    kubectl config use-context <your-context>
    
  2. Создайте пространства имен. Создание всех пространств имен требуется только при первичной установке:

    kubectl create ns argo-wf
    kubectl create ns getdocs
    
    # для установки ИИ
    kubectl create ns eliza
    
    # для интеграции с системой управления идентификацией и контролем доступа
    kubectl create ns morris
    

    Для промышленных инсталляций настоятельно рекомендуется установка с интеграцией с системой управления идентификацией и контролем доступа.

    При обновлении создавать/изменять требуется только то, что указано в таблице с информацией по обновлению:

    Пространство имен

    2.6

    getdocs

    не требует обновления

    morris

    не требует обновления

    argo-wf

    не требует обновления

    eliza

    требует определения

  3. Создайте следующие Kubernetes секреты. Создание всех секретов требуется только при первичной установке. При обновлении создавать/изменять требуется только то, что указано в таблице с информацией по обновлению:

    Пространство имен

    Имя секрета

    Тип

    2.6

    argo-wf

    nexus-imagepull

    kubernetes.io/dockerconfigjson

    не требует обновления

    getdocs-tls

    kubernetes.io/tls

    не требует обновления

    argo-server-sso

    Opaque

    не требует обновления

    getdocs

    nexus-imagepull

    kubernetes.io/dockerconfigjson

    не требует обновления

    getdocs-tls

    kubernetes.io/tls

    не требует обновления

    getdocs-ssh

    Opaque

    требует обновления

    mvn-settings

    Opaque

    не требует обновления

    s3-creds

    Opaque

    не требует обновления

    nexus

    Opaque

    не требует обновления

    eliza-creds

    Opaque

    требует определения

    site

    Opaque

    требует определения

    eliza

    nexus-imagepull

    kubernetes.io/dockerconfigjson

    требует определения

    getdocs-tls

    kubernetes.io/tls

    требует определения

    morris

    nexus-imagepull

    kubernetes.io/dockerconfigjson

    не требует обновления

    getdocs-tls

    kubernetes.io/tls

    не требует обновления

    morris

    Opaque

    не требует обновления

  4. Проверьте, что все требуемые секреты созданы, с помощью следующих команд:

    kubectl get secrets -n argo-wf
    kubectl get secrets -n getdocs
    kubectl get secrets -n morris
    kubectl get secrets -n eliza
    
  5. Проверьте, что секреты содержат значения, с помощью следующей команды:

    kubectl get secret <YOUR-SECRET-NAME> -n <YOUR-NAMESPACE> -o yaml
    
  6. Создайте PersistentVolumeClaim (PVC) в пространстве имен getdocs:

    # Создание переменных в терминале
    STORAGE_CLASS_NAME=<YOUR-VALUE>
    STORAGE_SIZE=<YOUR-VALUE>
    
    # Создание PVC
    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      labels:
        app.kubernetes.io/part-of: getdocs
      name: getdocs-pvc
      namespace: getdocs
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: $STORAGE_CLASS_NAME
      resources:
        requests:
          storage: $STORAGE_SIZE
    EOF
    
  7. Проверьте, что PersistentVolumeClaim создан и его поле STATUS содержит значение Bound:

    kubectl get pvc getdocs-pvc -n getdocs
    
  8. Создайте в S3 bucket (в инструкции и примерах по умолчанию предполагается использование S3 с именем getdocs).

  9. Создайте служебные репозитории.

Ручная установка GetDocs#

Примечание
Подразумевается, что переменные <YOUR-SITE-HOST> и <YOUR-IAM-SYSTEM-HOST> имеют одно значение для всех сервисов.

Установка GDCE#

Все действия выполняются из корня распакованного архива GDCE-<ВЕРСИЯ-ПРОДУКТА>-<ВЕРСИЯ-СБОРКИ>-distrib.zip, расположенного в архиве GDC-<ВЕРСИЯ-ПРОДУКТА>-owned-distrib.zip.

Установка Morris#

Релиз

Обновление

2.6

не требует обновления

Важно

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

  1. Убедитесь, что создано пространство имен morris, созданы секреты nexus-imagepull, getdocs-tls и morris. Их создание описано в разделе Подготовка окружения.

  2. В файле ./conf/helm/application/infra/morris/values-external.yaml задайте свои значения. Перечень переменных:

    Название

    Тип

    Описание

    Пример значения

    2.6

    configMap.OAUTH2_PROXY_OIDC_ISSUER_URL

    String

    Параметр конфигурации OAuth2 Proxy, который указывает URL-адрес поставщика идентификации (IdP) для OpenID Connect (OIDC). Этот URL используется для получения токена доступа от IdP при аутентификации пользователей

    https://<YOUR-IAM-SYSTEM-HOST>/realms/<YOUR-REALM>

    не требует обновления

    configMap.OAUTH2_PROXY_REDIRECT_URL

    String

    Параметр конфигурации OAuth2 Proxy, который указывает URL-адрес обратного перенаправления после успешной аутентификации пользователя с использованием стороннего поставщика аутентификации

    https://<YOUR-SITE-HOST>/oauth2/callback

    не требует обновления

    configMap.OAUTH2_PROXY_WHITELIST_DOMAINS

    String

    Параметр конфигурации OAuth2 Proxy, который определяет список доменов, которым разрешено обращаться к защищенным ресурсам через прокси

    "<YOUR-SITE-HOST>, <YOUR-SUBDOMAIN-SITE-HOST>"

    не требует обновления

    ingress.className

    String

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

    nginx

    не требует обновления

    ingress.hosts[0]

    String

    Хост в первом правиле входящего трафика объекта Ingress. В этом значении указывается домен, к которому применяются правила маршрутизации и балансировки нагрузки

    <YOUR-SITE-HOST>

    не требует обновления

    ingress.tls[0].hosts

    List

    Хосты в первом объекте TLS, связанном с объектом Ingress. В этом значении указываются домены, для которых будет использоваться сертификат TLS для шифрования трафика и обеспечения безопасности связи между клиентами и сервером

    <YOUR-SITE-HOST>

    не требует обновления

    redis.pvc.storage

    String

    Размер хранилища, которое будет использовать Redis

    300Mi

    не требует обновления

    Более подробную информацию по настройке можно найти на сайте соответствующего проекта:

  3. Установите helm-chart:

    helm upgrade --install morris ./conf/helm/application/infra/morris/ --values=./conf/helm/application/infra/morris/values-external.yaml -n morris --debug
    
  4. Проверьте, что helm-chart установлен. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение deployed:

    helm list -n morris
    
  5. Проверьте, что pods запущены и имеют корректный статус. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение Running:

    kubectl get pods -n morris
    

    Если статус отличается от Running, необходима дополнительная диагностика.

Установка Argo Workflows#

Релиз

Обновление

2.6

не требует обновления

  1. Убедитесь, что создано пространство имен argo-wf, созданы секреты nexus-imagepull, getdocs-tls и argo-server-sso. Их создание описано в разделе Подготовка окружения.

  2. В файле ./conf/helm/application/infra/argo-workflows/values-external.yaml задайте свои значения. Перечень переменных:

    Название

    Тип

    Описание

    Пример значения

    2.6

    server.ingress.tls[0].hosts

    List

    Домены, для которых будет использоваться сертификат TLS для шифрования трафика и обеспечения безопасности связи между клиентами и сервером

    ["<YOUR-SITE-HOST>"]

    не требует обновления

    server.ingress.hosts[0]

    String

    Хост в первом правиле входящего трафика объекта Ingress. В этом значении указывается домен, к которому применяются правила маршрутизации и балансировки нагрузки

    <YOUR-SITE-HOST>

    не требует обновления

    server.sso.enabled

    bool

    Включает или отключает интеграцию с системой управления идентификацией и контролем доступа. Отключение данной опции рекомендуется только для тестовых инсталляций

    true

    не требует обновления

    server.sso.issuer

    String

    (Используется при интеграции с системой управления идентификацией и контролем доступа)
    Корневой URL-адрес поставщика идентификации OIDC

    https://<YOUR-IAM-SYSTEM-HOST>/realms/<YOUR-REALM>

    не требует обновления

    server.sso.redirectUrl

    String

    (Используется при интеграции с системой управления идентификацией и контролем доступа)
    Корневой URL-адрес поставщика идентификации OIDC

    https://<YOUR-SITE-HOST>/argowf/oauth2/callback

    не требует обновления

    server.extraArgs

    List

    Дополнительные аргументы для настройки интеграции с системой управления идентификацией и контролем доступа.

    - для включенной интеграции:
    ["--auth-mode=client", "--auth-mode=sso"]
    - для отключенной интеграции:
    ["--auth-mode=client", "--auth-mode=server"]

    не требует обновления

    Более подробную информацию по настройке можно найти на сайте соответствующего проекта:

  3. Добавьте репозиторий argo:

    helm repo add argo https://argoproj.github.io/argo-helm
    
  4. Установите helm-chart:

    helm -n argo-wf upgrade --install -f ./conf/helm/application/infra/argo-workflows/values-external.yaml argo-workflows argo/argo-workflows --version 0.41.2
    
  5. Проверьте, что helm-chart установлен. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение deployed:

    helm list -n argo-wf
    
  6. Проверьте, что pods запущены и имеют корректный статус. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение Running:

    kubectl get pods -n argo-wf
    

    Если статус отличается от Running, необходима дополнительная диагностика.

После установки argo-workflows будет доступен по адресу https://<YOUR-SITE-HOST>/argowf/.

Установка workflows#

Релиз

Обновление

2.6

требует обновления

Важно

  1. В файле ./conf/helm/application/services/workflows/values-external.yaml задайте свои значения. Перечень переменных:

    Название

    Тип

    Описание

    Пример значения

    2.6

    s3.bucket

    String

    Название S3 bucket для хранения артефактов результатов работы workflows

    getdocs

    не требует обновления

    s3.endpoint

    String

    Регион-специфичный URL, указывающий на конечную точку доступа к S3 bucket

    region.my-domain.ru

    не требует обновления

    *.image.registry

    String

    Реестр образов Docker, используемый для развертывания сервисов

    docker.io

    не требует обновления

    *.image.repository

    String

    Адрес репозитория, из которого нужно скачать образ для развертывания сервисов

    не требует обновления

    extractor.configmap.gitSshServerUrls

    String

    Список поддерживаемых Git-хостингов

    <YOUR-GIT-LOCATION>=<YOUR-GIT-TYPE>,ssh://git@<YOUR-GIT-SSH-PREFIX>;..:<YOUR-GIT-LOCATION-N>=<YOUR-GIT-TYPE>,ssh://git@<YOUR-GIT-SSH-PREFIX-N>;
    В переменной <YOUR-GIT-TYPE> возможны только следующие значения: bitbucket, gitlab, gitverse, gitea, sourcecontrol.
    В переменной <YOUR-GIT-LOCATION> необходимо указывать адрес GIT-сервера для доступа по HTTPS без указания протокола. В переменной <YOUR-GIT-SSH-PREFIX> указывается адрес GIT-сервера для доступа по SSH: bitbucket.ru:8999/bitbucket-ci=bitbucket,ssh://git@bitbucket.ru:8999;

    не требует обновления

    loader.configmap.site_url

    String

    Адрес сайта, по которому будет доступна собранная документация

    https://<YOUR-SITE-HOST>

    не требует обновления

    loader.configmap.ELIZA_API_BASE_URL

    String

    Адрес endpoint, по которому доступен ИИ Eliza. Через этот endpoint осуществляется индексация собираемой документации для дальнейшей возможности поиска через чат-бот. Значение по умолчанию http://<YOUR-SITE-HOST>/api/v1/. Предполагается, что чат-бот и API будут доступны по тому же адресу, что и сайт с документацией. Настройка endpoint производится в разделе Установка Eliza index

    http://<YOUR-SITE-HOST>/api/v1/

    требует определения

    loader.configmap.ELIZA_INDEX

    String

    Название коллекции в векторной базе, которая будет использоваться для хранения векторов. В переменной возможно только следующее значение: getdocs. Информация по установке векторной базы и настройка индекса(коллекции) описана в разделе Установка векторной базы Qdrant

    getdocs

    требует определения

    configmap.SITE_TEMPLATE_REPO_URL

    String

    SSH-ссылка на репозиторий шаблона сайта (его создание описано в разделе Создание служебных репозиториев)

    ssh://git@<YOUR-GIT-HOST>/<YOUR-PROJECT>/<YOUR-GIT-REPO-NAME>

    не требует обновления

    configmap.SITE_TEMPLATE_REPO_BRANCH

    String

    Название ветки репозитория шаблона сайта

    master

    не требует обновления

    configmap.SITE_CONFIG_REPO_URL

    String

    SSH-ссылка на репозиторий с конфигурацией сайта (его создание описано в разделе Создание служебных репозиториев)

    ssh://git@<YOUR-GIT-HOST>/<YOUR-PROJECT>/content-configuration

    не требует обновления

    configmap.SITE_CONFIG_REPO_BRANCH

    String

    Ветка репозитория с конфигурацией сайта

    master

    не требует обновления

    configmap.VALIDATION_RULES_REPO_URL

    String

    SSH-ссылка на репозиторий с правилами валидации (его создание описано в разделе Создание служебных репозиториев)

    ssh://git@<YOUR-GIT-HOST>/<YOUR-PROJECT>/<YOUR-GIT-REPO-NAME>

    не требует обновления

    configmap.VALIDATION_RULES_REPO_BRANCH

    String

    Название ветки репозитория с правилами валидации

    master

    не требует обновления

    aiValidator.configmap.NER_BASE_URL

    String

    Ссылка на endpoint named-entity recognition (NER), который будет использоваться для ИИ-валидации. Предполагается, что будет использоваться адрес <YOUR-SITE-HOST>/api/v1/stack/entities

    https://example.com/api/v1/stack/entities

    требует определения

    aiValidator.configmap.NER_MODEL_NAME

    String

    Указывается название модели, которая будет использоваться для ИИ-валидации. В переменной возможно только следующее значение: ruBERT-getdocs. Для корректной валидации необходимо обучать модели на своих данных

    ruBERT-getdocs

    требует определения

    transformer.configmap.AI_CHAT_STYLEGUIDE_IMPORT_URL

    String

    Адрес, по которому на сайт загружаются стили для чат-бота. Для работы необходимо наличие сервиса app-styleguide. Значение должно быть задано следующим образом: //<YOUR-APP-STYLEGUIDE-HOST>/sbt-tt-styleguide.js

    //style.example.com/sbt-tt-styleguide.js

    требует определения

    transformer.configmap.AI_CHAT_IMPORT_URL

    String

    Адрес, по которому на сайт загружается чат-бот. Для работы необходим сервис app-chat. Значение должно быть задано следующим образом: //<<YOUR-APP-CHAT-HOST>/sbt-tt-chat.js

    //chat.example.com/sbt-tt-chat.js

    требует определения

    Примечание

    В личном кабинете клиента образ будет именоваться по шаблону getdocs2-<название-сервиса>. Например, для сервиса loader образ будет называться getdocs2-loader.

В состав дистрибутива входит workflow валидации изображений validate-doc-images. Для его включения добавьте блок imageValidator в файл ./conf/helm/application/services/workflows/values-external.yaml, как показано ниже:

imageValidator:
  image:
    registry: ""
    repository: getdocs2-image-validator
    tag: 2.6.6
  imagePullPolicy: Always
  resources:
    limits:
      memory: 10Gi
    requests:
      cpu: 500m
      memory: 16Mi
  1. Установите helm-chart:

    helm upgrade --install workflows ./conf/helm/application/services/workflows/ --values=./conf/helm/application/services/workflows/values-external.yaml -n getdocs --debug
    
  2. Проверьте, что helm-chart установлен. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение deployed:

    helm list -n getdocs | grep workflows
    
  3. Проверьте, что Workflows установлены:

    kubectl get workflowtemplate -n getdocs
    

После установки все workflows доступны по адресу https://<YOUR-SITE-HOST>/argowf/workflow-templates/getdocs.

Для корректной работы GetDocs запустите синхронизацию файлов конфигурации из Git в docstorage. Для этого выполните следующие шаги:

  1. Перейдите по ссылке https://<YOUR-SITE-HOST>/argowf/cron-workflows/getdocs/config-sync-cron.

  2. Нажмите SUBMIT и дождитесь окончания выполнения синхронизации.

Установка s3-sync#

Релиз

Обновление

2.6

не требует обновления

  1. В файле ./conf/helm/application/infra/s3-sync задайте свои значения. Перечень переменных:

    Название

    Тип

    Описание

    Пример значения

    2.6

    s3.bucket

    String

    Название S3 bucket для хранения артефактов результатов работы workflows

    getdocs

    не требует обновления

    s3.endpoint

    String

    Регион-специфичный URL, указывающий на конечную точку доступа к S3 bucket

    region.my-domain.ru

    не требует обновления

    s3.upload_cutoff

    String

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

    не требует обновления

    Примечание

    Более подробную информацию по настройке Rclone можно найти на сайте проекта: https://rclone.org/s3/.

  2. Установите helm-chart:

    helm upgrade --install s3-sync ./conf/helm/application/s3-sync/ -n getdocs -f ./conf/helm/application/s3-sync/values-external.yaml --debug
    
  3. Проверьте, что helm-chart установлен. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение deployed:

    helm list -n getdocs --filter s3-sync
    
  4. Проверьте наличие CronJob в пространстве имен getdocs:

    kubectl get cronjob s3-sync-cronjob -n getdocs
    

Установка GDCS#

Релиз

Обновление

2.6

не требует обновления

Все действия выполняются из корня распакованного архива GDCS-<ВЕРСИЯ-ПРОДУКТА>-<ВЕРСИЯ-СБОРКИ>-distrib.zip, расположенного в архиве GDC-<ВЕРСИЯ-ПРОДУКТА>-owned-distrib.zip.

  1. В файле ./conf/helm/application/services/site/values-external.yaml задайте свои значения. Перечень переменных:

    Название

    Тип

    Описание

    Пример значения

    2.6

    .image.registry

    String

    Реестр образов Docker, используемый для развертывания сервисов

    не требует обновления

    .image.repository

    String

    Адрес репозитория, из которого нужно скачать образ для развертывания сервисов. В личном кабинете клиента образ будет именоваться по шаблону */getdocs2-site

    не требует обновления

    ingress.hosts[0]

    String

    Хост в первом правиле входящего трафика объекта Ingress. В этом значении указывается домен, к которому применяются правила маршрутизации и балансировки нагрузки

    <YOUR-SITE-HOST>

    не требует обновления

    ingress.tls[0].hosts

    List

    Хосты в первом объекте TLS, связанном с объектом Ingress. В этом значении указываются домены, для которых будет использоваться сертификат TLS для шифрования трафика и обеспечения безопасности связи между клиентами и сервером

    ["<YOUR-SITE-HOST>"]

    не требует обновления

    ingress.annotations

    List

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

    Оставьте стандартные значения, если настроена интеграция с системой управления идентификацией и контролем доступа. Если интеграция не предусмотрена, удалите этот блок

    не требует обновления

    configmap.GETDOCS_SIGNOUT_URL

    String

    Параметр, который определяет адрес для выхода из системы

    /oauth2/sign_out?rd=https%3A%2F%2F<YOUR-IAM-SYSTEM-HOST>%2Frealms%2F<YOUR-REALM>%2Fprotocol%2Fopenid-connect%2Flogout?redirect_uri=$http_referer

    не требует обновления

    configMap.GETDOCS_GUIDE_URL

    String

    Ссылка на документацию продукта GetDocs

    не требует обновления

    configMap.GETDOCS_ARGOWF_URL

    String

    Ссылка на Argo Workflows. При установке в строгом соответствии с инструкцией, адрес имеет следующий вид: <YOUR-SITE-HOST>/argowf/workflows/getdocs

    <YOUR-SITE-HOST>/argowf/workflows/getdocs

    не требует обновления

    configMap.GETDOCS_ARGO_PROXY_PASS

    String

    Адрес API Argo Workflows, на который будут отправляться запросы для запуска Workflows

    http://argo-workflows-server:2746

    требует определения

    configMap.GETDOCS_ARGO_NAMESPACE

    String

    Указывается пространство имен, в котором будут запускаться workflows. Предполагается, что будет использоваться пространство имен getdocs

    getdocs

    требует определения

    Примечание

    В личном кабинете клиента образ называется getdocs2-site.

  2. Установите helm-chart:

    helm upgrade --install site ./conf/helm/application/services/site/ -n getdocs -f ./conf/helm/application/services/site/values-external.yaml --debug
    
  3. Проверьте, что helm-chart установлен. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение deployed:

    helm list -n getdocs --filter site
    
  4. Проверьте, что pods запущены и имеют корректный статус. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение Running:

    kubectl get pods -n getdocs -l app.kubernetes.io/name=site
    

    Если статус отличается от Running, необходима дополнительная диагностика.

Создание Kubernetes секретов#

nexus-imagepull#

  1. В терминале задайте следующие переменные с адресом Docker реестра, а также логином и паролем для авторизации в этом реестре:

    DOCKER_SERVER=<YOUR-VALUE>
    DOCKER_USER=<YOUR-VALUE>
    DOCKER_PASS=<YOUR-VALUE>
    
  2. Для пространства имен morris выполните следующее:

    Важно

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

    kubectl create -n morris secret docker-registry nexus-imagepull \
    --docker-server=${DOCKER_SERVER} --docker-username=${DOCKER_USER} \
    --docker-password=${DOCKER_PASS} --docker-email=""
    
  3. Для пространства имен argo-wf выполните следующее:

    kubectl create -n argo-wf secret docker-registry nexus-imagepull \
    --docker-server=${DOCKER_SERVER} --docker-username=${DOCKER_USER} \
    --docker-password=${DOCKER_PASS} --docker-email=""
    
  4. Для пространства имен getdocs выполните следующее:

    kubectl create -n getdocs secret docker-registry nexus-imagepull \
    --docker-server=${DOCKER_SERVER} --docker-username=${DOCKER_USER} \
    --docker-password=${DOCKER_PASS} --docker-email=""
    
  5. Для пространства имен eliza выполните следующее:

    kubectl create -n eliza secret docker-registry nexus-imagepull \
    --docker-server=${DOCKER_SERVER} --docker-username=${DOCKER_USER} \
    --docker-password=${DOCKER_PASS} --docker-email=""
    

getdocs-tls#

Данный секрет используется для HTTPS-подключения в сервисах argo-workflows, morris и getdocs.

  1. В переменной TLS_CERT задайте путь до файла с цепочкой сертификатов и в переменной TLS_KEY - путь до файла с приватным ключом:

    TLS_CERT=path/to/cert/file
    TLS_KEY=path/to/key/file
    
  2. Для следующих пространств имен создайте секрет:

    • morris:

      Важно

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

      kubectl create -n morris secret tls getdocs-tls --cert=${TLS_CERT}--key=${TLS_KEY};
      
    • argo-wf:

      kubectl create -n argo-wf secret tls getdocs-tls --cert=${TLS_CERT} --key=${TLS_KEY};
      
    • getdocs:

      kubectl create -n getdocs secret tls getdocs-tls --cert=${TLS_CERT}--key=${TLS_KEY};
      
    • eliza:

      kubectl create -n eliza secret tls getdocs-tls --cert=${TLS_CERT} --key=${TLS_KEY};
      

getdocs-ssh#

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

  1. Задайте переменные OAUTH2_PROXY_CLIENT_ID и OAUTH2_PROXY_CLIENT_SECRET:

    OAUTH2_PROXY_CLIENT_ID=<YOUR_CLIENT-ID>
    OAUTH2_PROXY_CLIENT_SECRET=<YOUR_CLIENT-SECRET>
    
  2. В переменной SSH_PRIVATE_KEY задайте путь к файлу с OPENSSH PRIVATE KEY:

    SSH_PRIVATE_KEY=path/to/private_key/file
    
  3. Создайте секрет:

    kubectl create -n getdocs  secret generic getdocs-ssh \
     --from-file=id_ed25519=${SSH_PRIVATE_KEY};
    

site#

  1. Создайте токен Argo Workflows, используя следующие команды:

    kubectl -n argo-wf create sa sa-site
    
    kubectl -n getdocs create rolebinding sa-site --role=argo-workflows-rx --serviceaccount=argo-wf:sa-site
    
    kubectl -n argo-wf apply -f - <<EOF
    apiVersion: v1
    kind: Secret
    metadata:
    name: sa-site.service-account-token
    annotations:
       kubernetes.io/service-account.name: sa-site
    type: kubernetes.io/service-account-token
    EOF
    
  2. После создания токена укажите его в переменной ARGO_TOKEN:

    ARGO_TOKEN="Bearer $(kubectl -n argo-wf get secret "$SA_NAME.service-account-token" -o=jsonpath='{.data.token}' | base64 --decode)"
    
  3. Создайте секрет:

    kubectl create -n getdocs secret generic site --from-file=ARGO_TOKEN=${ARGO_TOKEN}; 
    

mvn-settings#

  1. Создайте файл settings.xml в соответствии с примером ниже:

    <settings>
        <servers>
            <server>
                <id>foss-repository</id>
                <configuration>
                    <httpHeaders>
                        <property>
                            <name>Authorization</name>
                            <value>Basic**YOUR-BASIC-AUTH**</value>
                        </property>
                    </httpHeaders>
                </configuration>
            </server>
            <server>
                <id>public</id>
                <username>**YOUR-USERNAME**</username>
                <password>**YOUR-PASSWD**</password>
            </server>
            <server>
                <id>internal</id>
                <username>**YOUR-USERNAME**</username>
                <password>**YOUR-PASSWD**</password>
            </server>
        </servers>
        <mirrors>
        ...
        </mirrors>
        <profiles>
            <profile>
                <id>nexus</id>
                <repositories>
                    <repository>
                        <id>public</id>
                        <url>**REPO-URL**</url>
                    </repository>
                    ...
                </repositories>
                <pluginRepositories>
                    <pluginRepository>
                        <id>public</id>
                        <url>**REPO-URL**</url>
                    </pluginRepository>
                    ...
                </pluginRepositories>
            </profile>
        </profiles>
        <activeProfiles>
            <activeProfile>nexus</activeProfile>
        </activeProfiles>
    </settings>
    
  2. Замените следующие плейсхолдеры в settings.xml актуальными значениями:

    Название

    Тип

    Описание

    **YOUR-BASIC-AUTH**

    String

    base64-кодированная связка логин/пароль

    **YOU-USERNAME**

    String

    Логин от Maven репозитория

    **YOU-PASSWD**

    String

    Пароль от Maven репозитория

    **YOU-PASSWD**

    String

    Пароль от Maven репозитория

    **REPO-URL**

    String

    URL соответствующих Maven репозиториев

  3. В переменной SETTINGS_XML задайте путь к файлу settings.xml:

    SETTINGS_XML=path/to/settings.xml
    
  4. Создайте секрет:

    kubectl create -n getdocs secret generic mvn-settings --from-file=settings.xml=${SETTINGS_XML}
    

morris#

Важно

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

  1. В переменной OAUTH2_PROXY_CLIENT_ID задайте Client ID от Clinet в IDP и в переменной OAUTH2_PROXY_CLIENT_SECRET - Client Secret от Clinet в IDP. Client Authenticator должна быть Client ID and Secret:

    OAUTH2_PROXY_CLIENT_ID=<YOUR_CLIENT_ID>
    OAUTH2_PROXY_CLIENT_SECRET=<YOUR_CLIENT_SECRET>
    OAUTH2_PROXY_COOKIE_SECRET=$(python3 -c 'import os,base64; print(base64.b64encode(os.urandom(16)).decode("ascii"))')
    
  2. Создайте секрет:

    kubectl create -n morris secret generic morris \
    --from-literal=OAUTH2_PROXY_CLIENT_ID=${OAUTH2_PROXY_CLIENT_ID} \
    --from-literal=OAUTH2_PROXY_CLIENT_SECRET=${OAUTH2_PROXY_CLIENT_SECRET} \
    --from-literal=OAUTH2_PROXY_COOKIE_SECRET=${OAUTH2_PROXY_COOKIE_SECRET};
    

s3-creds#

  1. Укажите в переменной ACCESS_KEY Access Key ID и в переменной SECRET_KEY - Secret Key для подключения к хранилищу S3:

    ACCESS_KEY=<YOUR_ACCESS_KEY>
    SECRET_KEY=<YOUR_SECRET_KEY>
    
  2. Создайте секрет:

    kubectl create -n getdocs secret generic s3-creds \
    --from-literal=accessKey=${ACCESS_KEY} \
    --from-literal=secretKey=${SECRET_KEY};
    

argo-server-sso#

  1. В переменной CLIENT_ID укажите Client ID от Clinet в IDP и в переменной CLIENT_SECRET - Client Secret от Clinet в IDP. Client Authenticator должна быть Client ID and Secret. Предполагается, что сервисы Morris и Argo Workflows используют один и тот же Client в IDP.

    OAUTH2_PROXY_CLIENT_ID=<YOUR_CLIENT_ID>
    OAUTH2_PROXY_CLIENT_SECRET=<YOUR_CLIENT_SECRET>
    
  2. Создайте секрет:

    kubectl create -n argo-wf secret generic argo-server-sso \
    --from-literal=client-id=${OAUTH2_PROXY_CLIENT_ID} \
    --from-literal=client-secret=${OAUTH2_PROXY_CLIENT_SECRET};
    

nexus#

  1. В переменной NEXUS_USER укажите логин пользователя и в переменной NEXUS_PASS - пароль для подключения к Nexus:

    NEXUS_USER=<YOUR_NEXUS_USER>
    NEXUS_PASS=<YOUR_NEXUS_PASSWORD>
    
  2. Создайте секрет:

    kubectl create -n getdocs secret generic nexus \
    --from-literal=NEXUS_PASS=${NEXUS_PASS} \
    --from-literal=NEXUS_USER=${NEXUS_USER}
    

eliza-creds#

  1. Создайте следующие переменные в терминале:

    ELIZA_S3_ACCESS_KEY=<S3_ACCESS_KEY>
    ELIZA_S3_BUCKET=<S3_BUCKE>
    ELIZA_S3_ENDPOINT_URL=<S3_ENDPOINT_URL>
    ELIZA_S3_SECRET_KEY=<S3_SECRET_KEY>
    
  2. Создайте секрет:

    kubectl create -n getdocs secret generic eliza-creds \
    --from-literal=ELIZA_S3_ACCESS_KEY=${ELIZA_S3_ACCESS_KEY} \
    --from-literal=ELIZA_S3_BUCKET=${ELIZA_S3_BUCKET} \
    --from-literal=ELIZA_S3_ENDPOINT_URL=${ELIZA_S3_ENDPOINT_URL} \
    --from-literal=ELIZA_S3_SECRET_KEY=${ELIZA_S3_SECRET_KEY}
    

Создание служебных репозиториев#

Репозиторий шаблона сайта (site-template)#

Релиз

Обновление

2.6

требует обновления

Создайте репозиторий с содержимым папки ./pl/ компонента GDCE.

Репозиторий с конфигурацией сайта (content-configuration)#

Создайте репозиторий со следующей структурой:

site-config/
  product-registry/
    products.json
    components.json
  <PRODUCT-CODE-1>/ # Вариант с отдельным файлом для каждой версии продукта
    <VERSION-11>
      components.ini
    <VERSION-12>
      components.ini
    ...
    <VERSION-1N>
      components.ini
  <PRODUCT-CODE-N>/ # Вариант с единым файлом для всех версий продукта
    components.ini
  ...
  doc-config.ini

Пример структуры каталогов в репозитории конфигурации сайта:

content-configuration/
├── BD/                        // каталог с названием кода продукта
│   ├── 5.11.2/                // каталог с названием версии продукта
│   │   └── components.ini     // файл конфигурации продукта
│   ├── 5.15.0/
│   │   └── components.ini
│   └── ...
├── SEI/
│   ├── 3.7/
│   │   └── components.ini
│   └── ...
└── ...

Минимально необходимым является файл doc-config.ini:

[env]                                                     # Правила сборки
stage: draft, approved, release                           # Пространство для публикации. Доступны: draft - документация в разработке, approved - документация прошла внутренние согласования, release - готовая документация для пользователей
package: <PACKAGE-1>, <PACKAGE-2>, ..., <PACKAGE-N>       # Состав комплекта документации
audience: <AUDIENCE-1>, <AUDIENCE-2>, ..., <AUDIENCE-N>   # Целевая аудитория

# Пользователи, которые могут устанавливать тег release для публикации контента
release-managers:       user1,
                        user2

# Правила группировки документов
# [Имя группы документов]
[Общие документы]
# имя-директории-с-разделом-документации-в-репозитории: отображаемое-на-сайте-название-раздела
about:                  Описание
architecture:           Детальная архитектура
pmi:                    Программа и методика испытаний
release-notes:          Примечания к релизу
sizing:                 Методика расчета сайзинга
deployment-diagrams:    Диаграммы развертывания

[Руководства]
installation-guide:     Руководство по установке
administration-guide:   Руководство по системному администрированию
developer-guide:        Руководство прикладного разработчика
operators-guide:        Руководство оператора
security-guide:         Руководство по безопасности

[*]
*:      {title}

[Дополнительная документация]
*:      {title}

[Справочники API]
apis:   {title}

Репозиторий с правилами валидации (content-validation)#

  1. Загрузите и распакуйте архив с базовыми правилами валидации контента:

    content-validation.zip

  2. Инициализируйте git-репозиторий с разархивированным контентом.

Подробная информация о правилах создания и ведения правил валидации приведена в официальной документации Vale.

Установка Eliza#

Eliza - вопросно-ответная система, основанная на технологии искусственного интеллекта, для поиска информации в документации, опубликованной в GetDocs. Реализована в виде чат-бота. Также используется для валидации корректности указания используемого ПО в системных требованиях в документации и валидации текста на изображениях.

Важно

  • Добавлен в версии продукта 2.6.

  • Чат-бот будет устанавливается на том же кластере, что и GetDocs.

  1. Убедитесь, что создано пространство имен eliza и секреты nexus-imagepull, getdocs-tls, eliza-creds, как описано в разделе Подготовка окружения.

  2. Создайте S3 bucket с именем eliza.

  3. Для работы pods с моделями необходимо создать PVC. Этот volume будет использоваться всеми pods сервиса Eliza, которым нужен доступ к моделям. Размер рассчитывается в зависимости от размера и количества моделей, которые будут использованы. Рекомендуется выделять не менее 10Gi.

Создание PVC#

STORAGE_CLASS_NAME=<YOUR-VALUE>
STORAGE_SIZE=<YOUR-VALUE>
kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name:  pvc-models
  namespace: eliza
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: $STORAGE_CLASS_NAME
  resources:
    requests:
      storage: $STORAGE_SIZE
EOF

Подготовка моделей#

Для работы ИИ необходимо наличие моделей в volume pod, который будет их использовать. При установке администратор самостоятельно выбирает способ загрузки модели в volume. Ниже приведены скрипты, которые помогут загрузить модель в volume.

Следующий скрипт скачивает модели на локальный ПК и архивирует их:

import os
import shutil
import zipfile
from huggingface_hub import snapshot_download


def download_and_archive_models(models_list, output_dir="models"):
    for model_name in models_list:
        print(f"Downloading {model_name}...")

        # Создание директории для сохранения модели, если ее еще нет
        model_output_dir = os.path.join(output_dir, model_name)
        os.makedirs(model_output_dir, exist_ok=True)

        # Скачивание папки модели целиком
        snapshot_download(repo_id=model_name, local_dir=model_output_dir)

        # Архивирование директории модели в ZIP
        archive_path = f"{output_dir}/{model_name}.zip"
        with zipfile.ZipFile(archive_path, "w", compression=zipfile.ZIP_DEFLATED) as zipf:
            for root, dirs, files in os.walk(model_output_dir):
                for file in files:
                    file_path = os.path.join(root, file)
                    relative_path = os.path.relpath(file_path, model_output_dir)
                    zipf.write(file_path, arcname=relative_path)

        # Удаление временной директории с распакованной моделью
        shutil.rmtree(model_output_dir)

        print(f"{model_name} successfully downloaded and archived!")


if __name__ == "__main__":
    models_list = ["intfloat/multilingual-e5-small"]  # Список моделей для скачивания
    download_and_archive_models(models_list)

В models_list укажите через запятую модели для скачивания из https://huggingface.co/ и архивирования.

Далее эти модели можно добавить в ранее созданный PVC. Для этих целей можно использовать команду kubectl cp. Если нет возможности передать файлы через kubectl cp (например не позволяют настройки LoadBalancer в кластере), то можно загрузить модели на S3 вручную и далее с помощью скрипта ниже загрузить их в volume.

Для работы скрипта необходимо, чтобы S3 bucket был настроен на возможность скачивания файлов без указания учетных данных. Для примера используется S3 http://minio.minio-tenant.svc.cluster.local/eliza. Загрузка производится в volume models. Для примера указана загрузка модели intfloat-multilingual-e5-small.

kubectl apply -f - <<EOF
apiVersion: batch/v1
kind: Job
metadata:
   name: models-downloader
   namespace: eliza
spec:
   ttlSecondsAfterFinished: 30
   template:
      spec:
         imagePullSecrets:
         - name:  nexus-imagepull
         volumes:
         - name: models
           persistentVolumeClaim:
               claimName: pvc-models
         tolerations:
         - key: "secGroup"
           operator: "Equal"
           value: "secure"
           effect: "NoSchedule"
         containers:
         - name: models
           image: 'alpine/curl:2.1'
           command: ['sh', '-c', '
               if [ ! -d /models/models--intfloat--multilingual-e5-small ]; 
               then wget http://minio.minio-tenant.svc.cluster.local/eliza/intfloat-multilingual-e5-small.zip -P /models/ ;
               unzip -n /models/intfloat-multilingual-e5-small.zip -d /models/ ; 
               rm -f /models/intfloat-multilingual-e5-small.zip ;  
               else echo " models--intfloat--multilingual-e5-small" ;
               fi ;
               ']
           volumeMounts: 
             - mountPath: /models
               name: models
         restartPolicy: Never
EOF

Установка векторной базы Qdrant#

  1. В файле ./conf/helm/application/services/qdrant/values-external.yaml задайте свои значения. Перечень переменных:

    Название

    Тип

    Описание

    Пример значения

    image.repository

    String

    Адрес репозитория, из которого нужно скачать образ для развертывания сервисов. В личном кабинете клиента образ будет именоваться по шаблону */vectors/qdrant

    qdrant/qdrant

    persistence.size

    String

    Указывается размер хранилища, которое будет выделено под векторную базу. Размер зависит от количества векторов, планируемых для хранения. Рекомендуется указывать не менее 5Gi

    5Gi

    persistence.storageClassName

    String

    Указывается, какой storageClassName будет использоваться при создании volume

    hostpath

  2. Установите helm-chart:

    helm upgrade --install eliza-vectors ./conf/helm/application/services/qdrant --values=./conf/helm/application/services/qdrant/values-external.yaml -n eliza --debug
    
  3. Проверьте, что helm-chart установлен. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение deployed:

    helm list -n eliza --filter eliza-vectors
    
  4. Проверьте, что pods запущены и имеют корректный статус. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение Running:

    kubectl get pods -n eliza -l app.kubernetes.io/name=qdrant
    
  5. Создайте коллекцию (индекс) с именем getdocs и размерность вектора 384 (размер вектора зависит от модели. Если вы используете отличные от указанных в инструкции моделей, то размер индекса может быть другой). Для этого выполните следующее:

    1. Подключитесь к векторной базе:

      kubectl port-forward svc/eliza-vectors-qdrant -n eliza 6333:6333
      
    2. Отправьте запрос через HTTP:

      curl --location --request PUT 'http://localhost:6333/collections/getdocs' \
      --header 'Content-Type: application/json' \
      --data-raw '{
         "vectors": {
            "size": 384,
            "distance": "Cosine"
         }
      }'
      
    3. Проверьте, что коллекция создана:

      curl --location --request GET 'http://localhost:6333/collections/getdocs/exists'
      

      Если получено значение exist, то коллекция создана успешно.

Установка Eliza index#

  1. В файле ./conf/helm/application/services/index/values-external.yaml задайте свои значения. Перечень переменных:

    Название

    Тип

    Описание

    Пример значения

    image.repository

    String

    Адрес репозитория (обратите внимание, что ранее registry и repository указывались раздельно. Теперь под repository подразумевается полный путь до Docker-образа без указания тега), из которого нужно скачать образ для развертывания сервисов. В личном кабинете клиента образ будет именоваться по шаблону */eliza/index

    eliza/index

    ingress.className

    String

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

    nginx

    ingress.hosts[0]

    String

    Хост в первом правиле входящего трафика объекта Ingress. В этом значении указывается домен, к которому применяются правила маршрутизации и балансировки нагрузки

    <YOUR-SITE-HOST>

    ingress.tls[0].hosts

    List

    Хосты в первом объекте TLS, связанном с объектом Ingress. В этом значении указываются домены, для которых будет использоваться сертификат TLS для шифрования трафика и обеспечения безопасности связи между клиентами и сервером

    ["<YOUR-SITE-HOST>"]

    | bucketName | String | Название bucket, в котором будут храниться проиндексированные документы (создание bucket описано в разделе Установка Eliza) | getdocs | | configMap.config.objects.path | String | Адрес S3 хранилища, где создан bucket для проиндексированных документов | http://minio.minio-tenant.svc.cluster.local | | configMap.config.objects.login | String | Логин от S3 хранилища, где создан bucket для проиндексированных документов | getdocs | | configMap.config.objects.password | String | Пароль от S3 хранилища, где создан bucket для проиндексированных документов | getdocs |

  2. Установите helm-chart:

    helm upgrade --install eliza-index  ./conf/helm/application/services/eliza-index --values=./conf/helm/application/services/eliza-index/values-external.yaml -n eliza --debug
    
  3. Проверьте, что helm-chart установлен. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение deployed:

    helm list -n eliza --filter eliza-index 
    
  4. Проверьте, что pods запущены и имеют корректный статус. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение Running:

    kubectl get pods -n eliza -l app.kubernetes.io/name=eliza-index 
    

Установка Eliza converter#

  1. В файле ./conf/helm/application/services/converter/values-external.yaml задайте свои значения. Перечень переменных:

    Название

    Тип

    Описание

    Пример значения

    image.repository

    String

    Адрес репозитория (обратите внимание, что ранее registry и repository указывались раздельно. Теперь под repository подразумевается полный путь до Docker-образа без указания тега), из которого нужно скачать образ для развертывания сервисов. В личном кабинете клиента образ будет именоваться по шаблону */apache/tika.

    apache/tika

  2. Установите helm-chart:

    helm upgrade --install eliza-converter ./conf/helm/application/services/eliza-converter --values=./conf/helm/application/services/eliza-converter/values-external.yaml -n eliza --debug
    
  3. Проверьте, что helm-chart установлен. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение deployed:

    helm list -n eliza --filter eliza-converter
    
  4. Проверьте, что pods запущены и имеют корректный статус. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение Running:

    kubectl get pods -n eliza -l app.kubernetes.io/name=eliza-converter
    

Установка Eliza bge embedder#

  1. По умолчанию используется языковая модель BAAI/bge-m3. Если требуется другая модель, подготовьте ее следующим образом:

    1. В volume data в папку /data скачайте модель.

    2. В файле ./conf/helm/application/services/eliza-bge-embedder/templates/deployment.yaml в .spec.template.spec.containers[0].env для MODEL_ID укажите путь до модели относительно /data.

  2. В файле ./conf/helm/application/services/eliza-bge-embedder/values-external.yaml задайте свои значения. Перечень переменных:

    Название

    Тип

    Описание

    Пример значения

    image.repository

    String

    Адрес репозитория (обратите внимание, что ранее registry и repository указывались раздельно. Теперь под repository подразумевается полный путь до Docker-образа без указания тега), из которого нужно скачать образ для развертывания сервисов. В личном кабинете клиента образ будет именоваться по шаблону */huggingface/text-embeddings-inference

    eliza/huggingface/text-embeddings-inference

    ingress.hosts[0]

    String

    Хост в первом правиле входящего трафика объекта Ingress. В этом значении указывается домен, к которому применяются правила маршрутизации и балансировки нагрузки

    <YOUR-SITE-HOST>

  3. Установите helm-chart:

    helm upgrade --install eliza-bge-embedder ./conf/helm/application/services/eliza-bge-embedder --values=./conf/helm/application/services/eliza-bge-embedder/values-external.yaml -n eliza --debug
    
  4. Проверьте, что helm-chart установлен. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение deployed:

    helm list -n eliza --filter eliza-bge-embedder
    
  5. Проверьте, что pods запущены и имеют корректный статус. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение Running:

    kubectl get pods -n eliza -l app.kubernetes.io/name=eliza-bge-embedder
    

Установка Eliza embedder#

  1. По умолчанию используется языковая модель intfloat/multilingual-e5-small. Если требуется другая модель, подготовьте ее следующим образом:

    1. В volume data в папку /data скачайте модель.

    2. В ./conf/helm/application/services/eliza-embedder/templates/deployment.yaml в .spec.template.spec.containers[0].env для MODEL_ID укажите путь до модели относительно /data.

  2. В файле ./conf/helm/application/services/eliza-embedder/values-external.yaml задайте свои значения. Перечень переменных:

    Название

    Тип

    Описание

    Пример значения

    image.repository

    String

    Адрес репозитория (обратите внимание, что ранее registry и repository указывались раздельно. Теперь под repository подразумевается полный путь до Docker-образа без указания тега), из которого нужно скачать образ для развертывания сервисов. В личном кабинете клиента образ будет именоваться по шаблону */huggingface/text-embeddings-inference

    eliza/huggingface/text-embeddings-inference

    ingress.hosts[0]

    String

    Хост в первом правиле входящего трафика объекта Ingress. В этом значении указывается домен, к которому применяются правила маршрутизации и балансировки нагрузки

    <YOUR-SITE-HOST>

  3. Установите helm-chart:

    helm upgrade --install eliza-embedder ./conf/helm/application/services/eliza-embedder --values=./conf/helm/application/services/eliza-embedder/values-external.yaml -n eliza --debug
    
  4. Проверьте, что helm-chart установлен. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение deployed:

    helm list -n eliza --filter eliza-embedder
    
  5. Проверьте, что pods запущены и имеют корректный статус. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение Running:

    kubectl get pods -n eliza -l app.kubernetes.io/name=eliza-embedder
    

    Если статус отличается от Running, необходима дополнительная диагностика.

Установка Eliza reader#

  1. По умолчанию используется языковая модель mbert-base-tydiqa. Если требуется другая модель, подготовьте ее следующим образом:

    1. В volume data в папку /data скачайте модель.

    2. В файле ./conf/helm/application/services/eliza-reader/templates/deployment.yaml в .spec.template.spec.containers[0].env:

      • для HF_MODEL_DIR укажите абсолютный путь до модели внутри /data,

      • для HF_TASK укажите тип задачи (по умолчанию - question-answering),

      • для HF_MODEL_ID укажите идентификатор модели.

  2. В файле ./conf/helm/application/services/eliza-reader/values-external.yaml задайте свои значения. Перечень переменных:

    Название

    Тип

    Описание

    Пример значения

    image.repository

    String

    Адрес репозитория (обратите внимание, что ранее registry и repository указывались раздельно. Теперь под repository подразумевается полный путь до Docker-образа без указания тега), из которого нужно скачать образ для развертывания сервисов. В личном кабинете клиента образ будет именоваться по шаблону */eliza/reader

    eliza/reader

  3. Установите helm-chart:

    helm upgrade --install eliza-reader ./conf/helm/application/services/eliza-reader --values=./conf/helm/application/services/eliza-reader/values-external.yaml -n eliza --debug
    
  4. Проверьте, что helm-chart установлен. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение deployed:

    helm list -n eliza --filter eliza-reader
    
  5. Проверьте, что pods запущены и имеют корректный статус. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение Running:

    kubectl get pods -n eliza -l app.kubernetes.io/name=eliza-reader
    

    Если статус отличается от Running, необходима дополнительная диагностика.

Установка Eliza query#

  1. В файле ./conf/helm/application/services/eliza-query/values-external.yaml задайте свои значения. Перечень переменных:

    Название

    Тип

    Описание

    Пример значения

    image.repository

    String

    Адрес репозитория (обратите внимание, что ранее registry и repository указывались раздельно. Теперь под repository подразумевается полный путь до Docker-образа без указания тега), из которого нужно скачать образ для развертывания сервисов. В личном кабинете клиента образ будет именоваться по шаблону */eliza/query"

    eliza/query

    ingress.hosts[0]

    String

    Хост в первом правиле входящего трафика объекта Ingress. В этом значении указывается домен, к которому применяются правила маршрутизации и балансировки нагрузки

    <YOUR-SITE-HOST>

    ingress.tls[0].hosts

    List

    Хосты в первом объекте TLS, связанном с объектом Ingress. В этом значении указываются домены, для которых будет использоваться сертификат TLS для шифрования трафика и обеспечения безопасности связи между клиентами и сервером

    ["<YOUR-SITE-HOST>"]

  2. Установите helm-chart:

    helm upgrade --install eliza-query ./conf/helm/application/services/eliza-query --values=./conf/helm/application/services/eliza-query/values-external.yaml -n eliza --debug
    
  3. Проверьте, что helm-chart установлен. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение deployed:

    helm list -n eliza --filter eliza-query
    
  4. Проверьте, что pods запущены и имеют корректный статус. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение Running:

    kubectl get pods -n eliza -l app.kubernetes.io/name=eliza-query
    

    Если статус отличается от Running, необходима дополнительная диагностика.

Установка Eliza writer#

  1. Скачайте модель https://huggingface.co/Qwen/Qwen2.5-7B-Instruct-GGUF/blob/main/qwen2.5-7b-instruct-q2_k.gguf и добавьте ее в S3 bucket eliza.

  2. В файле ./conf/helm/application/services/eliza-writer/values-external.yaml задайте свои значения. Перечень переменных:

    Название

    Тип

    Описание

    Пример значения

    initContainer.commnad

    String

    Указывается команда, с помощью которой будет будет производится загрузка модели из S3 в контейнер. По умолчанию используется адрес S3 http://minio.minio-tenant.svc.cluster.local/. Если используется другой адрес S3, замените minio.minio-tenant.svc.cluster.local на используемый

    "['sh', '-c', 'wget <S3_ENDPOINT_URL>/eliza/qwen2.5-7b-instruct-q2_k.gguf -P /data']"

    ingress.hosts[0]

    String

    Хост в первом правиле входящего трафика объекта Ingress. В этом значении указывается домен, к которому применяются правила маршрутизации и балансировки нагрузки

    <YOUR-SITE-HOST>

    ingress.tls[0].hosts

    List

    Хосты в первом объекте TLS, связанном с объектом Ingress. В этом значении указываются домены, для которых будет использоваться сертификат TLS для шифрования трафика и обеспечения безопасности связи между клиентами и сервером

    ["<YOUR-SITE-HOST>"]

  3. Установите helm-chart:

    helm upgrade --install eliza-writer ./conf/helm/application/services/eliza-writer --values=./conf/helm/application/services/eliza-writer/values-external.yaml -n eliza --debug
    
  4. Проверьте, что helm-chart установлен. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение deployed:

    helm list -n eliza --filter eliza-writer
    
  5. Проверьте, что pods запущены и имеют корректный статус. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение Running:

    kubectl get pods -n eliza -l app.kubernetes.io/name=eliza-writer
    

    Если статус отличается от Running, необходима дополнительная диагностика.

Установка Eliza stack#

  1. Добавьте свою модель в volume data с названием ruBERT-getdocs. Если собственной дообученной модели нет, загрузите модель ruBERT с сайта https://huggingface.co/, переименуйте ее в ruBERT-getdocs и добавьте в volume data.

  2. В файле ./conf/helm/application/services/eliza-stack/values-external.yaml задайте свои значения. Перечень переменных:

    Название

    Тип

    Описание

    Пример значения

    image.repository

    String

    Адрес репозитория (обратите внимание, что ранее registry и repository указывались раздельно. Теперь под repository подразумевается полный путь до Docker-образа без указания тега), из которого нужно скачать образ для развертывания сервисов. В личном кабинете клиента образ будет именоваться по шаблону */eliza/stack". Также образ можно скачать с ghcr.io/huggingface/text-embeddings-inference:cpu-1.2

    ingress.hosts[0]

    String

    Хост в первом правиле входящего трафика объекта Ingress. В этом значении указывается домен, к которому применяются правила маршрутизации и балансировки нагрузки

    <YOUR-SITE-HOST>

    ingress.tls[0].hosts

    List

    Хосты в первом объекте TLS, связанном с объектом Ingress. В этом значении указываются домены, для которых будет использоваться сертификат TLS для шифрования трафика и обеспечения безопасности связи между клиентами и сервером

    ["<YOUR-SITE-HOST>"]

    configMap.config.s3.bucket

    String

    Имя S3 bucket. Должно совпадать с bucket, который используется в сервисе eliza-index в параметре bucketName

    getdocs

    configMap.config.s3.url

    String

    Адрес S3 хранилища, где создан bucket для проиндексированных документов

    http://minio.minio-tenant.svc.cluster.local

    configMap.config.s3.login

    String

    Логин от S3 хранилища, где создан bucket для проиндексированных документов

    getdocs

    configMap.config.s3.password

    String

    Пароль от S3 хранилища, где создан bucket для проиндексированных документов

    getdocs

  3. Установите helm-chart:

    helm upgrade --install eliza-stack ./conf/helm/application/services/eliza-stack --values=./conf/helm/application/services/eliza-stack/values-external.yaml -n eliza --debug
    
  4. Проверьте, что helm-chart установлен. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение deployed:

    helm list -n eliza --filter eliza-stack 
    
  5. Проверьте, что pods запущены и имеют корректный статус. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение Running:

    kubectl get pods -n eliza -l app.kubernetes.io/name=eliza-stack 
    

    Если статус отличается от Running, необходима дополнительная диагностика.

Установка app-chat#

  1. В файле ./conf/helm/application/services/app-chat/values-external.yaml задайте свои значения. Перечень переменных:

    Название

    Тип

    Описание

    Пример значения

    image.repository

    String

    Адрес репозитория (обратите внимание, что ранее registry и repository указывались раздельно. Теперь под repository подразумевается полный путь до Docker-образа без указания тега), из которого нужно скачать образ для развертывания сервисов. В личном кабинете клиента образ будет именоваться по шаблону */app-chat

    app-chat

    ingress.hosts[0]

    String

    Хост в первом правиле входящего трафика объекта Ingress. В этом значении указывается домен, к которому применяются правила маршрутизации и балансировки нагрузки

    <YOUR-APP-CHAT-HOST>

    ingress.tls[0].hosts

    List

    Хосты в первом объекте TLS, связанном с объектом Ingress. В этом значении указываются домены, для которых будет использоваться сертификат TLS для шифрования трафика и обеспечения безопасности связи между клиентами и сервером

    ["<YOUR-APP-CHAT-HOST>"]

    configMap.ELIZA_CHAT_ELIZA_INDEX

    String

    Название индекса (коллекции), который будет использоваться для получения ответа

    getdocs

    configMap.ELIZA_CHAT_ELIZA_API_URL

    String

    Адрес API Eliza, куда будут отправляться запросы на получение ответа. Необходимо указывать с протоколом http или https

    http://<YOUR-SITE-HOST>/api

  2. Установите helm-chart:

    helm upgrade --install app-chat  ./conf/helm/application/services/app-chat --values=./conf/helm/application/services/app-chat/values-external.yaml -n getdocs --debug
    
  3. Проверьте, что helm-chart установлен. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение deployed:

    helm list -n getdocs --filter app-chat
    
  4. Проверьте, что pods запущены и имеют корректный статус. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение Running:

    kubectl get pods -n getdocs -l app.kubernetes.io/name=app-chat
    

    Если статус отличается от Running, необходима дополнительная диагностика.

Установка app-styleguide#

  1. В файле ./conf/helm/application/services/app-styleguide/values-external.yaml задайте свои значения. Перечень переменных:

    Название

    Тип

    Описание

    Пример значения

    image.repository

    String

    Адрес репозитория, из которого нужно скачать образ для развертывания сервисов. В личном кабинете клиента образ будет именоваться по шаблону */app-styleguide

    app-styleguide

    ingress.hosts[0]

    String

    Хост в первом правиле входящего трафика объекта Ingress. В этом значении указывается домен, к которому применяются правила маршрутизации и балансировки нагрузки

    <YOUR-APP-STYLEGUIDE-HOST>

    ingress.tls[0].hosts

    List

    Хосты в первом объекте TLS, связанном с объектом Ingress. В этом значении указываются домены, для которых будет использоваться сертификат TLS для шифрования трафика и обеспечения безопасности связи между клиентами и сервером

    ["<YOUR-APP-STYLEGUIDE-HOST>"]

  2. Установите helm-chart:

    helm upgrade --install app-styleguide ./conf/helm/application/services/app-styleguide --values=./conf/helm/application/services/app-styleguide/values-external.yaml -n getdocs --debug
    
  3. Проверьте, что helm-chart установлен. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение deployed:

    helm list -n getdocs --filter app-styleguide
    
  4. Проверьте, что pods запущены и имеют корректный статус. Для этого выполните следующую команду и убедитесь, что поле STATUS содержит значение Running:

    kubectl get pods -n getdocs -l app.kubernetes.io/name=app-styleguide
    

    Если статус отличается от Running, необходима дополнительная диагностика.

Чек-лист валидации установки#

Убедитесь, что были выполнены все перечисленные ниже действия:

Чек-лист проверки корректности работы#

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

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

  2. В браузере откройте главную страницу Argo Workflow и авторизуйтесь.

  3. Запустите workflow build-doc для подготовленного репозитория с документацией и дождитесь его успешного завершения.

  4. Откройте отчет сборки и перейдите по ссылке на собранную документацию.

    Успешно открывшийся сайт с документацией подтверждает корректность установки продукта.