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

Hilfe zum Webdesign: Datenreferenz für Web-Schriftgrößen

<br />Der Inhalt wurde aus dem Internet repr...

Vue implementiert Karussell-Animation

In diesem Artikelbeispiel wird der spezifische Co...

Zusammenfassung der Merkmale des SQL-Modus in MySQL

Vorwort Der SQL-Modus wirkt sich auf die von MySQ...

PHP geplante Backup MySQL und mysqldump Syntax-Parameter detailliert

Lassen Sie uns zunächst einige gängige Anwendungs...

Proxy_pass-Methode in mehreren if in Nginx-Standorten

1. Lassen Sie uns zunächst das relevante Wissen z...

Eine kurze Analyse der vier Importmethoden und Prioritäten in CSS

Erstens: 4 Möglichkeiten, CSS einzuführen Es gibt...

MySQL query_cache_type-Parameter und Verwendungsdetails

Der Zweck der Einrichtung eines MySQL-Abfragecach...

Detaillierte Erklärung des Linx awk-Einführungstutorials

Awk ist eine Anwendung zur Verarbeitung von Textd...

Kurze Einführung und Verwendung von Table und div

Web-Frontend 1 Studierendenausweis Name Geschlech...

Kopieren von JS-Objekten (Deep Copy und Shallow Copy)

Inhaltsverzeichnis 1. Oberflächliche Kopie 1. Obj...

2017 neueste Version der Windows-Installation MySQL-Tutorial

1. Laden Sie zunächst die neueste Version von MyS...