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

Версия ПО 1.29

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

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

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

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

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

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

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

В инструкции описан процесс установки платформы Eltex SC версии 1.29 на операционную систему Ubuntu 20.04. Информацию по установке более ранних версий платформы Eltex SC (1.29 и ниже) можно найти по ссылке: Архив 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.29.tar.gz


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

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


5. Отредактируйте файл /etc/ansible-iot-1.29/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.

MongoDB версии 5 и выше работает только на процессорах с поддержкой AVX. Узнать, поддерживает ли ваш процессор AVX, можно с помощью команды:

lscpu | grep avx

Если ответ оказался пустым, ваш процессор не поддерживает AVX. Используйте MongoDB версии 4.

Если в ответе вернулся список флагов, можно использовать MongoDB версии 5 и выше.

Для базовой установки достаточно отредактировать файл конфигурации /etc/ansible-iot-1.29/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

# Параметры 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: true
  nginx:
    # Максимальное число соединений, которые одновременно может открыть рабочий процесс
    worker_connections: 1024
  certbot:
    # Использовать ли certbot для получения сертификатов Let's Encrypt.
    enable: false
    # Email владельца домена. Необходим для подтверждения валидности домена при получении сертификата Let's Encrypt.
    email: test@email.com

# Параметры сервера отправки email.
mail:
  smtp:
    submitter: test@email.com
    password: "password"
    senderPrefix: "Сервер Eltex-SC"
    auth: "true"
    host: email.com
    port: 587
    # Протокол шифрования, используемый при подключении к серверу. Допустимые значения: none, starttls, ssl.
    protection: starttls

# Параметры платформы IoT core.
core:
  # Ссылка на политику конфиденциальности
  privacyPolicyUrl: "my.test.privacy"

  # Уровень отладки внутри IoT Core.
  logLevel: INFO

  # Порты платформы для подключения zway-контроллеров.
  ctlGate:
    port: 8070
    tcpPort: 8069
    sslPort: 8072

  # Порты 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: ""

  acquiring:
    # Период после завершения действия последней подписки, в течение которого услуга продолжает (ограниченно) действовать
    advancePeriod: 3
    paykeeper:
      url: "CHANGE_ME"
      secret: "PaykeeperSecretChangeMe"

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

  # Параметры навыка Яндекс для интеграции с Умным домом (Алисой). Отображается в карточке навыка.
  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: ""

  # Настройки ИК-пульта.
  irc:
    # Время ожидания ИК команды от пользователя (мс).
    recTimeout: 15000
    # Таймаут записи команды (отсутствия фронтов) (мс).
    cmdTimeout: 100
    # Путь до базы ИК сигналов IRDB.
    irdbPath: "CHANGE_ME"

Таблица описания значений в файле настроек /vars/default.yml

iot:Параметры установки платформы.
serverName: "my.test.server"

Имя (IP-адрес) сервера, на котором будет производиться развертывание платформы IoT. Возможно использование 'localhost', если все манипуляции производятся локально.

В 'serverName' нужно прописывать то имя (IP-адрес), по которому будет доступна платформа. Если указать 'localhost', то платформа будет доступна только через 'localhost'.

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

Параметр для использования внешней MongoDB. Если выставлен в true, будет использоваться внешняя MongoDB.

MongoDB должна быть настроена, а параметры подключения — указаны в 'addr' и 'port'.

