Версия ПО 1.33
Рекомендуемые характеристики сервера
Система ELIS строится по клиент-серверной архитектуре. Серверную часть рекомендуется устанавливать на многопроцессорный компьютер под управлением OS Ubuntu 20.
Производительность сервера зависит от числа пользователей, которые будут зарегистрированы на платформе.
Минимальные системные требования сервера*:
- число аппаратных серверов — 1;
- процессор — i5 3,0 ГГц с поддержкой AVX;
- оперативная память — 8 ГБ;
- место на диске — 1000 ГБ;
- производительность дискового массива (чтение/запись) — 2000 IOPS.
Минимально необходимая конфигурация для запуска ядра платформы с микросервисами.
Установка платформы ELIS
В инструкции описан процесс установки платформы ELIS версии 1.33 на операционную систему Ubuntu 20.04. Информацию по установке более ранних версий платформы (1.32 и ниже) можно найти по ссылке: Архив ELIS.
С версии 1.19.4 установка через deb-пакеты не осуществляется.
С версии 1.25 сервис eltex-notification-gw(ngw) не требует дополнительной настройки через файл notification.properties.j2. Все настройки вынесены в файл vars/default.yml
Установка ELIS на сервер, не отвечающий минимальным системным требованиям, может привести к неработоспособности платформы или увеличить время обработки запросов.
Перед развертыванием платформы необходимо установить систему Ansible и необходимые для ее работы компоненты. Ansible рекомендуется устанавливать из официального репозитория проекта.
Ansible — система управления конфигурациями, написанная на языке программирования Python с использованием декларативного языка разметки для описания конфигураций. Система используется для автоматизации настройки и развертывания программного обеспечения, в частности для ПО ELIS.
Для установки платформы выполните следующие шаги:
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.33.tar.gz
После распаковки архива все пакеты и зависимости будут развернуты в директории на текущем сервере.
Файлы конфигурации и плейбуки (скрипты/конфигурации) Ansible будут расположены в директории /etc/ansible-iot-1.33
5. Отредактируйте файл /etc/ansible-iot-1.33/inventory
Откройте файл в любом доступном текстовом редакторе, например nano. Укажите пароль пользователя root в переменной ansible_sudo_pass:
Далее в примере для пользователя root используется пароль rootpasswd
При установке задайте свой пароль.
Пример задания пароля:
[iot] localhost ansible_connection=local ansible_sudo_pass=rootpasswd [mqtt_broker] localhost ansible_connection=local ansible_sudo_pass=password [elk] localhost ansible_connection=local ansible_sudo_pass=rootpasswd [monitoring] localhost ansible_connection=local ansible_sudo_pass=rootpasswd
6. Далее необходимо настроить параметры доступа к платформе ELIS.
MongoDB версии 5 и выше работает только на процессорах с поддержкой AVX. Узнать, поддерживает ли ваш процессор AVX, можно с помощью команды:
lscpu | grep avx
Если ответ оказался пустым, ваш процессор не поддерживает AVX. Используйте MongoDB версии 4.
Если в ответе вернулся список флагов, можно использовать MongoDB версии 5 и выше.
Для базовой установки достаточно отредактировать файл конфигурации /etc/ansible-iot-1.33/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
Таблица описания значений в файле настроек /vars/default.yml
iot: | Параметры установки платформы. |
serverName: "my.test.server" | Имя (IP-адрес) сервера, на котором будет производиться развертывание платформы IoT. Возможно использование 'localhost', если все манипуляции производятся локально. В 'serverName' нужно прописывать то имя (IP-адрес), по которому будет доступна платформа. Если указать 'localhost', то платформа будет доступна только через '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. MongoDB должна быть настроена, а параметры подключения — указаны в 'addr' и 'port'. |
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: | Параметры платформы ELIS. |
privacyPolicyUrl: "my.test.privacy" | Ссылка на политику конфиденциальности. |
knowledgeBaseUrl: "IoT" | Ссылка на базу знаний. |
logLevel: INFO | Уровень отладки внутри ELIS. |
ctlGate: | Порты платформы для подключения Z-Wave-контроллеров. |
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. |
user: "PaykeeperUsernameChangeMe" | Пользователь сервиса paykeeper. |
password: "PaykeeperPasswordChangeMe" | Пароль сервиса paykeeper. |
clientRegistrations: | Параметры клиентских регистраций (через соцсети). |
yandex: | Наименование соцсети. |
enable: true | Доступность самостоятельной регистрации через соцсеть. |
clientId: "YandexClientIdChangeMe" | ID клиента. |
clientSecret: "YandexClientSecretChangeMe" | Секрет клиента. |
vk: | Наименование соцсети. |
enable: true | Доступность самостоятельной регистрации через соцсеть. |
clientId: "VkClientIdChangeMe" | ID клиента. |
clientSecret: "VkClientSecretChangeMe" | Секрет клиента. |
mailRu | Наименование соцсети. |
enable: true | Доступность самостоятельной регистрации через соцсеть. |
clientId: "mailRuClientIdChangeMe" | ID клиента. |
clientSecret: "mailRuClientSecretChangeMe" | Секрет клиента. |
yandexSkill: | Параметры навыка Яндекс для интеграции с Умным домом (Алисой). Отображается в карточке навыка. |
clientId: "YandexClientIdChangeMe" password: "PasswordChangeMe" | Параметры для Basic Authentication. |
skillId: "" | ID навыка, который необходимо указывать при отправке уведомлений. |
oauthToken: "" | OAuth-токен, который необходимо указывать при отправке уведомлений. |
sberSkill: | Параметры проекта умного дома Сбера для интеграции с Салютом. Отображаются в карточке проекта. |
clientId: "SberClientIdChangeMe" password: "PasswordChangeMe" | Параметры для Basic Authentication. |
bearerToken: "" | Bearer-Token, который необходимо указывать при отправке уведомлений. |
marusyaSkill: | Параметры проекта умного дома Mail.ru для интеграции с Марусей. Отображаются в карточке проекта/приложения. |
clientId: "MarusyaClientIdChangeMe" password: "PasswordChangeMe" | Параметры для Basic Authentication. |
appID | App ID, который был назначен приложению VK при создании. |
oauthToken: "" | OAuth-токен, который необходимо указывать при отправке уведомлений. |
irc: | Настройки ИК-пульта. |
recTimeout: 15000 | Время ожидания ИК-команды от пользователя в мс. |
cmdTimeout: 100 | Таймаут записи команды (отсутствия фронтов) в мс. |
irdbPath: "CHANGE_ME" | Путь до базы ИК-сигналов IRDB. |
Для функций самостоятельной регистрации, регистрации демонстрационных учетных записей, а также для процедуры восстановления пароля может потребоваться активация почтовых оповещений через email.
Также в vars/service_parameters.yml задаются дополнительные параметры:
Таблица описания значений в файле настроек vars/service_parameters.yml
release:1.33 | Версия контейнеров. |
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.33 ansible-playbook install_iot.yml
Если ранее использовалась версия платформы ELIS 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.33 | /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.33 | 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.33 | java -cp @/app/jib-… | 2 minutes ago | Up 2 minutes | 0.0.0.0:8883->8883/tcp, :::8883->8883/tcp | iot-mqtt-broker |
8f8401f5ae0a | hub.eltex.loc:9017/iot-hazelcast:1.33 | "java --add-modules …" | 2 minutes ago | Up 2 minutes | iot-ngw-sc | |
228d41c96cba | hub.eltex-co.ru/iot-olapservice:1.33 | java -cp @/app/jib-… | 2 minutes ago | Up 2 minutes | iot-olapservice | |
e8e2899f2c8d | hub.eltex-co.ru/iot-captcha:1.33 | java -jar LibreCapt… | 2 minutes ago | Up 2 minutes | 8888/tcp | iot-captcha |
57c02941cc4f | hub.eltex-co.ru/iot-mongo6:1.33 | /entrypoint.sh | 2 minutes ago | Up 2 minutes | 0.0.0.0:27017->27017/tcp, :::27017->27017/tcp | iot-mongo |
7c3d8d5c4137 | hub.eltex.loc:9017/iot-clickhouse-server:1.33 | "docker-entrypoint.s…" | 2 minutes ago | Up 2 minutes | 8123/tcp, 9000/tcp, 9009/tcp | iot-iot-mysql |
0327972ab361 | hub.eltex.loc:9017/iot-rabbitmq:1.33 | "docker-entrypoint.s…" | 2 minutes ago | Up 2 minutes | 4369/tcp, 5671-5672/tcp, 15691-15692/tcp, 25672/tcp | |
a5bcb7e27390 | hub.eltex.loc:9017/iot-wsproxy:1.33 | java -cp @/app/jib-… | 2 minutes ago | Up 2 minutes | 0.0.0.0:8075->8075/tcp, :::8075->8075/tcp | iot-wsproxy |
984b90122ea9 | hub.eltex.loc:9017/iot-zwayproxy:1.33 | java -cp @/app/jib-… | 2 minutes ago | Up 2 minutes | 0.0.0.0:8070->8070/tcp, :::8070->8070/tcp, 0.0.0.0:8072->8072/tcp, :::8072->8072/tcp | iot-zwayproxy |
Платформа будет доступна по адресу: http://[Адрес вашего сервера ELIS]
Адрес сервера был ранее указан в переменной server_name файла конфигурации /etc/ansible-iot-1.33/vars/default.yml
Порты доступа к API платформы можно изменить только в случае редактирования соответствующих настроек в файле конфигурации.
9. Добавьте файл лицензий.
Подробное описание процесса добавления файла лицензий доступно в документации Интерфейс администратора в разделе Лицензии.
Время использования платформы и количество добавляемых устройств ограничивается типом лицензии, которая приобретается заказчиком.
Установка платформы ELIS с внешней БД MongoDB
В случае развертывания внешней БД MongoDB, т.е. при установке платформы ELIS с внешним процессом/службой 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.33.tar.gz
После распаковки архива все пакеты и зависимости будут развернуты в директории на текущем сервере. Файлы конфигурации и плейбуки (скрипты/конфигурации) Ansible будут расположены в директории /etc/ansible-iot-1.33.
5. Отредактируйте файл /etc/ansible-iot-1.33/inventory.
Откройте файл в любом доступном текстовом редакторе, например nano. Укажите пароль от root в переменной ansible_sudo_pass:
Далее в примере для пользователя root используется пароль rootpasswd
При установке задайте свой пароль.
[iot] localhost ansible_connection=local ansible_sudo_pass=rootpasswd [mqtt_broker] localhost ansible_connection=local ansible_sudo_pass=password [elk] localhost ansible_connection=local ansible_sudo_pass=rootpasswd [monitoring] localhost ansible_connection=local ansible_sudo_pass=rootpasswd
6. Настройте параметры доступа к платформе, в том числе параметры для работы с внешним сервисом БД. Для этого отредактируйте файлы конфигурации /etc/ansible-iot-1.33/vars/default.yml и /etc/ansible-iot-1.33/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.33 sudo ansible-playbook install_iot.yml
Платформа будет доступна по адресу: http://[Адрес вашего сервера ELIS]
Адрес сервера был ранее указан в переменной server_name файла конфигурации /etc/ansible-iot-1.33/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.33/templates располагаются конфигурации для ядра: /etc/ansible-iot-1.33/templates/iot/docker-compose/base_config.yml.j2 и веб-сервера: /etc/ansible-iot-1.33/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.33/vars/default.yml . При запуске платформы параметры, заданные в файле конфигурации /etc/ansible-iot-1.33/vars/default.yml, имеют наивысший приоритет по отношению к другим файлам конфигурации, а также ведут к их перезаписи.
Порты, используемые платформой по умолчанию:
- 8069 — порт для подключения контроллеров Ethernet к платформе в режиме TCP-клиент;
- 8070 — WS-порт для подключения контроллеров к платформе;
- 8071 — HTTP-порт API-платформы;
- 8072 — WSS-порт для подключения контроллеров к платформе;
- 8073 — HTTPS-порт API-платформы;
- 8883 — порт для подключения к MQTT-брокеру;
- 8088 — порт для CAPTCHA.
По окончании установки и конфигурирования сервер ELIS будет готов к работе. Взаимодействие с платформой происходит через веб-интерфейсы пользователей и администратора, а также через мобильное приложение Eltex Home.
Во всех случаях для входа в платформу необходимо указать ее адрес и номер порта. В общем случае в адресную строку браузера вводится следующее: <Адрес сервера ELIS>.
Проверка работоспособности платформы
В данном разделе представлен чек-лист для проверки работоспособности платформы.
Проверить занятость ядер процессора и оперативной памяти
htop
Проверить занятость физического места на диске
df -h
Проверить соединения устройств с платформой
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 веб-интерфейса платформы допишите:
<Адрес сервера ELIS>:<порт API>/api/v1/version
где порт API — вышеуказанный порт доступа к API по HTTP (по умолчанию 8071/8073). Платформа должна моментально вернуть данные об установленной версии платформы, версии API и текущем времени на сервере в формате JSON.
Пример вывода:
{ "version" : "1.33-3477", "api" : "1.0", "currentTime" : "2022-07-25T09:24:12.544842Z[Etc/UTC]" }
Переход с http на https
1. Открыть файл base_config.yml.j2:
ansible-iot/templates/iot/docker-compose/base_config.yml.j2
2. Добавить код в блок WEB:
3. Внести новые пути до ssl, объявленные в шаге 2:
ansible-iot/templates/iot/web/base_config.j2
server { listen {{ web.httpsPort }} ssl; ssl_certificate /etc/ansible-iot/ssl/домен/fullchain.pem; ssl_certificate_key /etc/ansible-iot/ssl/домен/privkey.pem; include /etc/ansible-iot/ssl/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/ansible-iot/ssl/ssl-dhparams.pem; # managed by Certbot ....
4. Добавить свои сертификаты/ключи в /etc/ansible-iot/ssl/
5. Определить тип сертификата.
Способ определения типа сертификата
# head -1 /tmp/eltex-sc-api.key -----BEGIN PRIVATE KEY----- # head -1 /storage/iot/ssl/private/eltex-sc-api.key -----BEGIN RSA PRIVATE KEY-----
- BEGIN PRIVATE KEY — кодировка PKCS#8;
- BEGIN RSA PRIVATE KEY — кодировка PKCS#1.
6. Если ваш сертификат имеет кодировку PKCS#1, необходимо конвертировать его в PKCS#8.
Пример конвертирования сертификата из PKCS#1 в PKCS#8, letsencrypt:
openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in путь_до_ключа -out имя_для_нового_ключа.
Настройка CAPTCHA
Сервис CAPTCHA используется для ограничения нежелательной активности в целях повышения устойчивости системы. В частности, снижается вероятность спам-атак платформы ботами.
Список инстансов CAPTCHA доступен в файле /etc/ansible-iot-1.33/templates/default-for-docker.yml.j2
Настройки доступны в файле /etc/ansible-iot-1.33/vars/service_parametrs.yml
Параметр caseSensitive отвечает за чувствительность к регистру.
Настройки уровня сложности представлены тремя возможными значениями и доступны в файле /etc/ansible-iot-1.33/vars/default.yml
Уровень сложности | Описание |
---|---|
easy | Низкий уровень сложности. Обычно представляет из себя легкочитаемый текст. |
medium | Средний уровень сложности. Обычно представляет из себя слегка искаженный текст. |
hard | Высокий уровень сложности. Обычно представляет собой сильно искаженный текст. |