Detaillierte Erläuterung des Prozesses zum Erstellen eines MQTT-Servers mit Docker

Detaillierte Erläuterung des Prozesses zum Erstellen eines MQTT-Servers mit Docker

1. Ziehen Sie das Bild

Docker-Pull-Registrierung.cn-hangzhou.aliyuncs.com/synbop/emqttd:2.3.6

2. Ausführen des Images

  • –name Name
  • -p 18083 Server-Startport
  • -p 1882 TCP-Port
  • -p 8083 WS-Port
  • -p 8084 WSS-Port
  • -p 8883 SSL-Port
  • -d gibt den Container an

docker run --name emq -p 18083:18083 -p 1883:1883 -p 8084:8084 -p 8883:8883 -p 8083:8083 -d registry.cn-hangzhou.aliyuncs.com/synbop/emqttd:2.3.6

3. Rufen Sie die emq-Serviceseite auf

Geben Sie機器IP:18083 in den Browser ein, um die emqtt-Seite aufzurufen

Erstkonto: admin, Passwort: public

4. emq konfigurieren (für V3.1.0)

Konfigurieren Sie die Berechtigungen für emq-Benutzer. emq unterstützt auch die Authentifizierung mehrerer Datenbanken, darunter mongo, redis, pgsql usw. Wenn Sie interessiert sind, können Sie es selbst studieren.

# Geben Sie den Container ein. Sie können /bin/bash nicht verwenden, um docker exec -it emq /bin/sh einzugeben.

1. Deaktivieren Sie zunächst die anonyme Authentifizierung (sie ist standardmäßig aktiviert und jeder kann sich anmelden).

# Bearbeiten Sie die Konfigurationsdatei vi /opt/emqttd/etc/emq.conf
# Ändern Sie allowAnonymous True -> false
allow_anonymous = false

2. Erstellen Sie eine MySQL-Tabelle mit Benutzern und Berechtigungen. Sie können einen MySQL-Container ziehen oder ihn direkt in MySQL in Ihrem Ubuntu erstellen

DATENBANK ERSTELLEN emq charset utf8;

verwende eqm;

Tabelle erstellen mqtt_user ( 
id int(11) unsigned NOT NULL AUTO_INCREMENT, 
Benutzername varchar(100) DEFAULT NULL, 
Passwort varchar(100) DEFAULT NULL, 
salt varchar(20) DEFAULT NULL, 
is_superuser tinyint(1) STANDARD 0, 
Erstellungsdatum/-zeit DEFAULT NULL, 
Primärschlüssel (ID), 
EINZIGARTIGER SCHLÜSSEL mqtt_username (Benutzername) 
)ENGINE=MyISAM STANDARD-CHARSET=utf8;

Tabelle erstellen mqtt_acl ( 
id int(11) unsigned NOT NULL AUTO_INCREMENT, 
allow int(1) DEFAULT NULL COMMENT '0: verweigern, 1: erlauben', 
ipaddr varchar(60) DEFAULT NULL KOMMENTAR 'IpAddress', 
Benutzername varchar (100) DEFAULT NULL COMMENT 'Benutzername', 
clientid varchar(100) DEFAULT NULL KOMMENTAR 'ClientId', 
Zugriff int(2) NOT NULL KOMMENTAR '1: abonnieren, 2: veröffentlichen, 3: pubsub', 
topic varchar(100) NOT NULL DEFAULT '' COMMENT 'Themenfilter', 
PRIMÄRSCHLÜSSEL (id) 
)ENGINE=InnoDB STANDARD-CHARSET=utf8;

3. ACL-Regeln einfügen - ACL-Regeln

Tipps: !!! Stellen Sie es nicht direkt gemäß dem folgenden Beispiel ein. Überprüfen Sie zuerst die ACL-Regeln und konfigurieren Sie es dann entsprechend Ihrer eigenen Situation.

INSERT INTO `mqtt_acl` (`id`, `allow`, `ipaddr`, `username`, `clientid`, `access`, `topic`) WERTE 
(1,1,NULL,'$alle',NULL,2,'#'),
(2,0,NULL,'$alle',NULL,1,'$SYS/#'),
(3,0,NULL,'$alle',NULL,1,'Gleichung #'),
(5,1,'127.0.0.1',NULL,NULL,2,'$SYS/#'),
(6,1,'127.0.0.1',NULL,NULL,2,'#'),
(7,1,NULL,'Dashboard',NULL,1,'$SYS/#');

4. Geben Sie den Benutzer ein. Ab sofort müssen alle abonnierenden und veröffentlichenden Clients die Benutzerüberprüfung bestehen (bitte konvertieren Sie den SHA256-Wert selbst).

# Sie können einen Superadministrator konfigurieren (der Superadministrator hat das Recht, alle Themen zu abonnieren und Push-Zugriffe darauf zu gewähren, unabhängig von den ACL-Regeln).
in mqtt_user („Benutzername“, „Passwort“) Werte einfügen („admin“, „03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4“);
Aktualisieren Sie mqtt_user und setzen Sie is_superuser=1, wobei id = Superadministrator-ID;

