物聯網學習筆記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官方文檔

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