Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

Версия ПО 1.28

Рекомендуемые характеристики сервера

Система Eltex SC строится по клиент-серверной архитектуре. Серверную часть рекомендуется устанавливать на многопроцессорный компьютер под управлением OS Ubuntu 20.

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

Минимальные системные требования сервера*:

  • число аппаратных серверов — 1;
  • процессор — i5 3,0 ГГц;
  • оперативная память — 8 ГБ;
  • место на диске — 1000 ГБ;
  • производительность дискового массива (чтение/запись) — 2000 IOPS.

Минимально необходимая конфигурация для запуска ядра платформы с микросервисами.

Установка платформы Eltex SC

В инструкции описан процесс установки платформы Eltex SC версии 1.28 на операционную систему Ubuntu 20.04. Информацию по установке более ранних версий платформы Eltex SC (1.27 и ниже) можно найти по ссылке: Архив Eltex SC.


С версии 1.19.4 установка через deb-пакеты не осуществляется.

С версии 1.25 сервис eltex-notification-gw(ngw) не требует дополнительной настройки через файл notification.properties.j2. Все настройки вынесены в файл vars/default.yml

Установка Eltex SC на сервер, не отвечающий минимальным системным требованиям, может привести к неработоспособности платформы или увеличить время обработки запросов!

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

Ansible — система управления конфигурациями, написанная на языке программирования Python с использованием декларативного языка разметки для описания конфигураций. Система используется для автоматизации настройки и развертывания программного обеспечения, в частности для ПО Eltex SC.


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

1. Установите Ansible на сервер Ubuntu 20.04. 

Пример установки через консоль:

Установка Ansible
apt update
apt install --install-recommends linux-generic-hwe-20.04-edge
apt install software-properties-common
add-apt-repository --yes --update ppa:ansible/ansible
apt install ansible


Более подробная информация по установке Ansible доступна по ссылке.


2. Выполните проверку версии (должна быть не ниже v2.9):

Проверка версии Ansible
ansible --version


3. После установки Ansible добавьте необходимые для ее работы коллекции.

Пример добавления коллекций:

Установка
ansible-galaxy collection install community.general
ansible-galaxy collection install community.crypto
ansible-galaxy collection install community.docker


4. Подготовьте конфигурацию.

Для получения файлов конфигурации обратитесь с запросом в Коммерческий отдел ЭЛТЕКС.
Файлы конфигурации будут направлены вам в виде архива tar.gz, который необходимо распаковать в директорию /etc с правами root.

Пример распаковки архива:

Распаковка архива с конфигурацией
tar -C /etc -xvf ansible-iot-1.28.tar.gz


После распаковки архива все пакеты и зависимости будут развернуты в директории на текущем сервере.

Файлы конфигурации и плейбуки (скрипты/конфигурации) Ansible будут расположены в директории /etc/ansible-iot-1.28


5. Отредактируйте файл /etc/ansible-iot-1.28/inventory

Откройте файл в любом доступном текстовом редакторе, например nano. Укажите пароль пользователя root в переменной ansible_sudo_pass:

Далее в примере для пользователя root используется пароль rootpasswd

При установке задайте свой пароль.

Пример задания пароля:

Содержимое файла inventory
[iot]
localhost   ansible_connection=local    ansible_sudo_pass=rootpasswd
[elk]
localhost   ansible_connection=local    ansible_sudo_pass=rootpasswd
[monitoring]
localhost   ansible_connection=local    ansible_sudo_pass=rootpasswd


6. Далее необходимо настроить параметры доступа к платформе Eltex SC.

Для базовой установки достаточно отредактировать файл конфигурации /etc/ansible-iot-1.28/vars/default.yml 

Откройте файл в любом доступном текстовом редакторе, например nano. Укажите корректный IP-адрес или доменное имя для доступа к платформе в переменной server_name:  

При переходе с MongoDB 4 на MongoDB 6 требуется сначала перейти на MongoDB 5 и только потом перейти на MongoDB 6.

Или в фаиле /vars/default.yml для параметра version задать значение "5", запустить ansible-playbook install_iot.yml, затем задать значение "6" и снова запустить ansible-playbook install_iot.yml

Содержимое конфигурационного файла vars/default.yml
---
# Параметры установки платформы.
iot:
  # Имя (IP-адрес) сервера, на котором будет производиться развертывание платформы IoT.
  # Возможно использование 'localhost', если все манипуляции производятся локально.
  #  ВАЖНО!!! В 'serverName' нужно прописывать то имя (IP-адрес), по которому будет доступны платформа.
  # Если указать 'localhost', то будет доступ только через 'localhost'!
  serverName: "my.test.server"
  # Содержит путь до директории, в которую будет произведена установка.
  installDir: /storage/iot

# Параметры установки сервисов логирования (Elasticsearch + Logstash + Kibana).
elk:
  # Нужно ли добавлять в платформу appender, отправляющий логи в logstash.
  # В нем нет необходимости, если ELK не развернут или не настроен; это лишь спровоцирует сообщения об ошибках отправки
  # в логах платформы.
  enable: false
  # Имя (IP-адрес) сервера, на котором будет развернут ELK.
  # По умолчанию совпадает с 'iot.serverName', что предполагает установку рядом с платформой (на том же хосте).
  # В таком случае хосты в инвентаре в группах [iot] и [monitoring] должны совпадать.
  serverName: "{{ iot.serverName }}"
  # Директория для установки системы логирования.
  installDir: /storage/elk

# Параметры установки сервисов мониторинга (Prometheus + Grafana).
monitoring:
  # Имя (IP-адрес) сервера, на котором будет развернуты сервисы мониторинга (Prometheus + Grafana).
  # По умолчанию совпадает с 'iot.serverName', что предполагает установку рядом с платформой (на том же хосте).
  # В таком случае хосты в инвентаре в группах [iot] и [elk] должны совпадать.
  serverName: "{{ iot.serverName }}"
  # Директория для установки системы мониторинга.
  installDir: /storage/monitoring
Содержимое конфигурационного файла vars/default.yml
# Параметры MongoDB.
mongodb:
  # Версия MongoDB. На старом железе, не поддерживающем оптимизацию, нужно выставить значение `4`.
  version: 6
  external:
    # Если выставлен в true, будет использоваться внешняя MongoDB.
    # ВАЖНО!!! MongoDB должна быть настроена, а параметры подключения нужно указать в 'addr' и 'port'.
    enable: false
    # Адрес внешней MongoDB.
    addr: "{{ iot.serverName }}"
    # Порт внешней MongoDB.
    port: 27017

