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

Версия ПО 1.25

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

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

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

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

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

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

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

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


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

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


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

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

Содержимое конфигурационного файла vars/default.yml
---
iot_server_name: my.test.server
elk_server_name: "{{ iot_server_name }}"
monitoring_server_name: "{{ iot_server_name }}"
mongodb_version: 5
use_external_mongodb: false
external_mongodb_addr: "{{ iot_server_name }}"
external_mongodb_port: 27017
web_server_name: "{{ iot_server_name }}"
web_http_port: 80
web_https_port: 443
core_ctlgate_tcp_port: 8069
core_ctlgate_port: 8070
core_ctlgate_ssl_port: 8072
core_api_port: 8071
core_api_ssl_port: 8073
use_https_for_ui: true
use_https_for_api: false
use_https_for_camera_links: true
use_ui_proxy_for_api: false
web_enable_certbot: false
web_certbot_email: test@email.com
mail:
  smtp:
    submitter: test@email.com
    password: password
    senderPrefix: "Сервер Eltex-SC"
    auth: "true"
    host: email.com
    port: 587
flussonic_url: ""
flussonic_api_key: ""
flussonic_operator_id: ""
flussonic_admin_login: ""
install_dir: /storage/iot
install_dir_for_elk: /storage/elk
install_dir_for_monitoring: /storage/monitoring

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

mail:

smtp:

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

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

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

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

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

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


Описание параметров конфигурации в файле vars/default.yml:

  • iot_server_name — доменное имя (IP-адрес) сервера, на котором будет производиться развертывание;
  • elk_server_name — доменное имя (IP-адрес) сервера, на котором будет будет развернута система ELK;
  • monitoring_server_name — доменное имя (IP-адрес) сервера, на котором будет развернута система мониторинга;
  • mongodb_version — версия используемой базы данных (далее — БД) MongoDB (по умолчанию 5);

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

  • use_external_mongodb — параметр использования внешней MongoDB;

При указании true в значении параметра use_external_mongodb MongoDB должна быть настроена, а параметры подключения — указаны в external_mongodb_addr и external_mongodb_port.


  • external_mongodb_addr — адрес внешней MongoDB;
  • external_mongodb_port — порт внешней MongoDB;
  • web_http_port — порт HTTP, по которому будет осуществляться доступ в web;
  • web_https_port — порт HTTPS, по которому будет осуществляться доступ в web;
  • core_*_port — порты IoT Core;
  • use_https_for_ui — параметр использования HTTPS при формировании ссылок к web (по умолчанию установлено значение true, при этом будет использован порт, указанный в web_https_port. Если установить в false, будет использован HTTP и порт, указанный в web_http_port);
  • use_https_for_api — параметр использования HTTPS при формировании ссылок к ресурсам самой платформы (например, прошивки);
  • use_https_for_camera_links — параметр использования HTTPS при формировании ссылок на фото с камер наблюдения;
  • use_ui_proxy_for_api — параметр использования web_server_name вместо iot_server_name и web_http_port/web_https_port вместо core_api_port/core_api_ssl_port при формировании ссылок к API;
  • web_enable_certbot — параметр использования certbot для получения сертификатов Let's Encrypt;
  • web_certbot_email — e-mail владельца домена. Необходим для подтверждения валидности домена при получении сертификата Let's Encrypt;
  • mail.smtp.* — настройки почты для NGW;
  • flussonic_url — хост Watcher-a сервера Flussonic (опционально);
  • flussonic_api_key — ключ API, используемый для аутентификации запросов;
  • flussonic_operator_id — идентификатор оператора (опционально);
  • flussonic_admin_login — логин администратора (опционально);
  • install_dir — путь до директории, в которую будет произведена установка платформы (если такая директория не существует, то она будет создана);
  • install_dir_for_elk — путь до директории, в которую будет произведена установка системы ELK (если такая директория не существует, то она будет создана);
  • install_dir_for_monitoring — путь до директории, в которую будет произведена установка системы мониторинга (если такая директория не существует, то она будет создана).

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

Содержимое конфигурационного файла /vars/service_parameters.yml
--
iot_release: 1.25
registry: hub.eltex-co.ru
container_name_suffix: ""
network_name_suffix: ""
db_mapped_port: 27017
mqtt_broker_external_mapped_port: 8883
mqtt_broker_internal_mapped_port: 8083
olapservice_mapped_port: 8023
olapservice_db_mapped_port: 8123
ngw:
  mapped_port: 8040
  db:
    name: notification-gw
    user: javauser
    password: javapassword
    mapped_port: 3306
