环境及所用工具
win10本地环境下,使用docker配置一个mqttbroker,选择emqx
docker操作:Docker_liangchaaaaa的博客-CSDN博客
测试使用MQTTX软件
Docker拉取镜像仓库
docker pull emqx/emqx:4.2.5
可以上官网看最新版本,或直接拉取latest版本
端口映射
docker run -d --name emqx -p 18083:18083 -p 1883:1883 emqx/emqx:4.2.5
docker run
: 这个命令用于在 Docker 中运行一个容器。-d
: 这个选项表示以“后台模式”运行容器,即在后台运行而无需占用你的终端。--name emqx
: 这个选项指定容器的名称为 "emqx"。-p 18083:18083
: 这个选项将主机的 18083 端口映射到容器内部的 18083 端口。这样可以通过主机的 18083 端口访问容器中运行的 EMQ X 控制台。-p 1883:1883
: 这个选项将主机的 1883 端口映射到容器内部的 1883 端口。这样可以通过主机的 1883 端口使用 MQTT 协议与 EMQ X 进行通信。emqx/emqx:4.2.5
: 这是要运行的 EMQ X 镜像的名称和版本。具体来说,这里使用的是 EMQ X 4.2.5 版本的镜像
开放端口
如果仅仅是在本地localhost则不用进行此操作
Windows Powershell
New-NetFirewallRule -DisplayName "Allow Port 18083" -Direction Inbound -Protocol TCP -LocalPort 18083 -Action Allow
New-NetFirewallRule -DisplayName "Allow Port 1883" -Direction Inbound -Protocol TCP -LocalPort 1883 -Action Allow
Restart-Service -Name "MpsSvc"
Linux
firewall-cmd --zone=public --add-port=18083/tcp --permanent
firewall-cmd --zone=public --add-port=1883/tcp --permanent
firewall-cmd --reload
开放端口访问地址:http://ip:port
ip在cmd里用ifconfig查
port默认为1883
用Dashboard进行管理
输入网址:localhost:18083
默认账号:admin
默认密码:public
修改配置文件进行认证鉴权
这一步就是让其他设备有权限接入服务器
docker exec -it emqx bash
cd /opt/emqx/etc/plugins
vi emqx_auth_username.conf
# windows系统要保证已经装了vim or vi
修改配置文件
bash-5.0$ cat emqx_auth_username.conf
##--------------------------------------------------------------------
## Username Authentication Plugin
##--------------------------------------------------------------------
## Examples:
##auth.user.1.username = admin
##auth.user.1.password = public
##auth.user.2.username = feng@emqtt.io
##auth.user.2.password = public
##auth.user.3.username = name~!@#$%^&*()_+
##auth.user.3.password = pwsswd~!@#$%^&*()_+
auth.user.1.username = demo01
auth.user.1.password = demo01
auth.user.2.username = demo02
auth.user.2.password = demo02
auth.user.3.username = demo03
auth.user.3.password = demo03
auth.user.4.username = demo04
auth.user.4.password = demo04
## Password hash.
##
## Value: plain | md5 | sha | sha256
重启容器
docker restart emqx
MQTTX测试
本地
外部设备
Host里面换成自己的IP地址
如果不是默认端口映射,Port也改成自己映射的端口
通信测试
外部设备订阅主题topic01
在本地设备的主题topic01发送一条消息
外部设备收到了消息,测试完成