Запуск mqtt брокера EMQX в контейнере для контура SVA #
Возможно использование собственного mqtt брокера.
При отсутствии можно воспользоваться готовым образом cr.repo.altuera.ru/sva/prod/emqx:5.3.0. Это реплика официального публичного образа с предустановленными тестовыми сертификатами.
Документация #
Порты #
По-умолчанию:
1833подключение к шине по протоколу MQTT, без защиты соединения8883подключение к шине по протоколу MQTT, с использованием TLS18083Dashboard - административный веб интерфейс, без защиты соединения18084Dashboard - административный веб интерфейс, с использованием TLS (требует включения переменными окружения)
Контейнеры SVA подключаются к шине внутри сети docker по имени сервиса mqtt на порт 1833,
поэтому публикация портов не требуется, кроме случаев:
- требуется доступ к шине извне, например, для административных целей (порты
1833или8883) - хосты SVA не объединены сетью docker (порты
1833или8883) - требуется доступ к административной панели (порты
18083или18084)
Постоянное хранилище (Volumes) #
Контейнер с EMQX требует постоянного хранилища для сохранения настроек и данных при перезапусках контейнера:
/opt/emqx/dataпуть в контейнере, где хранятся данные шины/opt/emqx/etcпуть в контейнере, где хранятся настройки EMQX/opt/emqx/logпуть в контейнере, c дополнительным логированием EMQX
Для реализации постоянного хранения можно использовать как docker volumes, так и место на дисках хоста с докером
Параметры для настройки через переменные окружения #
EMQX_NODE_NAMEимя экземпляра EMQX, обязательно должно быть в форматеname@node, например:emqx@node1, в противном случае при восстановлении/переустановке будет потеряна вся конфигурация.EMQX_LOG__CONSOLE_HANDLER__LEVELуровень логирования в консоль (trace,debug,info,warning,error)
Административная панель #
Для доступа к административной панели следует опубликовать порт 18083 и задать логин/пароль административного пользователя переменными окружения:
EMQX_DASHBOARD__DEFAULT_USERNAME: mqtt
EMQX_DASHBOARD__DEFAULT_PASSWORD: mqtt
Аутентификация пользователей #
При включении аутентификации пользователей необходимо сначала запустить EMQX и настроить параметры аутентификации, и только потом запускать остальные контейнеры, требующие подключения к сервису.
Для включения аутентификации пользователей необходимо воспользоваться Административной панелью сервиса по адресу http://docker_host:18083/ или https://docker_host:18084/
- добавить тип аутентификацию по логину и паролю:
- В административной панели Access Control -> Authentication -> Create
- Выбрать тип аутентификации
Password-Base - Выбрать механизм аутентификации
Built-in Database - Выбрать UserID Type
username
- создать пользователя
- зайти в ранее созданный тип аутентификации
- перейти в раздел User Management
- добавить пользователя (username и пароль)
- добавить пользователя во все настройки подключения модулей SVA к шине
TLS #
Настройка защищенного подключения
В контейнере в /cert расположены тестовые самоподписанные сертификаты, которые можно использовать для отладки и тестирования.
Относительные пути указываются от /opt/emqx/
Настройка защищенного подключения к шине по протоколу mqtt #
Осуществляется через переменные окружения:
EMQX_LISTENERS__SSL__DEFAULT__SSL_OPTIONS__CERTFILE: /cert/cert.crtпуть к файлу с сертификатом сервера. файл должен содержать только сертификат сервера. Формат PEMEMQX_LISTENERS__SSL__DEFAULT__SSL_OPTIONS__KEYFILE: /cert/cert.keyпуть к файлу с ключем сертификата сервера. файл должен содержать только ключ сертификата сервера. Формат PEMEMQX_LISTENERS__SSL__DEFAULT__SSL_OPTIONS__CACERTFILE: /cert/CA_fullchain.pemпуть к файлу, содержащему цепочку CA сертификатов. Формат PEMEMQX_LISTENERS__SSL__DEFAULT__SSL_OPTIONS__VERSIONS: '["tlsv1.3","tlsv1.2"]'поддерживаемые версии TLS
При необходимости опубликовать порт 8883 за пределы сети docker и отключить публикацию незащищенного порта 1833
Настройка защищенного подключения к Административной панели #
Осуществляется через переменные окружения:
EMQX_DASHBOARD__LISTENERS__HTTPS__BIND: 18084порт для защищенного подключения к административной панелиEMQX_DASHBOARD__LISTENERS__HTTPS__ENABLE: trueвключение защищенного подключения к административной панелиEMQX_DASHBOARD__LISTENERS__HTTPS__CERTFILE: /cert/cert.crtпуть к файлу с сертификатом сервера. файл должен содержать только сертификат сервера. Формат PEMEMQX_DASHBOARD__LISTENERS__HTTPS__KEYFILE: /cert/cert.keyпуть к файлу с ключем сертификата сервера. файл должен содержать только ключ сертификата сервера. Формат PEMEMQX_DASHBOARD__LISTENERS__HTTPS__CACERTFILE: /cert/CA_fullchain.pemпуть к файлу, содержащему цепочку CA сертификатов. Формат PEMEMQX_DASHBOARD__LISTENERS__HTTPS__VERSIONS: '["tlsv1.3","tlsv1.2"]'поддерживаемые версии TLS
Также необходимо опубликовать порт 18084 за пределы сети docker и отключить публикацию незащищенного порта 18083
Примеры compose файлов #
Без авторизации, доступ внутри контура #
Можно использовать, если:
- все компоненты обращаются к брокеру только внутри сети docker
- если не требуется доступ к административной панели сервиса
volumes:
emqx1-data:
emqx1-etc:
emqx1-log:
services:
mqtt:
image: cr.repo.altuera.ru/sva/prod/emqx:5.3.0
restart: unless-stopped
environment:
EMQX_NODE_NAME: emqx@node1
volumes:
- emqx1-data:/opt/emqx/data
- emqx1-etc:/opt/emqx/etc
- emqx1-log:/opt/emqx/log
С авторизацией, TLS, и анонсированием портов наружу #
Если требуется безопасный авторизованный доступ к шине и административной панели вне сети docker.
После запуска необходимо настроить авторизацию пользователей.
Постоянное хранилище вынесено на диск, поскольку содержит настройки авторизации пользователей.
services:
mqtt:
image: cr.repo.altuera.ru/sva/prod/emqx:5.3.0
restart: unless-stopped
ports:
- 8883:8883
- 18084:18084
environment:
EMQX_NODE_NAME: emqx@node1
EMQX_DASHBOARD__DEFAULT_USERNAME: mqtt
EMQX_DASHBOARD__DEFAULT_PASSWORD: mqtt
EMQX_LISTENERS__SSL__DEFAULT__SSL_OPTIONS__CERTFILE: /cert/cert.crt
EMQX_LISTENERS__SSL__DEFAULT__SSL_OPTIONS__KEYFILE: /cert/cert.key
EMQX_LISTENERS__SSL__DEFAULT__SSL_OPTIONS__CACERTFILE: /cert/CA_fullchain.pem
EMQX_LISTENERS__SSL__DEFAULT__SSL_OPTIONS__VERSIONS: '["tlsv1.3","tlsv1.2"]'
EMQX_LOG__CONSOLE_HANDLER__LEVEL: info
EMQX_DASHBOARD__LISTENERS__HTTPS__BIND: 18084
EMQX_DASHBOARD__LISTENERS__HTTPS__ENABLE: true
EMQX_DASHBOARD__LISTENERS__HTTPS__CERTFILE: /cert/cert.crt
EMQX_DASHBOARD__LISTENERS__HTTPS__KEYFILE: /cert/cert.key
EMQX_DASHBOARD__LISTENERS__HTTPS__CACERTFILE: /cert/CA_fullchain.pem
EMQX_DASHBOARD__LISTENERS__HTTPS__VERSIONS: '["tlsv1.3","tlsv1.2"]'
volumes:
- /srv/emqx1-data:/opt/emqx/data
- /srv/emqx1-etc:/opt/emqx/etc
- /srv/emqx1-log:/opt/emqx/log