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

Версия ПО 1.23

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

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

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

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

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

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

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

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


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

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

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

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


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

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

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

Установка Ansible
apt update
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.23.tar.gz


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

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


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

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

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

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

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

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

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

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

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

Содержимое конфигурационного файла vars/default.yml
server_name: my.test.server
mongodb_version: 5
use_external_mongodb: false
external_mongodb_addr: "{{ server_name }}"
external_mongodb_port: 27017
web_http_port: 80
web_https_port: 443
use_https_web_from_core: true
web_enable_certbot: false
web_certbot_email: test@email.com
mail_smtp_submitter: test@email.com
mail_smtp_password: password
mail_smtp_auth: "true"
mail_smtp_host: email.com
mail_smtp_port: 587
flussonic_url: ""
flussonic_api_key: ""
flussonic_operator_id: ""
flussonic_admin_login: ""
install_dir: /storage/iot

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

  • mail_smtp_submitter — учетная запись e-mail;
  • mail_smtp_password — пароль от учетной записи e-mail;
  • mail_smtp_auth — проверка подлинности smtp (включена по умолчанию);
  • mail_smtp_host — адрес smtp-сервера;
  • mail_smtp_port — smtp-порт сервера.


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

  • 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;
  • use_https_web_from_core — параметр использования HTTPS для доступа из API к web;

При указании true в значении параметра use_https_web_from_core будет использован порт, указанный в web_https_port. При указании false будет использован HTTP и порт, указанный в web_http_port.

  • web_enable_certbot — параметр использования certbot для получения сертификатов Let's Encrypt;
  • web_certbot_email — e-mail владельца домена. Необходим для подтверждения валидности домена при получении сертификата Let's Encrypt.
  • mail_smtp_submitter — учетная запись e-mail (опционально);
  • mail_smtp_password — пароль от учетной записи e-mail (опционально);
  • mail_smtp_auth — проверка подлинности SMTP (включена по умолчанию) (опционально);
  • mail_smtp_host — адрес SMTP-сервера (опционально);
  • mail_smtp_port — SMTP-порт сервера (опционально);
  • flussonic_url — хост Watcher'a сервера Flussonic (опционально);
  • flussonic_api_key — ключ API, используемый для аутентификации запросов;
  • flussonic_operator_id — идентификатор оператора (опционально);
  • flussonic_admin_login — логин администратора (опционально);
  • install_dir — путь до директории, в которую будет произведена установка платформы (если такая директория не существует, то она будет создана);


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

Содержимое конфигурационного файла /vars/service_parameters.yml
iot_release: 1.23
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
core_ctlgate_tcp_mapped_port: 8069
core_ctlgate_mapped_port: 8070
core_ctlgate_ssl_mapped_port: 8072
core_api_mapped_port: 8071
core_api_ssl_mapped_port: 8073
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_port: false
without_core: false
without_web: false
testdata_enable: false
swagger_enable: false
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;
  • *_mapped_port — маппинги портов сервисов в docker-compose для предотвращения конфликтов экспортируемых портов сервисов;
  • 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_ngw_port — перенаправление портов внутреннего сервиса NGW;
  • without_core параметр для выполнения установки без сервиса core;
  • without_web параметр для выполнения установки без сервиса web;
  • testdata_enable — параметр необходимости создания тестовых учетных записей на платформе;
  • swagger_enable — параметр необходимости включения swagger (описание API платформы);
  • *_db — имя БД;
  • mjollnir_url — адрес сервера лицензий.

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

