您现在的位置是:首页 >技术杂谈 >docker创建emqx容器,emqx版本4.4.9网站首页技术杂谈

docker创建emqx容器,emqx版本4.4.9

Gofery 2024-06-22 00:01:02
简介docker创建emqx容器,emqx版本4.4.9

题记:网上找了很多文章,都没能怎么说明白如何对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

        iv、误区:这里的认证和桌面登录的用户名是区分开的,我这里都认证也设置为admin,但密码和登录密码有区别,客户端通信时,用的是认证里的密码,这点区分开;你也可以设置其他的用户名和登录名区分开

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。