文章目录
- CentOS7安装mosquitto并支持websocket
- 1、 安装mosquitto 和 libwebsokets
- 2、安装编译工具gcc和g++
- 3、安装mosquitto所需要的依赖库
- 4、安装cmake(在编译安装libwebsockets)
- 5、解压、编译、安装libwebsockets
- 6、解压、修改mosquitto的配置文件config.mk使其支持websocket服务(默认不支持websocket)
- 7、修改完支持websocket服务之后进行编译、安装mosquitto
- 8、修改mosquitto的配置文件mosquitto.conf
- 9、添加mosquitto用户、启动mosquitto服务
- 10、成功启动后的状态
- 11、mosquitto --用户配置
- 12、日志文件的配置
CentOS7安装mosquitto并支持websocket
1、 安装mosquitto 和 libwebsokets
- mosquitto所有版本汇集
- libwebsockets-1.6
个人建议两者的版本最好一致
2、安装编译工具gcc和g++
yum install -y gcc-c++
3、安装mosquitto所需要的依赖库
yum install -y openssl-devel
yum install -y c-ares-devel
yum install -y libuuid-devel
yum install -y e2fsprogs-devel
yum install -y uuid-devel
4、安装cmake(在编译安装libwebsockets)
yum install -y cmake
5、解压、编译、安装libwebsockets
yum install -y unzip zip
unzip libwebsockets-1.6-stable.zip
cd libwebsockets-1.6-stable/
mkdir build
cd build/
cmake ..
make
make install
# 如果出现报错可以将build文件夹下的所有文件删掉并执行下列命令
make clean
# 接下来重新进行cmake往下操作即可
6、解压、修改mosquitto的配置文件config.mk使其支持websocket服务(默认不支持websocket)
# 解压mosquitto文件压缩包
tar xvf mosquitto-1.6.8.tar.gz
# cd进入文件夹中
cd mosquitto-1.6.8.tar.gz
# 修改config.mk中的WITH_WEBSOCKETS:=NO改成WTIH_WEBSOCKETS:=yes
# 将默认的不支持websocket服务改为支持websocket服务
# 在修改文件之前记得先备份(养成好习惯)
cp config.mk config.mk1
vim config.mk
# Build with SRV lookup support.
WITH_SRV:=no
# Build with websockets support on the broker.
WITH_WEBSOCKETS:=yes
# Use elliptic keys in broker
WITH_EC:=yes
修改的地方下方红色记号
7、修改完支持websocket服务之后进行编译、安装mosquitto
# 方法一:
make
make install
# 方法二:
make && make install
8、修改mosquitto的配置文件mosquitto.conf
cd /etc/mosquitto
cp mosquitto.conf.example mosquitto.conf # 将原有的进行复制备份
vim mosquitto.conf
如下图所示,在Default listener 的下方进行添加如下信息
port 1883
listener 9001
protocol websockets
-----这里的port、listener的端口号都是可以自定义的,只要与你服务器中的端口号不冲突。-----
9、添加mosquitto用户、启动mosquitto服务
# 添加mosquitto用户到root中
adduser mosquitto
# 启动mosquitto服务
mosquitto -c /etc/mosquitto/mosquitto.conf # 可以用来测试
mosquitto -c /etc/mosquitto/mosquitto.conf -d # (实际使用中推荐使用该条,将程序挂载到后台进行运行)
启动时可能会出现No such file or di’rectory问题
原因是没有找到对应的库,可以通过软连接命令解决:
ln -s /usr/local/lib/libwebsockets.so.6 /usr/lib64/libwebsockets.so.6
# libwebsockets.so.6这个名称的具体需要自己去/usr/local/lib/下方进行查看,因此libwebsockets.so.6是不相同的
然后重新进行启动即可
# 如果发现线程被占用了,可以通过如下命令进行查看并杀死对应的进程号重启该服务
ps -ef | grep mos
mosquit+ 2123 1 0 15:54 ? 00:00:01 mosquitto -c /etc/mosquitto/mosquitto.conf -d
root 13569 2205 0 16:39 pts/0 00:00:00 grep --color=auto mos
# 如何杀死进程?
kill -9 2123 # -9表示强制,就可以进行强制杀死进程
10、成功启动后的状态
总结:使用mosquitto进行MQTT的搭建以及增加websocket服务的操作步骤如上所示。一步一步操作进行就可以正常使用了(博主亲测整个流程!)
最后安放一个MQTT的调试工具:
MQTTBox
提取码:2v6r
11、mosquitto --用户配置
参考资料:https://www.bbsmax.com/A/x9J26k4eJ6/
mosquitto中可以添加多个用户,只有使用用户名和密码登陆服务器才允许用户进行订阅与发布操作。可以说用户机制是mosquitto重要的安全机制,增强服务器的安全性。
用户与权限配置需要修改3处地方:
1、mosquitto中最最最重要的配置文件mosquitto.conf
2、pwfile.example (保存用户名与密码)
3、aclfile.example (保存权限配置)
- 新增一个使用的用户
- 打开mosquitto.conf文件,找到allow_anonymous节点,这个节点作用是,是否开启匿名用户登录,默认是true。打开此项配置(将前面的 # 号去掉)之后将其值改为false
- 找到password_file节点,这个节点是告诉服务器你要配置的用户将存放在哪里。打开此配置并指定pwfile.conf文件路径(注意是绝对路劲)
- 创建用户名和密码、打开命令窗口 键入如下命令:
1. 先将pwfile.example文件给备份为pwfile.conf sudo cp /etc/mosquitto/pwfile.example /etc/mosquitto/pwfile.conf 2. 修改pwfile.conf文件的权限为777 sudo chmod -R 777 /etc/mosquitto/pwfile.conf 3. 创建用户名和密码 mosquitto_passwd -c /etc/mosquitto/pwfile.conf admin `同样连续会提示连续输入两次密码。注意第二次创建用户时不用加 -c 如果加 -c 会把第一次创建的用户覆盖。`
mosquitto_passwd 常见用法:
mosquitto_passwd -c 命令每次都只会生成只包含一个用户的文件,如果你想在passwd.conf中存放多个用户, 可以使用
mosquitto_passwd -b [最终生成的password_file文件] [用户名] [密码]
mosquitto_passwd -b 命令必须在控制台输入明文的密码,且每次只是在passwd.conf中新增一个用户,不会覆盖之前已生成的用户
mosquitto_passwd -D 命令删除一个用户
mosquitto_passwd的具体应用可以参考 http://mosquitto.org/man/mosquitto_passwd-1.html
12、日志文件的配置
参考文件:
https://www.cnblogs.com/saryli/p/9815814.html
Mosquitto日志管理
运维中的日志切割操作梳理
-
在mosquitto.conf文件中打开日志文件存放的位置
mosquitto是一个纯C的代码,它的日志输出支持若干中日志输出方式,通过修改配置项:log_dest即可完成对各种日志输出类型的切换,常见的日志输出类型有有下几种:
控制台输出stdout、stderrr: log_dest stderr
输出到日志文档: log_dest file /home/logs/mosquitto/mosquitto.log【注意】
[1] log_dest后面还有个参数file,然后才是实际的日志文件全名;
[2] 所使用的日志文件/home/logs/mosquitto/mosquitto.log要先建立好,并且让mosquitto有权限访问;1. 创建对应的文件夹 sudo mkdir -p /var/log/mosquitto 2. 并赋予文件夹777权限 sudo chmod -R 777 /var/log/mosquitto 3. 执行命令启动即可 mosquitto -c /etc/mosquitto/mosquitto.conf -d
-
项目中使用mosquitto作为MQTT服务器,在mosquitto.conf配置文件中设置了日志的输出。过几天之后,日志文件会变得异常庞大,不利于查看日志分析问题。想着日志可否按天进行存储,这样也方便快速查询,可有效排查问题。最终发现logrotate这个内置模块可以处理这个问题
logrotate是linux系统自带的日志文件管理工具,它可以帮助我们来完成对某个日志文件的转储,当然它还有其他的功能,
例如:将日志发送到指定的email等等;它实际的工作机制非常简单:在linux系统下,Crontab每天都会执行logrotate,而logrotate每执行一次,就把我们的日志转储一次;
logrotate通过与定时任务Crontab结合来工作,就能满足定期,例如每天对日志文件进行转储的功能,
- 使用logrotate配置
-
在logrotate.d目录中新建文件mosquitto,可以直接在该目录下使用vim mosquitto命令
1. vim创建mosquitto sudod vim mosquitto 2. 编辑文件mosquitto,写入: /var/log/mosquitto/mosquitto.log { daily dateext copytruncate nocompress rotate 15 } 3. 确保mosquitto的权限为:-rw-r--r-- `使用命令ll查看` ll `默认的文件权限就是-rw-r--r--`
备注:
/var/log/mosquitto/mosquitto.log: mosquitto日志输出文件
daily: 日志将按照天来转储,也可以设置为weekly和monthly
dateext: 转储后的日志文件会附加上日期信息,例如转储后文件为mosquitto.log-20181105,如果不加的话,文件名格式就变为了序号mosquitto.log-1
copytruncate: 备份日志文件并截断,设置为nocopytruncate时备份日志文件但是不截断
nocompress: 不进行压缩
rotate 15: 指定日志文件删除之前转储的次数
确保mosquitto的权限为:-rw-r--r--
-
梳理流程
上述过程梳理如下:
(1)logrotate的启动脚本被放在了Crontab每天执行的脚本目录中/etc/cron.daily,这样Crontab每天都会执行一次logrotate;
(2)logrotate启动的时候,使用了配置文件/etc/logrotate.conf;
(3) 配置/etc/logrotate.conf中又引入了目录:/etc/logrotate.d;
(4)我们在/etc/logrotate.d目录下建立自己的logrotate配置文件;
(5)这样,当logrotate启动的时候就会执行一次转储,从而按照我们的配置来转储我们指定的日志文件。 -
验证
1. 进行验证 /usr/sbin/logrotate -vf /etc/logrotate.d/mosquitto
完成后可看到在/var/log/mosquitto/目录中多了一个文件mosquitto.log-20211008