Установка платформы
Версия ПО 1.20
Рекомендуемые характеристики сервера
Система Eltex SC строится по клиент-серверной архитектуре. Серверную часть рекомендуется устанавливать на многопроцессорный компьютер под управлением OS Ubuntu 20.
Производительность сервера зависит от числа пользователей, которые будут зарегистрированы на платформе. Рекомендуемые характеристики сервера для определенного числа абонентов приведены в таблице ниже.
Число абонентов | до 5 000 | до 10 000 | до 20 000 | |
---|---|---|---|---|
Число аппаратных серверов | 1 | 1 | 2 | 2 |
CPU (потоки, частота) | 4T 3.0 GHz | 8T 3.0 GHz | 4T 3.0 GHz X2 | 8T 3.0 GHz X2 |
RAM, ГБ | 10 | 18 | 10+10 | 18+18 |
HDD, ГБ | 1000 | 2000 | 1000+1000 | 2000+2000 |
Внимание!
Установка Eltex SC на сервер, не отвечающий минимальным системным требованиям, ведет к неработоспособности платформы!
Поддерживаемые дистрибутивы: Ubuntu 20.04.
С версии 1.19.4 установка через deb-пакеты не осуществляется.
Информацию по установке более ранних версий платформы Eltex SC (1.19.3 и ниже) можно найти по ссылке Архив Eltex SC.
Установка платформы Eltex SC
Поддерживаемые дистрибутивы: Ubuntu 20.04.
В инструкции приведена установка платформы Eltex SC на операционную систему Ubuntu 20.04.
Перед развертыванием необходимо установить Ansible и необходимые для его работы компоненты.
Рекомендуется устанавливать Ansible из официального репозитория проекта.
Ansible — система управления конфигурациями, написанная на языке программирования Python, с использованием декларативного языка разметки для описания конфигураций.
Используется для автоматизации настройки и развертывания программного обеспечения, в частности для ПО Eltex SC.
Установка Ansible
Перед развертыванием необходимо установить Ansible и необходимые для его работы компоненты. Рекомендуется устанавливать Ansible из официального репозитория проекта.
Пример установки в консоли:
apt update apt install software-properties-common add-apt-repository --yes --update ppa:ansible/ansible apt install ansible
Выполните проверку версии (должна быть не менее v2.9):
ansible --version
Добавление коллекций и подготовка конфигурации
После установки Ansible добавьте необходимые для его работы коллекции.
Пример добавления в консоли:
ansible-galaxy collection install community.general ansible-galaxy collection install community.crypto ansible-galaxy collection install community.docker
Настройка сервера
1) После установки Ansible нужно подготовить конфигурацию.
Файлы конфигурации направляются в виде архива tar.gz, который необходимо распаковать в директорию /etc с правами root .
Пример:
tar -C /etc -xvf ansible-iot-1.20.tar.gz
После распаковки архива все пакеты и зависимости будут развернуты в директории на текущем сервере.
Файлы конфигурации и плейбуки (скрипты/конфигурации) Ansible будут расположены в директории /etc/ansible-iot-1.20
2) Далее необходимо отредактировать файл /etc/ansible-iot-1.20/inventory
Откройте файл в любом доступном текстовом редакторе, например, nano. Укажите пароль от root в переменной ansible_sudo_pass:
Далее в примере для пользователя root используется пароль rootpasswd
При инсталляции необходимо указать валидный пароль!
[default] localhost ansible_connection=local ansible_sudo_pass=rootpasswd
3) Далее необходимо настроить параметры доступа к платформе.
Для базовой установки достаточно отредактировать файл конфигурации /etc/ansible-iot-1.20/vars/default.yml
Откройте файл в любом доступном текстовом редакторе, например, nano. Укажите корректный IP-адрес или доменное имя в переменной server_name:
server_name: my.test.server use_external_mongodb: false external_mongodb_addr: "{{ server_name }}" external_mongodb_port: 27017 web_http_port: 80 web_https_port: 443 web_sc_uri: "http://{{ server_name }}" iot_core_log_level: info export_mongo_port: false export_mqtt_broker_port: false export_olapservice_port: false export_olapservice_db_port: false mail_smtp_submitter: test@email.com mail_smtp_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 registry: hub.eltex-co.ru services:
Для функций саморегистрации, регистрации демонстрационных учетных записей, а также для процедуры восстановления пароля может потребоваться активация почтовых оповещений через 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-адрес) сервера, на котором будет производиться развертывание
- use_external_mongodb — если выставлен в true, будет использоваться внешняя 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;
- web_sc_uri — URL для доступа из API к web. Менять не рекомендуется;
- iot_core_log_level — уровень лога;
- export_mongo_port — проброс портов внутреннего сервиса MongoDB из контейнера docker для доступа к БД из внешней сети;
- export_mqtt_broker_port — проброс портов внутреннего сервиса MQTT-брокера из контейнера docker для доступа к API ядра из внешней сети;
- export_olapservice_port — проброс портов внутреннего сервиса OLAP-брокера из контейнера docker для доступа к API ядра из внешней сети;
- export_olapservice_db_port — проброс портов внутреннего сервиса ClickHouse из контейнера docker для доступа к БД из внешней сети;
- 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_operator_id — идентификатор оператора (опционально);
- flussonic_admin_login — логин администратора (опционально);
- install_dir — путь до директории, в которую будет произведена установка платформы (если такая директория не существует, то она будет создана);
- registry — содержит имя репозитория docker registry, хранящего docker-образы для развертывания. Менять не рекомендуется;
- services — список сервисов для перезапуска (при запуске плейбука services_restart.yml). Можно оставить пустым, а при запуске передавать параметром командной строки (опционально).
4) После этого можно запустить установку:
cd /etc/ansible-iot-1.20 ansible-playbook install.yml
5) Выполните проверку статуса контейнеров:
docker ps
Вывод команды docker ps | ||||||
CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PORTS | NAMES |
---|---|---|---|---|---|---|
2bed00cc8fce | hub.eltex-co.ru/iot/iot-double-web:1.20 | /docker-entrypoint.… | 2 minutes ago | Up 2 minutes | iot_web_1 | |
7da2459eaebf | hub.eltex-co.ru/iot/iot-core:1.20 | 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_1 |
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_1 |
db768b63d849 | mongo | docker-entrypoint.s… | 2 minutes ago | Up 2 minutes | 0.0.0.0:27017->27017/tcp, :::27017->27017/tcp | iot_db_1 |
Платформа будет доступна по адресу: http://[IP-адрес/домен вашего сервера Eltex SC]
Данный адрес был ранее указан в переменной server_name файла конфигурации /etc/ansible-iot-1.20/vars/default.yml
Порты доступа к API платформы можно изменить только в случае редактирования соответствующих настроек в файле конфигурации.
Работа с контейнерами
В процессе обслуживания можно осуществлять перезапуск контейнеров:
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.20/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.20/vars/default.yml (например параметры flussonic-сервера). При запуске платформы параметры, заданные в файле конфигурации /etc/ansible-iot-1.20/vars/default.yml, имеют наивысший приоритет по отношению к другим файлам конфигурации, а также ведут к их перезаписи.
Содержимое конфигурационного файла default-for-docker.yml.j2:
testData: environment: false fileStorage: path: "/var/lib/eltex-sc/files" logger: mongodb: ERROR springdata: ERROR controllerGateTCP: port: 8069 controllerGate: port: 8070 controllerGateSecurity: port: 8072 api: port: 8071 sslPort: 8073 ui: port: {{ web_http_port }} mqttBroker: enabled: true host: "broker" port: 8883 apiPort: 8083 remoteAccessURL: "{{ server_name }}:8883"
olapservice: host: "olapservice" port: 8023 hystrix: eventlog: timeoutInMilliseconds: 1000 requestVolumeThreshold: 20 errorThresholdPercentage: 50 sleepWindowInMilliseconds: 5000 defaultUrl: "{{ web_sc_uri }}" electricMeterScheduler: cron: "0 0/30 * * * ?" services: ngw: host: "ngw-sc" port: 8040 push: serverKey: dictionary: path: "dict.json" languageInterface: language: "ru" hz: instance: name: "iot-core-hz-instance" group: name: "iot-core" password: "11111" network: port: "5705" mjollnir: sync-period: "0 0 23 1/1 * ?" login: "platform" password: "platform" url: "http://92.125.152.58:8078/api/v1" iot-core: host: "{{ mongodb_addr }}" port: {{ mongodb_port }} user: "" password: "" database: "iot-core"
file-storage: host: "{{ mongodb_addr }}" port: {{ mongodb_port }} user: "" password: "" database: "iot-fs" license-storage: host: "{{ mongodb_addr }}" port: {{ mongodb_port }} user: "" password: "" database: "iot-licenses" eventlog: host: "{{ mongodb_addr }}" port: {{ mongodb_port }} user: "" password: "" database: "iot-events" test-base: host: "localhost" port: 27018 monitoring-system: countAttempt: 3 delayAttempt: 0 kafka: enabled: false bootstrap-servers: "localhost:9092" 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" 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: enable: false key: "" controller: delay_answer_from_control_millisec: 12000
Параметры конфигурационного файла:
- testData — порт сервера;
- controllerGate port — порт сервера, к которому подключаются контроллеры, по умолчанию 8070;
- controllerGateSecurity port — порт сервера, к которому подключаются контроллеры c использованием сертификата SSL, по умолчанию 8072;
- api port — порт сервера для взаимодействия с API платформы через веб-интерфейс или мобильное приложение;
- api sslPort — порт сервера для взаимодействия с API платформы через веб-интерфейс или мобильное приложение с использованием SSL-сертификата;
- ui — порт, указываемый при формировании ссылок в письмах оповещений и т.д., например для функционала Восстановление пароля;
- defaultUrl — адрес платформы при формировании ссылок в письмах оповещений и т.д., например для функционала Восстановление пароля;
- services — настройки внешних сервисов для работы с платформой;
- logger — уровень логирования сервера. Для включения режима debug выставить у mongodb: DEBUG;
- electricMeterScheduler — параметр, отвечающий за автоматический опрос устройства платформой (опрос выполняется каждые 30 минут, начиная от начала часа по умолчанию). Пример: cron: 3 0/1 * * * ? — опрос каждые 3 минуты;
- electricMeterArchiveScheduler — параметр, отвечающий за автоматический опрос архива устройства платформой;
- mqttBroker — настройка сервиса MQTT;
- video — настройка видеосервиса Flussonic;
- proxy — настройка прокси-сервера;
- billing — настройка сервиса биллинга;
- guard — настройка задержки перед постановкой на охрану;
- swagger — сервис для взаимодействия и просмотра API платформы Eltex SC. Для доступа необходимо обратиться к :8071/api/v1/swagger-ui.html#/admin-logger-api-controller.
- controller: delay_answer_from_control_millisec — настройка задержки ожидания ответа от контроллера;
- notifications — настройка защиты сервиса push-уведомлений.
Параметры:
- duplicate_delay_sec — период времени, в течение которого будет блокироваться дубликат сообщения (полностью совпадающий), задается в секундах;
- antispam_time_sec — период времени, в течение которого будет блокироваться отправка последующих однотипных сообщений (не полностью совпадающих, контроллер вне доступа 1, 2 и тд.), задается в секундах;
- delay_push_time_millisec — задержка между отложенными push-уведомлениями, задается в миллисекундах.
Порты, используемые платформой по умолчанию:
- 8069 — порт для подключения контроллеров Ethernet в режиме TCP-клиент к платформе;
- 8070 — WS-порт для подключения контроллеров к платформе;
- 8071 — HTTP-порт API-платформы;
- 8072 — WSS-порт для подключения контроллеров к платформе;
- 8073 — HTTPS-порт API-платформы;
- 8883 — порт для подключения к MQTT-брокеру.
По окончании установки и конфигурирования сервер Eltex SC готов к работе. Взаимодействие с платформой происходит через веб-интерфейсы пользователей и администратора, а также через мобильное приложение.
Во всех случаях, чтобы войти в платформу, нужно указать ее адрес и номер порта. В общем случае в адресную строку браузера вводится следующее: <Адрес сервера 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.20-3012", "api" : "1.0", "currentTime" : "2021-12-29T17:54:16.278+07:00[Asia/Novosibirsk]" }
Настройка почтовых e-mail и sms-оповещений eltex-notification-gw (eltex-ngw)
Описание
Сервис представляет собой интерфейс для взаимодействия компонентов платформы c внешними SMS-шлюзами, call-центрами и серверами электронной почты. Служит для отправки уведомлений пользователям платформы, а также пользователям Wi-Fi.
Конфигурация
/etc/ansible-iot-1.20/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#1 в PKCS#8, letsencrypt:
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in путь_до_ключа -out имя_для_нового_ключа.
Способ определения типа сертификата
# head -1 /tmp/eltex-sc-api.key -----BEGIN PRIVATE KEY----- # head -1 /etc/ssl/private/eltex-sc-api.key -----BEGIN RSA PRIVATE KEY-----
- BEGIN PRIVATE KEY — кодировка PKCS#8;
- BEGIN RSA PRIVATE KEY — кодировка PKCS#1.