# Параметры WEB.
web:
  # Имя (IP-адрес) сервера, на котором будет развернут WEB.
  # По умолчанию совпадает с 'iot.serverName', что предполагает установку рядом с платформой (на том же хосте).
  serverName: "{{ iot.serverName }}"
  # Порт HTTP, по которому будет осуществляться доступ в WEB.
  httpPort: 80
  # Порт HTTPS, по которому будет осуществляться доступ в WEB.
  httpsPort: 443
  # Автоматически перенаправлять запросы по порту HTTP на порт HTTPS
  redirectHttpToHttps: false
  certbot:
    # Использовать ли certbot для получения сертификатов Let's Encrypt.
    enable: false
    # Email владельца домена. Необходим для подтверждения валидности домена при получении сертификата Let's Encrypt.
    email: test@email.com

# Параметры сервера отправки email (NGW).
mail:
  smtp:
    submitter: test@email.com
    password: "password"
    senderPrefix: "Сервер Eltex-SC"
    auth: "true"
    host: email.com
    port: 587

# Параметры платформы IoT core.
core:
  # Уровень отладки внутри IoT Core.
  logLevel: INFO

  # Порты платформы для подключения zway-контроллеров.
  ctlGate:
    port: 8070
    tcpPort: 8069
    sslPort: 8072
Содержимое конфигурационного файла vars/default.yml
  # Порты API платформы.
  api:
    port: 8071
    sslPort: 8073

  # Уровень сложности капчи: easy, medium, hard
  captchaLevel: "easy"

  server:
    # Нужно ли использовать HTTPS при формировании ссылок к WEB ('true' по умолчанию, при этом будет использован порт,
    # указанный в 'web.httpsPort'). Если поставить в 'false', будет использован HTTP и порт, указанный в 'web.httpPort'.
    useHttpsForUi: true
    # Нужно ли использовать HTTPS при формировании ссылок к ресурсам самой платформы (например, прошивки).
    useHttpsForApi: false
    # Нужно ли использовать HTTPS при формировании ссылок на фото с камер наблюдения.
    useHttpsForCameraLinks: true
    # Нужно ли использовать 'web.serverName' вместо 'iot.serverName' и 'web.httpPort'/'web.httpsPort'
    # вместо 'core.api.port'/'core.api.sslPort' при формировании ссылок к API.
    useUiProxyForApi: false

  # Параметры для управления доступностью саморегистрации.
  selfRegistration:
    allow: true
    allowDemo: true
    allowSocialNetworks: false

  push:
    firebase:
      enabled: false
    apns:
      enabled: false

  # Параметры для работы с видеосерверами
  video:
    # Параметры Flussonic.
    flussonic:
      url: ""
      apiKey: ""
      operatorId: ""
      adminLogin: ""
      motion:
        enabled: false
    # Параметры видеосервера eltex
    eltex_server:
      url: ""
      apiKey: ""
      operatorId: ""
      adminLogin: ""


  # Паремтры клиентских регистраций (через соцсети).
  clientRegistrations:
    google:
      clientId: "GoogleClientIdChangeMe"
      clientSecret: "GoogleClientSecretChangeMe"
    apple:
      clientId: "AppleClientIdChangeMe"
      keyId: "AppleKeyIdChangeMe"
      teamId: "AppleTeamIdChangeMe"
    yandex:
      clientId: "YandexClientIdChangeMe"
      clientSecret: "YandexClientSecretChangeMe"
    vk:
      clientId: "VkClientIdChangeMe"
      clientSecret: "VkClientSecretChangeMe"
    mailRu:
      clientId: "MailRuClientIdChangeMe"
      clientSecret: "MailRuClientSecretChangeMe"

Содержимое конфигурационного файла vars/default.yml
  # Параметры навыка Яндекс для интеграции с Умным домом (Алисой). Отображается в карточке навыка.
  yandexSkill:
    # Параметры для Basic Authentication.
    clientId: "YandexClientIdChangeMe"
    password: "PasswordChangeMe"
    # Id навыка, который необходимо указывать при отправке уведомлений.
    skillId: ""
    # OAuth-токен, который необходимо указывать при отправке уведомлений.
    oauthToken: ""

  # Параметры проекта умного дома Сбера для интеграции с Салютом. Отображается в карточке проекта.
  sberSkill:
    # Параметры для Basic Authentication.
    clientId: "SberClientIdChangeMe"
    password: "PasswordChangeMe"
    # Bearer-токен, который необходимо указывать при отправке уведомлений.
    bearerToken: ""

  # Параметры проекта умного дома Mail.ru для интеграции с Марусей. Отображается в карточке проекта/приложения.
  marusyaSkill:
    # Параметры для Basic Authentication.
    clientId: "MarusyaClientIdChangeMe"
    password: "PasswordChangeMe"
    # App ID, который был назначен приложению VK при создании.
    appId: "MarusyaAppIdChangeMe"
    # OAuth-токен, который необходимо указывать при отправке уведомлений.
    oauthToken: ""

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

mail:

smtp:

submitter — учетная запись e-mail;

password — пароль от учетной записи e-mail;

auth — проверка подлинности smtp (включена по умолчанию);

senderPrefix — имя отправителя;

host — адрес smtp-сервера;

port — smtp-порт сервера.

Ниже приведено описание параметров включения\выключения push-сообщений.

Push:

          firebase:

                  enabled: false — включение\отключение push-сообщений для Android;

          apns:

                   enabled: false — включение\выключение push-сообщений для iOS.

Также в vars/service_parameters.yml задаются дополнительные параметры:

Содержимое конфигурационного файла /vars/service_parameters.yml
---
# Версия контейнеров.
release: 1.28

# Имя репозитория docker registry, содержащего docker-образы для развертывания.
registry: hub.eltex-co.ru

# Список сервисов для перезапуска (при запуске плейбуков restart_*.yml).
# Можно оставить пустым, а при запуске передавать параметром командной строки.
services:

