Версия ПО 1.29 |
|
Система Eltex SC строится по клиент-серверной архитектуре. Серверную часть рекомендуется устанавливать на многопроцессорный компьютер под управлением OS Ubuntu 20.
Производительность сервера зависит от числа пользователей, которые будут зарегистрированы на платформе.
Минимальные системные требования сервера*:
Минимально необходимая конфигурация для запуска ядра платформы с микросервисами. |
В инструкции описан процесс установки платформы Eltex SC версии 1.29 на операционную систему Ubuntu 20.04. Информацию по установке более ранних версий платформы Eltex SC (1.29 и ниже) можно найти по ссылке: Архив Eltex SC.
С версии 1.19.4 установка через deb-пакеты не осуществляется. |
С версии 1.25 сервис eltex-notification-gw(ngw) не требует дополнительной настройки через файл notification.properties.j2. Все настройки вынесены в файл vars/default.yml |
Установка Eltex SC на сервер, не отвечающий минимальным системным требованиям, может привести к неработоспособности платформы или увеличить время обработки запросов! |
Перед развертыванием платформы необходимо установить систему Ansible и необходимые для ее работы компоненты. Ansible рекомендуется устанавливать из официального репозитория проекта.
Ansible — система управления конфигурациями, написанная на языке программирования Python с использованием декларативного языка разметки для описания конфигураций. Система используется для автоматизации настройки и развертывания программного обеспечения, в частности для ПО Eltex SC. |
Для установки платформы выполните следующие шаги:
1. Установите Ansible на сервер Ubuntu 20.04.
Пример установки через консоль:
apt update apt install --install-recommends linux-generic-hwe-20.04-edge 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.29.tar.gz |
После распаковки архива все пакеты и зависимости будут развернуты в директории на текущем сервере.
Файлы конфигурации и плейбуки (скрипты/конфигурации) Ansible будут расположены в директории /etc/ansible-iot-1.29
5. Отредактируйте файл /etc/ansible-iot-1.29/inventory
Откройте файл в любом доступном текстовом редакторе, например nano. Укажите пароль пользователя root в переменной ansible_sudo_pass:
Далее в примере для пользователя root используется пароль rootpasswd При установке задайте свой пароль. |
Пример задания пароля:
[iot] localhost ansible_connection=local ansible_sudo_pass=rootpasswd [elk] localhost ansible_connection=local ansible_sudo_pass=rootpasswd [monitoring] localhost ansible_connection=local ansible_sudo_pass=rootpasswd |
6. Далее необходимо настроить параметры доступа к платформе Eltex SC.
MongoDB версии 5 и выше работает только на процессорах с поддержкой AVX. Узнать, поддерживает ли ваш процессор AVX, можно с помощью команды: lscpu | grep avx Если ответ оказался пустым, ваш процессор не поддерживает AVX. Используйте MongoDB версии 4. Если в ответе вернулся список флагов, можно использовать MongoDB версии 5 и выше. |
Для базовой установки достаточно отредактировать файл конфигурации /etc/ansible-iot-1.29/vars/default.yml
Откройте файл в любом доступном текстовом редакторе, например nano. Укажите корректный IP-адрес или доменное имя для доступа к платформе в переменной server_name:
При переходе с MongoDB 4 на MongoDB 6 требуется сначала перейти на MongoDB 5 и только потом перейти на MongoDB 6. Или в файле /vars/default.yml для параметра version задать значение "5", запустить ansible-playbook install_iot.yml, затем задать значение "6" и снова запустить ansible-playbook install_iot.yml |
--- # Параметры установки платформы. iot: # Имя (IP-адрес) сервера, на котором будет производиться развертывание платформы IoT. # Возможно использование 'localhost', если все манипуляции производятся локально. # ВАЖНО!!! В 'serverName' нужно прописывать то имя (IP-адрес), по которому будет доступны платформа. # Если указать 'localhost', то будет доступ только через 'localhost'! serverName: "my.test.server" # Содержит путь до директории, в которую будет произведена установка. installDir: /storage/iot # Параметры установки сервисов логирования (Elasticsearch + Logstash + Kibana). elk: # Нужно ли добавлять в платформу appender, отправляющий логи в logstash. # В нем нет необходимости, если ELK не развернут или не настроен; это лишь спровоцирует сообщения об ошибках отправки # в логах платформы. enable: false # Имя (IP-адрес) сервера, на котором будет развернут ELK. # По умолчанию совпадает с 'iot.serverName', что предполагает установку рядом с платформой (на том же хосте). # В таком случае хосты в инвентаре в группах [iot] и [monitoring] должны совпадать. serverName: "{{ iot.serverName }}" # Директория для установки системы логирования. installDir: /storage/elk # Параметры установки сервисов мониторинга (Prometheus + Grafana). monitoring: # Имя (IP-адрес) сервера, на котором будет развернуты сервисы мониторинга (Prometheus + Grafana). # По умолчанию совпадает с 'iot.serverName', что предполагает установку рядом с платформой (на том же хосте). # В таком случае хосты в инвентаре в группах [iot] и [elk] должны совпадать. serverName: "{{ iot.serverName }}" # Директория для установки системы мониторинга. installDir: /storage/monitoring # Параметры MongoDB. mongodb: # Версия MongoDB. На старом железе, не поддерживающем оптимизацию, нужно выставить значение `4`. version: 6 external: # Если выставлен в true, будет использоваться внешняя MongoDB. # ВАЖНО!!! MongoDB должна быть настроена, а параметры подключения нужно указать в 'addr' и 'port'. enable: false # Адрес внешней MongoDB. addr: "{{ iot.serverName }}" # Порт внешней MongoDB. port: 27017 # Параметры WEB. web: # Имя (IP-адрес) сервера, на котором будет развернут WEB. # По умолчанию совпадает с 'iot.serverName', что предполагает установку рядом с платформой (на том же хосте). serverName: "{{ iot.serverName }}" # Порт HTTP, по которому будет осуществляться доступ в WEB. httpPort: 80 # Порт HTTPS, по которому будет осуществляться доступ в WEB. httpsPort: 443 # Автоматически перенаправлять запросы по порту HTTP на порт HTTPS redirectHttpToHttps: true nginx: # Максимальное число соединений, которые одновременно может открыть рабочий процесс worker_connections: 1024 certbot: # Использовать ли certbot для получения сертификатов Let's Encrypt. enable: false # Email владельца домена. Необходим для подтверждения валидности домена при получении сертификата Let's Encrypt. email: test@email.com # Параметры сервера отправки email. mail: smtp: submitter: test@email.com password: "password" senderPrefix: "Сервер Eltex-SC" auth: "true" host: email.com port: 587 # Протокол шифрования, используемый при подключении к серверу. Допустимые значения: none, starttls, ssl. protection: starttls # Параметры платформы IoT core. core: # Ссылка на политику конфиденциальности privacyPolicyUrl: "my.test.privacy" # Уровень отладки внутри IoT Core. logLevel: INFO # Порты платформы для подключения zway-контроллеров. ctlGate: port: 8070 tcpPort: 8069 sslPort: 8072 # Порты API платформы. api: port: 8071 sslPort: 8073 # Уровень сложности капчи: easy, medium, hard captchaLevel: "easy" server: # Нужно ли использовать HTTPS при формировании ссылок к WEB ('true' по умолчанию, при этом будет использован порт, # указанный в 'web.httpsPort'). Если поставить в 'false', будет использован HTTP и порт, указанный в 'web.httpPort'. useHttpsForUi: true # Нужно ли использовать HTTPS при формировании ссылок к ресурсам самой платформы (например, прошивки). useHttpsForApi: false # Нужно ли использовать HTTPS при формировании ссылок на фото с камер наблюдения. useHttpsForCameraLinks: true # Нужно ли использовать 'web.serverName' вместо 'iot.serverName' и 'web.httpPort'/'web.httpsPort' # вместо 'core.api.port'/'core.api.sslPort' при формировании ссылок к API. useUiProxyForApi: false # Параметры для управления доступностью саморегистрации. selfRegistration: allow: true allowDemo: true allowSocialNetworks: false push: firebase: enabled: false apns: enabled: false # Параметры для работы с видеосерверами video: # Параметры Flussonic. flussonic: url: "" apiKey: "" operatorId: "" adminLogin: "" motion: enabled: false # Параметры видеосервера eltex eltex_server: url: "" apiKey: "" operatorId: "" adminLogin: "" acquiring: # Период после завершения действия последней подписки, в течение которого услуга продолжает (ограниченно) действовать advancePeriod: 3 paykeeper: url: "CHANGE_ME" secret: "PaykeeperSecretChangeMe" # Параметры клиентских регистраций (через соцсети). clientRegistrations: google: enable: true clientId: "GoogleClientIdChangeMe" clientSecret: "GoogleClientSecretChangeMe" microsoft: enable: true clientId: "MicrosoftClientIdChangeMe" clientSecret: "MicrosoftClientSecretChangeMe" apple: enable: true clientId: "AppleClientIdChangeMe" keyId: "AppleKeyIdChangeMe" teamId: "AppleTeamIdChangeMe" yandex: enable: true clientId: "YandexClientIdChangeMe" clientSecret: "YandexClientSecretChangeMe" vk: enable: true clientId: "VkClientIdChangeMe" clientSecret: "VkClientSecretChangeMe" mailRu: enable: true clientId: "MailRuClientIdChangeMe" clientSecret: "MailRuClientSecretChangeMe" # Параметры навыка Яндекс для интеграции с Умным домом (Алисой). Отображается в карточке навыка. yandexSkill: # Параметры для Basic Authentication. clientId: "YandexClientIdChangeMe" password: "PasswordChangeMe" # Id навыка, который необходимо указывать при отправке уведомлений. skillId: "" # OAuth-токен, который необходимо указывать при отправке уведомлений. oauthToken: "" # Параметры проекта умного дома Сбера для интеграции с Салютом. Отображается в карточке проекта. sberSkill: # Параметры для Basic Authentication. clientId: "SberClientIdChangeMe" password: "PasswordChangeMe" # Bearer-токен, который необходимо указывать при отправке уведомлений. bearerToken: "" # Параметры проекта умного дома Mail.ru для интеграции с Марусей. Отображается в карточке проекта/приложения. marusyaSkill: # Параметры для Basic Authentication. clientId: "MarusyaClientIdChangeMe" password: "PasswordChangeMe" # App ID, который был назначен приложению VK при создании. appId: "MarusyaAppIdChangeMe" # OAuth-токен, который необходимо указывать при отправке уведомлений. oauthToken: "" # Настройки ИК-пульта. irc: # Время ожидания ИК команды от пользователя (мс). recTimeout: 15000 # Таймаут записи команды (отсутствия фронтов) (мс). cmdTimeout: 100 # Путь до базы ИК сигналов IRDB. irdbPath: "CHANGE_ME" |
Таблица описания значений в файле настроек /vars/default.yml
iot: | Параметры установки платформы. | |
serverName: "my.test.server" | Имя (IP-адрес) сервера, на котором будет производиться развертывание платформы IoT. Возможно использование 'localhost', если все манипуляции производятся локально.
| |
installDir: /storage/iot | Путь до директории, в которую будет произведена установка. | |
elk: | Параметры установки сервисов логирования (Elasticsearch + Logstash + Kibana). | |
enable: false | Параметр, позволяющий добавить в платформу appender, отправляющий логи в logstash. В нем нет необходимости, если ELK не развернут или не настроен: это спровоцирует сообщения об ошибках отправки в логах платформы. | |
serverName: "{{ iot.serverName }}" | Имя (IP-адрес) сервера, на котором будет развернут ELK. По умолчанию совпадает с 'iot.serverName', что предполагает установку рядом с платформой (на том же хосте). В таком случае хосты в инвентаре в группах [iot] и [monitoring] должны совпадать. | |
installDir: /storage/elk | Директория для установки системы логирования. | |
monitoring: | Параметры установки сервисов мониторинга (Prometheus + Grafana). | |
serverName: "{{ iot.serverName }}" | Имя (IP-адрес) сервера, на котором будет развернуты сервисы мониторинга (Prometheus + Grafana). По умолчанию совпадает с 'iot.serverName', что предполагает установку рядом с платформой (на том же хосте). В таком случае хосты в инвентаре в группах [iot] и [elk] должны совпадать. | |
installDir: /storage/monitoring | Директория для установки системы мониторинга. | |
mongodb: | Параметры MongoDB. | |
version: 6 | Версия MongoDB. | |
external | ||
enable: false | Параметр для использования внешней MongoDB. Если выставлен в true, будет использоваться внешняя MongoDB.
| |
addr: "{{ iot.serverName }}" | Адрес внешней MongoDB. | |
port: 27017 | Порт внешней MongoDB. | |
web: | Параметры WEB. | |
serverName: "{{ iot.serverName }}" | Имя (IP-адрес) сервера, на котором будет развернут WEB. По умолчанию совпадает с 'iot.serverName', что предполагает установку рядом с платформой (на том же хосте). | |
httpPort: 80 | Порт HTTP, по которому будет осуществляться доступ в WEB. | |
httpsPort: 443 | Порт HTTPS, по которому будет осуществляться доступ в WEB. | |
redirectHttpToHttps: true | Параметр для перенаправления HTTP запросов на HTTPS. | |
nginx: | ||
worker_connections: 1024 | Максимальное число соединений, которое одновременно может открыть рабочий процесс. | |
certbot: | ||
enable: false | Параметр, позволяющий использовать certbot для получения сертификатов Let's Encrypt. | |
email: test@email.com | Email владельца домена. Необходим для подтверждения валидности домена при получении сертификата Let's Encrypt. | |
mail: | Параметры сервера отправки email. | |
smtp: | ||
submitter: test@email.com | Учетная запись e-mail. | |
password: "password" | Пароль от учетной записи e-mail. | |
auth: "true" | Проверка подлинности SMTP (включена по умолчанию). | |
senderPrefix: "Сервер Eltex-SC" | Имя отправителя. | |
host: email.com | Адрес SMTP-сервера. | |
port: 587 | SMTP-порт сервера. | |
protection: starttls | Протокол шифрования, используемый при подключении к серверу. Допустимые значения: none, starttls, ssl. | |
core: | Параметры платформы IoT Core. | |
privacyPolicyUrl: "my.test.privacy" | Ссылка на политику конфиденциальности. | |
logLevel: INFO | Уровень отладки внутри IoT Core. | |
ctlGate: | Порты платформы для подключения zway-контроллеров. | |
port: 8070 | WS-порт для подключения контроллеров к платформе. | |
tcpPort: 8069 | Порт для подключения контроллеров Ethernet к платформе в режиме TCP-клиент. | |
sslPort: 8072 | WSS-порт для подключения контроллеров к платформе. | |
api: | Порты API платформы. | |
port: 8071 | HTTP-порт API-платформы. | |
sslPort: 8073 | HTTPS-порт API-платформы. | |
captchaLevel: "easy" | Уровень сложности CAPTCHA: easy, medium, hard. | |
server: | ||
useHttpsForUi: true | Параметр, позволяющий использовать HTTPS при формировании ссылок к WEB ('true' по умолчанию, при этом будет использован порт, указанный в 'web.httpsPort'). Если поставить в 'false', будет использован HTTP и порт, указанный в 'web.httpPort'. | |
useHttpsForApi: false | Параметр, позволяющий использовать HTTPS при формировании ссылок к ресурсам самой платформы (например, прошивки). | |
useHttpsForCameraLinks: true | Параметр, позволяющий использовать HTTPS при формировании ссылок на фото с камер наблюдения. | |
useUiProxyForApi: false | Параметр, позволяющий использовать 'web.serverName' вместо 'iot.serverName' и 'web.httpPort'/'web.httpsPort' вместо 'core.api.port'/'core.api.sslPort' при формировании ссылок к API. | |
selfRegistration: | Параметры для управления доступностью самостоятельной регистрации. | |
allow: true | Доступность самостоятельной регистрации. | |
allowDemo: true | Доступность самостоятельной регистрации демо-аккаунтов. | |
allowSocialNetworks: false | Доступность самостоятельной регистрации через соцсети. | |
push: | Включение/выключение push-сообщений. | |
firebase: enabled: false | Включение/выключение push-сообщений для Android. | |
apns: enabled: false | Включение/выключение push-сообщений для iOS. | |
video: | Параметры для работы с видеосерверами. | |
flussonic: | Параметры Flussonic. | |
url: "" | URL сервера Flussonic. | |
apiKey: "" | Ключ API. | |
operatorId: "" | ID оператора. | |
adminLogin: "" | Логин администратора. | |
motion: enabled: false | Доступность фиксации движения. | |
eltex_server: | Параметры видеосервера Eltex. | |
url: "" | URL сервера Eltex. | |
apiKey: "" | Ключ API. | |
operatorId: "" | ID оператора. | |
adminLogin: "" | Логин администратора. | |
acquiring: | ||
advancePeriod: 3 | Период после завершения действия последней подписки, в течение которого услуга продолжает (ограниченно) действовать. | |
paykeeper: | Настройки сервиса оплаты paykeeper. | |
url: "CHANGE_ME" | URL сервиса paykeeper. | |
secret: "PaykeeperSecretChangeMe" | Секрет сервиса paykeeper. | |
clientRegistrations: | Параметры клиентских регистраций (через соцсети). | |
yandex: | Наименование соцсети. | |
enable: true | Доступность самостоятельной регистрации через соцсеть. | |
clientId: "YandexClientIdChangeMe" | ID клиента. | |
clientSecret: "YandexClientSecretChangeMe" | Секрет клиента. | |
yandexSkill: | Параметры навыка Яндекс для интеграции с Умным домом (Алисой). Отображается в карточке навыка. | |
clientId: "YandexClientIdChangeMe" password: "PasswordChangeMe" | Параметры для Basic Authentication. | |
skillId: "" | ID навыка, который необходимо указывать при отправке уведомлений. | |
oauthToken: "" | OAuth-токен, который необходимо указывать при отправке уведомлений. | |
irc: | Настройки ИК-пульта. | |
recTimeout: 15000 | Время ожидания ИК-команды от пользователя в мс. | |
cmdTimeout: 100 | Таймаут записи команды (отсутствия фронтов) в мс. | |
irdbPath: "CHANGE_ME" | Путь до базы ИК-сигналов IRDB. |
Для функций самостоятельной регистрации, регистрации демонстрационных учетных записей, а также для процедуры восстановления пароля может потребоваться активация почтовых оповещений через email. |
Также в vars/service_parameters.yml задаются дополнительные параметры:
--- # Версия контейнеров. release: 1.29 swarm: enabled: false # Имя stack-а для запуска в docker-swarm. stack: swarm_iot # Имя репозитория docker registry, содержащего docker-образы для развертывания. registry: hub.eltex-co.ru # Список сервисов для перезапуска (при запуске плейбуков restart_*.yml). # Можно оставить пустым, а при запуске передавать параметром командной строки. services: [] # Нужно ли выполнять подготовку дистрибутива к установке. Этот шаг полезен при "чистой" установке # на только что созданный сервер. Если ранее уже была выполнена установка компонентов IoT через ansible, # то такая подготовка не требуется и этот шаг можно пропустить для экономии времени. withDistroPreparingStep: true # Суффикс, добавляемый к имени каждого контейнера (помогает избежать конфликты имен контейнеров). containerNameSuffix: "" # Суффикс, добавляемый к имени создаваемой сети docker (помогает избежать конфликты имен сетей docker). networkNameSuffix: "" # Параметры мониторинга использования дискового пространства. Должны соответствовать требованию: # warnThreshold > criticalThreshold > 0, иначе мониторинг дискового пространства будет отключен. diskUsage: # Порог дискового пространства (в %), при достижении которого все логгеры микросервисов переводятся в режим WARN # (отображаются сообщения с тегами WARN и ERROR). Количество бэкапов баз уменьшается пропорционально приближению к # порогу criticalThreshold. warnThreshold: 20 # Порог дискового пространства (в %), при достижении которого все логгеры микросервисов переводятся в режим ERROR # (отображаются только сообщения с тегом ERROR). Бэкапы баз не выполняются. criticalThreshold: 10 # Нужно ли установить лимиты на сервисы в docker compose limitsEnable: false # Параметры сервисов IoT (для docker-compose), сгруппированные по именам. # 'enable' - должен ли присутствовать сервис в docker-compose.yml. # 'port.map' - номер порта сервиса в сети хоста. # 'port.export' - нужно ли выполнять маппинг порта из контейнера в сеть хоста. # 'db.name' - имя БД, используемой сервисом (связкой сервисов). iotServices: db: limits: enable: false cpus: 1.0 memory: 4G port: map: 27017 export: false broker: enable: true limits: enable: true cpus: 1.0 memory: 4G external: port: map: 8883 internal: port: map: 8083 export: false db: name: iot-broker jconsole: enable: false port: 32002 # Необходимо указать адрес хоста, куда будет подключаться jconsole-клиент. # При развертывании докера - здесь указывается адреса хоста, где работает докер. host: "10.20.30.40" olapservice: enable: true limits: enable: true cpus: 1.0 memory: 4G port: map: 8023 export: false db: name: iotcore limits: enable: false cpus: 1.0 memory: 4G port: map: 8123 export: false ngw: enable: false limits: enable: true cpus: 1.0 memory: 4G port: map: 8040 export: false db: name: notification-gw user: javauser password: javapassword limits: enable: false cpus: 1.0 memory: 4G port: map: 3306 export: false captcha: enable: true limits: enable: true cpus: 1.0 memory: 4G port: map: 8088 export: false caseSensitive: true allowedSizes: - "312x45" - "270x40" instance: "captcha:8088" proportion: 100 zscaptcha: enable: false limits: enable: true cpus: 1.0 memory: 4G port: map: 8089 export: false caseSensitive: true instance: "zs-captcha:8089" proportion: 0 core: # Развертывание окружения без платформы, полезно для разработки core. enable: true limits: enable: true cpus: 1.0 memory: 4G jconsole: enable: false port: 32001 # Необходимо указать адрес хоста, куда будет подключаться jconsole-клиент. # При развертывании докера - здесь указывается адреса хоста, где работает докер. host: "10.20.30.40" web: # Развертывание окружения без WEB, полезно для разработки web. enable: true limits: enable: true cpus: 1.0 memory: 4G hazelcast: embedded: true clusterName: iot-core instanceName: iot-core-hazelcast-instance limits: enable: true cpus: 1.0 memory: 4G external: port: map: 5701 export: false rabbitmq: limits: enable: true cpus: 1.0 memory: 4G port: map: 5672 export: false zwayproxy: enable: false external: enable: false limits: enable: true cpus: 1.0 memory: 4G port: map: 8070 export: true sslPort: map: 8072 export: true rabbit: queue: # Идентификатор очереди для отправки сообщений из прокси в платформу. platform: zway-proxy-platform exchange: # Идентификатор топик-коллектора. proxy: zway-proxy-topic-exchange # Количество консьюмеров на стороне платформы platformConsumers: # Данный параметр не может быть больше чем maxCount. count: 1 # Максимальное количество одновременных консьюмеров очереди. maxCount: 1 # Количество консьюмеров на стороне zwayProxy service proxyConsumers: # Количество одновременных консьюмеров очереди. Данный параметр не может быть больше чем maxCount. count: 1 # Максимальное количество одновременных консьюмеров очереди. maxCount: 1 wsproxy: enable: false external: enable: false # Адрес хоста куда nginx будет проксировать запросы. host: "1.2.3.4" port: 8075 limits: enable: true cpus: 1.0 memory: 4G port: map: 8075 export: true rabbit: queue: # Идентификатор очереди для отправки сообщений из прокси в платформу. platform: ws-proxy-platform exchange: # Идентификатор топик-коллектора. proxy: ws-proxy-topic-exchange # Количество консьюмеров на стороне платформы platformConsumers: # Данный параметр не может быть больше чем maxCount. count: 1 # Максимальное количество одновременных консьюмеров очереди. maxCount: 1 # Количество консьюмеров на стороне wsProxy service proxyConsumers: # Количество одновременных консьюмеров очереди. Данный параметр не может быть больше чем maxCount. count: 1 # Максимальное количество одновременных консьюмеров очереди. maxCount: 1 # Параметры сервисов ELK (для docker-compose), сгруппированные по именам. # 'port.map' - номер порта сервиса в сети хоста. # 'port.export' - нужно ли выполнять маппинг порта из контейнера в сеть хоста. elkServices: elasticsearch: rest: port: map: 9200 nodes: port: map: 9300 logstash: port: map: 5001 api: port: map: 9600 kibana: port: map: 5601 # Параметры сервисов мониторинга (для docker-compose), сгруппированные по именам. # 'port.map' - номер порта сервиса в сети хоста. # 'port.export' - нужно ли выполнять маппинг порта из контейнера в сеть хоста. monitoringServices: prometheus: port: map: 9090 grafana: port: map: 3000 nginxExporter: enable: false port: map: 9113 coreInternal: # Нужно ли создавать тестовые учетные записи на платформе. testdata: enable: false # Нужно ли включать swagger (описание API платформы). swagger: enable: false # Нужно ли платформе пытаться подключиться к MQTT Broker. mqttbroker: enable: true # Нужно ли платформе пытаться подключиться к OlapService. olapservice: enable: true # Имена БД в MongoDB, используемые платформой. core: db: name: iot-core fs: db: name: iot-fs licenses: db: name: iot-licenses events: db: name: iot-events mjollnir: # URL для Mjollnir. url: "http://smart.eltex-co.ru:8078/api/v1" |
Таблица описания значений в файле настроек vars/service_parameters.yml
release:1.29 | Версия контейнеров. |
swarm: enabled: false | Включение/выключение оркестрации. |
stack: swarm_iot | Имя stack-а для запуска в docker-swarm. |
registry: hub.eltex-co.ru | Имя репозитория docker registry, содержащего docker-образы для развертывания. |
services: [] | Список сервисов для перезапуска (при запуске плейбуков restart_*.yml). Можно оставить пустым, а при запуске передавать параметром командной строки. |
withDistroPreparingStep: true | Параметр, отражающий необходимость дистрибутива к установке. Этот шаг полезен при «чистой» установке на только что созданный сервер. Если ранее уже была выполнена установка компонентов IoT через Ansible, то такая подготовка не требуется и этот шаг можно пропустить для экономии времени. |
containerNameSuffix: "" | Суффикс, добавляемый к имени каждого контейнера (помогает избежать конфликты имен контейнеров). |
networkNameSuffix: "" | Суффикс, добавляемый к имени создаваемой сети docker (помогает избежать конфликты имен сетей docker). |
diskUsage: | Параметры мониторинга использования дискового пространства. Должны соответствовать требованию:warnThreshold > criticalThreshold > 0, иначе мониторинг дискового пространства будет отключен. |
warnThreshold: 20 | Порог дискового пространства (в %), при достижении которого все логгеры микросервисов переводятся в режим WARN (отображаются сообщения с тегами WARN и ERROR). Количество бэкапов баз уменьшается пропорционально приближению к порогу criticalThreshold. |
criticalThreshold: 10 | Порог дискового пространства (в %), при достижении которого все логгеры микросервисов переводятся в режим ERROR (отображаются только сообщения с тегом ERROR). Бэкапы баз не выполняются. |
limitsEnable: false | Параметр, позволяющий установить лимиты на сервисы в docker compose. |
iotServices: | Параметры сервисов IoT (для docker-compose), сгруппированные по именам. В данной таблице описание всех параметров приведено на примере сервиса broker. |
broker: enable: true | 'enable' — параметр, отражающий необходимость присутствия сервиса в docker-compose.yml. |
limits: | Лимиты ресурсов для конкретного сервиса. |
enable: true | Включение/выключение лимитов ресурсов для конкретного сервиса. |
cpus: 1.0 | Лимит ядер процессора. |
memory: 4G | Лимит выделяемой памяти. |
external: port: map: 8883 internal: port: map: 8083 | 'port.map' — номер порта сервиса в сети хоста. |
export: false | 'port.export' — параметр, отражающий необходимость маппинга порта из контейнера в сеть хоста. |
db: name: iot-broker | 'db.name' — имя БД, используемой сервисом (связкой сервисов). |
zwayproxy: enable: false | Включение/выключение сервиса проксирования запросов zway (снижает нагрузку на ядро). |
rabbit: queue: platform: zway-proxy-platform | Идентификатор очереди для отправки сообщений из прокси в платформу. |
exchange: proxy: zway-proxy-topic-exchange | Идентификатор топик-коллектора. |
platformConsumers: | Количество консьюмеров на стороне платформы. |
count: 1 | Данный параметр не может быть больше чем maxCount. |
maxCount: 1 | Максимальное количество одновременных консьюмеров очереди. |
proxyConsumers: | Количество консьюмеров на стороне zwayProxy service. |
count: 1 | Количество одновременных консьюмеров очереди. Данный параметр не может быть больше чем maxCount. |
maxCount: 1 | Максимальное количество одновременных консьюмеров очереди. |
elkServices: | Параметры сервисов ELK (для docker-compose), сгруппированные по именам. |
monitoringServices: | Параметры сервисов мониторинга (для docker-compose), сгруппированные по именам. |
testdata: enable: false | Параметр, отражающий необходимость создания тестовых учетных записей на платформе. |
swagger: enable: false | Параметр, отражающий необходимость включения swagger (описание API платформы). |
mqttbroker: enable: true | Параметр, отражающий необходимость подключения к MQTT Broker. |
olapservice: enable: true | Параметр, отражающий необходимость подключения к OlapService. |
core: db: name: iot-core fs: db: name: iot-fs licenses: db: name: iot-licenses events: db: name: iot-events | Имена БД в MongoDB, используемые платформой. |
mjollnir: | Сервис проверки лицензий. |
url: "http://smart.eltex-co.ru:8078/api/v1" | URL для Mjollnir. |
7. После этого можно запустить установку:
cd /etc/ansible-iot-1.29 ansible-playbook install_iot.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 |
---|---|---|---|---|---|---|
36c21b863cc9 | hub.eltex-co.ru/iot-double-web:1.29 | /docker-entrypoint.… | 2 minutes ago | Up 2 minutes | 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp | iot-double-web |
01fe2697e5ff | hub.eltex-co.ru/iot-core:1.29 | java -Dspring.profi… | 2 minutes ago | Up 2 minutes | .0.0.0:8069-8073->8069-8073/tcp, :::8069-8073->8069-8073/tcp | iot-core |
07d1f93831bd | hub.eltex-co.ru/iot-mqttbroker-mongo:1.29 | java -cp @/app/jib-… | 2 minutes ago | Up 2 minutes | 0.0.0.0:8883->8883/tcp, :::8883->8883/tcp | iot-mqtt-broker |
d1c736dc27d0 | hub.eltex-co.ru/eltex-ngw:1.29-602 | /usr/sbin/ngw_start… | 2 minutes ago | Up 2 minutes | iot-ngw-sc | |
228d41c96cba | hub.eltex-co.ru/iot-olapservice:1.29 | java -cp @/app/jib-… | 2 minutes ago | Up 2 minutes | iot-olapservice | |
e8e2899f2c8d | hub.eltex-co.ru/iot-captcha:1.29 | java -jar LibreCapt… | 2 minutes ago | Up 2 minutes | 8888/tcp | iot-captcha |
57c02941cc4f | hub.eltex-co.ru/iot-mongo6:1.29 | /entrypoint.sh | 2 minutes ago | Up 2 minutes | 0.0.0.0:27017->27017/tcp, :::27017->27017/tcp | iot-mongo |
7c3d8d5c4137 | hub.eltex-co.ru/iot-mysql:1.29 | docker-entrypoint.s… | 2 minutes ago | Up 2 minutes | 3306/tcp, 33060/tcp | iot-iot-mysql |
Платформа будет доступна по адресу: http://[Адрес вашего сервера Eltex SC] Адрес сервера был ранее указан в переменной server_name файла конфигурации /etc/ansible-iot-1.29/vars/default.yml |
Порты доступа к API платформы можно изменить только в случае редактирования соответствующих настроек в файле конфигурации.
9. Добавьте файл лицензий.
Подробное описание процесса добавления файла лицензий доступно в документации Интерфейс администратора в разделе Лицензии.
Время использования платформы и количество добавляемых устройств ограничивается типом лицензии, которая приобретается заказчиком. |
В случае развертывания внешней БД 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.29.tar.gz |
После распаковки архива все пакеты и зависимости будут развернуты в директории на текущем сервере. Файлы конфигурации и плейбуки (скрипты/конфигурации) Ansible будут расположены в директории /etc/ansible-iot-1.29.
5. Отредактируйте файл /etc/ansible-iot-1.29/inventory.
Откройте файл в любом доступном текстовом редакторе, например nano. Укажите пароль от root в переменной ansible_sudo_pass:
Далее в примере для пользователя root используется пароль rootpasswd При установке задайте свой пароль. |
[iot] localhost ansible_connection=local ansible_sudo_pass=rootpasswd [elk] localhost ansible_connection=local ansible_sudo_pass=rootpasswd [monitoring] localhost ansible_connection=local ansible_sudo_pass=rootpasswd |
6. Настройте параметры доступа к платформе, в том числе параметры для работы с внешним сервисом БД. Для этого отредактируйте файлы конфигурации /etc/ansible-iot-1.29/vars/default.yml и /etc/ansible-iot-1.29/vars/service_parameters.yml.
Откройте файл default.yml в любом доступном текстовом редакторе, например nano. Укажите корректный IP-адрес или доменное имя в переменной server_name.
Для параметра enable установите значение true, настройте параметры подключения в 'addr' и 'port'.
mongodb: # Версия MongoDB. На старой аппаратной платформе, не поддерживающей оптимизацию, выставить значение `4` version: 6 external: # Если выставлен в true, будет использоваться внешняя MongoDB # ВАЖНО!!! MongoDB должна быть настроена, а параметры подключения нужно указать в 'addr' и 'port' enable: false # Адрес внешней MongoDB addr: "{{ iot.serverName }}" # Порт внешней MongoDB port: 27017 |
8. После этого можно запустить установку:
cd /etc/ansible-iot-1.29 sudo ansible-playbook install_iot.yml |
Платформа будет доступна по адресу: http://[Адрес вашего сервера Eltex SC] Адрес сервера был ранее указан в переменной server_name файла конфигурации /etc/ansible-iot-1.29/vars/default.yml |
9. Добавьте файл лицензий.
Подробное описание процесса добавления файла лицензий доступно в документации Интерфейс администратора в разделе Лицензии.
Время использования платформы и количество добавляемых устройств ограничивается типом лицензии, которая приобретается заказчиком. |
В процессе обслуживания можно осуществлять перезапуск контейнеров:
ansible-playbook restart_iot.yml --extra-vars '{"services":["web", "core", "broker", "olapservice"]}' |
В квадратных скобках нужно перечислить сервисы, которые необходимо перезапустить (в примере это "web", "core", "broker", "olapservice"). Если не указать параметр "services" через --extra-vars, то будут перезапущены все сервисы.
Аналогичным образом можно остановить часть контейнеров:
ansible-playbook stop_iot.yml --extra-vars '{"services":["web", "core", "broker", "olapservice"]}' |
Или обновить все контейнеры из репозитория:
ansible-playbook update_iot.yml |
Применение новой или измененной конфигурации:
ansible-playbook install_iot.yml |
В /etc/ansible-iot-1.29/templates располагаются конфигурации для ядра: /etc/ansible-iot-1.29/templates/iot/default-for-docker.yml.j2 и веб-сервера: /etc/ansible-iot-1.29/templates/iot/web/base_config
Директория хранения журналов работы платформы: /storage/iot/core/var/log/eltex-sc/server.log
Файлы журналов разбиваются на части по размеру. Каждая часть сохраняется в файл с именем: server-YYYY-MM-DD.NN.log, где YYYY-MM-DD — дата, а NN — номер части.
При изменении конфигурации необходимо перезапустить install_iot.yml: ansible-playbook install_iot.yml Некоторые конфигурационные параметры дублируют файл конфигурации /etc/ansible-iot-1.29/vars/default.yml . При запуске платформы параметры, заданные в файле конфигурации /etc/ansible-iot-1.29/vars/default.yml, имеют наивысший приоритет по отношению к другим файлам конфигурации, а также ведут к их перезаписи. |
Порты, используемые платформой по умолчанию:
По окончании установки и конфигурирования сервер Eltex SC будет готов к работе. Взаимодействие с платформой происходит через веб-интерфейсы пользователей и администратора, а также через мобильное приложение Eltex Home.
Во всех случаях для входа в платформу необходимо указать ее адрес и номер порта. В общем случае в адресную строку браузера вводится следующее: <Адрес сервера Eltex SC>.
В данном разделе представлен чек-лист для проверки работоспособности платформы.
Проверить занятость ядер процессора и оперативной памяти
htop |
Необходимо следить за MEM% и CPU% процессов mongo и docker-контейнеров. |
Проверить занятость физического места на диске
df -h |
Обратите внимание на использование диска всеми подразделами. |
Проверить соединения контроллеров Z-Wave или датчиков Wi-Fi с платформой
netstat -na | grep 8070 netstat -na | grep 8883 |
Параметры, на которые следует обратить внимание:
Необходимо следить, чтобы пакеты не копились в очереди на контроллер. Если такое происходит, значит веб-сокет этого контроллера недоступен, и нужно проверить событие и время события в лог-файлах платформы.
Проверить наличие ошибок в логе
Лог-файлы платформы по умолчанию находятся в /storage/iot/core/var/log/eltex-sc/server*. Они разбиваются на части по размеру. Чтобы проверить все журналы на наличие некоторого параметра за определенную дату (например за 15 января 2022 года) и записать результаты в файл, выполните команду:
grep <значение для поиска> server-2022-01-15* > <имя файла для вывода> |
Если требуется, можно дописать следующие опции после значения для поиска:
Общий вид команды:
grep -i -n -A 5 -B 2 error server-2022-01-15* > errors.log |
Ключевые слова для поиска:
Проверить доступность веб-интерфейса
Самый простой способ проверить доступность веб-интерфейса платформы — открыть его в браузере (по IP или доменному имени — в зависимости от настроек сети и сервера).
Можно проверить доступность API платформы. Для этого в адресной строке браузера к URL веб-интерфейса платформы допишите:
<Адрес сервера Eltex SC>:<порт API>/api/v1/version |
где порт API — вышеуказанный порт доступа к API по HTTP (по умолчанию 8071/8073). Платформа должна моментально вернуть данные об установленной версии платформы, версии API и текущем времени на сервере в формате JSON.
Пример вывода:
{ "version" : "1.29-3477", "api" : "1.0", "currentTime" : "2022-07-25T09:24:12.544842Z[Etc/UTC]" } |
Ваш сертификат должен иметь формат PKCS#8. |
Способ определения типа сертификата
# head -1 /tmp/eltex-sc-api.key -----BEGIN PRIVATE KEY----- # head -1 /storage/iot/ssl/private/eltex-sc-api.key -----BEGIN RSA PRIVATE KEY----- |
Если ваш сертификат имеет кодировку PKCS#1, необходимо конвертировать его в PKCS#8.
Пример конвертирования сертификата из PKCS#1 в PKCS#8, letsencrypt:
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in путь_до_ключа -out имя_для_нового_ключа. |
Сервис CAPTCHA используется для ограничения нежелательной активности в целях повышения устойчивости системы. В частности, снижается вероятность спам-атак платформы ботами.
Список инстансов CAPTCHA доступен в файле /etc/ansible-iot-1.29/templates/default-for-docker.yml.j2
Настройки доступны в файле /etc/ansible-iot-1.29/vars/service_parametrs.yml
Параметр caseSensitive отвечает за чувствительность к регистру.
Настройки уровня сложности представлены тремя возможными значениями и доступны в файле /etc/ansible-iot-1.29/vars/default.yml
Уровень сложности | Описание |
---|---|
easy | Низкий уровень сложности. Обычно представляет из себя легкочитаемый текст. |
medium | Средний уровень сложности. Обычно представляет из себя слегка искаженный текст. |
hard | Высокий уровень сложности. Обычно представляет собой сильно искаженный текст. |