Перейти к содержанию

Установка на Ubuntu Server и microk8s в закрытом контуре

Руководство по установке ELMA Bot в закрытом контуре.

Создание виртуальной машины с Ubuntu Server

Создание ВМ будет происходить на примере службы Hyper-V

Параметры ВМ

Оперативная память

Для установки ELMA Bot рекомендуется не меньше 20 ГБ памяти

Важно: Не включайте параметр "использовать динамическую память", т.к. Kubernetes-кластер может посчитать, что памяти значительно меньше, чем доступно на самом деле, и некоторые поды не будут стартовать с ошибкой low memory.

Процессор

Для работы ELMA Bot требуется несколько виртуальных процессоров. Рекомендуется не меньше 4.

Жесткий диск

Для установки ELMA Bot + ELMA 365 в режиме закрытого контура для оффлайн-файлов и репозитория образов требуется примерно на 40 ГБ больше дискового пространства, чем для обычной установки. Рекомендуется установка на жесткий диск общим размером не менее 150 ГБ.

Размер жесткого диска можно увеличить позднее. Для увеличения размера раздела в Ubuntu можно воспользоваться инструкцией: https://woshub.com/increase-partition-size-ubuntu/

Сетевой интерфейс

Для нормальной работы сервисов ВМ должна быть доступна по ip-адресу и доменному имени из хост-системы. Самый простой способ, которым этого можно добиться - зафиксировать MAC-адрес ВМ, зафиксировать ip-адрес этого MAC-адреса в настройках роутера (если есть возможность) и прописать этот ip-адрес в файле hosts родительской ОС (в качестве доменного имени можно использовать сетевое имя ВМ, выбранное при установке Ubuntu; кроме основного домена на тот же ip-адрес необходимо прописать все поддомены ELMA Bot и поддомен ELMA 365, если нужно).

Установка Ubuntu Server 24

В параметрах ВМ подключите установочный образ Ubuntu в DVD-дисковод и запустите ВМ

Установка Ubuntu

При установке Ubuntu Server обратите внимание на следующее:

  1. При выборе размера логического диска Ubuntu по умолчанию устанавливает небольшой объем системного раздела. Увеличьте объем раздела, чтобы использовать весь виртуальный диск.
  2. Включите установку OpenSSH, чтобы не настраивать вручную позднее.
  3. При выборе компонентов можно сразу отметить для установки microk8s и docker — они еще пригодятся.
  4. Скачивание файлов при установке может происходить очень медленно, в этом случае попробуйте перезагрузить Windows или выбрать другое зеркало архивов.

Подготовка кластера microk8s

Для работы ELMA Bot нужно включить два аддона ingress и hostpath-storage. Для их включения выполните команды:

Text Only
microk8s enable ingress
microk8s enable hostpath-storage

Дополнительно: установка k9s

K9s — удобный инструмент для мониторинга kubernetes-кластера.

Для установки k9s выполните команды:

Text Only
1
2
3
sudo snap install k9s
sudo ln -s /snap/k9s/current/bin/k9s /snap/bin/
kubectl config view --raw > $HOME/.kube/config

Дополнительно: проверка сетевого доступа к ВМ

После установки Ubuntu, прежде чем приступить к установке ELMA Bot, можно удостовериться в наличии сетевого доступа к ВМ.

Docker

Для проверки доступа к ВМ с помощью тестового контейнера NGINX можно выполнить команды:

Text Only
echo "<html><body><h1>Hello from Docker!</h1></body></html>" > index.html
docker run --name simple-nginx -v $(pwd)/index.html:/usr/share/nginx/html/index.html:ro -p 8080:80 -d nginx

После этого в браузере из хост-системы по адресу http://[имя-вм]:8080 должна открываться тестовая страница с текстом Hello from Docker!

Для удаления контейнера выполните:

Text Only
docker stop simple-nginx
docker remove simple-nginx

Дополнительно: проверка работы Kubernetes