Установка
cd /etc/ansible-iot-1.23
ansible-playbook install.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
2bed00cc8fcehub.eltex-co.ru/iot/iot-double-web:1.23/docker-entrypoint.…2 minutes agoUp 2 minutes
iot_web
7da2459eaebfhub.eltex-co.ru/iot/iot-core:1.23java -Dspring.profi…2 minutes agoUp 2 minutes0.0.0.0:8069-8073->8069-8073/tcp, :::8069-8073->8069-8073/tcp, 0.0.0.0:8078->8078/tcp, :::8078->8078/tcp, 0.0.0.0:9900->9900/tcp, :::9900->9900/tcp iot_core_1iot_core
ee6a8bb69b81hub.eltex-co.ru/iot/iot-mqttbroker-mongo:latestjava -cp @/app/jib-…2 minutes agoUp 2 minutes0.0.0.0:8083->8083/tcp, :::8083->8083/tcp, 0.0.0.0:8883->8883/tcp, :::8883->8883/tcpiot-mqtt-broker
82378129b51ahub.eltex-co.ru/softwlc/eltex-ngw:1.18/usr/sbin/ngw_start…2 minutes agoUp 2 minutes0.0.0.0:8040->8040/tcp, :::8040->8040/tcpiot_ngw-sc
1c613dde3285hub.eltex-co.ru/iot-mongo5:1.23"/entrypoint.sh"2 minutes agoUp 2 minutes0.0.0.0:27017->27017/tcp, :::27017->27017/tcpiot_mongo
a2258f59c1dahub.eltex-co.ru/iot-clickhouse-backup:1.23/entrypoint.sh /ent…2 minutes agoUp 2 minutes
iot-olapservice-db-backup
580e53733003hub.eltex-co.ru/iot-olapservice:1.23java -cp @/app/jib-…2 minutes agoUp 2 minutes
iot-olapservice
57c02941cc4fclickhouse/clickhouse-server:22.3.2.2-alpine/entrypoint.sh2 minutes agoUp 2 minutes8123/tcp, 9000/tcp, 9009/tcpiot-olapservice-db


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

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


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

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


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

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

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

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

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


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

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

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

Содержимое конфигурационного файла vars/default.yml
server_name: my.test.server
mongodb_version: 5
use_external_mongodb: true
external_mongodb_addr: "{{ server_name }}"
external_mongodb_port: 27017
web_http_port: 80
web_https_port: 443
use_https_web_from_core: true
web_enable_certbot: false
web_certbot_email: test@email.com
mail_smtp_submitter: test@email.com
mail_smtp_password: password
mail_smtp_auth: "true"
mail_smtp_host: email.com
mail_smtp_port: 587
flussonic_url: ""
flussonic_api_key: ""
flussonic_operator_id: ""
flussonic_admin_login: ""
install_dir: /storage/iot


Внимание!

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

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

external_mongodb_port.

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

Содержимое конфигурационного файла /vars/service_parameters.yml
iot_release: 1.23
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
core_ctlgate_tcp_mapped_port: 8069
core_ctlgate_mapped_port: 8070
core_ctlgate_ssl_mapped_port: 8072
core_api_mapped_port: 8071
core_api_ssl_mapped_port: 8073
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_port: false
without_core: false
without_web: false
testdata_enable: false
swagger_enable: false
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

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

cd /etc/ansible-iot-1.23
sudo ansible-playbook install.yml

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

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



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

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

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

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

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

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


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

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


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

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


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

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

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

В /etc/ansible-iot-1.23/templates располагаются конфигурации для ядра, web и сервера e-mail/sms-рассылок:

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

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

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

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

ansible-playbook install.yml

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


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

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

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

logger:
  mongodb: ERROR
  springdata: INFO

controllerGateTCP:
  port: 8069

controllerGate:
  port: 8070

controllerGateSecurity:
  port: 8072

api:
  port: 8071
  sslPort: 8073

{% if ui_port_for_core != "80" and ui_port_for_core != "443" %}
# Порт UI нужен для формирования на платформе ссылок, которые пользователь сможет открыть через UI
# Может отсутствовать. В таком случае port не будет указываться при составлении URL для UI (WEB)
ui:
  port: {{ ui_port_for_core }}
{% endif %}
mqttBroker:
  enabled: true
  # Хост MQTT-брокера, используется платформой
  host: "broker"
  # Порт MQTT-брокера, используется платформой для связи по протоколу MQTT
  port: 8883
  # Порт, на котором у брокера поднимается REST API, используется платформой
  apiPort: 8083
  # Внешний URL по которому доступен MQTT-брокер, передаётся MQTT-клиентам
  remoteAccessURL: "{{ server_name }}:{{ mqtt_broker_external_mapped_port }}"
  # Таймаут в секундах, по достижении которого MQTT-устройства выставляется статус "Offline"
  offlineTimeoutSec: 300

