MQTT 系列(三)使用EMQ搭建自己的MQTT服务
EMQ X Broker
EMQ X Broker 是 EMQ 系列产品的开源物联网 MQTT 消息件(MQTT Broker),基于高并发的 Erlang/OTP 语言开发,支持百万级连接和分布式集群架构,支持多平台使用。我们将消息发送到服务器时,MQTT Broker 帮助我们对消息进行鉴权、过滤、存储等操作,并能根据数据反馈相关消息给终端设备。
![MQTT Broker 图](MQTT(三)/MQTT Broker 图.png)
Ubuntu 下安装演示
安装过程完全参考官方文档,为保证安装成功请查看最新的 官方文档 进行安装,这里只做演示,建议 [跳过安装教程](#EMQ X Dashboard) 。
演示环境如下
WSL Ubuntu 20.04.2 LTS
安装依赖包
1 | sudo apt update && sudo apt install -y \ |
由于我安装过了,这里提示已是最新版本
添加 EMQ GPG 秘钥
1 | curl -fsSL https://repos.emqx.io/gpg.pub | sudo apt-key add - |
验证秘钥,与官方一致即可
1 | sudo apt-key fingerprint 3E640D53 |
1 | pub rsa2048 2019-04-10 [SC] |
更新索引并安装 EMQX
1 | sudo apt update && sudo apt install emqx |
启动 EMQX,多种方式
1 | sudo emqx start |
1 | sudo emqx_ctl status |
1 | sudo systemctl start emqx |
1 | sudo service emqx start |
停止 EMQX
1 | sudo emqx stop |
卸载 EMQX
1 | sudo apt remove emqx |
Windows EMQX使用
Windwos 下解压可直接运行,根目录下
启动 EMQX
1 | .\bin\emqx start |
停止 EMQX
1 | .\bin\emqx stop |
Dashboard 常用设置
通过 Dashboard 可以方便地查看与管理服务器
Dashboard 默认访问地址:http://localhost:18083
默认账号:admin
默认密码:public
进入 Dashboard 后主页面会显示系统的信息,EMQX版本,节点连接状态等,到此 EMQX 服务已经搭建完毕。
修改样式和语言,导航栏
选择 设置/Setting
修改 Dashboard 账号密码,导航栏
-> 通用
-> 用户
点击编辑可修改 admin
账号密码,此账号不能删除
新创建的用户可编辑其他用户,可删除除admin与本账号以外的账号
查看 EMQX 服务使用的端口,导航栏 -> 通用 -> 监听器
端口 | 说明 |
---|---|
18083 | Dashboard 端口 |
1883 | MQTT/TCP 协议端口 |
11883 | MQTT/TCP 协议内部端口,仅用于本机客户端连接 |
8883 | MQTT/SSL 协议端口 |
8083 | MQTT/WS 协议端口 |
8084 | MQTT/WSS 协议端口 |
在服务器搭建使用时记得开放对应端口
通过配置文件修改账号密码以及访问端口号:
Dshboard 配置文件 sudo vim /etc/emqx/plugins/emqx_dashboard.conf
修改 EMQX 监听端口
打开 EMQX 配置文件 sudo vim /etc/emqx/emqx.conf
如修改 MQTT/TCP 协议默认的 1883 端口为 1884
按下
/
搜索字符,可快速定位到相关字符,回车后按n
匹配下一个,N
匹配上一下找到后按下
i
进入编辑模式((回车退出搜索情况下)修改为 1884 后
ESC
退出编辑模式,:wq
退出并保存重启 EMQX,
sudo emqx restart
Dshboard 配置文件
sudo vim /etc/emqx/plugins/emqx_dashboard.conf
,修改端口号同理。
EMQX MQTT用户验证
EMQX 默认是允许匿名接入的,这种环境下容易导致服务器被攻击,被恶意占用资源。建议使用一种身份验证去过滤。EMQX 提供了多种的认证方式,数据库、HTTP、JWT 等等。
这里介绍最最轻量的认证方式——Mnesia 认证。在 EMQX 4.3.0 版本(2021-05-06)开始 emqx_auth_clientid
与 emqx_auth_usernmae
合并为 emqx_auth_mnesia
。
关闭匿名认证
sudo vim /etc/emqx/emqx.conf
找到 allow_anonymous = true
修改为 false
重启 EMQX sudo emqx restart
重启完毕后使用客户端连接测试,我使用的是 Dashboard 内的 Websocket 连接工具,提示没有授权,连接失败
开启 mnesia
dashboard 下开启:插件
-> emqx_auth_mnesia
-> 启动
配置文件开启:sudo vim /var/lib/emqx/loaded_plugins ,按照已有项格式添加,重启一下 EMQX 生效。
添加账号
sudo vim /etc/emqx/plugins/emqx_auth_mnesia.conf
初始文件里面有一些 Examples ,根据格式填写
另外 EMQX 有认证链机制,即允许多种认证方式存在,认证顺序根据认证开启顺序进行(最后一步为匿名认证,所以务必关闭允许匿名连接)。在传输层上,支持 TLS 认证,TLS 可以保证使用客户端证书的客户端到服务器的身份验证,并确保服务器向客户端验证服务器证书,也支持基于 PSK 的 TLS/DTLS 认证。配置详情请参考官方文档:点击这里