Если доступ к docker-контейнеру есть, а сервисы ELMA Bot недоступны, можно попробовать настроить доступ к тестовому поду nginx.

Перед проверкой удалите все helm-релизы, если они есть, в т.ч. не установленные до конца (их можно увидеть с помощью команды helm list -a).

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

Text Only
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install my-nginx bitnami/nginx --set service.type=NodePort

Проверьте, включен ли ingress:

Text Only
microk8s status

и если нет, то включите:

Text Only
microk8s enable ingress

Добавьте ingress-правило для доступа к сервису nginx. Для этого создайте файл nginx-ingress.yaml с таким содержимым:

Text Only
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-nginx
            port:
              number: 80

и примените его командой:

Text Only
kubectl apply -f nginx-ingress.yaml

После этого при открытии в браузере адреса виртуальной машины вы должны увидеть стандартную страницу сервиса nginx.

Важно: после завершения проверки удалите helm-релиз:

Text Only
helm delete delete my-nginx

И удалите ingress-правило:

Text Only
kubectl delete ingress nginx-ingress

Создание самоподписанных сертификатов

Установка ELMA Bot в закрытом контуре возможна с использованием самоподписанных сертификатов для доступа по HTTPS. В этом случае сначала создается корневой сертификат, а затем он используется для создания сертификатов сервисов. Корневой сертификат можно добавить в список доверенных на уровне ОС, и тогда все дочерние сертификаты также будут считаться доверенными.

Создание корневого сертификата

Для создания корневого сертификата выполните команду:

Text Only
openssl genrsa -out elma-bot-CA.key 4096
openssl req -x509 -new -nodes -key elma-bot-CA.key -sha256 -days 1825 -out elma-bot-CA.crt -subj "/CN=elma-bot-CA"

Создание сертификата для сервисов

Далее нужно создать сертификаты для сервисов. Для упрощения процесса можно создать один сертификат для всех сервисов. В этом примере в сертификате перечислены все поддомены, которые могут понадобиться. Отредактируйте перечень поддоменов так, как вам нужно, а вместо [домен] укажите сетевой адрес, по которому доступна ВМ:

Text Only
openssl req -new -nodes -newkey rsa:4096 -keyout elma-bot.key -out elma-bot.csr -subj "/CN=elma-bot" -addext "subjectAltName=DNS:[домен],DNS:bot.[домен],DNS:elma.[домен],DNS:auth.[домен],DNS:client.[домен],DNS:kb.[домен],DNS:elma365.[домен],DNS:admin.[домен],DNS:designer.[домен],DNS:harbor.[домен]"

Подписание сертификата сервисов с помощью корневого сертификата

Text Only
openssl x509 -req -in elma-bot.csr -CA elma-bot-CA.crt -CAkey elma-bot-CA.key -CAcreateserial -out elma-bot.crt -days 1825 -sha256 -extfile <(echo "subjectAltName=DNS:[домен],DNS:bot.[домен],DNS:elma.[домен],DNS:auth.[домен],DNS:client.[домен],DNS:kb.[домен],DNS:elma365.[домен],DNS:admin.[домен],DNS:designer.[домен],DNS:harbor.[домен]")

После этого в папке будет несколько файлов:

  • elma-bot-CA.crt
  • elma-bot-CA.key
  • elma-bot-CA.srl
  • elma-bot.crt
  • elma-bot.csr
  • elma-bot.key

elma-bot-CA.crt — корневой сертификат, его нужно будет добавлять в список доверенных elma-bot.crt и elma-bot.key — пара файлов, которые нужно будет указывать в качестве TLS-сертификатов в настройках сервисов

Создание TLS-секрета в kubectl

Перед установкой бота в helm-чартах в values.yaml нужно будет указать имя TLS-секрета с файлами сертификатов. Для создания этого секрета выполните команду:

Text Only
kubectl create secret tls elma-bot-tls --cert=elma-bot.crt --key=elma-bot.key

Создание конфигмапа для монтирования в контейнеры

