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

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

Версия ПО 1.19.4

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

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

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

Число абонентовдо 5 000до 10 000до 20 000
Число аппаратных серверов1122
CPU, ГГцi5 3,0i7 4,0i5+i5 3,0i7+i7 4,0
RAM, Гб8168+816+16
HDD, Гб100020001000+20001000+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 из официального репозитория проекта.

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

Установка Ansible
apt update
apt install software-properties-common
add-apt-repository --yes --update ppa:ansible/ansible
apt install ansible

Более подробная информация по установке Ansible доступна по ссылке:

https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#installing-ansible-on-specific-operating-systems).

Выполните проверку версии (должна быть не менее v2.9):

Проверка версии Ansible
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:

Содержимое файла inventory
Пример содержимого (Указан пароль от 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:  

Содержимое конфигурационного файла vars/default.yml
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 IDIMAGE COMMANDCREATEDSTATUSPORTSNAMES
2bed00cc8fcehub.eltex-co.ru/iot/iot-double-web:1.19.4/docker-entrypoint.…2 minutes agoUp 2 minutes
iot_web_1
7da2459eaebfhub.eltex-co.ru/iot/iot-core:1.19.4java -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_1
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_1
db768b63d849mongodocker-entrypoint.s…2 minutes agoUp 2 minutes0.0.0.0:27017->27017/tcp, :::27017->27017/tcpiot_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
Необходимо следить за MEM% и CPU% процессов mongo и eltex-sc.

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

df -h
Обратите внимание на использование диска всеми подразделами /dev и на монтированное сетевое хранилище для резервных копий data.eltex.loc.

Проверить соединения контроллеров с платформой

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#8.

Пример конвертирования сертификата из 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.
  • Нет меток