# Нужно ли выполнять подготовку дистрибутива к установке. Этот шаг полезен при "чистой" установке
# на только что созданный сервер. Если ранее уже была выполнена установка компонентов IoT через ansible,
# то такая подготовка не требуется и этот шаг можно пропустить для экономии времени.
withDistroPreparingStep: true

# Суффикс, добавляемый к имени каждого контейнера (помогает избежать конфликты имен контейнеров).
containerNameSuffix: ""

# Суффикс, добавляемый к имени создаваемой сети docker (помогает избежать конфликты имен сетей docker).
networkNameSuffix: ""

# Параметры мониторинга использования дискового пространства. Должны соответствовать требованию:
# warnThreshold > criticalThreshold > 0, иначе мониторинг дискового пространства будет отключен.
diskUsage:
  # Порог дискового пространства (в %), при достижении которого все логгеры микросервисов переводятся в режим WARN
  # (отображаются сообщения с тегами WARN и ERROR). Количество бэкапов баз уменьшается пропорционально приближению к
  # порогу criticalThreshold.
  warnThreshold: 20
  # Порог дискового пространства (в %), при достижении которого все логгеры микросервисов переводятся в режим ERROR
  # (отображаются только сообщения с тегом ERROR). Бэкапы баз не выполняются.
  criticalThreshold: 10
Содержимое конфигурационного файла /vars/service_parameters.yml
# Параметры сервисов IoT (для docker-compose), сгруппированные по именам.
# 'enable' - должен ли присутствовать сервис в docker-compose.yml.
# 'port.map' - номер порта сервиса в сети хоста.
# 'port.export' - нужно ли выполнять маппинг порта из контейнера в сеть хоста.
# 'db.name' - имя БД, используемой сервисом (связкой сервисов).
iotServices:
  db:
    port:
      map: 27017
      export: false
  broker:
    enable: true
    external:
      port:
        map: 8883
    internal:
      port:
        map: 8083
        export: false
    db:
      name: iot-broker
  olapservice:
    enable: true
    port:
      map: 8023
      export: false
    db:
      name: iotcore
      port:
        map: 8123
        export: false
  ngw:
    port:
      map: 8040
      export: false
    db:
      name: notification-gw
      user: javauser
      password: javapassword
      port:
        map: 3306
        export: false
  captcha:
    enable: true
    port:
      map: 8088
      export: false
    caseSensitive: true
    allowedSizes:
      - "312x45"
      - "270x40"
    instance: "captcha:8088"
    proportion: 100
Содержимое конфигурационного файла /vars/service_parameters.yml
  zscaptcha:
    enable: false
    port:
      map: 8089
      export: false
    caseSensitive: true
    instance: "zs-captcha:8089"
    proportion: 0
  core:
    # Развертывание окружения без платформы, полезно для разработки core.
    enable: true
  web:
    # Развертывание окружения без WEB, полезно для разработки web.
    enable: true
  zwayproxy:
    enable: false
    port:
      map: 8070
      export: true
    sslPort:
      map: 8072
      export: true
    rabbit:
      port:
        map: 5672
        export: false
      queue:
        # Идентификатор очереди для отправки сообщений из прокси в платформу.
        platform: platform
      exchange:
        # Идентификатор топик-коллектора.
        proxy: zway-proxy-topic-exchange
      # Количество консьюмеров на стороне платформы
      platformConsumers:
        # Данный параметр не может быть больше чем maxCount.
        count: 1
        # Максимальное количество одновременных консьюмеров очереди.
        maxCount: 1
      # Количество консьюмеров на стороне zwayProxy service
      proxyConsumers:
        # Количество одновременных консьюмеров очереди. Данный параметр не может быть больше чем maxCount.
        count: 1
        # Максимальное количество одновременных консьюмеров очереди.
        maxCount: 1
  wsproxy:
    enable: false
    port:
      map: 8075
      export: true
    rabbit:
      queue:
        # Идентификатор очереди для отправки сообщений из прокси в платформу.
        platform: ws-proxy-platform
      exchange:
        # Идентификатор топик-коллектора.
        proxy: ws-proxy-topic-exchange
      # Количество консьюмеров на стороне платформы
      platformConsumers:
        # Данный параметр не может быть больше чем maxCount.
        count: 1
        # Максимальное количество одновременных консьюмеров очереди.
        maxCount: 1
      # Количество консьюмеров на стороне wsProxy service
      proxyConsumers:
        # Количество одновременных консьюмеров очереди. Данный параметр не может быть больше чем maxCount.
        count: 1
        # Максимальное количество одновременных консьюмеров очереди.
        maxCount: 1

Содержимое конфигурационного файла /vars/service_parameters.yml
# Параметры сервисов ELK (для docker-compose), сгруппированные по именам.
# 'port.map' - номер порта сервиса в сети хоста.
# 'port.export' - нужно ли выполнять маппинг порта из контейнера в сеть хоста.
elkServices:
  elasticsearch:
    rest:
      port:
        map: 9200
    nodes:
      port:
        map: 9300
  logstash:
    port:
      map: 5001
    api:
      port:
        map: 9600
  kibana:
    port:
      map: 5601

# Параметры сервисов мониторинга (для docker-compose), сгруппированные по именам.
# 'port.map' - номер порта сервиса в сети хоста.
# 'port.export' - нужно ли выполнять маппинг порта из контейнера в сеть хоста.
monitoringServices:
  prometheus:
    port:
      map: 9090
  grafana:
    port:
      map: 3000
  nginxExporter:
    enable: true
    port:
      map: 9113

coreInternal:
  # Нужно ли создавать тестовые учетные записи на платформе.
  testdata:
    enable: false
  # Нужно ли включать swagger (описание API платформы).
  swagger:
    enable: false
  # Нужно ли платформе пытаться подключиться к MQTT Broker.
  mqttbroker:
    enable: true
  # Нужно ли платформе пытаться подключиться к OlapService.
  olapservice:
    enable: true
Содержимое конфигурационного файла /vars/service_parameters.yml
  # Имена БД в MongoDB, используемые платформой.
  core:
    db:
      name: iot-core
  fs:
    db:
      name: iot-fs
  licenses:
    db:
      name: iot-licenses
  events:
    db:
      name: iot-events
  mjollnir:
    # URL для Mjollnir.
    url: "http://smart.eltex-co.ru:8078/api/v1"