Перед установкой бота в helm-чартах в values.yaml нужно будет указать имя конфигмапа с файлом корневого сертификата, который будет монтироваться в контейнеры для правильной работы сервисов. Для создания этого конфигмапа выполните команду:

Text Only
kubectl create configmap elma-bot-root-ca --from-file=elma-bot-cert.crt=elma-bot-CA.crt

Название конфигмапа указывается в настройке global.tlsCAConfigMapName в чартах бота.

Установка ELMA Bot

Загрузка файлов для оффлайн установки

Перед установкой ELMA Bot в закрытом контуре необходимо сначала выкачать файлы установки для последующего переноса в закрытый контур.

Обратите внимание: Выкачивание всех требуемых для установки файлов может занять много времени и около 20 ГБ места на диске

Для выкачивания файлов выполните команду:

Text Only
1
2
3
curl -fsSL -o charts-offline-bot.sh https://dl.elma365.com/extensions/elma-bot/latest/charts-offline-bot.sh && \
chmod +x charts-offline-bot.sh && \
./charts-offline-bot.sh --pull

Установка Harbor

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

Важно: Для работы Harbor нужен установленный Docker

Для установки Harbor перейдите в папку с дистрибутивом (здесь и далее замените "X.Y.Z" на номер устанавливаемой версии ELMA Bot, например "1.8.0"):

Text Only
cd elma-bot-X.Y.Z/harbor

Теперь отредактируйте файл с конфигурацией harbor.yml. Для этого можно скопировать файл из шаблона:

Text Only
cp harbor.yml.tmpl harbor.yml

И открыть его в редакторе:

Text Only
nano harbor.yml

Заполните поле hostname. Если вы создавали сертификаты с помощью команд выше, укажите harbor.[домен], подставив ваш домен в значение. Указанный адрес должен быть доступен из системы, на которой будет производиться установка чартов ELMA Bot.

Microk8s (и возможно другие кластеры) требуют подключения к хранилищу образов по https. Поэтому заполните также пути к файлам сертификата:

Text Only
  certificate: /[путь-к-сертификатам]/elma-bot.crt
  private_key: /[путь-к-сертификатам]/elma-bot.key

Также можно поменять пароль администратора (harbor_admin_password).

ВАЖНО: обязательно измените путь к месту, где Harbor будет сохранять данные (data_volume). В противном случае могут быть проблемы с недостаточным свободным местом в контейнере Harbor, даже при наличии достаточного свободного места на ВМ. Можно указать /home/[имя пользователя]/harbor-data

При установке на одной системе с kubernetes кластером также можно изменить порты по умолчанию, чтобы кластер и Harbor не конфликтовали:

Text Only
1
2
3
4
5
http:
  port: 8080

https:
  port: 8443

Для запуска установки выполните команду:

Text Only
sudo ./install.sh

