物联网学习笔记3:在阿里云上部署EMQ及配置wss连接mqtt

0. 前提条件:

  1. 有阿里云ECS服务器,系统为centOS7.x,并且已经成功创建了实例。
  2. 已经通过安全认证的域名。
  3. 已经在阿里云上搭建了宝塔面板。
    PS相关的视频教程

1. 进入阿里云SSH远程终端

  1. 先进入实例,然后点管理,
    在这里插入图片描述
  2. 修改初始密码:找到基本信息处,选择更多->重置实例密码
    在这里插入图片描述
    3.之后点击远程连接:实例就选你自己的那个,端口22,用户名:root,密码:你自己刚才修改的那个。
    在这里插入图片描述
    不出意外的话就成功连接并进入了。

2. 安装EMQ

以下均在终端中输入:

  1. 安装所需的依赖项
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 建立一个稳定的存储库。
 sudo yum-config-manager --add-repo https://repos.emqx.io/emqx-ce/redhat/centos/7/emqx-ce.repo
  1. 安装EMQX的最新版本
 sudo yum install emqx
  1. 安装好了之后记得重启服务器,很重要,我在这里卡了好久。
  2. 启动EMQ X
  • 直接启动
emqx start
emqx 3.1.0 is started successfully!
emqx_ctl status
Node '[email protected]' is started
emqx v3.1.0 is running
  • 系统启动
sudo systemctl start emqx
  • 服务启动
sudo service emqx start
  1. 修改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所需端口加入白名单

  1. 进入进入你自己的阿里云服务器,找到网络与安全->安全组
    在这里插入图片描述
    选择配置规则
    在这里插入图片描述
    选择添加安全组规则
    在这里插入图片描述
    规则方向:入方向
    端口范围:18083
    授权对象:0.0.0.0/0
    描述自己添加,便于区分。

在这里插入图片描述
按同样的方式将8083也加入入方向的安全组,如下图:
在这里插入图片描述
2. 接下来配置宝塔面板的安全组
选择安全依次填入端口号,备注,然后放行。
在这里插入图片描述
端口的放行到这里就OK了。

4.进入EMQ面板

1 .在浏览器网址栏输入:你的域名或IP:18083,如:www.domain.com:18083,成功进入后会弹出登录面板,初始用户名为:admin,初始密码:public,如果没有登录进去,请注意是否输错或没有将18083加入安全组。
在这里插入图片描述
成功进入后的界面:
在这里插入图片描述

5. 测试mqtt能否成功订阅

  1. 打开工具:http://tools.emqx.io/ 点击new connection
  2. 按图填入名字和域名,在这里插入图片描述
  3. 连接成功后,按下图操作:
    在这里插入图片描述
  4. 之后我们转到emq面板,可以看到主题这个地方有个testtopic,与上面对应,
    在这里插入图片描述
  5. 然后我们转到Websocket,按下图也创建一个连接,
    在这里插入图片描述
  6. 然后我们订阅texttopic这个主题,
    在这里插入图片描述
  7. 订阅之后就可以互相发送消息了,在这里插入图片描述
  8. 另一边收到
    在这里插入图片描述
    到这里就算是基本搭建好了。

6.注意:

  1. 安装emq之后重启服务器。
  2. 将18083和8083加入安全组(服务器和宝塔)。

7. 配置Websocket通过wss连接

在上面的步骤中,我们虽然可以连接到mqtt,但是无法通过wss安全连接。接下来配置如何安全连接。

  1. 前提:有有域名的SSL安全证书及密匙。
  2. 配置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官方文档

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章