Установка платформы
Версия ПО 1.19.4
Рекомендуемые характеристики сервера
Система Eltex SC строится по клиент-серверной архитектуре. Серверную часть рекомендуется устанавливать на многопроцессорный компьютер под управлением OS Ubuntu 20.
Производительность сервера зависит от числа пользователей, которые будут зарегистрированы на платформе. Рекомендуемые характеристики сервера для определенного числа абонентов приведены в таблице ниже.
Число абонентов | до 5 000 | до 10 000 | до 20 000 | |
---|---|---|---|---|
Число аппаратных серверов | 1 | 1 | 2 | 2 |
CPU, ГГц | i5 3,0 | i7 4,0 | i5+i5 3,0 | i7+i7 4,0 |
RAM, Гб | 8 | 16 | 8+8 | 16+16 |
HDD, Гб | 1000 | 2000 | 1000+2000 | 1000+4000 |
Внимание!
Установка Eltex SC на сервер, не отвечающий минимальным системным требованиям, ведет к его неработоспособности!
Поддерживаемые дистрибутивы: Ubuntu 20.04, Debian 11, Fedora Server 34, CentOS 8, Oracle Linux 8.4, openSUSE Leap 15.3.
С версии 1.19.4 установка через deb-пакеты не осуществляется.
Информацию по установке более ранних версий платформы Eltex SC (1.19.3 и ниже) можно найти по ссылке Архив Eltex SC.
Установка
В инструкции приведена установка платформы Eltex SC на операционную систему Ubuntu 20.04.
Установка Ansible
Перед развертыванием необходимо установить Ansible и необходимые для его работы компоненты. Рекомендуется устанавливать Ansible из официального репозитория проекта.
Пример установки в консоли:
apt update apt install software-properties-common add-apt-repository --yes --update ppa:ansible/ansible apt install ansible
Более подробная информация по установке Ansible доступна по ссылке:
Выполните проверку версии (должна быть не менее v2.9):
ansible --version
Добавление коллекций и подготовка конфигурации
После установки Ansible добавьте необходимые для его работы коллекции.
Пример добавления в консоли:
ansible-galaxy collection install community.general ansible-galaxy collection install community.crypto ansible-galaxy collection install community.docker
После установки Ansible нужно подготовить конфигурацию.
Файлы конфигурации направляются в виде архива tar.gz, который необходимо распаковать в директорию /etc с правами root .
Пример:
tar -C /etc -xvf ansible-iot-1.19.4.tar.gz
После распаковки архива все пакеты и зависимости будут развернуты в директории на текущем сервере.
Файлы конфигурации и плейбуки (скрипты/конфигурации) Ansible будут расположены в директории /etc/ansible-iot-1.19.4
Далее необходимо отредактировать файл /etc/ansible-iot-1.19.4/inventory
Откройте файл в любом доступном текстовом редакторе, например, Nano. Укажите пароль от root в переменной ansible_sudo_pass:
Пример содержимого (Указан пароль от root "password"): [default] localhost ansible_connection=local ansible_sudo_pass=password
Далее необходимо настроить параметры доступа к платформе (ip-адрес/домен, порты доступа и т.п.). Для базовой установки достаточно отредактировать файл конфигурации /etc/ansible-iot-1.19.4/vars/default.yml
Откройте файл в любом доступном текстовом редакторе, например, Nano. Укажите корректный ip-адрес или доменное имя в переменной server_name:
server_name: ip-адрес/домен 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 }}" flussonic_url: "" flussonic_api_key: "" flussonic_operator_id: "" flussonic_admin_login: "" install_dir: /storage/iot registry: hub.eltex-co.ru/iot services:
Описание параметров конфигурации в файле 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. Менять не рекомендуется.
- flussonic_* — параметры видеосервера Flussonic.
- install_dir — содержит путь до директории, в которую будет произведена установка (если такая директория не существует, то она будет создана).
- registry — содержит имя репозитория docker registry, хранящего docker-образы для развертывания.
- services — список сервисов для перезапуска (при запуске плейбука services_restart.yml). Можно оставить пустым, а при запуске передавать параметром командной строки.
После этого можно запустить установку:
cd /etc/ansible-iot-1.19.4 ansible-playbook install.yml
Выполните проверку статуса контейнеров:
docker ps
Вывод команды docker ps | ||||||
CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PORTS | NAMES |
---|---|---|---|---|---|---|
2bed00cc8fce | hub.eltex-co.ru/iot/iot-double-web:1.19.4 | /docker-entrypoint.… | 2 minutes ago | Up 2 minutes | iot_web_1 | |
7da2459eaebf | hub.eltex-co.ru/iot/iot-core:1.19.4 | 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 |
Работа с контейнерами
В процессе обслуживания можно осуществлять перезапуск контейнеров:
ansible-playbook services_restart.yml --extra-vars '{"services":["web", "core"]}'
В квадратных скобках нужно перечислить сервисы, которые необходимо перезапустить (в примере это "web" и "core"). Если не указать параметр "services" через --extra-vars, то будут перезапущены все сервисы, описанные в docker-compose.yml
Аналогичным образом можно остановить часть контейнеров:
ansible-playbook services_stop.yml --extra-vars '{"services":["web", "core"]}'
Или обновить все контейнеры из репозитория:
ansible-playbook services_update.yml
Расположение конфигурационных файлов
Конфигурации для web, core, ngw и mqtt располагаются в /etc/ansible-iot-1.19.4/iot/
Конфигурация сервера: /etc/ansible-iot-1.19.4/iot/core/etc/eltex-sc/default-for-docker.yml
Директория хранения журналов работы платформы: /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
Содержимое конфигурационного файла:
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 ui: port: 80 mqttBroker: enabled: true host: "broker" port: 8883 apiPort: 8083 remoteAccessURL: "localhost:8883" defaultUrl: "http://localhost" electricMeterScheduler: cron: "0 0/30 * * * ?" electricMeterArchiveScheduler: cron: "0 0 17 * * ?"
services: ngw: host: "ngw-sc" port: 8040 dictionary: path: "dict.json" languageInterface: language: "ru" mjollnir: sync-period: "0 0 23 1/1 * ?" login: "platform" password: "platform" url: "http://localhost:8078/api/v1" iot-core: host: "db" port: 27017 user: "" password: "" database: "iot-core" file-storage: host: "db" port: 27017 user: "" password: "" database: "iot-fs" license-storage: host: "db" port: 27017 user: "" password: "" database: "iot-licenses" eventlog: host: "db" port: 27017 user: "" password: "" database: "iot-events" monitoring-system: countAttempt: 3 delayAttempt: 0
kafka: enabled: false bootstrap-servers: "localhost:9092" video: flussonic: url: "" apiKey: "" operator_id: "" admin_login: "" 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
Параметры конфигурационного файла:
- 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-порт для подключения контроллеров к платформе;
- 80 — HTTP-порт API-платформы;
- 8072 — WSS-порт для подключения контроллеров к платформе;
- 443 — HTTPS-порт API-платформы;
- 8883 — порт для подключения к mqtt-брокеру.
Для работы сервиса восстановления пароля настройте следующие параметры:
Пример настройки:
ui: port: 80 (Порт выставляется в соответствии с указанным портом для web-интерфейса, по умолчанию порт web-интерфейса 80/443) defaultUrl: https://smart.eltex-sc.ru (Указывается протокол и доменное имя используемое для платформы Eltex SC)
По окончании установки и конфигурирования сервер Eltex SC готов к работе. Взаимодействие с платформой происходит через веб-интерфейсы пользователей и администратора, а также через мобильное приложение.
Во всех случаях, чтобы войти в платформу, нужно указать ее адрес и номер порта. В общем случае в адресную строку браузера вводится следующее: <Адрес сервера Eltex SC>.
Чеклист
Проверить занятость ядер процессора и оперативной памяти
htop
Проверить занятость физического места на диске
df -h
Проверить соединения контроллеров с платформой
netstat -na | grep 8070
Параметры, на которые следует обратить внимание:
- Состояние соединений:
- ESTABLISHED, LISTEN — норма;
- LAST_ACK — связь с контроллером уже потеряна, рядом должно быть переоткрытое соединение с того же IP;
- TIME_WAIT, CLOSE_WAIT — соединение зависло, неудачное закрытие;
- 2-ая колонка — очередь принятых сервером пакетов;
- 3-я колонка — очередь пакетов, отосланных на контроллеры;
- 5-я колонка — IP-адреса контроллеров.
Необходимо следить, чтобы пакеты не копились в очереди на контроллер. Если такое происходит, значит веб-сокет этого контроллера недоступен, и нужно посмотреть в логах платформы, что случилось и как давно. ID контролера можно найти в БД по его IP-адресу (поле controllerIpAddress) либо непосредственно в логах.
Проверить наличие ошибок в логе
Логи платформы находятся в разделе /var/log/eltex-sc*. Они разбиваются на части по размеру. Чтобы проверить все журналы на наличие некоторого параметра за определенную дату (например за 15 января 2020 года) и записать результаты в файл, нужно выполнить команду:
grep <значение для поиска> server-2020-01-15* > <имя файла для вывода>
Если требуется, можно дописать следующие опции после значения для поиска:
- -i — не чувствителен к регистру;
- -n — номера строк;
- -h — подавляет запись имени файла перед каждой строкой в результирующем файле;
- -A — количество строк после совпадения;
- -B — количество строк до совпадения.
Общий вид команды:
grep -i -n -A 5 -B 2 error server-2020-01-15* > errors.log
Ключевые слова для поиска:
- ERROR;
- ID или IP контроллера;
- PONG — ключевое слово, которое записывается, если контроллер не отвечает.
Проверить доступность веб-интерфейса
Самый простой способ проверить доступность веб-интерфейса платформы — открыть его в браузере (по IP или доменному имени — в зависимости от настроек сети и сервера nginx).
Можно проверить доступность API платформы. Для этого в адресной строке браузера к URL веб-интерфейса платформы нужно дописать:
<Адрес сервера Eltex SC>:<порт API>/api/v1/version
где порт API — вышеуказанный порт доступа к API по HTTP (по умолчанию 80/443). Платформа должна моментально вернуть данные об установленной версии платформы, версии API и текущем времени на сервере в формате JSON.
Пример вывода:
{ "version" : "1.19.4-2799", "api" : "1.0", "currentTime" : "2021-10-27T03:20:53.912Z[GMT]" }
Настройка почтовых e-mail и sms-оповещений eltex-notification-gw (eltex-ngw)
Описание
Сервис представляет собой интерфейс для взаимодействия компонентов платформы c внешними SMS-шлюзами, call-центрами и серверами электронной почты. Служит для отправки уведомлений пользователям платформы, а также пользователям Wi-Fi.
Устанавливается при помощи пакета eltex-ngw.
Конфигурация
/etc/ansible-iot-1.19.4/iot/ngw/etc/eltex-ngw/notification.properties
Основной конфигурационный файл содержит параметры:
Ссылка на конфигурационный файл для подключения к SMS-шлюзу (для отправки SMS пользователям):
sms.gate.outgoing.sms.config=smsc_gate.conf
Ссылка на конфигурационный файл для идентификации пользователя по отправленным им SMS:
sms.gate.incoming.sms.config=smpp_gate.conf
Ссылка на конфигурационный файл для идентификации пользователя по исходящим от него звонкам:
sms.gate.incoming.call.config=rtk_sbc.conf
Настройка размера очереди SMS на отправку и времени ожидания отправки:
#Gate pool settings sms.gate.pool.size=50 sms.gate.pool.wait.millis=5000
Настройка размера очереди и времени ожидания отправки, ссылка на конфигурационный файл для авторизации по входящему звонку:
#Call gate configuration call.gate.outgoing.call.config=smg_gate.conf call.gate.pool.size=50 pool.wait.millis=5000
Порт, прослушиваемый сервисом для приема запросов на отправку сообщений:
#Port to listen for requests server.port=8040
Настройка подключения к MongoDB для хранения журнала отправки сообщений:
#============================= #=======database settings===== #============================= #mongodb.uri=mongodb://192.168.1.1,192.168.1.2:27017/notification-gw mongodb.host=localhost mongodb.port=27017 #mongodb.user=user #mongodb.password=password mongodb.name=notification-gw mongodb.fsfiles.store.period=7
Подключение к серверу электронной почты:
#============================= #=======email settings======== #============================= mail.smtp.submitter=example@eltex.loc mail.smtp.password=password mail.smtp.auth=true mail.smtp.host=eltex.loc mail.smtp.port=587 mail.smtp.sendpartial=true mail.smtp.connectiontimeout=5000 mail.gate.pool.size=20 mail.pool.wait.millis=10000
Примечание
mail.smtp.password=password
Если в вашем пароле используются спецсимволы типа: " [ \ ^ $ . | ? * + ( )", их необходимо экранировать, иначе пароль будет неверным!
- Пример 1: Пароль "326P%1E\" при экранировании должен выглядеть: "326P%1E\\";
- Пример 2: Пароль "326P%1E^" при экранировании должен выглядеть: "326P%1E\^".
Для включения шифрования соединения с почтовым сервером нужно указать опцию:
mail.smtp.starttls.enable=true
Переход с http на https
Переместите свои валидные файлы сертификатов в папки private и certs (или измените путь в конфигурационных файлах).
Проверьте наличие прав доступа к файлам и папкам. Необходимые права назначаются с помощью команды chmod 640
.
Конфигурационный файл eltex-sc: /etc/ansible-iot-1.19.4/iot/core/etc/eltex-sc/default-for-docker.yml
ssl: key: /etc/ssl/private/eltex-sc-api.key; crt: /etc/ssl/certs/eltex-sc-api.crt.
Конфигурационный файл eltex-sc-web: /etc/ansible-iot-1.19.4/iot/web/etc/nginx/sites-available/eltex-sc-web
ssl_certificate /etc/ssl/certs/eltex-sc-web.crt; ssl_certificate_key /etc/ssl/private/eltex-sc-web.key.
Справка по сертификатам
Пример конвертирования сертификата из 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.