ps: Beachten Sie, dass auth.mysql.password_hash (Standard ist sha256) Wenn es sha256 ist, müssen Sie den verschlüsselten Wert beim Hinzufügen eines neuen Benutzers manuell übergeben. Wenn es klar ist, muss es nicht verschlüsselt werden und wird im Klartext gespeichert.

5. Ändern Sie die MySQL-Konfigurationsdatei von emq

vi /opt/emqttd/etc/plugins/emq_auth_mysql.conf
auth.mysql.server = IhreMySQL-IP:3306 
auth.mysql.Benutzername = root 
auth.mysql.password = xxxxxxxx 
auth.mysql.database = emq

6. Starten Sie emq neu

/opt/emqttd/bin/emqx stoppen
/opt/emqttd/bin/emqx starten
/opt/emqttd/bin/emqttd_ctl plugins load emq_auth_mysql #Öffnen Sie das MySQL-Authentifizierungs-Plugin
  • ACL-Regeln
Beschreibung der Felder in der Regeltabelle:
  • erlauben: verbieten (0), erlauben (1)
  • ipaddr: IP-Adresse festlegen
  • Benutzername: Der Benutzername des verbundenen Clients. Wenn der Wert hier auf $all gesetzt ist, bedeutet dies, dass die Regel für alle Benutzer gilt.
  • clientid: Client-ID des verbindenden Clients
  • Zugriff: Erlaubte Operationen: Abonnieren (1), Veröffentlichen (2), sowohl Abonnieren als auch Veröffentlichen (3)
  • Thema: Das Thema des Steuerelements. Platzhalter können verwendet und dem Thema Platzhalter hinzugefügt werden, um die Clientinformationen abzugleichen. Beispielsweise ersetzt t/%c das Thema beim Abgleichen durch die Client-ID des aktuellen Clients.
%u: Benutzername
%c: Kunden-ID

Beispiel

-- Nicht alle Benutzer können Systemthemen abonnieren. INSERT INTO mqtt_acl (allow, ipaddr, username, clientid, access, topic) VALUES (0, NULL, '$all', NULL, 1, '$SYS/#');

-- Clients unter 10.59.1.100 erlauben, Systemthemen zu abonnieren. INSERT INTO mqtt_acl (allow, ipaddr, username, clientid, access, topic) VALUES (1, '10.59.1.100', NULL, NULL, 1, '$SYS/#');

-- Clients das Abonnieren des Themas /smarthome/+/temperature verbieten INSERT INTO mqtt_acl (allow, ipaddr, username, clientid, access, topic) VALUES (0, NULL, NULL, NULL, 1, '/smarthome/+/temperature');

-- Erlauben Sie dem Client, das Thema /smarthome/${clientid}/temperature zu abonnieren, das seine eigene Client-ID enthält. INSERT INTO mqtt_acl (allow, ipaddr, username, clientid, access, topic) VALUES (1, NULL, NULL, NULL, 1, '/smarthome/%c/temperature');

Dies ist das Ende dieses Artikels über die Verwendung von Docker zum Erstellen eines MQTT-Servers. Weitere Informationen zum Docker MQTT-Server finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Das WeChat-Applet stellt eine Verbindung zum Server her, um MQTT-Dateninformationen anzuzeigen
  • Erfahren Sie, wie Sie einen MQTT-Server unter Windows erstellen

<<:  Eine kurze Diskussion über die Unterschiede und Verbindungen zwischen .html, .htm, .shtml und .shtm

>>:  Probleme mit Sperren in MySQL

Artikel empfehlen

Installations-Tutorial für die ZIP-Archivversion von MySQL 5.7

In diesem Artikel finden Sie das Installations-Tu...

Fassen Sie die häufig verwendeten n-ten-Kind-Selektoren zusammen

Vorwort In der Front-End-Programmierung verwenden...

So installieren Sie Docker auf Raspberry Pi

Da Raspberry Pi auf der ARM-Architektur basiert, ...

MySQL 5.7.18 Installations-Tutorial unter Windows

In diesem Artikel wird erklärt, wie Sie MySQL aus...

SQL-Implementierung von LeetCode (197. Steigende Temperatur)

[LeetCode] 197.Steigende Temperatur Schreiben Sie...

Die wichtigsten Unterschiede zwischen MySQL 4.1/5.0/5.1/5.5/5.6

Einige Befehlsunterschiede zwischen den Versionen...

Detaillierte Installationsanleitung für das Cloud-Server-Pagoda-Panel

Inhaltsverzeichnis 0x01. Installieren Sie das Pag...

Eine benutzerfreundliche Alternative in Linux (Befehl fd)

Der Befehl fd bietet eine einfache und unkomplizi...

Prinzipanalyse des UDP-Verbindungsobjekts und Anwendungsbeispiele

Ich habe zuvor zum Einstieg in UDP ein einfaches ...

4 Prinzipien für sauberes und schönes Webdesign

In diesem Artikel werden diese 4 Prinzipien im Hi...

Gegenseitiger Wertetransfer und Aufruf von Vue-Eltern-Kind-Komponenten

Inhaltsverzeichnis 1. Übergeordnetes Element über...