captcha_mapped_port: 8088
elastic_rest_port: 9200
elastic_nodes_port: 9300
logstash_port: 5000
logstash_api_port: 9600
kibana_port: 5601
prometheus_port: 9090
grafana_port: 3000
services:
with_distro_preparing_step: true
iot_core_log_level: INFO
export_mongo_port: false
export_mqtt_broker_port: false
export_olapservice_port: false
export_olapservice_db_port: false
export_ngw_db_port: false
export_ngw_port: false
export_captcha_port: false
Содержимое конфигурационного файла /vars/service_parameters.yml
without_mqtt: false
without_olap: false
without_core: false
without_web: false
without_elk: true
testdata_enable: false
swagger_enable: false
mqttbroker_enable: true
olapservice_enable: true
captcha_level: "easy"
captcha_allowed_sizes:
  - "312x45"
iot_core_db: iot-core
iot_fs_db: iot-fs
iot_licenses_db: iot-licenses
iot_events_db: iot-events
mqtt_broker_db: iot-broker
olap_service_db: iotcore
mjollnir_url: "http://92.125.152.58:8078/api/v1"
script_step_delay: 2
script_critical_repetition: 2
script_max_delay: 10
script_stoppable: true


Описание параметров конфигурации в файле vars/service_parameters.yml:

  • iot_release — версия core & web;
  • registry — репозиторий docker registry, хранящий docker-образы, необходимые для развертывания платформы (менять не рекомендуется);
  • container_name_suffix — добавляет суффикс к имени контейнера для предотвращения конфликтов имен контейнеров;
  • network_name_suffix — добавляет суффикс к имени создаваемой сети docker для предотвращения конфликтов имен сетей docker;
  • *_port — маппинги портов сервисов в docker-compose для предотвращения конфликтов экспортируемых портов сервисов;
  • ngw.db.* — параметры для подключения к БД MySQL для сервиса NGW;
  • services — список сервисов для перезапуска (при запуске плейбука services_restart.yml). Можно оставить пустым, а при запуске передавать параметром командной строки (опционально);
  • with_distro_preparing_step — параметр необходимости подготовки дистрибутива к установке. Данный шаг полезен при "чистой" установке на только что созданный сервер. Если ранее уже была выполнена установка компонентов IoT через Ansible, то такая подготовка не требуется и этот шаг можно пропустить для экономии времени;
  • iot_core_log_level — уровень отладки внутри IoT Core;
  • export_mongo_port — перенаправление портов внутреннего сервиса MongoDB из контейнера docker для доступа к БД из внешней сети;
  • export_mqtt_broker_port — перенаправление портов внутреннего сервиса MQTT-брокера из контейнера docker для доступа к API ядра из внешней сети;
  • export_olapservice_port — перенаправление портов внутреннего сервиса OLAP-брокера из контейнера docker для доступа к API ядра из внешней сети;
  • export_olapservice_db_port — перенаправление портов внутреннего сервиса ClickHouse из контейнера docker для доступа к БД из внешней сети;
  • export_captcha_port — перенаправление портов внутреннего сервиса CAPTCHA;
  • export_ngw_port — перенаправление портов внутреннего сервиса NGW;
  • without_mqtt — параметр необходимости выполнения установки без MQTT Broker.
  • without_core — параметр для выполнения установки без сервиса core;
  • without_web — параметр для выполнения установки без сервиса web;
  • without_elk — параметр для выполнения установки без системы elk;
  • testdata_enable — параметр необходимости создания тестовых учетных записей на платформе;
  • swagger_enable — параметр необходимости включения swagger (описание API платформы);
  • mqttbroker_enable — параметр необходимости подключения платформы к MQTT Broker;
  • olapservice_enable — параметр необходимости подключения платформы к Olap service;
  • captcha_allowed_sizes — параметр, определяющий размер капчи;
  • iot_*_db — имя БД;
  • mqtt_broker_db — имя БД в MongoDB, используемое MQTT Broker.
  • olap_service_db — имя БД в Clickhouse, используемое Olap service.
  • mjollnir_url — адрес сервера лицензий;
  • script_step_delay — задержка между действиями в сценариях;
  • script_critical_repetition — количество циклических повторений сценария;
  • script_max_delay — максимальная задержка сценария;
  • script_stoppable — параметр для остановки сценария.

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

