一、前提工作
xshell或lunix
二、安装
获取emqx的镜像(两种方式)
先拉取镜像
$ docker pull emqx/emqx:v4.0.0
直接启动docker容器(docker自动拉取镜像)
$ docker run -d --name emqx -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:v4.0.0
三、设置EMQX的认证方式
EMQX提供多种认证方式,如文件、MYSQL、Postgres等,下面使用MongoDb认证。
在使用其认证之前首先需要关闭EMQX的默认匿名认证。
修改“<EMQX安装目录>/emqx/etc/emqx.conf”,修改参数为:
allow_anonymous = false
修改参数后重启EMQX:(或exit退出后使用:docker restart emqx)
<EMQ X 安装目录>/emqx/bin/emqx restart
MongoDb认证:
MongoDb认证插件将设备的username/password存储在MongoDb的某个Collection中,当设备发起请求时,Broker再查找这个Collection,如果username/password能匹配上,则允许登录,否则拒绝链接。
在此过程之前需要进行一些配置项的修改,参考如下:
进入EMQ X 安装目录:
$ docker exec -it emqx/etc/plugins
$ vi emqx_auth_mongo.conf
修改时按i进行编辑 编辑后点击Esc退出编辑模式,保存并退出使用Ctrl+: wq! 、不保存退出使用Ctrl+q!
- MongoDB地址:
auth.mongo.server=127.0.0.1:27017 (这里ip根据情况而定,如果使用其他的mongoDB的话选择自己所用的地址)
- 用于认证的数据库:auth.mongo.database=mqtt,存储设备username和password的数据库,这里暂时使用默认值。(这里我使用的是自己制定的数据库)
- 用于认证的Collection:auth.mongo.auth_query.collection=mqtt_user,存储设备username和password的Collection,这里暂时使用默认值。(这里我使用的是设备Device)
- password字段名:auth.mongo.auth_query.password_field=password。
我这里设置的是:auth.mongo.auth_query.password_field=deviceSecret
- password加密方式:auth.mongo.auth_query.password_hash=plain,password字段的加密方式,这里选择不加密。
- 是否打开超级用户查询:auth.mongo.super_query=off,设置为关闭。
- 是否打开权限查询:auth.mongo.acl_query=off,这里暂时不打开Publish和Subscribe的权限控制。
最后在配置参数修改完成之后尽量重启下docker和emqx,同时想mongDB中添加一条记录,校验MongoDB认证是否成功。
这里可以使用MQTTX进行测试:
Name(自定义)、ClientID(随机生成) |
Host: 这里填写EMQX所部署的主机的ip(我这里emqx部署在阿里云) |
Username: 这里的用户名是在emqx_auth_mongo.conf文件中自己定义的。(如:auth.mongo.auth_query.selector = brokerUserName=%u, join=allow) |
Password: 这里的登录密码同在emqx_auth_mongo.conf文件中自己定义。 (如:auth.mongo.auth_query.password_field=deviceSecret) |