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

Verzeichnisberechtigungen beim Erstellen eines Containers mit Docker

Als ich gestern ein Projekt schrieb, musste ich d...

Zusammenfassung der Grundsätze zum Schreiben von HTML-Seiten für E-Mails

Da HTML-E-Mail keine unabhängige HOST-Seite auf di...

Eine kurze Erläuterung der Situationen in MySQL, die zu Indexfehlern führen

Hier einige Tipps von Ausbildungsstätten und mein...

So gehen Sie mit Zeitzonenproblemen in Docker um

Hintergrund Als ich in diesen beiden Tagen Docker...

Erfahren Sie, wie Sie mit Webpack TypeScript-Code verpacken und kompilieren

TypeScript-Bündelung Webpack-Integration Normaler...

Einführung in Kubernetes (k8s)

Ich wollte schon immer Kubernetes lernen, weil es...

Die vernachlässigten Spezialeffekte von META-Tags (Seitenübergangseffekte)

Durch die Verwendung von JS im Webdesign können vi...

HTML Gewichtsverlust Optimieren Sie HTML-Tags zum Erstellen von Webseiten

HTML 4 HTML (nicht XHTML), MIME-Typ ist text/html...

Detaillierte Erläuterung des MySQL Workbench-Nutzungs-Tutorials

Inhaltsverzeichnis (I) Verwenden von Workbench zu...

Detaillierte Erklärung des JS-Browser-Ereignismodells

Inhaltsverzeichnis Was ist ein Ereignis Ein einfa...

Bestimmen Sie die Richtung der Mauseingabe basierend auf CSS

In einer Front-End-Technologiegruppe sagte ein Gr...

WeChat-Miniprogramme implementieren Sternebewertung

In diesem Artikel wird der spezifische Code für d...