Установка
cd /etc/ansible-iot-1.25
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
25c08d17a4aehub.eltex-co.ru/iot-clickhouse-backup:1.25/entrypoint.sh /ent…2 minutes agoUp 2 minutes
iot-olapservice-db-backup
36c21b863cc9hub.eltex-co.ru/iot-double-web:1.25/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.25java -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.25 java -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.23-602/usr/sbin/ngw_start…2 minutes agoUp 2 minutes
iot-ngw-sc
228d41c96cbahub.eltex-co.ru/iot-olapservice:1.25java -cp @/app/jib-…2 minutes agoUp 2 minutes
iot-olapservice
e8e2899f2c8dhub.eltex-co.ru/iot-captcha:1.25 java -jar LibreCapt…2 minutes agoUp 2 minutes8888/tcpiot-captcha
57c02941cc4fhub.eltex-co.ru/iot-mongo5:1.25 /entrypoint.sh2 minutes agoUp 2 minutes0.0.0.0:27017->27017/tcp, :::27017->27017/tcp

iot-mongo

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

iot-iot-mysql

6c61b34c3a41hub.eltex-co.ru/iot-clickhouse-server:1.25 /entrypoint.sh2 minutes agoUp 2 minutes9000/tcp, 0.0.0.0:8123->8123/tcp, :::8123->8123/tcp, 9009/tcp iot-olapservice-db


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

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


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


5. Отредактируйте файл /etc/ansible-iot-1.25/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.25/vars/default.yml и /etc/ansible-iot-1.25/vars/service_parameters.yml.

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

Для параметра use_external_mongodb установите значение true.

Содержимое конфигурационного файла vars/default.yml
iot_server_name: my.test.server
...
use_external_mongodb: true
external_mongodb_addr: my.remote.mongo.server
external_mongodb_port: 27017
...


Внимание!

При указании true в значении параметра use_external_mongodb MongoDB должна быть настроена, а параметры подключения — указаны в: 

external_mongodb_addr (по умолчанию используется адрес, указанный в iot_server_name);

external_mongodb_port.


7. Откройте файл service_parameters.yml в любом доступном текстовом редакторе, например nano. Для параметра export_mongo_port установите значение true.

Содержимое конфигурационного файла /vars/service_parameters.yml
...
export_mongo_port: true
...


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

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

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

Адрес сервера был ранее указан в переменной iot_server_name файла конфигурации /etc/ansible-iot-1.25/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.25/templates располагаются конфигурации для ядра, web и капчи:

  • default-for-docker.yml.j2
  • eltex-sc-web.j2

Директория хранения журналов работы платформы: /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.25/vars/default.yml (например параметры flussonic-сервера). При запуске платформы параметры, заданные в файле конфигурации /etc/ansible-iot-1.25/vars/default.yml, имеют наивысший приоритет по отношению к другим файлам конфигурации, а также ведут к их перезаписи.


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

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

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

controllerGateTCP:
  port: {{ core_ctlgate_tcp_port }}

controllerGate:
  port: {{ core_ctlgate_port }}

controllerGateSecurity:
  port: {{ core_ctlgate_ssl_port }}
  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_ssl_port }}
ui:
  serverName: "{{ web_server_name }}"
{% if web_http_port != 80 or web_https_port != 443 %}
  # Порты UI нужны для формирования на платформе ссылок, которые пользователь сможет открыть через UI
  # Могут отсутствовать. В таком случае port/sslPort не будет указываться при составлении URL для UI (WEB)
{% if web_http_port != 80 %}
  port: {{ web_http_port }}
{% endif %}
{% if web_https_port != 443 %}
  sslPort: {{ web_https_port }}
{% endif %}
{% endif %}

mqttBroker:
  enabled: true
  # Хост MQTT-брокера, используется платформой
  host: "broker"
  # Порт MQTT-брокера, используется платформой для связи по протоколу MQTT
  port: 8883
  # Порт, на котором у брокера поднимается REST API, используется платформой
  apiPort: 8083
  # Внешний URL, по которому доступен MQTT-брокер, передаётся MQTT-клиентам
  remoteAccessURL: "{{ iot_server_name }}:{{ mqtt_broker_external_mapped_port }}"
  # Таймаут в секундах, по достижении которого MQTT-устройствам выставляется статус "Offline" 
  offlineTimeoutSec: 300

