Dockerを使用してMQTTサーバーを構築するプロセスの詳細な説明

Dockerを使用してMQTTサーバーを構築するプロセスの詳細な説明

1. イメージをプルする

docker pull registry.cn-hangzhou.aliyuncs.com/synbop/emqttd:2.3.6

2. イメージを実行する

  • –名前 名前
  • -p 18083 サーバー起動ポート
  • -p 1882 TCPポート
  • -p 8083 WSポート
  • -p 8084 WSSポート
  • -p 8883 SSLポート
  • -dはコンテナを指定する

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. emqサービスページに入る

ブラウザに機器IP:18083を入力してemqttページに入ります

初期アカウント: admin、パスワード: public

4. emq を設定する (V3.1.0 の場合)

emq ユーザーの権限を設定します。emq は、mongo、redis、pgsql など複数のデータベース認証もサポートしています。興味があれば、自分で調べてみてください。

# コンテナに入ります。/bin/bash を使用して入ることはできません。docker exec -it emq /bin/sh

1. まず、匿名認証をオフにします(デフォルトではオンになっており、誰でもログインできます)

# 設定ファイルを編集する vi /opt/emqttd/etc/emq.conf
# allowAnonymous を True から false に変更
allow_anonymous = 偽

2. ユーザーと権限のMySQLテーブルを作成します。MySQLコンテナをプルするか、UbuntuのMySQLで直接作成することができます。

データベース emq 文字セット utf8 を作成します。

eqm を使用します。

テーブル mqtt_user を作成します ( 
id int(11) 符号なし NOT NULL AUTO_INCREMENT, 
ユーザー名 varchar(100) デフォルト NULL, 
パスワードvarchar(100) デフォルトNULL、 
ソルトvarchar(20) デフォルトNULL、 
is_superuser tinyint(1) デフォルト 0, 
作成日時 DEFAULT NULL、 
主キー (id)、 
ユニークキー mqtt_username (ユーザー名) 
)ENGINE=MyISAM デフォルト文字セット=utf8;

テーブル mqtt_acl を作成します ( 
id int(11) 符号なし NOT NULL AUTO_INCREMENT, 
allow int(1) デフォルト NULL コメント '0: 拒否、1: 許可'、 
ipaddr varchar(60) デフォルト NULL コメント 'IpAddress', 
ユーザー名 varchar(100) デフォルト NULL コメント 'ユーザー名', 
clientid varchar(100) デフォルト NULL コメント 'ClientId', 
アクセス int(2) NOT NULL COMMENT '1: subscribe、2: publish、3: pubsub'、 
topic varchar(100) NOT NULL DEFAULT '' COMMENT 'トピックフィルター', 
主キー (id) 
)ENGINE=InnoDB デフォルト文字セット=utf8;

3. ACLルールの挿入 - ACLルール

ヒント: !!! 以下の例に従って直接設定しないでください。まず ACL ルールを確認し、自分の状況に応じて設定してください。

`mqtt_acl` (`id`, `allow`, `ipaddr`, `username`, `clientid`, `access`, `topic`) の値を挿入します 
(1,1,NULL,'$すべて',NULL,2,'#'),
(2,0,NULL,'$all',NULL,1,'$SYS/#'),
(3,0,NULL,'$all',NULL,1,'等しい#'),
(5,1,'127.0.0.1',NULL,NULL,2,'$SYS/#'),
(6,1,'127.0.0.1',NULL,NULL,2,'#'),
(7,1,NULL,'ダッシュボード',NULL,1,'$SYS/#');

4. ユーザーを挿入します。今後、すべてのサブスクライブおよびパブリッシュクライアントはユーザー検証に合格する必要があります (sha256 値はご自身で変換してください)

# スーパー管理者を設定できます (スーパー管理者は ACL ルールに関係なく、すべてのトピックをサブスクライブしてプッシュする権限を持ちます)
mqtt_user (`username`, `password`) に値 ('admin', '03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4') を挿入します。
mqtt_user を更新し、is_superuser=1 を設定します。ここで、id はスーパー管理者 ID です。

ps: auth.mysql.password_hash (デフォルトは sha256) に注意してください。sha256 の場合は、新しいユーザーを追加するときに暗号化された値を手動で渡す必要があります。プレーンの場合は、暗号化する必要がなく、プレーンテキストで保存されます。

5. emqのmysql設定ファイルを変更する

vi /opt/emqttd/etc/plugins/emq_auth_mysql.conf
auth.mysql.server = yourmysql-IP:3306 
auth.mysql.ユーザー名 = ルート 
auth.mysql.パスワード = xxxxxxxx 
auth.mysql.データベース = emq

6. emqを再起動する

/opt/emqttd/bin/emqx 停止
/opt/emqttd/bin/emqx スタート
/opt/emqttd/bin/emqttd_ctl plugins load emq_auth_mysql #mysql認証プラグインを開く
  • ACL ルール
