CentOS上搭建EMQ MQTT服务器
自己入门折腾了ARM嵌入式近2个月了,现在可以试试搭建云服务器,让设备接入网络,之后就可以做我擅长的Java后台了,正好这几天学了一下ESP8266集成模组,可以进行快速Wi-Fi接入网络,非常适合此场景。
我选择的版本分别是:Centos7.5_x64 、EMQX_v3.0.0 、NGINX_1.15.8
1.安装EMQ
EMQ是什么?官网了解
基于高并发的Erlang/OTP语言平台设计,支持百万级连接和分布式集群,发布订阅模式的开源MQTT消息服务器
完整支持MQTT V3.1/V3.1.1协议规范,扩展支持WebSocket、Stomp、CoAP、MQTT-SN或私有TCP协议

EMQ下载页面:http://emqtt.com/downloads
所选版本:emqx-centos7-v3.0.0.x86_64.rpm
wget http://emqtt.com/downloads/3010/centos7-rpm -O emqx-centos7-v3.0.0.x86_64.rpm
sudo rpm -ivh emqx-centos7-v3.0.0.x86_64.rpm
vi /etc/emqx/emqx.conf
node.name = emqx@0.0.0.0
zone.external.max_mqueue_len = 0
zone.external.session_expiry_interval = 12h
zone.external.max_inflight = 128
zone.external.await_rel_timeout = 600s
systemctl start emqx.service
vi /etc/emqx/plugins/emqx_auth_username.conf
auth.user.1.username = xxxx
auth.user.1.password = xxxxxxxxx
安装完启动就可以打开浏览器:http://localhost:18083/
默认用户名:admin 密码:public (如果有修改,请自行输入修改后的)
启动错误日志将输出在 log/ 目录。
EMQ X 消息服务器提供了状态监控URL:http://localhost:8080/status
EMQ X 插件配置文件: /etc/emqx/plugins/*.conf 。
数据文件目录:/var/lib/emqx/
启动停止:systemctl start|stop|restart emqx.service
EMQ X R3.0 消息服务器默认占用的 TCP 端口包括:
端口 |
用途 |
1883 |
MQTT 协议端口 |
8883 |
MQTT/SSL 端口 |
8083 |
MQTT/WebSocket 端口 |
8080 |
HTTP API 端口 |
18083 |
Dashboard 管理控制台端口 |
EMQ X R3.0 占用的上述端口,可通过 etc/emqx.conf 配置文件的 listener 段落设置。
通过注释或删除相关段落,可禁用相关 TCP 服务启动。
效果如下:

2.安装NGINX
注意:这里安装NGINX是为了添加ssl和反向代理,毕竟我还有Java后台也要部署到一起。
NGINX源码下载页面:http://nginx.org/download/
这里选择的是:nginx-1.15.8.tar.gz
yum install -y gcc gcc-c++ make kernel-headers glibc-headers zlib-devel openssl openssl-devel pcre-devel
wget -O nginx.tar.gz http://nginx.org/download/nginx-1.15.8.tar.gz
tar -zxvf nginx.tar.gz
cd nginx-*
wget https://codeload.github.com/openresty/headers-more-nginx-module/zip/master -O headers-more-nginx-module-master.zip
unzip headers-more-nginx-module-master.zip
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --add-module=headers-more-nginx-module-master
make && make install
sbin/nginx -v
vi /usr/local/nginx/conf/nginx.conf
然后配置NGINX。
server {
listen 80;
server_name appcalc.kioye.cn;
rewrite ^(.*)$ https://$server_name$1 permanent;
}
server {
listen 443 ssl;
server_name appcalc.kioye.cn;
charset utf-8;#默认编码
ssl_certificate /data/release/appcalc.kioye.cn/Nginx/1_appcalc.kioye.cn_bundle.crt;
ssl_certificate_key /data/release/appcalc.kioye.cn/Nginx/2_appcalc.kioye.cn.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
#映射/mqtt目录的443端口到8083端口
location = /mqtt {
# 8083就是我们的emq的websocket的端口号
proxy_pass http://localhost:8083;
proxy_redirect off;
proxy_set_header Host appcalc.kioye.cn:8083;
proxy_set_header Sec-WebSocket-Protocol mqtt;
# 这个是与你的 js客户端的库有关系,本博文的不需要,为了兼顾以后小伙伴,我这里注释了下!
#more_clear_headers Sec-WebSocket-Protocol;
# 这些都是 websocket必须要配置的
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
附录
Chrome浏览器插件:mqttlens工具
地址:https://chrome.google.com/webstore/detail/mqttlens/hemojaaeigabkbcookmlgmdigohjobjm?hl=zh-CN

|