olapservice:
  host: "olapservice"
  port: 8023

captcha:
  host: "captcha"
  port: 8088
  level: "easy"
resilience4j:
  # Автоматический выключатель, который срабатывает при большом количестве неудачных вызовов
  # и перенаправляет логику в альтернативный способ обработки вызова
  circuitbreaker:
    configs:
      default:
        # Процент ошибок, при котором запрос будет перенаправляться в резервные методы
        failureRateThreshold: 50
        # Процент медленных запросов, при котором запрос будет перенаправляться в резервные методы
        slowCallRateThreshold: 50
        # Время, по истечении которого запрос будет считаться медленным
        slowCallDurationThreshold: 5s
        # Количество вызовов, разрешённых в полуоткрытом состоянии
        permittedNumberOfCallsInHalfOpenState: 5
        # Тип скользящего окна, которое используется для результатов вызовов в закрытом состоянии (COUNT_BASED/TIME_BASED)
        slidingWindowType: COUNT_BASED
        # Размер скользящего окна
        slidingWindowSize: 100
        # Автоматический переход от открытого состояния в полуоткрытое
        automaticTransitionFromOpenToHalfOpenEnabled: true
        # Время, по истечении которого состояние circuitbreaker переходит из открытого состояния в полуоткрытое
        waitDurationInOpenState: 5s
        # Минимальное количество вызовов для расчёта ошибок и медленных вызовов
        minimumNumberOfCalls: 20
    instances:
      eventlog:
        baseConfig: default
      flussonic:
        baseConfig: default
        slowCallDurationThreshold: 3s
        waitDurationInOpenState: 20s
      ivideon:
        baseConfig: default
        slowCallDurationThreshold: 3s
        waitDurationInOpenState: 20s

# Ограничитель вызова метода по времени
  timelimiter:
    configs:
      default:
        # Время, через которое вызов прерывается
        timeoutDuration: 10s
    instances:
      eventlog:
        baseConfig: default
      flussonic:
        baseConfig: default
        timeoutDuration: 3s
      ivideon:
        baseConfig: default
        timeoutDuration: 3s
  # Ограничитель по количеству одновременных вызовов метода
  bulkhead:
    configs:
      default:
        # Максимальное количество параллельных вызовов, разрешённых bulkhead
        maxConcurrentCalls: 20
    instances:
      eventlog:
        baseConfig: default
      flussonic:
        baseConfig: default
        maxConcurrentCalls: 10
      ivideon:
        baseConfig: default
        maxConcurrentCalls: 10
  # Повтор. Отмеченный метод вызывается несколько раз: либо до успеха, либо до максимального количества попыток
  retry:
    configs:
      default:
        # Максимальное количество попыток (включая первый запрос)
        maxAttempts: 2
        # Время ожидания между попытками (мс)
        waitDuration: 500
    instances:
      eventlog:
        baseConfig: default
      flussonic:
        baseConfig: default
      ivideon:
        baseConfig: default
  # Ограничитель скорости. Останавливает большое количество вызовов метода в определённый промежуток времени
  ratelimiter:
    configs:
      default:
        # Время, в течение которого поток ждёт разрешения на вызов (мс)
        timeoutDuration: 25ms
        # Период обновления лимита (мс)
        limitRefreshPeriod: 1000
        # Количество разрешений, доступных в одном периоде
        limitForPeriod: 10
    instances:
      eventlog:
        baseConfig: default
      flussonic:
        baseConfig: default
      ivideon:
        baseConfig: default
# Параметры для формирования ссылок к UI(WEB) и API
server:
  # Доменное имя сервера, на котором развернута платформа и/или UI
  name: "{{ iot_server_name }}"
  # Использовать схему https:// при формировании ссылок к UI
  useHttpsForUi: {{ 'true' if use_https_web_from_core else 'false' }}
  # Использовать схему https:// при формировании ссылок к API
  useHttpsForApi: false
  # Использовать ui.serverName вместо server.name и ui.port/ui.sslPort вместо api.port/api.sslPort
  # при формировании ссылок к API
  useUiProxyForApi: false
  oauth2:
    # Время жизни access-токена в секундах. Должно быть не менее 5 сек
    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

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

electricMeterArchiveScheduler:
  cron: "0 0 17 * * ?"
services:
  ngw:
    host: "ngw-sc"
    port: 8040
  alarmService:
    enabled: false
