Устанка Mosquitto MQTT Broker на Ubuntu Server 20.04/22.04
Mosquitto — это брокер сообщений с открытым исходным кодом, который использует протокол телеметрии очереди сообщений (MQTT). MQTT работает на основе модели TCP/IP и является стандартной платформой обмена сообщениями для Интернета вещей (IoT).
Поскольку протокол MQQT чрезвычайно легкий, его небольшой объем кода позволяет создавать приложения для устройств с минимальными ресурсами, такими как короткое время автономной работы, ограниченная пропускная способность сети и ненадежное подключение к Интернету.
Приложение Mosquitto поддерживает топологию издатель/подписчик. В этой модели клиенты подключаются к серверу Mosquitto, который действует как брокер для распространения информации среди других клиентов, на которые они подписаны или отправляют сообщения в канал.
В этом руководстве вы установите и настроите приложение Mosquitto и узнаете, как управляемый событиями протокол MQQT работает с приложениями IoT.
Предварительные условия
Чтобы следовать этому руководству, вам необходимо:
Сервер Ubuntu 20.04 или 22.04.
Пользователь без полномочий root с sudo правами.
Устанавливаем сервер Mosquitto
Вы получите mosquitto пакет из репозитория программного обеспечения Ubuntu, выполнив следующие шаги.
Подключитесь по SSH к вашему серверу и обновите индекс информации о пакете.
Сначала делаем:
sudo apt update
1. Устанавливаем mosquitto пакет
sudo apt install -y mosquitto
Теперь пакет mosquitto должен загрузиться на ваш сервер. Подтвердите статус услуги mosquitto.
$ sudo systemctl status mosquitto
Убедитесь, что пакет имеет loaded формат и active.
● mosquitto.service - Mosquitto MQTT v3.1/v3.1.1 Broker
Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; vendor pr>
Active: active (running) since Fri 2021-10-08 06:29:25 UTC; 12s ago
Docs: man:mosquitto.conf(5)
man:mosquitto(8)
...
После запуска вы можете управлять mosquitto службами, выполнив следующие команды.
Остановить mosquitto службу:
sudo systemctl stop mosquitto
Запустите mosquitto службу:
sudo systemctl start mosquitto
Перезапустите mosquitto службу:
sudo systemctl restart mosquitto
2. Устанавливаем клиент и тестируем Mosquitto
При использовании клиента MQTT вы подключаетесь к брокеру Mosquitto для отправки и получения сообщений на разные темы в зависимости от варианта использования приложения. Клиент может быть издателем, подписчиком или тем и другим.
Пакет Mosquitto поставляется с клиентом командной строки, который позволяет тестировать функции сервера. Установите клиент.
sudo apt install -y mosquitto-clients
Далее вы подписываетесь на тему. В протоколе MQQT тема — это строка, которую сервер/брокер использует для фильтрации сообщений для подключенных клиентов. Например, вот несколько примеров тем, которые вы можете использовать при использовании брокера Mosquitto в приложении домашней автоматизации.
дом/свет/гостиная_комната
дом/свет/кухня
дом/свет/master_bedroom
дом/свет/детская_спальня
Чтобы подписаться на тему, выполните mosquitto_sub -tкоманду, за которой следует название темы, на которую вы хотите подписаться. Например, чтобы подписаться на home/lights/sitting_roomтему, выполните.
mosquitto_sub -t "home/lights/sitting_room"
Обратите внимание, что приведенная выше команда имеет функцию блокировки и переводит ваш терминал оболочки в состояние прослушивания.
Откройте второе окно терминала и не закрывайте первое. На этот раз опубликуйте сообщение «ON» в теме темы home/lights/sitting_roomс помощью mosquitto_pub -mкоманды.
mosquitto_pub -m "ON" -t "home/lights/sitting_room"
Теперь вы должны получить ON полезную нагрузку в первом окне.
ON
Затем опубликуйте OFFсообщение на ту же home/lights/sitting_roomтему на втором терминале.
mosquitto_pub -m "OFF" -t "home/lights/sitting_room"
Ваш брокер также должен отобразить новое сообщение.
ON
OFF
В этом руководстве вы вручную подписываетесь и публикуете сообщения, используя клиенты Mosquitto в демонстрационных целях. В реальных приложениях вам следует программировать небольшие микрочипы, поддерживающие уровень TCP/IP, такие, как ESP8266, чтобы передавать сообщение брокеру для управления или даже мониторинга устройств. Вот несколько распространенных случаев использования пакета Mosquitto в реальной жизни.
Мониторинг сердцебиения пациентов и отправка их на центральный сервер для мониторинга врачами. Это позволяет избежать больших транспортных расходов, которые пациенты могут понести при поездке в больницу.
В газовой и нефтяной промышленности устройства MQQT отслеживают различные параметры и отправляют данные центральному брокеру. Обычно это связано с тысячами датчиков в удаленных местах, которые собирают и отправляют данные через спутниковые каналы связи, оплата за которые взимается за использование данных. К счастью, топология MQQT сводит передачу к минимуму и передает данные на сервер только при необходимости.
В транспортной отрасли устройства MQQT отслеживают местоположение поездов в режиме реального времени и отправляют данные в штаб-квартиры компаний, чтобы предоставить более полную информацию клиентам, которые хотят путешествовать без каких-либо задержек.
Кроме того, брокер Mosquitto можно использовать в качестве промежуточного уровня в приложении чата для обновления онлайн-статуса пользователей и передачи сообщений между конечными пользователями.
Другой распространенный сценарий, в котором сервер Mosquitto может хорошо подойти, — это разделенные системы. Клиенты могут отправлять данные брокеру, который затем отправляет данные в базу данных для постоянного хранения.
В дополнение к вышеперечисленным вариантам использования существуют десятки библиотек, которые вы можете использовать для подключения к серверу Mosquitto, используя ваш любимый язык программирования, включая PHP, Python, Golang и другие.
3. Защита сервера Mosquitto
По умолчанию сервер Mosquitto не защищен. Однако вы можете выполнить некоторые настройки конфигурации, чтобы защитить его с помощью имен пользователей и паролей.
Mosquitto считывает информацию о конфигурации из следующего места.
/etc/mosquitto/conf.d
Создайте default.conf в каталоге.
sudo nano /etc/mosquitto/conf.d/default.conf
Вставьте информацию ниже, чтобы отключить anonymous соединения и позволить Mosquitto читать действительные учетные данные из /etc/mosquitto/passwd файла.
allow_anonymous false
password_file /etc/mosquitto/passwd
Сохраните и закройте файл.
Откройте /etc/mosquitto/passwdфайл с расширением nano.
sudo nano /etc/mosquitto/passwd
Затем заполните файл данными учетной записи пользователей, которых вы хотите подключить к серверу Mosquitto. Замените EXAMPLE_PASSWORDи EXAMPLE_PASSWORD_2сильными значениями.
john_doe:EXAMPLE_PASSWORD
mary_smith:EXAMPLE_PASSWORD_2
Сохраните и закройте файл.
Далее воспользуйтесь mosquitto_passwdутилитой для шифрования паролей.
sudo mosquitto_passwd -U /etc/mosquitto/passwd
Ваши пароли теперь зашифрованы в формате, который может расшифровать только сервер Mosquitto. Используйте команду Linux catдля подтверждения процесса шифрования.
sudo cat /etc/mosquitto/passwd
Выход.
john_doe:$6$TSzNycsj...5Qyvgd4g==
mary_smith:$6$DtlKf1lG.../rLHIL0Q==
Перезапустите mosquittoслужбу, чтобы загрузить новые изменения.
sudo systemctl restart mosquitto
С этого момента вам следует выполнять любую команду pub/sub, используя приведенный ниже синтаксис. Не забудьте заменить john_doeи EXAMPLE_PASSWORDучетными данными, которые вы определили в файле паролей.
mosquitto_sub -u john_doe -P EXAMPLE_PASSWORD -t "home/lights/sitting_room"
mosquitto_pub -u john_doe -P EXAMPLE_PASSWORD -t "home/lights/sitting_room" -m "ON"
Не аутентифицированные команды или соединения с неправильными учетными данными теперь должны завершаться неудачно.
mosquitto_pub -m "ON" -t "home/lights/sitting_room"
mosquitto_sub -t "home/lights/sitting_room"
mosquitto_sub -u john_doe -P WRONG_PASSWORD -t "home/lights/sitting_room"
mosquitto_pub -u john_doe -P WRONG_PASSWORD -t "home/lights/sitting_room" -m "ON"
Выход.
...
Connection error: Connection Refused: not authorised.
Заключение
В этом руководстве вы установили и настроили сервер Mosquitto на своем сервере Ubuntu 20.04. Вы также использовали интерфейс командной строки для подписки и публикации сообщений в примерной теме. Рассмотрите возможность использования сервера Mosquitto в следующий раз при развертывании приложения Интернета вещей.