Docker中部署EMQX

一、前提工作

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在 Docker 部署 EMQ X 集群,可以使用 `docker run` 命令和 `emqx` 镜像。以下是一个简单的示例,演示如何使用 `docker run` 命令在单个节点上运行 EMQ X: ``` docker run -d --name emqx \ -p 1883:1883 -p 8083:8083 -p 8883:8883 \ -e EMQX_LISTENER__TCP__EXTERNAL=0.0.0.0:1883 \ -e EMQX_LOADED_PLUGINS="emqx_recon,emqx_retainer,emqx_management" \ emqx/emqx:latest ``` 上面的命令会在后台运行一个名为 `emqx` 的容器,并将 EMQ X 的 MQTT、WebSocket 和 MQTT over TLS 端口映射到主机的对应端口。我们还使用 `-e` 参数来定义一些环境变量,例如监听地址、加载的插件等。 要在 Docker 部署 EMQ X 集群,需要使用多个 `docker run` 命令,并在每个容器配置不同的节点名称、集群名称和节点地址等。以下是一个简单的示例,演示如何使用 `docker run` 命令在两个节点上运行 EMQ X 集群: ``` # 启动第一个节点 docker run -d --name emqx1 \ -p 1883:1883 -p 8083:8083 -p 8883:8883 \ -e EMQX_LISTENER__TCP__EXTERNAL=0.0.0.0:1883 \ -e EMQX_LOADED_PLUGINS="emqx_recon,emqx_retainer,emqx_management" \ -e EMQX_CLUSTER__DISCOVERY="static" \ -e EMQX_CLUSTER__STATIC__SEEDS="emqx2@172.17.0.3" \ -e EMQX_NODE__NAME="emqx1" \ -e EMQX_NODE__MACHINE="emqx1" \ emqx/emqx:latest # 启动第二个节点 docker run -d --name emqx2 \ -p 1884:1883 -p 8084:8083 -p 8884:8883 \ -e EMQX_LISTENER__TCP__EXTERNAL=0.0.0.0:1883 \ -e EMQX_LOADED_PLUGINS="emqx_recon,emqx_retainer,emqx_management" \ -e EMQX_CLUSTER__DISCOVERY="static" \ -e EMQX_CLUSTER__STATIC__SEEDS="emqx1@172.17.0.2" \ -e EMQX_NODE__NAME="emqx2" \ -e EMQX_NODE__MACHINE="emqx2" \ emqx/emqx:latest ``` 上面的命令会在两个容器分别启动 EMQ X 节点,并将两个节点加入到同一个集群。我们在每个容器使用不同的节点名称、集群名称和节点地址等参数,以确保 EMQ X 能够正确地运行和通信。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值