addr: "{{ iot.serverName }}"Адрес внешней MongoDB.
port: 27017Порт внешней MongoDB.
web:Параметры WEB.
serverName: "{{ iot.serverName }}"Имя (IP-адрес) сервера, на котором будет развернут WEB. По умолчанию совпадает с 'iot.serverName', что предполагает установку рядом с платформой (на том же хосте).
httpPort: 80Порт HTTP, по которому будет осуществляться доступ в WEB.
httpsPort: 443Порт HTTPS, по которому будет осуществляться доступ в WEB.
redirectHttpToHttps: trueПараметр для перенаправления HTTP запросов на HTTPS.
nginx:
worker_connections: 1024Максимальное число соединений, которое одновременно может открыть рабочий процесс.
certbot:
enable: falseПараметр, позволяющий использовать certbot для получения сертификатов Let's Encrypt.
email: test@email.comEmail владельца домена. Необходим для подтверждения валидности домена при получении сертификата Let's Encrypt.
mail:Параметры сервера отправки email.
smtp:
submitter: test@email.comУчетная запись e-mail.
password: "password"Пароль от учетной записи e-mail.
auth: "true"Проверка подлинности SMTP (включена по умолчанию).
senderPrefix: "Сервер Eltex-SC"Имя отправителя.
host: email.comАдрес SMTP-сервера.
port: 587SMTP-порт сервера.
protection: starttlsПротокол шифрования, используемый при подключении к серверу. Допустимые значения: none, starttls, ssl.
core:Параметры платформы IoT Core.
privacyPolicyUrl: "my.test.privacy"Ссылка на политику конфиденциальности.
logLevel: INFOУровень отладки внутри IoT Core.
ctlGate:Порты платформы для подключения zway-контроллеров.
port: 8070WS-порт для подключения контроллеров к платформе.
tcpPort: 8069Порт для подключения контроллеров Ethernet к платформе в режиме TCP-клиент.
sslPort: 8072WSS-порт для подключения контроллеров к платформе.
api:Порты API платформы.
port: 8071HTTP-порт API-платформы.
sslPort: 8073HTTPS-порт API-платформы.
captchaLevel: "easy"Уровень сложности CAPTCHA: easy, medium, hard.
server:
useHttpsForUi: trueПараметр, позволяющий использовать HTTPS при формировании ссылок к WEB ('true' по умолчанию, при этом будет использован порт, указанный в 'web.httpsPort'). Если поставить в 'false', будет использован HTTP и порт, указанный в 'web.httpPort'.
useHttpsForApi: falseПараметр, позволяющий использовать HTTPS при формировании ссылок к ресурсам самой платформы (например, прошивки).
useHttpsForCameraLinks: trueПараметр, позволяющий использовать HTTPS при формировании ссылок на фото с камер наблюдения.
useUiProxyForApi: falseПараметр, позволяющий использовать 'web.serverName' вместо 'iot.serverName' и 'web.httpPort'/'web.httpsPort' вместо 'core.api.port'/'core.api.sslPort' при формировании ссылок к API.
selfRegistration:Параметры для управления доступностью самостоятельной регистрации.
allow: trueДоступность самостоятельной регистрации.
allowDemo: trueДоступность самостоятельной регистрации демо-аккаунтов.
allowSocialNetworks: falseДоступность самостоятельной регистрации через соцсети.
push:Включение/выключение push-сообщений.

firebase:

enabled: false

Включение/выключение push-сообщений для Android.

apns:

enabled: false

Включение/выключение push-сообщений для iOS.
video:Параметры для работы с видеосерверами.
flussonic:Параметры Flussonic.
url: ""URL сервера Flussonic.
apiKey: ""Ключ API.
operatorId: ""ID оператора.
adminLogin: ""Логин администратора.

motion:

enabled: false

Доступность фиксации движения.
eltex_server:Параметры видеосервера Eltex.
url: ""URL сервера Eltex.
apiKey: ""Ключ API.
operatorId: ""ID оператора.
adminLogin: ""Логин администратора.
acquiring:
advancePeriod: 3Период после завершения действия последней подписки, в течение которого услуга продолжает (ограниченно) действовать.
paykeeper:Настройки сервиса оплаты paykeeper.
url: "CHANGE_ME"URL сервиса paykeeper.
secret: "PaykeeperSecretChangeMe"Секрет сервиса paykeeper.
clientRegistrations:Параметры клиентских регистраций (через соцсети).
yandex:Наименование соцсети.
enable: trueДоступность самостоятельной регистрации через соцсеть.
clientId: "YandexClientIdChangeMe"ID клиента.
clientSecret: "YandexClientSecretChangeMe"Секрет клиента.
yandexSkill:Параметры навыка Яндекс для интеграции с Умным домом (Алисой). Отображается в карточке навыка.

clientId: "YandexClientIdChangeMe"

password: "PasswordChangeMe"

Параметры для Basic Authentication.
skillId: ""ID навыка, который необходимо указывать при отправке уведомлений.
oauthToken: ""OAuth-токен, который необходимо указывать при отправке уведомлений.
irc:Настройки ИК-пульта.
recTimeout: 15000Время ожидания ИК-команды от пользователя в мс.
cmdTimeout: 100Таймаут записи команды (отсутствия фронтов) в мс.
irdbPath: "CHANGE_ME"Путь до базы ИК-сигналов IRDB.

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


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

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

swarm:
  enabled: false
  # Имя stack-а для запуска в docker-swarm.
  stack: swarm_iot

# Имя репозитория 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

# Нужно ли установить лимиты на сервисы в docker compose
limitsEnable: false