7. После этого можно запустить установку:

Установка
cd /etc/ansible-iot-1.28
ansible-playbook install_iot.yml


Если ранее использовалась версия платформы Eltex SC c подключением внешней БД MongoDB, необходимо удалить запись о репозитории mongodb.org из APT (например, /etc/apt/sources.list.d/mongodb-org-4.4.list).

8. Выполните проверку статуса контейнеров:

Проверка статуса контейнеров
docker ps
Вывод команды docker ps
CONTAINER IDIMAGE COMMANDCREATEDSTATUSPORTSNAMES
36c21b863cc9hub.eltex-co.ru/iot-double-web:1.28/docker-entrypoint.…2 minutes agoUp 2 minutes0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp iot-double-web
01fe2697e5ffhub.eltex-co.ru/iot-core:1.28java -Dspring.profi…2 minutes agoUp 2 minutes.0.0.0:8069-8073->8069-8073/tcp, :::8069-8073->8069-8073/tcpiot-core
07d1f93831bdhub.eltex-co.ru/iot-mqttbroker-mongo:1.28java -cp @/app/jib-…2 minutes agoUp 2 minutes0.0.0.0:8883->8883/tcp, :::8883->8883/tcp iot-mqtt-broker
d1c736dc27d0hub.eltex-co.ru/eltex-ngw:1.28-602/usr/sbin/ngw_start…2 minutes agoUp 2 minutes
iot-ngw-sc
228d41c96cbahub.eltex-co.ru/iot-olapservice:1.28java -cp @/app/jib-…2 minutes agoUp 2 minutes
iot-olapservice
e8e2899f2c8dhub.eltex-co.ru/iot-captcha:1.28java -jar LibreCapt…2 minutes agoUp 2 minutes8888/tcpiot-captcha
57c02941cc4fhub.eltex-co.ru/iot-mongo6:1.28/entrypoint.sh2 minutes agoUp 2 minutes0.0.0.0:27017->27017/tcp, :::27017->27017/tcp

iot-mongo

7c3d8d5c4137hub.eltex-co.ru/iot-mysql:1.28docker-entrypoint.s…2 minutes agoUp 2 minutes3306/tcp, 33060/tcp

iot-iot-mysql

9009dd4cd675hub.eltex-co.ru/iot-olapservice:1.28java -cp @/app/jib-…2 minutes agoUp 2 minutes0.0.0.0:8023->8023/tcp, :::8023->8023/tcpiot-olapservice


Платформа будет доступна по адресу: http://[Адрес вашего сервера Eltex SC]

Адрес сервера был ранее указан в переменной server_name файла конфигурации /etc/ansible-iot-1.28/vars/default.yml 


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

9. Добавьте файл лицензий.

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

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

Установка платформы Eltex SC с внешней БД MongoDB

В случае развертывания внешней БД MongoDB, т.е. при установке платформы Eltex SC с внешним процессом/службой mongodb:

Доступ к репозиториям mongodb.org может быть ограничен. В случае проблем с установкой пакетов необходимо использовать зеркало репозитория или вручную установить deb-пакеты (например, доступные в публичном репозитории).


1. Установите необходимые зависимости и сервис MongoDB (например версии 4.4):

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install -y software-properties-common gnupg build-essential net-tools dkms
wget https://www.mongodb.org/static/pgp/server-4.4.asc
sudo apt-key add server-4.4.asc
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.4.list
sudo apt-get update
sudo apt-get install -y mongodb-org
sudo service mongod start
sudo service mongod status


2. В файле /etc/mongod.conf в секции net укажите:

port: 27017
bindIp: 0.0.0.0


И перезапустите сервис mongod:

sudo service mongod restart
sudo service mongod status


3. Установите Ansible на сервер:

sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
sudo ansible-galaxy collection install community.general
sudo ansible-galaxy collection install community.crypto
sudo ansible-galaxy collection install community.docker

4. Подготовьте конфигурацию:

Распаковка архива с конфигурацией
tar -C /etc -xvf ansible-iot-1.28.tar.gz


После распаковки архива все пакеты и зависимости будут развернуты в директории на текущем сервере. Файлы конфигурации и плейбуки (скрипты/конфигурации) Ansible будут расположены в директории /etc/ansible-iot-1.28.


5. Отредактируйте файл /etc/ansible-iot-1.28/inventory.

Откройте файл в любом доступном текстовом редакторе, например nano. Укажите пароль от root в переменной ansible_sudo_pass:

Далее в примере для пользователя root используется пароль rootpasswd

При установке задайте свой пароль.

Содержимое файла inventory
[iot]
localhost   ansible_connection=local    ansible_sudo_pass=rootpasswd
[elk]
localhost   ansible_connection=local    ansible_sudo_pass=rootpasswd
[monitoring]
localhost   ansible_connection=local    ansible_sudo_pass=rootpasswd


6. Настройте параметры доступа к платформе, в том числе параметры для работы с внешним сервисом БД. Для этого отредактируйте файлы конфигурации /etc/ansible-iot-1.28/vars/default.yml и /etc/ansible-iot-1.28/vars/service_parameters.yml.

Откройте файл default.yml в любом доступном текстовом редакторе, например nano. Укажите корректный IP-адрес или доменное имя в переменной server_name. 

Для параметра enable установите значение true, настройте параметры подключения в 'addr' и 'port'.

Содержимое конфигурационного файла vars/default.yml
mongodb:
  # Версия MongoDB. На старой аппаратной платформе, не поддерживающей оптимизацию, выставить значение `4`
  version: 6
  external:
    # Если выставлен в true, будет использоваться внешняя MongoDB
    # ВАЖНО!!! MongoDB должна быть настроена, а параметры подключения нужно указать в 'addr' и 'port'
    enable: false
    # Адрес внешней MongoDB
    addr: "{{ iot.serverName }}"
    # Порт внешней MongoDB
    port: 27017


8. После этого можно запустить установку:

cd /etc/ansible-iot-1.28
sudo ansible-playbook install_iot.yml

Платформа будет доступна по адресу: http://[Адрес вашего сервера Eltex SC]

Адрес сервера был ранее указан в переменной server_name файла конфигурации /etc/ansible-iot-1.28/vars/default.yml 


9. Добавьте файл лицензий.

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

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

Работа с контейнерами

