CentOS上搭建EMQ MQTT服务器

CentOS上搭建EMQ MQTT服务器

自己入门折腾了ARM嵌入式近2个月了,现在可以试试搭建云服务器,让设备接入网络,之后就可以做我擅长的Java后台了,正好这几天学了一下ESP8266集成模组,可以进行快速Wi-Fi接入网络,非常适合此场景。
我选择的版本分别是:Centos7.5_x64EMQX_v3.0.0NGINX_1.15.8

1.安装EMQ

EMQ是什么?官网了解

基于高并发的Erlang/OTP语言平台设计,支持百万级连接和分布式集群,发布订阅模式的开源MQTT消息服务器

完整支持MQTT V3.1/V3.1.1协议规范,扩展支持WebSocket、Stomp、CoAP、MQTT-SN或私有TCP协议

CentOS上搭建EMQ MQTT服务器_第1张图片

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 = [email protected]
#消费队列长度,如果队列满了, 消息会被丢弃. 0是无上限
zone.external.max_mqueue_len = 0
#session持久化时间,增大至12小时
zone.external.session_expiry_interval = 12h
#增加飞行窗口大小,主要作用于Qos 1,2 的消息,存储发送但还没有给回执的消息的队列大小
zone.external.max_inflight = 128
#客户端等待服务端对于Qos2消息发送消息释放的等待时间,超过时间消息会被drop掉。
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 服务启动。

效果如下:
CentOS上搭建EMQ MQTT服务器_第2张图片

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
# 下载安装Nginx
wget -O nginx.tar.gz http://nginx.org/download/nginx-1.15.8.tar.gz
tar -zxvf nginx.tar.gz
#进入目录
cd nginx-*
# 添加 header协议头增强库
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

CentOS上搭建EMQ MQTT服务器_第3张图片

你可能感兴趣的:(ARM嵌入式)