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 '[email protected]' 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官方文檔