В процессе обслуживания можно осуществлять перезапуск контейнеров:

Перезапуск контейнеров
ansible-playbook restart_iot.yml --extra-vars '{"services":["web", "core", "broker", "olapservice"]}'


В квадратных скобках нужно перечислить сервисы, которые необходимо перезапустить (в примере это "web", "core", "broker", "olapservice"). Если не указать параметр "services" через --extra-vars, то будут перезапущены все сервисы.
Аналогичным образом можно остановить часть контейнеров:

Остановка контейнеров
ansible-playbook stop_iot.yml --extra-vars '{"services":["web", "core", "broker", "olapservice"]}'


Или обновить все контейнеры из репозитория:

Обновление контейнеров
ansible-playbook update_iot.yml


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

Обновление контейнеров
ansible-playbook install_iot.yml

Расположение конфигурационных файлов

В /etc/ansible-iot-1.28/templates располагаются конфигурации для ядра: /etc/ansible-iot-1.28/templates/iot/default-for-docker.yml.j2 и веб-сервера: /etc/ansible-iot-1.28/templates/iot/web/base_config

Директория хранения журналов работы платформы: /storage/iot/core/var/log/eltex-sc/server.log

Файлы журналов разбиваются на части по размеру. Каждая часть сохраняется в файл с именем: server-YYYY-MM-DD.NN.log, где YYYY-MM-DD — дата, а NN — номер части.

При изменении конфигурации необходимо перезапустить install_iot.yml:

ansible-playbook install_iot.yml

Некоторые конфигурационные параметры дублируют файл конфигурации /etc/ansible-iot-1.28/vars/default.yml . При запуске платформы параметры, заданные в файле конфигурации /etc/ansible-iot-1.28/vars/default.yml, имеют наивысший приоритет по отношению к другим файлам конфигурации, а также ведут к их перезаписи.


Содержимое конфигурационного файла default-for-docker.yml.j2:

#  тестовые данные окружения: дом, контроллер, устройства, правила
testData:
  environment: {{ 'true' if coreInternal.testdata.enable else 'false' }}

fileStorage:
  path: "/var/lib/eltex-sc/files"

controllerGateTCP:
  port: {{ core.ctlGate.tcpPort }}

controllerGate:
  port: {{ core.ctlGate.port }}

controllerGateSecurity:
  port: {{ core.ctlGate.sslPort }}
  key: "/etc/ssl/private/eltex-sc-ctl-gate.key"
  crt: "/etc/ssl/certs/eltex-sc-ctl-gate.crt"

api:
  port: {{ core.api.port }}
  sslPort: {{ core.api.sslPort }}

ui:
  serverName: "{{ web.serverName }}"
{% if web.httpPort != 80 or web.httpsPort != 443 %}
  # Порты UI нужны для формирования на платформе ссылок, которые пользователь сможет открыть через UI
  # Могут отсутствовать. В таком случае port/sslPort не будет указываться при составлении URL для UI (WEB)
{% if web.httpPort != 80 %}
  port: {{ web.httpPort }}
{% endif %}
{% if web.httpsPort != 443 %}
  sslPort: {{ web.httpsPort }}
{% endif %}
{% endif %}
mqttBroker:
  enabled: {{ 'true' if coreInternal.mqttbroker.enable else 'false' }}
  # Хост MQTT брокера, используется платформой
  host: "broker"
  # Порт MQTT брокера, используется платформой для связи по протоколу MQTT
  port: 8883
  # Порт на котором у брокера поднимается REST API, используется платформой
  apiPort: 8083
  # Внешний URL по которому доступен MQTT брокер, передаётся MQTT клиентам
  remoteAccessURL: "{{ iot.serverName }}:{{ iotServices.broker.external.port.map }}"
  # Таймаут в секундах по достижении которого выставляется статус "Offline" mqtt устройствам
  offlineTimeoutSec: 300

olapservice:
  enabled: {{ 'true' if coreInternal.olapservice.enable else 'false' }}
  host: "olapservice"
  port: 8023

zwayproxy:
  enabled: {{ 'true' if iotServices.zwayproxy.enable else 'false' }}
  manager:
    replicaCheckPeriodSeconds: 5
    replicaDeadPeriodSeconds: 15
    connectAliveWaitPeriodSeconds: 15
  rabbit:
    queue:
      # Идентификатор очереди для отправки сообщений из прокси в платформу.
      platform: {{ iotServices.zwayproxy.rabbit.queue.platform }}
    exchange:
      # Идентификатор топик-коллектора.
      proxy: {{ iotServices.zwayproxy.rabbit.exchange.proxy }}
    consumers:
      # Количество одновременных консьюмеров очереди. Данный параметр не может быть больше чем maxCount.
      count: {{ iotServices.zwayproxy.rabbit.platformConsumers.count }}
      # Максимальное количество одновременных консьюмеров очереди.
      maxCount: {{ iotServices.zwayproxy.rabbit.platformConsumers.maxCount }}

captcha:
  # Список инстансов капчи (Libre CAPTCHA, Zero Storage Captcha)
  instances: {{ captcha_instances | join(', ') }}
  proportions: {{ captcha_proportions | join(', ') }}
  level: "{{ core.captchaLevel }}"
# параметры для формирования ссылок к UI(WEB) и API
server:
  # Доменное имя сервера, на котором развернута платформа
  name: "{{ iot.serverName }}"
  # Использовать схему https:// при формировании ссылок к UI
  useHttpsForUi: {{ 'true' if core.server.useHttpsForUi else 'false' }}
  # Использовать схему https:// при формировании ссылок к API
  useHttpsForApi: {{ 'true' if core.server.useHttpsForApi else 'false' }}
  # Использовать схему https:// при формировании ссылок на фото с камер
  useHttpsForCameraLinks:  {{ 'true' if core.server.useHttpsForCameraLinks else 'false' }}
  # Использовать ui.serverName вместо server.name и ui.port/ui.sslPort вместо api.port/api.sslPort
  # при формировании ссылок к API
  useUiProxyForApi: {{ 'true' if core.server.useUiProxyForApi else 'false' }}
  oauth2:
    # Время жизни access-токена в секундах. Должно быть не менее 5 сек
    # Также нужно учесть, что authorization server добавляет запас времени 60 секунд до того, как токен будет считаться
    # просроченным. Т.о. итоговое время жизни токена: accessTokenTimeToLive + 60
    accessTokenTimeToLive: 3600
  # Конфигурация jetty
  jetty:
    # Время простоя соединения
    connection-idle-timeout: 120000ms
    max-http-form-post-size: 200000B
    # Конфигурация потоков
    threads:
      acceptors: -1
      selectors: -1
      # Время простоя потока
      idle-timeout: 120000ms
      # Минимальное количество потоков
      min: 32
      # Максимальное количество потоков
      max: 256
      # Максимальный размер очереди задач для потоков
      max-queue-capacity: 32768