Проверьте, что Harbor работает и доступен, для этого в браузере зайдите на страницу `https://harbor.[домен]:[порт https]

Информация: Иногда Harbor может переставать работать, например, после перезапуска ВМ, в которой он установлен. В этом случае попробуйте повторно выполнить команду установки sudo ./install.sh, при этом данные Harbor не будут потеряны.

Также убедитесь, что Harbor доступен из системы, на которой будети производиться установка чартов. Для этого выполните команду:

Text Only
curl https://harbor.[домен]:[порт https]

Возможно, для доступа потребуется настроить DNS или отредактировать файл hosts, а также добавить сертификат из файла elma-bot-CA.crt в доверенные.

Файл hosts

Для редактирования файла hosts выполните команду:

Text Only
sudo nano /etc/hosts

и добавьте запись:

Text Only
127.0.0.1   harbor.[домен]

Доверенный сертификат

Скопируйте файл elma-bot-CA.crt в папку /usr/local/share/ca-certificates:

Text Only
sudo cp elma-bot-CA.crt /usr/local/share/ca-certificates/

и выполните команду:

Text Only
sudo update-ca-certificates

Проверьте, что curl больше не ругается на самоподписанный сертификат.

Загрузка образов в Harbor

Перед загрузкой образов нужно сначала создать в Harbor проект "elma-bot" и сделать его публичным (свойство public).

Затем можно перейти в папку elma-bot-X.Y.Z, в которую загружались оффлайн-файлы скриптом и выполнить команду:

Text Only
sudo ./charts-offline-bot.sh --push --uri harbor.[домен]:8443/elma-bot --creds admin:Harbor12345 --tls-verify false

Измените в команде пароль администратора, если меняли его при установке Harbor. Операция потребует еще около 10 ГБ дискового пространства.

Установка баз данных

Для работы ELMA Bot требуется установка баз данных и других стандартных компонентов: mongoDb, redis, rabbitmq, elasticsearch и minio.

Существует три способа их установки:

  1. Самостоятельная установка или использование уже установленных компонентов.

  2. Установка с помощью helm-чартов elma365-dbs. Это удобно, если планируется также установка ELMA 365.

  3. Установка с помощью helm-чартов elma-bot-dbs. В этом случае устанавливаются только компоненты, необходимые для работы ELMA Bot.

В первом случае необходимо прописывать строки подключения и учетные данные сторонних сервисов в чартах elma-bot, во втором и в третьем случаях стандартные значения должны подходить, но их также можно изменить, например, поменять стандартные пароли.

Установка чартов elma-bot-dbs

Перейдите в папку elma-bot-X.Y.Z/charts/elma-bot-dbs и отредактируйте файл values-dbs.yaml:

  • Настройте логины, пароли и размеры хранилищ для сервисов, если нужно
  • Настройте параметры приватного репозитория для загрузки образов
    • В значениях [сервис].image.registry для каждого сервиса укажите адрес проекта в Harbor: harbor.[домен]:8443/elma-bot
  • Если необходимо, укажите адрес хоста в настройках minio (требуется для ELMA 365 и необязательно для работы ELMA Bot)

Для установки выполните команду:

Text Only
helm upgrade --install elma-bot-dbs ./elma-bot-dbs -f values-dbs.yaml --timeout=30m --wait --debug

Установка чартов elma-bot

Перейдите в папку elma-bot-X.Y.Z/charts/elma-bot и отредактируйте файл values.yaml:

  • Если планируется установка ELMA 365, заполните найстройки:
    • global.elma365Integration
    • в настройке elma365TlsSecret укажите elma-bot-tls (или другое имя, если у ELMA 365 отдельный сертификат)
    • в настройке global.hydra.enabled должно быть true
  • Для установки в закрытом контуре установите значение global.useInPrivateNetwork в true
    • И укажите полный путь к папке elma-bot-X.Y.Z/data в настройке global.storage.offlineDataPath
  • Если необходимо монтировать файл сертификата в качестве доверенного, укажите название конфигмапа с сертификатом в настройке global.tlsCAConfigMapName (как создать конфигмап см. выше)
  • Укажите имя хоста в настройке global.host
  • Укажите полный путь к локальному репозиторию Harbor в настройке global.image.repository. Путь должен заканчиваться на crph9k6gr6scu5er72ha, например: harbor.[домен]:8443/elma-bot/crph9k6gr6scu5er72ha
  • Замените имя секрета в настройке global.ingress.existingTLSSecret на elma-bot-tls
  • При необходимости использования режима подпутей вместо поддоменов, замените значение настройки global.routing.mode с DOMAIN на PATH (подробнее в README.md в папке с чартами)
  • При необходимости замените пароли пользователей по умолчанию в настройке global.defaultUserPasswords

Для установки выполните команду:

Text Only
helm upgrade --install elma-bot . -f values.yaml --timeout=30m --wait --debug

Установка ELMA 365

Установка ELMA 365 производится в соответствии с документацией ELMA 365, например https://elma365.com/ru/help/platform/downloadin-images-elma365.html

Не забудьте внести изменения в чарты elma365 и elma365-dbs, необходимые для включения интеграции с ELMA Bot.