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 のロックに関する問題

推薦する

Linux での Centos7 ファイアウォールの基本的な使用方法の詳細な説明

1. ファイアウォールの基本的な使い方起動する: systemctl は、firewalld を起動...

Vueはページdivボックスのドラッグアンドドロップソート機能を実装します

vue は、ページ上の div ボックスのドラッグ アンド ドロップ ソート機能を実装します。 序文...

MySQL 8.0.24 バージョンのインストールと設定方法のグラフィックチュートリアル

この記事ではMySQL 8.0.24バージョンのインストールと設定方法を記録し、皆さんと共有しますM...

MySQLインデックスマージの使い方

インデックスのマージは、MySQL が最下層で提供するインテリジェントなアルゴリズムです。インデック...

border-radius 値の設定に関する質問

問題記録今日はプログレスバーに似た小さなコンポーネントを完成させるつもりでした。プロトタイプは次のよ...

Linux は、ディレクトリが存在するかどうかを判断するために if を使用します。

Linux で if を使用してディレクトリが存在するかどうかを判断する方法方法は次のとおりです。...

SQL文におけるGROUP BYとHAVINGの使用に関する簡単な説明

GROUP BY 句と HAVING 句を紹介する前に、まず SQL 言語の特殊な関数である集計関数...

IE6 スペースバグ修正方法

コードを見てみましょう:コードをコピーコードは次のとおりです。 < !DOCTYPE html...

Nginx で HTTPS 証明書を構成する詳細なプロセス

1. HttpとHttpsの違いHTTP: インターネットで最も広く使用されているネットワーク プロ...

Gitlab-ci を使用してリモート マシンに継続的にデプロイする方法 (詳細なチュートリアル)

簡単に言うと、今日は Gitlab-CI を使用してリモート サーバーに自動的にデプロイする方法につ...

CentOS 7.3 で Nginx 仮想ホストを設定する方法

実験環境最小限にインストールされた CentOS 7.3 仮想マシン基本環境を構成する1. ngin...

js を使用して過去 1 週間、1 か月、3 か月の時間を取得する簡単な例

目次過去1週間の時間を取得する過去1か月の時間を取得する過去3か月分を取得新しい Date() と ...

MySQL カーディナリティ統計の簡単な分析

1. カーディナリティとは何ですか?カーディナリティとは、MySQL テーブルの列内の異なる値の数を...

Navicatをサーバー上のdockerデータベースに接続する方法

dokekrでmysqlコンテナを起動するコマンドを使用します: docker run -p 330...

ブラウザ(IEシリーズ)を判別するための条件付きコメント

<!--[if IE 6]> IE6 のみが認識可能 <![endif]-->...