使用源码编译方式安装mosquitto(MQTT)配置以及微信小程序通过websoket链接(Root用户下不需要sudo)

CentOS7安装mosquitto并支持websocket

1、 安装mosquitto 和 libwebsokets

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 (保存权限配置)

  • 新增一个使用的用户
  1. 打开mosquitto.conf文件,找到allow_anonymous节点,这个节点作用是,是否开启匿名用户登录,默认是true。打开此项配置(将前面的 # 号去掉)之后将其值改为false
  2. 找到password_file节点,这个节点是告诉服务器你要配置的用户将存放在哪里。打开此配置并指定pwfile.conf文件路径(注意是绝对路劲)
    在这里插入图片描述
  3. 创建用户名和密码、打开命令窗口 键入如下命令:
    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日志管理
运维中的日志切割操作梳理

  1. 在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 
    
  2. 项目中使用mosquitto作为MQTT服务器,在mosquitto.conf配置文件中设置了日志的输出。过几天之后,日志文件会变得异常庞大,不利于查看日志分析问题。想着日志可否按天进行存储,这样也方便快速查询,可有效排查问题。最终发现logrotate这个内置模块可以处理这个问题

    logrotate是linux系统自带的日志文件管理工具,它可以帮助我们来完成对某个日志文件的转储,当然它还有其他的功能,
    例如:将日志发送到指定的email等等;它实际的工作机制非常简单:在linux系统下,Crontab每天都会执行logrotate,而logrotate每执行一次,就把我们的日志转储一次;
    logrotate通过与定时任务Crontab结合来工作,就能满足定期,例如每天对日志文件进行转储的功能,

  • 使用logrotate配置
  1. 在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--

  2. 梳理流程

    上述过程梳理如下:
    (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启动的时候就会执行一次转储,从而按照我们的配置来转储我们指定的日志文件。

  3. 验证

    1. 进行验证
    /usr/sbin/logrotate -vf /etc/logrotate.d/mosquitto
    

    完成后可看到在/var/log/mosquitto/目录中多了一个文件mosquitto.log-20211008

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值