# Параметры сервисов IoT (для docker-compose), сгруппированные по именам.
# 'enable' - должен ли присутствовать сервис в docker-compose.yml.
# 'port.map' - номер порта сервиса в сети хоста.
# 'port.export' - нужно ли выполнять маппинг порта из контейнера в сеть хоста.
# 'db.name' - имя БД, используемой сервисом (связкой сервисов).
iotServices:
  db:
    limits:
      enable: false
      cpus: 1.0
      memory: 4G
    port:
      map: 27017
      export: false
  broker:
    enable: true
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
    external:
      port:
        map: 8883
    internal:
      port:
        map: 8083
        export: false
    db:
      name: iot-broker
    jconsole:
      enable: false
      port: 32002
      # Необходимо указать адрес хоста, куда будет подключаться jconsole-клиент.
      # При развертывании докера - здесь указывается адреса хоста, где работает докер.
      host: "10.20.30.40"
  olapservice:
    enable: true
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
    port:
      map: 8023
      export: false
    db:
      name: iotcore
      limits:
        enable: false
        cpus: 1.0
        memory: 4G
      port:
        map: 8123
        export: false
  ngw:
    enable: false
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
    port:
      map: 8040
      export: false
    db:
      name: notification-gw
      user: javauser
      password: javapassword
      limits:
        enable: false
        cpus: 1.0
        memory: 4G
      port:
        map: 3306
        export: false
  captcha:
    enable: true
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
    port:
      map: 8088
      export: false
    caseSensitive: true
    allowedSizes:
      - "312x45"
      - "270x40"
    instance: "captcha:8088"
    proportion: 100
  zscaptcha:
    enable: false
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
    port:
      map: 8089
      export: false
    caseSensitive: true
    instance: "zs-captcha:8089"
    proportion: 0
  core:
    # Развертывание окружения без платформы, полезно для разработки core.
    enable: true
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
    jconsole:
      enable: false
      port: 32001
      # Необходимо указать адрес хоста, куда будет подключаться jconsole-клиент.
      # При развертывании докера - здесь указывается адреса хоста, где работает докер.
      host: "10.20.30.40"
  web:
    # Развертывание окружения без WEB, полезно для разработки web.
    enable: true
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
  hazelcast:
    embedded: true
    clusterName: iot-core
    instanceName: iot-core-hazelcast-instance
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
    external:
      port:
        map: 5701
        export: false
  rabbitmq:
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
    port:
      map: 5672
      export: false
  zwayproxy:
    enable: false
    external:
      enable: false
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
    port:
      map: 8070
      export: true
    sslPort:
      map: 8072
      export: true
    rabbit:
      queue:
        # Идентификатор очереди для отправки сообщений из прокси в платформу.
        platform: zway-proxy-platform
      exchange:
        # Идентификатор топик-коллектора.
        proxy: zway-proxy-topic-exchange
      # Количество консьюмеров на стороне платформы
      platformConsumers:
        # Данный параметр не может быть больше чем maxCount.
        count: 1
        # Максимальное количество одновременных консьюмеров очереди.
        maxCount: 1
      # Количество консьюмеров на стороне zwayProxy service
      proxyConsumers:
        # Количество одновременных консьюмеров очереди. Данный параметр не может быть больше чем maxCount.
        count: 1
        # Максимальное количество одновременных консьюмеров очереди.
        maxCount: 1
  wsproxy:
    enable: false
    external:
      enable: false
      # Адрес хоста куда nginx будет проксировать запросы.
      host: "1.2.3.4"
      port: 8075
    limits:
      enable: true
      cpus: 1.0
      memory: 4G
    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

# Параметры сервисов 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: false
    port:
      map: 9113

coreInternal:
  # Нужно ли создавать тестовые учетные записи на платформе.
  testdata:
    enable: false
  # Нужно ли включать swagger (описание API платформы).
  swagger:
    enable: false
  # Нужно ли платформе пытаться подключиться к MQTT Broker.
  mqttbroker:
    enable: true
  # Нужно ли платформе пытаться подключиться к OlapService.
  olapservice:
    enable: true
  # Имена БД в 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"

Таблица описания значений в файле настроек vars/service_parameters.yml

release:1.29Версия контейнеров.

swarm:

enabled: false

Включение/выключение оркестрации.
stack: swarm_iotИмя stack-а для запуска в docker-swarm.
registry: hub.eltex-co.ruИмя репозитория docker registry, содержащего docker-образы для развертывания.
services: []Список сервисов для перезапуска (при запуске плейбуков restart_*.yml). Можно оставить пустым, а при запуске передавать параметром командной строки.
withDistroPreparingStep: trueПараметр, отражающий необходимость дистрибутива к установке. Этот шаг полезен при «чистой» установке на только что созданный сервер. Если ранее уже была выполнена установка компонентов IoT через Ansible, то такая подготовка не требуется и этот шаг можно пропустить для экономии времени.
containerNameSuffix: ""Суффикс, добавляемый к имени каждого контейнера (помогает избежать конфликты имен контейнеров).
networkNameSuffix: ""Суффикс, добавляемый к имени создаваемой сети docker (помогает избежать конфликты имен сетей docker).
diskUsage:Параметры мониторинга использования дискового пространства. Должны соответствовать требованию:warnThreshold > criticalThreshold > 0, иначе мониторинг дискового пространства будет отключен.
warnThreshold: 20Порог дискового пространства (в %), при достижении которого все логгеры микросервисов переводятся в режим WARN (отображаются сообщения с тегами WARN и ERROR). Количество бэкапов баз уменьшается пропорционально приближению к порогу criticalThreshold.
criticalThreshold: 10Порог дискового пространства (в %), при достижении которого все логгеры микросервисов переводятся в режим ERROR (отображаются только сообщения с тегом ERROR). Бэкапы баз не выполняются.
limitsEnable: falseПараметр, позволяющий установить лимиты на сервисы в docker compose.
iotServices:Параметры сервисов IoT (для docker-compose), сгруппированные по именам. В данной таблице описание всех параметров приведено на примере сервиса broker.