selfRegistration:
  allow: {{ 'true' if core.selfRegistration.allow else 'false' }}
  allowDemo: {{ 'true' if core.selfRegistration.allowDemo else 'false' }}
  allowSocialNetworks:  {{ 'true' if core.selfRegistration.allowSocialNetworks else 'false' }}

electricMeterScheduler:
  cron: "0 0/30 * * * ?"

electricMeterArchiveScheduler:
  cron: "0 0 17 * * ?"

batch:
  maxPoolSize: 2
  corePoolSize: 1
services:
  ngw:
    host: "ngw-sc"
    port: 8040
  alarmService:
    enabled: false
  diskUsage:
    warnThreshold: {{ diskUsage.warnThreshold }}
    criticalThreshold: {{ diskUsage.criticalThreshold }}
  loginInfo:
    # Время жизни разлогиненых записей loginInfo в днях, с даты выхода из учетной записи
    ttl: 180
    # Максимально допустимый интервал времени (в днях) отсутствия активности со стороны пользователя
    # по истечении которого неактивные loginInfo (и привязанные к ним авторизации) автоматически разлогиниваются
    activityTimeLimit: 180
  user:
    # Максимально допустимый интервал времени (в днях) отсутствия активности со стороны пользователя
    # перед его деактивацией
    allowedInactivePeriod: 180
  push:
    firebase:
      enabled: true
    apns:
      enabled: true

languageInterface:
  language: "ru"

# Hazelcast instance configuration -> Move it to separate microservice -> Use hz-client here
hazelcast:
  instanceName: "iot-core-hz-instance{{ containerNameSuffix }}"
  clusterName: "iot-core{{ containerNameSuffix }}"
  network:
    port: "5705"
#    member: "127.0.0.1:5701"

mjollnir:
  sync-period: "0 0 23 1/1 * ?"
  login: "platform"
  password: "platform"
  url: "{{ coreInternal.mjollnir.url }}"

# Основная база данных iot-core
iot-core:
  host: "{{ mongodb_addr }}"
  port: {{ mongodb_port }}
  user: ""
  password: ""
  database: "{{ coreInternal.core.db.name }}"
# База данных файлового хранилища iot-fs
file-storage:
  host: "{{ mongodb_addr }}"
  port: {{ mongodb_port }}
  user: ""
  password: ""
  database: "{{ coreInternal.fs.db.name }}"

# База лицензионных файлов
license-storage:
  host: "{{ mongodb_addr }}"
  port: {{ mongodb_port }}
  user: ""
  password: ""
  database: "{{ coreInternal.licenses.db.name }}"

# База данных журнал событий eventlog
eventlog:
  host: "{{ mongodb_addr }}"
  port: {{ mongodb_port }}
  user: ""
  password: ""
  database: "{{ coreInternal.events.db.name }}"

monitoring-system:
  countAttempt: 3
  delayAttempt: 0

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-id: "{{ core.clientRegistrations.google.clientId }}"
            client-secret: "{{ core.clientRegistrations.google.clientSecret }}"
  kafka:
    enabled: false
    producer:
      bootstrap-servers: "localhost:9092"
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
  rabbitmq:
    host: zwayproxy-rabbitmq
    port: 5672
#Адрес локально развернутого сервера, временное решение для стыковки с android. ApiKey также локальный.
video:
  flussonic:
    url: "{{ core.video.flussonic.url }}"
    apiKey: "{{ core.video.flussonic.apiKey }}"
    operator_id: "{{ core.video.flussonic.operatorId }}"
    admin_login: "{{ core.video.flussonic.adminLogin }}"
  ivideon:
    #указан ip куда ivideon будет посылать события, для развертывания следует изменить
    ip_for_catch_event: ""
  eltex_server:
    url: "{{ core.video.eltex_server.url }}"
    hls_player: "{{ core.video.eltex_server.hls_player }}"

#Абсолютный путь до сертификата SSL
ssl:
  key: "/etc/ssl/private/eltex-sc-api.key"
  crt: "/etc/ssl/certs/eltex-sc-api.crt"

proxy:
  enabled: false
  host: ""
  port: 8050

billing:
  cron: "0 0 0 * * ?"
  ftp:
    host: "127.0.0.1"
    port: 21
    login: "user"
    password: "password"
    workdir: "test"

notifications:
  duplicate_delay_sec: 0
  antispam_time_sec: 0
  delay_push_time_millisec: 250

guard:
  deviceRequestDelay: 15000

#Включение и отключение swagger. При вводе корректного key - открываются скрытые пункты в swagger.
springdoc:
  swagger-ui:
    enabled: {{ 'true' if coreInternal.swagger.enable else 'false' }}
    key: ""

controller:
  delay_answer_from_control_millisec: 12000
  number_of_ping_threads: 1
  zway:
    logStringsLimit: 50
