mqtt брокер EMQX

Запуск mqtt брокера EMQX в контейнере для контура SVA #

Возможно использование собственного mqtt брокера.

При отсутствии можно воспользоваться готовым образом cr.repo.altuera.ru/sva/prod/emqx:5.3.0. Это реплика официального публичного образа с предустановленными тестовыми сертификатами.

Документация #

Порты #

По-умолчанию:

  • 1833 подключение к шине по протоколу MQTT, без защиты соединения
  • 8883 подключение к шине по протоколу MQTT, с использованием TLS
  • 18083 Dashboard - административный веб интерфейс, без защиты соединения
  • 18084 Dashboard - административный веб интерфейс, с использованием 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 путь к файлу с сертификатом сервера. файл должен содержать только сертификат сервера. Формат PEM
  • EMQX_LISTENERS__SSL__DEFAULT__SSL_OPTIONS__KEYFILE: /cert/cert.key путь к файлу с ключем сертификата сервера. файл должен содержать только ключ сертификата сервера. Формат PEM
  • EMQX_LISTENERS__SSL__DEFAULT__SSL_OPTIONS__CACERTFILE: /cert/CA_fullchain.pem путь к файлу, содержащему цепочку CA сертификатов. Формат PEM
  • EMQX_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 путь к файлу с сертификатом сервера. файл должен содержать только сертификат сервера. Формат PEM
  • EMQX_DASHBOARD__LISTENERS__HTTPS__KEYFILE: /cert/cert.key путь к файлу с ключем сертификата сервера. файл должен содержать только ключ сертификата сервера. Формат PEM
  • EMQX_DASHBOARD__LISTENERS__HTTPS__CACERTFILE: /cert/CA_fullchain.pem путь к файлу, содержащему цепочку CA сертификатов. Формат PEM
  • EMQX_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
powered by Altuera