loginInfo:
    # Время жизни записей loginInfo (в днях), начиная с даты выхода из учетной записи
    ttl: 180
    # Максимально допустимый интервал времени (в днях) отсутствия активности со стороны пользователя,
    # по истечении которого неактивные loginInfo (и привязанные к ним авторизации) автоматически деавторизуются
    activityTimeLimit: 180
  user:
    # Максимально допустимый интервал времени (в днях) отсутствия активности со стороны пользователя
    # перед его деактивацией
    allowedInactivePeriod: 180


  push:
    firebase:
      enabled: true
    apns:
      enabled: true

dictionary:
  notificationPath: "dictionary/notificationDict.yml"
  automationPath: "dictionary/automationDict.yml"
  guardPath: "dictionary/guardDict.yml"
  inputKeysPath: "dictionary/inputKeysDict.yml"
  deprecatedKeysPath: "dictionary/deprecatedKeysDict.yml"
  substitutionKeysPath: "dictionary/substitutionKeys.yml"


languageInterface:
  language: "ru"

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

mjollnir:
  sync-period: "0 0 23 1/1 * ?"
  login: "platform"
  password: "platform"
  url: {{ mjollnir_url }}
# Основная база данных iot-core
iot-core:
  host: "{{ mongodb_addr }}"
  port: {{ mongodb_port }}
  # hosts: "192.168.0.1:27017, 192.168.0.2"
  user: ""
  password: ""
  database: "{{ iot_core_db }}"

# База данных файлового хранилища iot-fs
file-storage:
  host: "{{ mongodb_addr }}"
  port: {{ mongodb_port }}
  user: ""
  password: ""
  database: "{{ iot_fs_db }}"

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

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

test-base:
  host: "localhost"
  port: 27018

monitoring-system:
  countAttempt: 3
  delayAttempt: 0

kafka:
  enabled: false
  bootstrap-servers: "localhost:9092"

#Адрес локально развернутого сервера, временное решение для стыковки с android. ApiKey также локальный.
video:
  flussonic:
    url: "{{ flussonic_url }}"
    apiKey: "{{ flussonic_api_key }}"
    operator_id: "{{ flussonic_operator_id }}"
    admin_login: "{{ flussonic_admin_login }}"
    fake_camera_url: "rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4"
  ivideon:
    #ip, куда ivideon будет посылать события, для развертывания следует изменить
    ip_for_catch_event: ""
#Абсолютный путь до сертификата 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 swagger_enable else 'false' }}
    key: ""

controller:
  delay_answer_from_control_millisec: 12000
  number_of_ping_threads: 1

# параметры навыка Яндекс для интеграции с умным домом (Алисой)
# https://yandex.ru/dev/dialogs/smart-home/doc/concepts/about.html
yandex-skill:
  # Id и пароль, которые будут использоваться навыком при авторизации через authorization code
  client-id: "YandexClientIdChangeMe"
  client-password: "PasswordChangeMe"
  # Ссылки на API платформы умного дома и API сервиса уведомлений Яндекса соответственно
  redirect-uri: "https://social.yandex.net/broker/redirect"
  callback-uri: "https://dialogs.yandex.net/api/v1/skills"
  # Id навыка, который необходимо указывать при отправке уведомлений (отображается в карточке навыка)
  skill-id: ""
  # OAuth-токен, который необходимо указывать при отправке уведомлений (необходимо получить через карточку навыка)
  oauth-token: ""
# Параметры проекта умного дома Сбера для интеграции с Салютом
# https://developers.sber.ru/docs/ru/smarthome/overview
sber-skill:
  # Id и пароль, которые будут использоваться навыком при авторизации через authorization code
  client-id: "SberClientIdChangeMe"
  client-password: "PasswordChangeMe"
  # Ссылки на API платформы умного дома и API сервиса уведомлений Сбера соответственно
  redirect-uri: "https://gateway.iot.sberdevices.ru/gateway/v1/binder/backward"
  callback-uri: "https://partners.iot.sberdevices.ru"
  # Bearer-токен, который необходимо указывать при отправке уведомлений (необходимо получить через карточку проекта)
  bearer-token: ""