broker:

enable: true

'enable' — параметр, отражающий необходимость присутствия сервиса в docker-compose.yml.

limits:

Лимиты ресурсов для конкретного сервиса.
enable: trueВключение/выключение лимитов ресурсов для конкретного сервиса.
cpus: 1.0Лимит ядер процессора.
memory: 4GЛимит выделяемой памяти.

external:

port:

map: 8883


internal:

port:

map: 8083

'port.map' — номер порта сервиса в сети хоста.
export: false'port.export' — параметр, отражающий необходимость маппинга порта из контейнера в сеть хоста.

db:

name: iot-broker

'db.name' — имя БД, используемой сервисом (связкой сервисов).

zwayproxy:

enable: false

Включение/выключение сервиса проксирования запросов zway (снижает нагрузку на ядро).

rabbit:

queue:

platform: zway-proxy-platform

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

exchange:

proxy: zway-proxy-topic-exchange

Идентификатор топик-коллектора.
platformConsumers:Количество консьюмеров на стороне платформы.
count: 1Данный параметр не может быть больше чем maxCount.
maxCount: 1Максимальное количество одновременных консьюмеров очереди.
proxyConsumers:Количество консьюмеров на стороне zwayProxy service.
count: 1Количество одновременных консьюмеров очереди. Данный параметр не может быть больше чем maxCount.
maxCount: 1Максимальное количество одновременных консьюмеров очереди.
elkServices:Параметры сервисов ELK (для docker-compose), сгруппированные по именам.
monitoringServices:Параметры сервисов мониторинга (для docker-compose), сгруппированные по именам.

testdata:

enable: false

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

swagger:

enable: false

Параметр, отражающий необходимость включения swagger (описание API платформы).

mqttbroker:

enable: true

Параметр, отражающий необходимость подключения к MQTT Broker.

olapservice:

enable: true

Параметр, отражающий необходимость подключения к OlapService.

core:

db:

name: iot-core

fs:

db:

name: iot-fs

licenses:

db:

name: iot-licenses

events:

db:

name: iot-events

Имена БД в MongoDB, используемые платформой.
mjollnir:Сервис проверки лицензий.
url: "http://smart.eltex-co.ru:8078/api/v1"URL для Mjollnir.

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

Установка
cd /etc/ansible-iot-1.29
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.29/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.29java -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.29java -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.29-602/usr/sbin/ngw_start…2 minutes agoUp 2 minutes
iot-ngw-sc
228d41c96cbahub.eltex-co.ru/iot-olapservice:1.29java -cp @/app/jib-…2 minutes agoUp 2 minutes
iot-olapservice
e8e2899f2c8dhub.eltex-co.ru/iot-captcha:1.29java -jar LibreCapt…2 minutes agoUp 2 minutes8888/tcpiot-captcha
57c02941cc4fhub.eltex-co.ru/iot-mongo6:1.29/entrypoint.sh2 minutes agoUp 2 minutes0.0.0.0:27017->27017/tcp, :::27017->27017/tcp

iot-mongo

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

iot-iot-mysql


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

Адрес сервера был ранее указан в переменной server_name файла конфигурации /etc/ansible-iot-1.29/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.29.tar.gz


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


5. Отредактируйте файл /etc/ansible-iot-1.29/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.29/vars/default.yml и /etc/ansible-iot-1.29/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.29
sudo ansible-playbook install_iot.yml

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

Адрес сервера был ранее указан в переменной server_name файла конфигурации /etc/ansible-iot-1.29/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.29/templates располагаются конфигурации для ядра: /etc/ansible-iot-1.29/templates/iot/default-for-docker.yml.j2 и веб-сервера: /etc/ansible-iot-1.29/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.29/vars/default.yml . При запуске платформы параметры, заданные в файле конфигурации /etc/ansible-iot-1.29/vars/default.yml, имеют наивысший приоритет по отношению к другим файлам конфигурации, а также ведут к их перезаписи.


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

  • 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.29-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.29/templates/default-for-docker.yml.j2

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

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

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

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