oauth2:
  clientParameters:
    web-client:
      type: WEB
      password: password
      clientAuthenticationMethod: client_secret_basic
      authorizationGrantTypes:
        - authorization_code
        - password
        - refresh_token
{% if web.httpsPort != 443 %}
      redirectUri: "https://{{ web.serverName }}:{{ web.httpsPort }}/ng/login"
{% else %}
      redirectUri: "https://{{ web.serverName }}/ng/login"
{% endif %}
      allowAdminLogin: true
      allowRevokeAll: true
    android-client:
      type: ANDROID
      password: password
      clientAuthenticationMethod: client_secret_basic
      authorizationGrantTypes:
        - authorization_code
        - password
        - refresh_token
      redirectUri: "https://eltex.iot.app/authorization"
      allowRevokeAll: true
    ios-client:
      type: IOS
      password: password
      clientAuthenticationMethod: client_secret_basic
      authorizationGrantTypes:
        - authorization_code
        - password
        - refresh_token
      scopes:
        - read
        - write
        - trust
      redirectUri: "https://eltex.iot.app/authorization"
      allowRevokeAll: true
    {{ core.yandexSkill.clientId }}:
      type: YANDEX
      password: "{{ core.yandexSkill.password }}"
      clientAuthenticationMethod: client_secret_post
      authorizationGrantTypes:
        - authorization_code
        - refresh_token
      redirectUri: "https://social.yandex.net/broker/redirect"
      additionalAccount: YandexAccount
    {{ core.sberSkill.clientId }}:
      type: SBER
      password: "{{ core.sberSkill.password }}"
      clientAuthenticationMethod: client_secret_post
      authorizationGrantTypes:
        - authorization_code
        - refresh_token
      redirectUri: "https://social.yandex.net/broker/redirect"
      additionalAccount: YandexAccount
    {{ core.sberSkill.clientId }}:
      type: SBER
      password: "{{ core.sberSkill.password }}"
      clientAuthenticationMethod: client_secret_post
      authorizationGrantTypes:
        - authorization_code
        - refresh_token
      redirectUri: "https://gateway.iot.sberdevices.ru/gateway/v1/binder/backward"
      additionalAccount: SberAccount
    {{ core.marusyaSkill.clientId }}:
      type: MARUSYA
      password: "{{ core.marusyaSkill.password }}"
      clientAuthenticationMethod: client_secret_post
      authorizationGrantTypes:
        - authorization_code
        - refresh_token
      redirectUri: "https://vc.go.mail.ru/smarthouse/{{ core.marusyaSkill.appId }}/callback"
      additionalAccount: MarusyaAccount

# параметры навыка Яндекс для интеграции с Умным домом (Алисой)
# https://yandex.ru/dev/dialogs/smart-home/doc/concepts/about.html
yandex-skill:
  # Настройки клиента необходимо указать в секции oauth2.clientParameters под указанным client-id
  client-id: "{{ core.yandexSkill.clientId }}"
  # Ссылка на API сервиса уведомлений Яндекса
  callback-uri: "https://dialogs.yandex.net/api/v1/skills"
  # Id навыка, который необходимо указывать при отправке уведомлений (отображается в карточке навыка)
  skill-id: "{{ core.yandexSkill.skillId }}"
  # OAuth-токен, который необходимо указывать при отправке уведомлений (необходимо получить через карточку навыка)
  oauth-token: "{{ core.yandexSkill.oauthToken }}"

# параметры проекта умного дома Сбера для интеграции с Салютом
# https://developers.sber.ru/docs/ru/smarthome/overview
sber-skill:
  # Настройки клиента необходимо указать в секции oauth2.clientParameters под указанным client-id
  client-id: "{{ core.sberSkill.clientId }}"
  # Ссылка на API сервиса уведомлений Сбера
  callback-uri: "https://partners.iot.sberdevices.ru"
  # Bearer-токен, который необходимо указывать при отправке уведомлений (необходимо получить через карточку проекта)
  bearer-token: "{{ core.sberSkill.bearerToken }}"

# параметры проекта умного дома Mail.ru для интеграции с Марусей
# https://help.mail.ru/marusia/smart_home
marusya-skill:
  # Настройки клиента необходимо указать в секции oauth2.clientParameters под указанным client-id
  client-id: "{{ core.marusyaSkill.clientId }}"
  # Ссылка на API сервиса уведомлений Маруси
  callback-uri: "https://vc.go.mail.ru/smarthouse/events/yandex"
  # Id приложения, который необходимо указывать при отправке уведомлений (отображается в карточке приложения)
  app-id: "{{ core.marusyaSkill.appId }}"
  # OAuth-токен, который необходимо указывать при отправке уведомлений (необходимо получить через карточку приложения)
  oauth-token: "{{ core.marusyaSkill.oauthToken }}"

scriptengine:
  # Предельное количество выполнений скрипта за период времени executionNumberLimit.
  # Если запуск скрипта происходят чаще чем scriptTimeLimit раз в интервал времени scriptTimeLimit (мс),
  # то скрипт останавливается.
  frequentScript:
    executionNumberLimit: 60
    scriptTimeLimit: 60000
  # Предельное количество выполнений скриптов одного дома за период времени executionNumberLimit.
  # Если запуск скриптов происходят чаще чем scriptTimeLimit раз в интервал времени scriptTimeLimit (мс),
  # то все скрипты дома останавливаются.
  frequentScriptsInHouse:
    executionNumberLimit: 120
    scriptTimeLimit: 120000

logging:
  config: "{{ coreInternal.logbackConfig }}"
  logback:
    dir: "/var/log/eltex-sc"
{% if elk.enable %}
  logstash:
    host: "{{ 'logstash' if iot.serverName == elk.serverName else elk.serverName }}"
    port: {{ 5000 if iot.serverName == elk.serverName else elkServices.logstash.port.map }}
{% endif %}
  level:
    root: {{ core.logLevel }}
    org.springframework: WARN
    org.springframework.cache: WARN
    org.springframework.data: WARN
    org.springframework.web: WARN
    _org.springframework.web: WARN
    org.springframework.security: WARN
    org.springframework.security.oauth2: WARN
    org.springdoc: WARN
    org.mongodb: WARN
    org.eclipse.jetty: WARN
    org.apache.http: WARN
    org.hibernate: WARN
    org.jboss: WARN
    org.quartz.core.QuartzSchedulerThread: WARN
    io.swagger: WARN
    io.github.resilience4j: WARN
    io.netty: WARN
    io.mongock: WARN
    io.micrometer: WARN
    com.hazelcast: WARN
    com.hivemq: WARN
entitiesLimit:
  support:
    # Максимальное количество открытых за последние 30 дней тикетов у одного пользователя
    maxNumberOfOpenTickets: 30
    # Максимальное количество сообщений допустимое для обычного пользователя в чате конкретного тикета
    maxNumberOfMessagesPerDay: 1000
    # Количество дней, через которое закрытый тикет будет удален. Используется время последнего обновления тикета.
    numberOfDaysForTicketExpired: 365

