Версия ПО 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.
Пример установки через консоль:
apt update apt install software-properties-common add-apt-repository --yes --update ppa:ansible/ansible apt install ansible
Более подробная информация по установке Ansible доступна по ссылке.
2. Выполните проверку версии (должна быть не ниже v2.9):
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
При установке задайте свой пароль.
Пример задания пароля:
[default] localhost ansible_connection=local ansible_sudo_pass=rootpasswd
6. Далее необходимо настроить параметры доступа к платформе Eltex SC.
Для базовой установки достаточно отредактировать файл конфигурации /etc/ansible-iot-1.23/vars/default.yml
Откройте файл в любом доступном текстовом редакторе, например nano. Укажите корректный IP-адрес или доменное имя для доступа к платформе в переменной server_name:
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:
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 ID | IMAGE | COMMAND | CREATED | STATUS | PORTS | NAMES |
---|---|---|---|---|---|---|
2bed00cc8fce | hub.eltex-co.ru/iot/iot-double-web:1.23 | /docker-entrypoint.… | 2 minutes ago | Up 2 minutes | iot_web | |
7da2459eaebf | hub.eltex-co.ru/iot/iot-core:1.23 | java -Dspring.profi… | 2 minutes ago | Up 2 minutes | 0.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_1 | iot_core |
ee6a8bb69b81 | hub.eltex-co.ru/iot/iot-mqttbroker-mongo:latest | java -cp @/app/jib-… | 2 minutes ago | Up 2 minutes | 0.0.0.0:8083->8083/tcp, :::8083->8083/tcp, 0.0.0.0:8883->8883/tcp, :::8883->8883/tcp | iot-mqtt-broker |
82378129b51a | hub.eltex-co.ru/softwlc/eltex-ngw:1.18 | /usr/sbin/ngw_start… | 2 minutes ago | Up 2 minutes | 0.0.0.0:8040->8040/tcp, :::8040->8040/tcp | iot_ngw-sc |
1c613dde3285 | hub.eltex-co.ru/iot-mongo5:1.23 | "/entrypoint.sh" | 2 minutes ago | Up 2 minutes | 0.0.0.0:27017->27017/tcp, :::27017->27017/tcp | iot_mongo |
a2258f59c1da | hub.eltex-co.ru/iot-clickhouse-backup:1.23 | /entrypoint.sh /ent… | 2 minutes ago | Up 2 minutes | iot-olapservice-db-backup | |
580e53733003 | hub.eltex-co.ru/iot-olapservice:1.23 | java -cp @/app/jib-… | 2 minutes ago | Up 2 minutes | iot-olapservice | |
57c02941cc4f | clickhouse/clickhouse-server:22.3.2.2-alpine | /entrypoint.sh | 2 minutes ago | Up 2 minutes | 8123/tcp, 9000/tcp, 9009/tcp | iot-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
При установке задайте свой пароль.
[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.
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
.
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
Проверить занятость физического места на диске
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
Способ определения типа сертификата
# 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 имя_для_нового_ключа.