﻿# Установка ELMA Bot в Kubernetes

> [HTML Version](kubernetes-elma-bot.html)

ELMA Bot On‑Premises можно установить:

- [в Kubernetes‑кластер в закрытом окружении](elma-bot-in-private-registry.md);

- в уже существующий Kubernetes-кластер. Способ рассматривается в этой статье.

ELMA Bot поставляется в виде двух Helm‑чартов: 

- **elma-bot-dbs**  — набор баз данных и хранилищ, необходимых для работы ELMA Bot. Также есть возможность использовать собственные базы данных Elasticsearch, MongoDB, Redis, RabbitMQ, хранилище S3, указав строки подключения к ним в файле \[OBJECT\] чарта **elma-bot**. При этом в файле \[OBJECT\] установку соответствующих компонентов можно отключить, выставив значение \[OBJECT\], например, для PostgreSQL: \[OBJECT\]. Если все пять компонентов чарта будут выставлены в \[OBJECT\], то установка этого чарта не требуется. Подробнее о создании баз данных читайте в разделе [«Подготовка внешних баз данных»](postgresql.md);

- **elma-bot** — чарт с ELMA Bot.

Helm-чарты** elma-bot** и **elma-bot-dbs** доступны для скачивания по ссылке: [https://dl.elma365.com/extensions/elma-bot/latest/elma-bot.tar.gz](https://dl.elma365.com/extensions/elma-bot/latest/elma-bot.tar.gz). 

## Шаг 1. Подготовка к установке

Перед установкой ELMA Bot выполните следующее:

- ознакомьтесь с [минимальными системными требованиями](#minimum-system-requirements-elma-bot-install);

- [настройте Kubernetes-кластер](/ru/help/platform/kubernetes-deckhouse-air-gap.html). Установленная версия кластера должна поддерживать Kubernetes API версии не ниже 1.21. Также должно быть разрешено проксирование из подов во внешнюю сеть;

- зарегистрируйте домен; 

- если вы планируете устанавливать сервисы бота на отдельные поддомены, получите Wildcard TLS-сертификат или UCC TLS-сертификат для поддоменов: **admin**, **auth**, **designer**, **client**, **elma365**, **kb**. Установите TLS-сертификат в Kubernetes.

Для бота версии от 1.8.0 доступна установка сервисов на одном домене. Подробнее читайте в разделе [«Поддержка установки ELMA Bot на одном домене»](#path-install);

- в случае использования общего RWX-volume (sharedPVC) предварительно создайте \[OBJECT\] с рекомендуемым размером 8 GiB. 

Чтобы создать RWX-volume (опционально):

````
kubectl create -f pvc.yaml

````
Пример манифеста** **\[OBJECT\] в файле \[OBJECT\]:

````
apiVersion: v1  
kind: PersistentVolumeClaim  
metadata:  
  name: elmabot  
  labels:  
    tier: elmabot  
spec:  
  accessModes:  
  - ReadWriteMany  
  resources:  
    requests:  
      storage: 8Gi  
  storageClassName: microk8s-hostpath  
  volumeMode: Filesystem

## ````
Шаг 2. Установка TLS-сертификатов для сервисов ELMA Bot

Чтобы установить TLS-сертификат для домена в Kubernetes, используйте команду:

````
kubectl create secret tls example-com-tls \[-n namespace\] \\  
\--key < private key filename> \\  
\--cert < certificate filename>

````
Обратите внимание, аргументы в квадратных скобках опциональны. Если вы применяете такой аргумент, указывайте его без скобок.

### Установка самоподписанных сертификатов для сервисов ELMA Bot (опционально)

С версии 1.8.0 ELMA Bot подключается с использованием самоподписанных TLS-сертификатов для доступа к сервисам по HTTPS.

Для корректной работы нужен файл с корневым сертификатом для подписания сертификатов бота, ELMA365 и других сервисов, к которым боту нужен доступ. 

Чтобы добавить самоподписанный сертификат, выполните следующие действия:

1. Создайте ConfigMap с файлом корневого сертификата с помощью команды:

````
kubectl create configmap elma-bot-root-ca --from-file=elma-bot-cert.crt=elma-bot-CA.crt

````
Обратите внимание, в ключе \[OBJECT\]:

- замените \[OBJECT\] на название вашего файла корневого сертификата;

- имя \[OBJECT\], под которым файл сертификата монтируется в контейнеры, изменять нельзя.

2. Укажите название ConfigMap (\[OBJECT\]) в параметре \[OBJECT\] в чарте **elma-bot**.

Обратите внимание, нельзя использовать ConfigMap, который указывается в чартах** elma365** при настройке параметра **configCA**, т. к. для него файл сертификата добавляется под другим именем.

## Шаг 3. Установка Helm-чартов

Установка производится с использованием Helm v.3 в два этапа:

1. Установка баз данных — чарт **elma-bot-dbs**. 

Если установка ELMA Bot производится в один кластер вместе с ELMA365, то вместо чарта **elma-bot-dbs** используйте чарт **elma365-dbs**.

2. Установка ELMA Bot — чарт **elma-bot**.

### Установка чарта elma-bot-dbs

Чарт **elma-bot-dbs** поставляется вместе с чартом **elma-bot** в отдельной папке. Для установки выполните следующие шаги:

1. Проверьте и при необходимости измените параметры файла \[OBJECT\]. Значения по умолчанию подходят для установки ELMA Bot, но вы можете изменить пароли и ключи доступа, а также размеры хранилищ. Кроме того, можно отключить отдельные сервисы, если вы планируете использовать внешние или установленные ранее сервисы.

2. При использовании своего образа Elasticsearch убедитесь, что в нём установлен плагин **Elastiknn**, который необходим для работы ELMA Bot.

3. После настройки \[OBJECT\] установите Helm-чарт:

````
helm upgrade --install elma-bot-dbs ./elma-bot-dbs -f values-dbs.yaml \[-n namespace\]

### ````
Установка чарта elma365-dbs (опционально) 

Используйте чарт **elma365-dbs**, если установка ELMA Bot производится в один кластер вместе с ELMA365. 

Выполните следующие шаги:

1. Скачайте и распакуйте Helm-чарт **elma365-dbs**:

````
curl -fsSO https://dl.elma365.com/onPremise/chart/latest/elma365-dbs.tar.gz \&\& tar -xvf elma365-dbs.tar.gz

2. ````
Задайте параметры файла \[OBJECT\]. Минимально необходимые параметры — \[OBJECT\] и \[OBJECT\]: \[OBJECT\], \[OBJECT\], \[OBJECT\], \[OBJECT\], \[OBJECT\], \[OBJECT\], \[OBJECT\], \[OBJECT\]: 

````
global:  
  elasticsearch:  
    enabled: true  
minio:  
  defaultBuckets: s3elma365,s3elmabot,elmabot-static-files,elmabot-temporary-files

3. ````
При установке с ELMA365 необходимо настроить \[OBJECT\] и \[OBJECT\] для MinIO. Пример конфигурации для **example.com** с сертификатом \[OBJECT\]:

````
minio:  
  defaultBuckets: s3elma365,s3elmabot,elmabot-static-files,elmabot-temporary-files  
  apiIngress:  
    extraHosts:  
      - path: /s3elma365  
        name: example.com  
    extraTls:  
      - hosts:  
          - example.com  
        secretName: "example-com-tls"

4. ````
Если требуется создать отдельный \[OBJECT\], укажите его во всех командах установки.

5. При использовании своего образа Elasticsearch убедитесь, что в нём установлен плагин Elastiknn, который необходим для работы ELMA Bot.

6. После настройки \[OBJECT\] установите Helm-чарт:

````
helm upgrade --install elma365-dbs ./elma365-dbs -f values-dbs.yaml \[-n namespace\]

### ````
Установка чарта elma-bot

1. Скачайте и распакуйте Helm-чарт **elma-bot**:

````
curl -fsSO https://dl.elma365.com/extensions/elma-bot/latest/elma-bot.tar.gz \&\& mkdir -p ./elma-bot \&\& tar -xvf elma-bot.tar.gz -C ./elma-bot

2. ````
Заполните параметры в файле \[OBJECT\]. 

Минимально необходимые параметры — строки подключения к базам данных и S3, \[OBJECT\], TLS-сертификат.

Обратите внимание, значение \[OBJECT\] чарта **elma-bot** должно совпадать со значением \[OBJECT\] чарта **elma365-dbs**.

````
global:  
  host: example.com  
  ingress:  
    existingTLSSecret: example-com-tls  
db:  
  mongoUrl: 'mongodb://elma365:mongopassword@mongo:27017/elma365?ssl=false\&replicaSet=rs0\&readPreference=secondaryPreferred'  
  amqpUrl: amqp://elma365:rmqpassword@rabbitmq:5672/elma365  
  redisUrl: redis:6379  
  elasticsearchUrl: http://elasticsearch:9200  
  postgresUrl: 'postgres://postgres:pgpassword@postgres:5432/elma365?sslmode=disable'  
  s3:  
    accesskeyid: PZSF73JG72Ksd955JKU1HIA  
    secretaccesskey: aFDkj28Jbs2JKbnvJH678MNwiz88zKjsuNBHHs  
    Url: http://minio:80  
    buckets:  
      temproraryFiles: elmabot-temporary-files  
      staticFiles: elmabot-static-files  
      bot: s3elmabot

3. ````
Выберите и укажите режим работы ELMA Bot в параметре \[OBJECT\]. Возможные варианты:

- **DOMAIN** — для установки сервисов на отдельных поддоменах;

- **PATH** — для установки сервисов на одном домене. Доступно для бота версии от 1.8.0. Подробнее читайте в разделе [«Поддержка установки ELMA Bot на одном домене»](#path-install).

4. При установке ELMA Bot в режиме **DOMAIN** создаются поддомены **auth.\[host\]**, **client.\[host\]**, **designer.\[host\]**, **admin.\[host\]**, **kb.\[host\]**. Опционально измените их названия. Для этого отредактируйте соответствующие значения в файле \[OBJECT\]: \[OBJECT\], например, укажите: \[OBJECT\]. 

Для каждого изменённого сервиса в дочернем файле \[OBJECT\] отредактируйте соответствующее значение \[OBJECT\]. 

Обратите внимание, если изменяется поддомен или подпуть сервиса **auth**, то нужно также обновить значение \[OBJECT\] в файле \[OBJECT\] в чарте ELMA365.

5. Установите **elma-bot**:

````
helm upgrade --install elma-bot ./elma-bot --timeout=30m --wait \[-n namespace\]

## ````
Шаг 4. Поддержка установки ELMA Bot на одном домене (опционально)

Начиная с версии бота 1.8.0, вы можете установить все сервисы бота на одном домене (или поддомене). При этом каждому сервису выделяется свой подпуть: **\\\*\\\*\\\*/auth**, **\\\*\\\*\\\*/client** и т. д. 

В предыдущих версиях сервисы бота работали на разных поддоменах: **auth.\\\*\\\*\\\***, **client.\\\*\\\*\\\*** и т. д.

Для переключения режима в файле \[OBJECT\] измените параметр \[OBJECT\] с **DOMAIN** на **PATH** (подробнее читайте в файле **README.md** в папке с чартами).

Вы можете изменить режим для ранее установленного бота. Для этого:

- в файле \[OBJECT\] в чарте **ELMA365** обновите значения \[OBJECT\] и \[OBJECT\];

- повторно подключите каналы Telegram, Viber;

- повторно подключите бота к линии в ELMA365.

## Шаг 5. Интеграция конструктора ELMA Bot с ELMA365

После установки ELMA Bot On‑Premises настройте его интеграцию с ELMA365. Это можно сделать с помощью микросервиса Hydra или Х‑токена конструктора ELMA Bot. Подробнее читайте в статье [«Настройка интеграции конструктора ELMA Bot с ELMA365»](integrate-chatbot-builder.md).

## Минимальные системные требования для установки конструктора ELMA Bot

**Операционная система: **

- Ubuntu Server 20.04 LTS;

- Astra Linux.

Обратите внимание, в Astra Linux при установке **nlp-service** могут потребоваться дополнительные права для исполнения кода в программном стеке (**Executable Stack**). В этом случае для корректной установки сервиса в настройках безопасности операционной системы отключите контроль исполнения **Executable Stack**. Подробнее об этом читайте в [официальной документации Astra Linux](https://wiki.astralinux.ru/pages/viewpage.action?pageId=333812908).

**Дополнительное ПО: **

- tar; 

- bash;

- curl; 

- для установки системы нужен доступ в интернет; 

- технология виртуализации должна поддерживать AVX2 (важно для сервисов обучения ML-моделей распознавания языка). 

**CPU: **

- 8x2.2 Ghz; 

- Рекомендуется Intel Xeon; 

- Должна быть поддержка инструкций AVX2. 

**RAM: **

- 20 GB.

**Диски:** 

- 100 GB RAID (ОС + приложения);

- 500 GB RAID (данные). 

**Сеть: **

- 1 Gb/s для внутренней сети между серверами; 

- 100 Mb/s для внешней сети от сервера приложений к администраторам и пользователям. 