0. 前提条件:
- 有阿里云ECS服务器,系统为centOS7.x,并且已经成功创建了实例。
- 已经通过安全认证的域名。
- 已经在阿里云上搭建了宝塔面板。
PS:相关的视频教程
1. 进入阿里云SSH远程终端
- 先进入实例,然后点管理,
- 修改初始密码:找到基本信息处,选择
更多->重置实例密码
3.之后点击远程连接:实例就选你自己的那个,端口22
,用户名:root
,密码:你自己刚才修改的那个。
不出意外的话就成功连接并进入了。
2. 安装EMQ
以下均在终端中输入:
- 安装所需的依赖项
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
- 建立一个稳定的存储库。
sudo yum-config-manager --add-repo https://repos.emqx.io/emqx-ce/redhat/centos/7/emqx-ce.repo
- 安装EMQX的最新版本
sudo yum install emqx
- 安装好了之后记得重启服务器,很重要,我在这里卡了好久。
- 启动EMQ X
- 直接启动
emqx start
emqx 3.1.0 is started successfully!
emqx_ctl status
Node 'emqx@127.0.0.1' is started
emqx v3.1.0 is running
- 系统启动
sudo systemctl start emqx
- 服务启动
sudo service emqx start
- 修改nginx的配置文件!添加如下代码!其中www.domain.com是您的备案后域名 ,添加位置如图
location = /mqtt {
# 8083就是我们的emq的websocket的端口号
proxy_pass http://www.domain.com:8083;
proxy_redirect off;
proxy_set_header Host www.domain.com:8083;
proxy_set_header Sec-WebSocket-Protocol mqtt;
# 这些都是 websocket必须要配置的
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
然后保存成功就没问题了。
3. 将 EMQ所需端口加入白名单
- 进入进入你自己的阿里云服务器,找到
网络与安全->安全组
,
选择配置规则
,
选择添加安全组规则
,
规则方向:入方向
端口范围:18083
授权对象:0.0.0.0/0
描述自己添加,便于区分。
按同样的方式将8083
也加入入方向
的安全组,如下图:
2. 接下来配置宝塔面板的安全组
选择安全
依次填入端口号,备注,然后放行。
端口的放行到这里就OK了。
4.进入EMQ面板
1 .在浏览器网址栏输入:你的域名或IP:18083
,如:www.domain.com:18083
,成功进入后会弹出登录面板,初始用户名为:admin
,初始密码:public
,如果没有登录进去,请注意是否输错或没有将18083加入安全组。
成功进入后的界面:
5. 测试mqtt能否成功订阅
- 打开工具:http://tools.emqx.io/ 点击
new connection
- 按图填入名字和域名,
- 连接成功后,按下图操作:
- 之后我们转到emq面板,可以看到
主题
这个地方有个testtopic,与上面对应,
- 然后我们转到Websocket,按下图也创建一个连接,
- 然后我们订阅texttopic这个主题,
- 订阅之后就可以互相发送消息了,
- 另一边收到
到这里就算是基本搭建好了。
6.注意:
- 安装emq之后重启服务器。
- 将18083和8083加入安全组(服务器和宝塔)。
7. 配置Websocket通过wss连接
在上面的步骤中,我们虽然可以连接到mqtt,但是无法通过wss安全连接。接下来配置如何安全连接。
- 前提:有有域名的SSL安全证书及密匙。
- 配置nginx,参考配置如下:
server {
listen 80; # ws 绑定到 80 端口 用于代码const client = mqtt.connect('ws://www.xxxx.com/mqtt', options)
listen 443 ssl; # wss 绑定到 443 端口 用于代码const client = mqtt.connect('wss://www.xxxx.com/mqtt', options)
server_name www.xxxx.com;
ssl on;
ssl_certificate ssl/wuxiaolong.com.cer; #证书和密匙的路径
ssl_certificate_key ssl/wuxiaolong.com.key;
location /mqtt {
proxy_redirect off;
proxy_pass http://www.xxxx.com:8083; # 反向代理到 EMQ 非加密 WebSocket ws
proxy_set_header X-Real_IP $remote_addr; # 反向代理保留客户端地址
proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
# WebSocket 额外请求头
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
}
}
保存,重新载入,重启,就可以访问了,要注意,端口是443
.
6. 参考:
【1】【微信小程序控制硬件①】 全网首发,借助 emq 消息服务器带你如何搭建微信小程序的mqtt服务器,轻松控制智能硬件! 为CSDN博主「半颗心脏」的原创文章
【2】EMQ踩坑之路-搭建/测试/nginx配置websocket的ws及wss/web页面测试连通性、微信小程序使用wss–MQTT推送
为CSDN博主「wuxiaolongah」的原创文章
【3】EMQ官方文档