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

Vue: Detaillierte Erklärung von Speicherlecks

Was ist ein Speicherleck? Ein Speicherleck bedeut...

Erfahren Sie schnell, wie Sie mit der Vuex-Statusverwaltung in Vue3.0 beginnen

Vuex ist ein speziell für Vue.js-Anwendungen entw...

Ideen und Codes zur Implementierung des Wasserfall-Flow-Layouts im UniApp-Applet

1. Einleitung Gilt es als Aufwärmen alter Themen,...

So wählen Sie alle untergeordneten Elemente aus und fügen ihnen in CSS Stile hinzu

Verfahren: Nehmen wir „less“ im tatsächlichen Pro...

Zusammenfassung der Anwendungsbereiche von Kubernetes

Kubernetes ist aufgrund seiner Anwendungsportabil...

Methoden und Schritte zum Upgrade von MySql5.x auf MySql8.x

Mehrere Unterschiede zwischen MySQL 5.x und MySQL...

Versprechenskapselung wx.request-Methode

Im vorherigen Artikel wurde die Implementierungsm...

So installieren Sie FastDFS in Docker

Ziehen Sie das Bild Docker-Pull-Saison/FastDFS:1....

Einführung in das Batch-Cache-Löschskript von nginx proxy_cache

Vorwort: Ich habe zuvor den offiziellen Proxy-Cac...

React+Typescript implementiert die Countdown-Hook-Methode

Zunächst wird setInterval als Hook gekapselt 👇 im...