Installer le serveur MQTT Mosquitto

Après l'installation de mon serveur homelab, voici l'installation d'une autre brique logiciel, celle de Mosquitto, un serveur de messages open source qui implémente le protocole MQTT (versions 5.0, 3.1.1 et 3.1), développé par Cedalo et intégré à la Fondation Eclipse. Mosquitto est léger et peut être utilisé sur tous les appareils, des ordinateurs monocartes de faible puissance (type Raspberry Pi) aux serveurs complets. Le protocole MQTT fournit une méthode légère d'envoi de messages à l'aide d'un modèle de publication/abonnement. Il convient donc à la messagerie de l'internet des objets (IoT), par exemple avec des capteurs de faible puissance ou des appareils mobiles tels que des téléphones, des ordinateurs intégrés ou des microcontrôleurs. Le projet Mosquitto fournit également une bibliothèque C pour la mise en œuvre de clients MQTT, ainsi que les très populaires clients MQTT en ligne de commande mosquitto_pub et mosquitto_sub.

Logo de Mosquitto

Installer Mosquitto#

Sur une distribution Fedora, Mosquitto est présent dans les dépôts principaux. Il s’installe donc via le gestionnaire de paquets avec la commande :

$ sudo dnf install mosquitto

Installation de Mosquitto avec DNF

Configurer Mosquitto#

Le fichier principal, avec lequel nous allons travailler pour configurer Mosquitto, est le fichier mosquitto.conf, qui se trouve dans /etc/mosquitto/mosquitto.conf.

Nous allons garder le fichier original mosquitto.conf généré à l'installation, décommenter les lignes qui nous intéresse et modifier les options pour une installation basique.

Pour l'éditer :

$ sudo nano /etc/mosquitto/mosquitto.conf

Voici les options principales, les autres sont laissées par défaut :

# Config file for mosquitto
#
# See mosquitto.conf(5) for more information.
#
# Default values are shown, uncomment to change.
#
# Use the # character to indicate a comment, but only if it is the
# very first character on the line.

port 1883

# =================================================================
# General configuration
# =================================================================

# Write process id to a file. Default is a blank string which means
# a pid file shouldn't be written.
# This should be set to /var/run/mosquitto/mosquitto.pid if mosquitto is
# being run automatically on boot with an init script and
# start-stop-daemon or similar.
#pid_file
pid_file /var/run/mosquitto/mosquitto.pid

# =================================================================
# Persistence
# =================================================================
# Save persistent message data to disk (true/false).
# This saves information about all messages, including
# subscriptions, currently in-flight messages and retained
# messages.
# retained_persistence is a synonym for this option.
#persistence false
persistence true

# Location for persistent database.
# Default is an empty string (current directory).
# Set to e.g. /var/lib/mosquitto if running as a proper service on Linux or
# similar.
#persistence_location
persistence_location /var/lib/mosquitto/


# Places to log to. Use multiple log_dest lines for multiple
# logging destinations.
# Possible destinations are: stdout stderr syslog topic file dlt
#
# stdout and stderr log to the console on the named output.
#
# syslog uses the userspace syslog facility which usually ends up
# in /var/log/messages or similar.
#
# topic logs to the broker topic '$SYS/broker/log/<severity>',
# where severity is one of D, E, W, N, I, M which are debug, error,
# warning, notice, information and message. Message type severity is used by
# the subscribe/unsubscribe log_types and publishes log messages to
# $SYS/broker/log/M/susbcribe or $SYS/broker/log/M/unsubscribe.
#
# The file destination requires an additional parameter which is the file to be
# logged to, e.g. "log_dest file /var/log/mosquitto.log". The file will be
# closed and reopened when the broker receives a HUP signal. Only a single file
# destination may be configured.
#
# The dlt destination is for the automotive `Diagnostic Log and Trace` tool.
# This requires that Mosquitto has been compiled with DLT support.
#
# Note that if the broker is running as a Windows service it will default to
# "log_dest none" and neither stdout nor stderr logging is available.
# Use "log_dest none" if you wish to disable logging.
#log_dest stderr
log_dest file /var/log/mosquitto/mosquitto.log


# =================================================================
# Security
# =================================================================
# Boolean value that determines whether clients that connect
# without providing a username are allowed to connect. If set to
# false then a password file should be created (see the
# password_file option) to control authenticated client access.
#
# Defaults to false, unless there are no listeners defined in the configuration
# file, in which case it is set to true, but connections are only allowed from
# the local machine.
#allow_anonymous false
allow_anonymous true

Les options principales#

L’ensemble des options sont détaillées dans la documentation officielle mosquitto.conf(5).

Démarrer le serveur local#

Démarrer le serveur Mosquitto avec les commandes suivantes :

$ sudo systemctl start mosquitto
$ sudo systemctl enable mosquitto
Created symlink /etc/systemd/system/multi-user.target.wants/mosquitto.service  /usr/lib/systemd/system/mosquitto.service.

Tester le bon fonctionnement#

Le serveur étant actif, on peut désormais faire un test en local avec les commandes mosquitto_sub et mosquitto_pub fourni dans le paquet d'installation.

Nous allons d'abord nous mettre à l'écoute des messages du sujet 'test_topic' de Mosquitto sur un terminal :

$ mosquitto_sub -h localhost -t test_topic

Le terminal est en attente de publication des messages envoyés à ce sujet.

Maintenant, nous allons pouvoir envoyer des messages avec un autre terminal :

$ mosquitto_pub -h localhost -t test_topic -m "Hello World!"

Voici les messages envoyés avec la commande mosquitto_pub :

Messages envoyés avec la commande mosquitto_pub

Et que nous récupérons avec la commande mosquitto_sub en écoutant le topic 'test_topic' :

Messages reçus avec la commande mosquitto_sub

Il est aussi possible d'envoyer des messages depuis un autre ordinateur du réseau en spécifiant l'adresse IP du serveur Mosquitto :

$ mosquitto_pub -h <adresse_ip> -t test_topic -m "Hello World depuis un autre pc!"

Pour en savoir plus#

Voici d'autres liens utiles :

Liens spécifiques pour des clients MQTT :

links

social