题记:网上找了很多文章,都没能怎么说明白如何对mqtt连接通信做认证,也就是tcp方式的时候,携带user、password,很苦恼,最后找了一大圈,说emqx的4.4.9版本的Dashboard有插件,果然顺藤摸瓜就解决了,在此记录一下(os:也许本人愚钝,其他认证方式搞不定)
一、拉取emqx 4.4.9镜像
docker pull emqx/emqx:4.4.9
二、创建本地与emqx的挂载文件
1、先运行容器
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:4.4.9
如果考虑到容器与本地服务器时间一致,上一步可添加:-v /etc/localtime:/etc/localtime
2、开始cp挂载
i、将对应的问价copy到我们前面建立的目录中,copy完成之后,就会发现我们的目录有数据了,这都是默认的基础配置,后面就可以用它们来挂载
docker cp emqx:/opt/emqx/etc /home/sd_omp/emqx
docker cp emqx:/opt/emqx/lib /home/sd_omp/emqx
docker cp emqx:/opt/emqx/data /home/sd_omp/emqx
docker cp emqx:/opt/emqx/log /home/sd_omp/emqx
ii、修改目录权限
chown -R 1000:1000 /home/sd_omp/emqx/
三、停止并删除原镜像,创建完整emqx镜像
docker stop emqx && docker rm emqx
docker run -d --name emqx --restart=always \
-p 1883:1883 \
-p 8883:8883 \
-p 8083:8083 \
-p 8084:8084 \
-p 18083:18083 \
-v /home/sd_omp/emqx/etc:/opt/emqx/etc \
emqx/emqx:4.4.9
(这里注意下,我只用了etc挂载,其他挂的时候报了小问题,没去细究;有兴趣的都加上挂载,也许我配错了)
此时,服务器ip+18083端口访问,即可看到emqx桌面,默认登录名:admin,密码:public
三、客户端访问,修改服务器的认证方式,使得客户端需要填写用户名密码进行通信
1、emqx默认情况下是不开启认证的,所以用户名密码默认空字符串也能连接emqx服务器,但对生产上线项目不友好,也不够安全,此时就需要更改通信配置,即需要通信认证
2、这里我用的4.4.9版本,查阅官网文档:Mnesia 认证 | EMQX 4.4 文档,可看到:Mnesia 认证,我使用的就是这个。
i、首先通过桌面,将插件菜单栏下的emqx_auth_mnesia改为运行
ii、增加对应用户,预设认证数据(就是修改对应的配置文件,手动添加用户和密码)
打开本地挂载的etc/plugins/emqx_auth_mnesia.conf
vim /home/sd_omp/emqx/etc/plugins/emqx_auth_mnesia.conf
然后追加自己预设的用户名、密码
至于为啥有clientId和userName,两种,我建议是两个都配置,并且保持一致,当然你也可以只配置userName
的方式也行,我已经测试过了。
iii、重启emqx
docker restart emqx