scriptengine:
  # Предельное количество выполнений скрипта за период времени executionNumberLimit.
  # Если запуск скрипта происходят чаще чем scriptTimeLimit раз в интервал времени scriptTimeLimit (мс),
  # то скрипт останавливается.
  frequentScript:
    executionNumberLimit: 60
    scriptTimeLimit: 60000
  # Предельное количество выполнений скриптов одного дома за период времени executionNumberLimit.
  # Если запуски скриптов происходят чаще чем scriptTimeLimit раз в интервал времени scriptTimeLimit (мс),
  # то все скрипты дома останавливаются.
  frequentScriptsInHouse:
    executionNumberLimit: 120
    scriptTimeLimit: 120000
logging:
  config: "classpath:logback-prod{{ '-without-logstash' if without_elk else '' }}.xml"
  logback:
    dir: "/var/log/eltex-sc"
{% if not without_elk %}
  logstash:
    host: "{{ 'logstash' if iot_server_name == elk_server_name else elk_server_name }}"
    port: {{ logstash_port }}
{% endif %}
  level:
    root: {{ iot_core_log_level }}
    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


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

  • testData — порт сервера;
  • fileStorage — путь до хранилища загружаемых файлов (внутри контейнера Docker);
  • logger — уровень логирования сервера. Для включения режима debug необходимо выставить mongodb: DEBUG;
  • controllerGateTCP — порт сервера, к которому подключаются контроллеры Ethernet в режиме TCP-клиента;
  • controllerGate port — порт сервера, к которому подключаются контроллеры (по умолчанию 8070);
  • controllerGateSecurity port — порт сервера, к которому подключаются контроллеры c использованием сертификата SSL, по умолчанию 8072;
  • api port — порт сервера для взаимодействия с API платформы через веб-интерфейс или мобильное приложение;
  • api sslPort — порт сервера для взаимодействия с API платформы через веб-интерфейс или мобильное приложение с использованием SSL-сертификата;
  • ui port — порт, указываемый при формировании ссылок в письмах оповещений и т. д., например для функционала "Восстановление пароля";
  • mqttBroker — настройка сервиса MQTT;
  • captcha — настройка сервиса CAPTCHA;
  • olapservice — настройка сервиса OLAP (доступ до контейнера Docker);
  • server name — доменное имя сервера, на котором развернута платформа и/или UI;
  • electricMeterScheduler — параметр, отвечающий за автоматический опрос устройства платформой (по умолчанию опрос выполняется каждые 30 минут, начиная от начала часа). Пример: cron: 3 0/1 * * * ? — опрос каждые 3 минуты;
  • electricMeterArchiveScheduler — параметр, отвечающий за автоматический опрос архива устройства платформой;
  • services — настройки внешних сервисов (Eltex NGW, Google FCM, Apple APNS) для работы системы рассылки оповещений на платформе;
  • video — настройка видеосервиса Flussonic;
  • ssl — путь до сертификатов SSL (внутри контейнера Docker);
  • proxy — настройка прокси-сервера;
  • billing — настройка сервиса биллинга;
  • notifications — настройка защиты сервиса push-уведомлений.

    Параметры:

    - duplicate_delay_sec — период времени, в течение которого будет блокироваться дубликат сообщения (полностью совпадающий), задается в секундах; 

    - antispam_time_sec — период времени, в течение которого будет блокироваться отправка последующих однотипных сообщений (не полностью совпадающих, например "Контроллер вне доступа 1", "Контроллер вне доступа 2" и т. д.), задается в секундах; 

    - delay_push_time_millisec — задержка между отложенными push-уведомлениями, задается в миллисекундах.

  • guard — настройка задержки перед постановкой на охрану;
  • swagger — сервис для взаимодействия и просмотра API платформы Eltex SC. Для доступа необходимо обратиться к сервису :8071/api/v1/swagger-ui/.
  • controller: delay_answer_from_control_millisec — настройка задержки ожидания ответа от контроллера;

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

  • 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 и eltex-sc.

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

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.25-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 используется для ограничения нежелательной активности в целях повышения устойчивости системы. В частности, снижается вероятность спам-атак платформы ботами. 

Для настройки сервиса необходимо отредактировать конфигурационный файл /etc/ansible-iot-1.25/templates/default-for-docker.yml.j2

Конфигурационный файл содержит следующий блок настроек:

captcha:
#Стандартный адрес и порт для CAPTCHA-сервиса
  host: "captcha"
  port: 8088
#Уровень сложности CAPTCHA-картинок
  level: "easy"

Уровни сложности представлены тремя возможными значениями:

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