olapservice:
  host: "olapservice"
  port: 8023

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
# параметры для формирования ссылок к UI(WEB) и API
server:
  # Доменное имя сервера, на котором развернута платформа и/или UI
  name: "{{ server_name }}"
  # Использовать схему https:// при формировании ссылок к UI
  useHttpsForUi: {{ 'true' if use_https_web_from_core else 'false' }}
  # Использовать схему https:// при формировании ссылок к API
  useHttpsForApi: false
  # Использовать ui.port вместо api.port при формировании ссылок к 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

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

dictionary:
  path: "dict.json"

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://34.227.104.115/vod/mp4:BigBuckBunny_115k.mov"
  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

yandex-skill:
  client-id: "IdChangeMe"
  client-password: "PasswordChangeMe"

scriptengine:
  cycledScripts:
    stepDelay: {{ script_step_delay }}
    criticalRepetition: {{ script_critical_repetition }}
    maxDelay: {{ script_max_delay }}
    stoppable: {{ 'true' if script_stoppable else 'false' }}


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

  • 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;
  • 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-брокеру.

По окончании установки и конфигурирования сервер 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.23-3477",
  "api" : "1.0",
  "currentTime" : "2022-07-25T09:24:12.544842Z[Etc/UTC]"
}

Настройка сервиса eltex-notification-gw (eltex-ngw)

Сервис eltex-notification-gw представляет собой интерфейс для отправки e-mail и sms-оповещений пользователям платформы. Eltex-notification-gw обеспечивает взаимодействие компонентов платформы с внешними SMS-шлюзами, call-центрами и серверами электронной почты.

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

Конфигурационный файл содержит параметры:

  • Ссылка на конфигурационный файл для подключения к SMS-шлюзу (для отправки SMS пользователям):

    sms.gate.outgoing.sms.config=smsc_gate.conf
  • Ссылка на конфигурационный файл для идентификации пользователя по отправленным им SMS:

    sms.gate.incoming.sms.config=
  • Ссылка на конфигурационный файл для идентификации пользователя по исходящим от него звонкам:

    sms.gate.incoming.call.config=
  • Настройка размера очереди SMS на отправку и времени ожидания отправки:

    sms.gate.pool.size=50
    sms.gate.pool.wait.millis=5000
  • Настройка размера очереди и времени ожидания отправки, ссылка на конфигурационный файл для авторизации по входящему звонку:

    call.gate.outgoing.call.config=
    call.gate.pool.size=50
    pool.wait.millis=5000
    
  • Порт, прослушиваемый сервисом для приема запросов на отправку сообщений:

    server.port=8040

  • Настройка подключения к MongoDB для хранения журнала отправки сообщений:

    mongodb.host={{ mongodb_addr }}
    mongodb.port={{ mongodb_port }}
    mongodb.name=notification-gw
    mongodb.fsfiles.store.period=7
  • Подключение к серверу электронной почты:

    mail.smtp.submitter={{ mail_smtp_submitter }}
    mail.smtp.password={{ mail_smtp_password }}
    mail.smtp.auth={{ mail_smtp_auth }}
    mail.smtp.host={{ mail_smtp_host }}
    mail.smtp.port={{ mail_smtp_port }}
    mail.smtp.sendpartial=true
    mail.smtp.starttls.enable=false
    mail.smtp.connectiontimeout=5000
    mail.gate.pool.size=20
    mail.pool.wait.millis=10000

mail.smtp.password

Если в вашем пароле используются спецсимволы типа:  " [ \ ^ $ . | ? * + ( )",  их необходимо экранировать знаком "\", иначе пароль будет неверным!

Пример 1: пароль "326P%1E\" при экранировании должен выглядеть следующим образом: "326P%1E\\"; 

Пример 2: пароль "326P%1E^" при экранировании должен выглядеть следующим образом: "326P%1E\^".


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

mail.smtp.starttls.enable=true

Переход с 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 имя_для_нового_ключа.
  • Нет меток