在CentOS7 上安装mosquitto1.4.1服务器,实现MQTT信息推送功能并增加websocket功能。

过程如下:

1、安装各种需要的编译工具
#yum install gcc gcc-c++
2、安装mosquitto编译时需要的依赖库(注意:使用devel版开发库)
#yum install openssl-devel
#yum install c-ares-devel
#yum install libuuid-devel
3、为mosquitto增加websocket支持,需要安装websocket库文件,过程如下:
#yum install wget
#yum install cmake
#wget http://git.warmcat.com/cgi-bin/cgit/libwebsockets/snapshot/libwebsockets-1.4-chrome43-firefox-36.tar.gz
#tar -zxvf libwebsockets-1.4-chrome43-firefox-36.tar.gz
#cd libwebsockets-1.4-chrome43-firefox-36.tar.gz
#mkdir build
#cd build
$ cmake .. 
#make
#make install
4、提取mosquitto1.4的源码
#wget http://mosquitto.org/files/source/mosquitto-1.4.1.tar.gz
#tar -zxvf mosquitto-1.4.1.tar.gz
#cd mosquitto-1.4.1
修改config.mk文件以使后面编译的mosquitto文件支持websocket。
WITH_WEBSOCKETS:=yes
#make
#make install
如果执行程序时找不到libwebsockets的库文件,执行下面的命令为库做一下符号连接,分64位和32位)
#ln -s /usr/local/lib/libwebsockets.so.5 /usr/lib64/libwebsockets.so.5
#ln -s /usr/local/lib/libwebsockets.so.5 /usr/lib/libwebsockets.so.5
 
5、修改mosquitto.conf文件(在/etc/mosquitto目录下)
autosave_interval 1800
persistence true
persistence_file mosquitto.db
persistence_location /var/mosquitto/
persisitent_client_expiration 1d
listener 1883
使用chmod -R 777 /var/mosquitto修改目录权限,使用目录可写
增加下面两行,添加websockets的监听端口
listener 8080
protocol websockets
6、使用下面的命令启动mosquitto服务程序(在/usr/local/sbin目录下)
#src/mosquitto -d -c mosquitto.conf > /var/mosquitto/mosquitto.log 2>&1
7、取消客户端匿名登录功能,客户端登录必须提供登录名称及密码。(mosquitto_pwd命令在/usr/local/bin目录下,pwdfile.example在/etc/mosquitto目录下)
#cp pwdfile.example mosquitto.pwd
#cd usr/local/bin/mosquitto_pwd -c mosquitto.pwd admin
根据提示输入admin用户的登录密码
修改mosquitto.conf文件,取消用户匿名登录
allow_anonymous false
password_file mosquitto.pwd
 
最小化安装centos过程中可能遇到的问题:
一、网络连接问题
1、系统最小化安装,没有网络设置,使用下面的方法:
#nmcli connection show 
显示你的网络配置信息,主要是得到网卡名称。
2、为网卡ens33增加一个ip地址及网关
# nmcli connection add type ethernet con-name NEW_STATIC ifname ens33 ip4 192.168.1.141/24 gw4 192.168.1.1
3、设置这个连接所使用的DNS服务器:
# nmcli connection modify NEW_STATIC ipv4.dns "202.99.160.68 202.99.166.4"
4、启用以太网连接:
# nmcli connection up NEW_STATIC ifname ens33
5、查看网络连接的具体信息
# nmcli -p connection show NEW_STATIC
6、修改网络连接地址
# nmcli connection modify NEW_STATIC ipv4.addresses "192.168.1.23/24 192.168.1.1"
二、防火墙问题。
CentOS使用了firewalld做为默认的防火墙。这个防火墙默认是打开的,但没有开启任何端口,需要打开两个我们使用的端口:1883、8080。
# firewall-cmd --zone=public --add-port=1883/tcp --permanent
# firewall-cmd --zone=public --add-port=8080/tcp --permanent
# firewall-cmd --reload
 
其它有用的命令:
启动:# systemctl start  firewalld
查看状态:# systemctl status firewalld 或者 firewall-cmd --state
停止:# systemctl disable firewalld
禁用:# systemctl stop firewalld
查看版本:$ firewall-cmd --version
更新防火墙规则:# firewall-cmd --reload
  # firewall-cmd --complete-reload
    两者的区别就是第一个无需断开连接,就是firewalld特性之一动态添加规则,第二个需要断开连接,类似重启服务
将接口添加到区域,默认接口都在public
# firewall-cmd --zone=public --add-interface=eth0
永久生效再加上 --permanent 然后reload防火墙
设置默认接口区域
# firewall-cmd --set-default-zone=public
立即生效无需重启
查看所有打开的端口:
# firewall-cmd --zone=dmz --list-ports
加入一个端口到区域:
# firewall-cmd --zone=dmz --add-port=8080/tcp
永久生效再加上 --permanent 然后reload防火墙