fileLimits:
  support:
    # Максимально допустимое количество и суммарный размер файлов (Мегабайт) логов прикладываемых с UI к тикету
    maxNumberOfUiLogFilesLinkToTicket: 2
    maxSizeOfUiLogFilesLinkToTicket: 10
    # Максимально допустимое количество и суммарный размер файлов (Мегабайт) приложенных пользователем к тикету
    maxNumberOfAttachedFilesLinkToTicket: 15
    maxSizeOfAttachedFilesLinkToTicket: 15
    # Максимально допустимое количество и суммарный размер файлов (Мегабайт) приложенных пользователем к сообщению
    maxNumberOfAttachedFilesLinkToMessage: 1
    maxSizeOfAttachedFilesLinkToMessage: 10
    # Максимальный размер файлов (Мегабайт) приложенных в чате. Наиболее старые файлы будут удалены в ходе ротации.
    maxSizeForFilesAttachedToChat: 20
    # Количество дней после которого будут удалены все приложенные к сообщениям чата файлы.
    # Используется время последнего обновления тикета.
    numberOfDaysForExpiredAttachmentsInChat: 7

Порты, используемые платформой по умолчанию:

  • 8069 — порт для подключения контроллеров Ethernet к платформе в режиме TCP-клиент;
  • 8070 — WS-порт для подключения контроллеров к платформе;
  • 8071 — HTTP-порт API-платформы;
  • 8072 — WSS-порт для подключения контроллеров к платформе;
  • 8073 — HTTPS-порт API-платформы;
  • 8883 — порт для подключения к MQTT-брокеру;
  • 8088 — порт для CAPTCHA.

По окончании установки и конфигурирования сервер Eltex SC будет готов к работе. Взаимодействие с платформой происходит через веб-интерфейсы пользователей и администратора, а также через мобильное приложение Eltex Home.

Во всех случаях для входа в платформу необходимо указать ее адрес и номер порта. В общем случае в адресную строку браузера вводится следующее: <Адрес сервера Eltex SC>.

Проверка работоспособности платформы

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

Проверить занятость ядер процессора и оперативной памяти

htop
Необходимо следить за MEM% и CPU% процессов mongo и docker-контейнеров.

Проверить занятость физического места на диске

df -h
Обратите внимание на использование диска всеми подразделами.

Проверить соединения контроллеров Z-Wave или датчиков Wi-Fi с платформой

netstat -na | grep 8070
netstat -na | grep 8883

Параметры, на которые следует обратить внимание:

  • Состояние соединений:
    • ESTABLISHED, LISTEN — норма;
    • LAST_ACK — связь с контроллером потеряна, рядом должно быть переоткрытое соединение с того же IP;
    • TIME_WAIT, CLOSE_WAIT — соединение зависло, неудачное закрытие;
  • 2-ая колонка — очередь принятых сервером пакетов;
  • 3-я колонка — очередь пакетов, отосланных на контроллеры;
  • 5-я колонка — IP-адреса контроллеров.

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

Проверить наличие ошибок в логе

Лог-файлы платформы по умолчанию находятся в /storage/iot/core/var/log/eltex-sc/server*. Они разбиваются на части по размеру. Чтобы проверить все журналы на наличие некоторого параметра за определенную дату (например за 15 января 2022 года) и записать результаты в файл, выполните команду:

grep <значение для поиска> server-2022-01-15* > <имя файла для вывода>

Если требуется, можно дописать следующие опции после значения для поиска:

  • -i — не чувствителен к регистру;
  • -n — номера строк;
  • -h — подавляет запись имени файла перед каждой строкой в результирующем файле;
  • -A — количество строк после совпадения;
  • -B — количество строк до совпадения.


Общий вид команды:

grep -i -n -A 5 -B 2 error server-2022-01-15* > errors.log


Ключевые слова для поиска:

  • ERROR;
  • ID или IP контроллера;
  • PONG — ключевое слово, которое записывается, если контроллер не отвечает.

Проверить доступность веб-интерфейса

Самый простой способ проверить доступность веб-интерфейса платформы — открыть его в браузере (по IP или доменному имени — в зависимости от настроек сети и сервера).

Можно проверить доступность API платформы. Для этого в адресной строке браузера к URL веб-интерфейса платформы допишите: 

<Адрес сервера Eltex SC>:<порт API>/api/v1/version

где порт API — вышеуказанный порт доступа к API по HTTP (по умолчанию 8071/8073). Платформа должна моментально вернуть данные об установленной версии платформы, версии API и текущем времени на сервере в формате JSON.


Пример вывода:

Ответ сервера на запрос
{
  "version" : "1.28-3477",
  "api" : "1.0",
  "currentTime" : "2022-07-25T09:24:12.544842Z[Etc/UTC]"
}

Переход с http на https


Ваш сертификат должен иметь формат PKCS#8.

Способ определения типа сертификата

# head -1 /tmp/eltex-sc-api.key 
-----BEGIN PRIVATE KEY-----

# head -1 /storage/iot/ssl/private/eltex-sc-api.key
-----BEGIN RSA PRIVATE KEY-----


  • BEGIN PRIVATE KEY — кодировка PKCS#8;
  • BEGIN RSA PRIVATE KEY — кодировка PKCS#1.

Если ваш сертификат имеет кодировку PKCS#1, необходимо конвертировать его в PKCS#8.

Пример конвертирования сертификата из PKCS#1 в PKCS#8, letsencrypt:

openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in путь_до_ключа -out имя_для_нового_ключа.

Настройка CAPTCHA

Сервис CAPTCHA используется для ограничения нежелательной активности в целях повышения устойчивости системы. В частности, снижается вероятность спам-атак платформы ботами. 

Список инстансов CAPTCHA доступен в файле /etc/ansible-iot-1.28/templates/default-for-docker.yml.j2

Настройки доступны в файле /etc/ansible-iot-1.28/vars/service_parametrs.yml

Параметр caseSensitive отвечает за чувствительность к регистру.

Настройки уровня сложности представлены тремя возможными значениями и доступны в файле /etc/ansible-iot-1.28/vars/default.yml

Уровень сложностиОписание
easyНизкий уровень сложности. Обычно представляет из себя легкочитаемый текст.
mediumСредний уровень сложности. Обычно представляет из себя слегка искаженный текст.
hardВысокий уровень сложности. Обычно представляет собой сильно искаженный текст.
  • Нет меток