ルール テーブル フィールドの説明:
  • 許可: 禁止 (0)、許可 (1)
  • ipaddr: IPアドレスを設定する
  • ユーザー名: 接続されたクライアントのユーザー名。ここでの値が $all に設定されている場合、ルールはすべてのユーザーに適用されることを意味します。
  • clientid: 接続クライアントのクライアントID
  • アクセス: 許可される操作: subscribe (1)、publish (2)、subscribe と publish の両方 (3)
  • トピック: コントロールのトピック。ワイルドカードを使用したり、トピックにプレースホルダーを追加してクライアント情報を一致させたりすることができます。たとえば、t/%c は、一致時にトピックを現在のクライアントのクライアント ID に置き換えます。
%u: ユーザー名
%c:クライアントID

-- すべてのユーザーがシステムトピックをサブスクライブすることはできません INSERT INTO mqtt_acl (allow, ipaddr, username, clientid, access, topic) VALUES (0, NULL, '$all', NULL, 1, '$SYS/#');

-- 10.59.1.100 上のクライアントがシステム トピックをサブスクライブできるようにします INSERT INTO mqtt_acl (allow, ipaddr, username, clientid, access, topic) VALUES (1, '10.59.1.100', NULL, NULL, 1, '$SYS/#');

-- クライアントが /smarthome/+/temperature トピックをサブスクライブすることを禁止します INSERT INTO mqtt_acl (allow, ipaddr, username, clientid, access, topic) VALUES (0, NULL, NULL, NULL, 1, '/smarthome/+/temperature');

-- クライアントが独自のクライアント ID を含む /smarthome/${clientid}/temperature トピックをサブスクライブできるようにします INSERT INTO mqtt_acl (allow, ipaddr, username, clientid, access, topic) VALUES (1, NULL, NULL, NULL, 1, '/smarthome/%c/temperature');

Docker を使って MQTT サーバーを構築する方法についてはこれで終わりです。Docker MQTT サーバーの詳細については、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • WeChatアプレットはサーバーに接続してMQTTデータ情報を表示します
  • WindowsでMQTTサーバーを構築する方法を教えます

<<:  .html、.htm、.shtml、.shtm の違いと関連性について簡単に説明します。

>>:  MySQL のロックに関する問題

推薦する

Java を Mysql バージョン 8.0.18 に接続する方法の詳細な説明

JavaとMysql 8.0.18バージョンの接続方法については、参考までに具体的な内容は以下のとお...

Linux lsof コマンドの使用方法の詳細な説明

lsof (開いているファイルのリスト) は、プロセスによって開かれたファイルを表示するツールです。...

Vue + 要素を使用して背景データをオプションに動的に表示する

必要:ハードコードされたデータの代わりに、セレクター内のオプション値の動的な表示を実装します。私のロ...

MySQL のストレージ エンジンの違いと比較

MyISAM ストレージエンジンMyISAM は ISAM ストレージ エンジンに基づいており、それ...

インデックスは MySQL クエリ条件で使用されますか?

雇用主から MySQL クエリ条件でインデックスが使用されるかどうかを尋ねられた場合、どのように答え...

JavaScript デザインパターンの学習 アダプタパターン

目次概要コードの実装要約する概要アダプタ パターンは、デザイン パターンの動作パターンのパターンです...

CSS で高さが不明な垂直中央揃えを実装する

この記事では主に、高さが不明な垂直方向の中央揃えを CSS で実装する方法を紹介し、皆さんと共有しま...

経験豊富な人が、プロフェッショナルで標準化されたMySQL起動スクリプトの開発方法を紹介します。

シェル スクリプト言語は、すべてのプログラミング言語の中で最も単純な言語であるため、資格のある Li...

Docker ベースの Tomcat クラスタと Nginx ロード バランシングの展開の概要

目次前面に書かれた1. Ngixnイメージの作成2. Java Web (Tomcat) アプリケー...

雨滴効果を実現する JavaScript キャンバス

この記事の例では、雨滴効果を実現するためのキャンバスの具体的なコードを参考までに共有しています。具体...

SQLクエリの実行順序をゼロから学ぶ

SQL クエリ ステートメントの実行順序は次のとおりです。 (7)選択 (8) DISTINCT &...

MySQL で重複時間を削除して時間差を計算する実装

目次必要:ドライブ:アイデア:成し遂げる:個人的には、実際の開発ではストアド プロシージャの使用はお...

MySQL シリーズ 14 MySQL 高可用性実装

1. 内閣府マスターノードを監視することで、他のスレーブノードへの自動フェイルオーバーを実現できます...

nohup /dev/null 2>&1 の使い方の詳しい説明

nohup コマンド: プロセスを実行しており、アカウントからログアウトしてもプロセスが終了しないと...

Nginx リバースプロキシの例の詳細な説明

1. リバースプロキシの例1 1. 効果を達成する(1)ブラウザを開き、www.123.comと入力...