Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在CentOS上安装Mosquitto服务器

如何在CentOS上安装Mosquitto服务器

原创
作者头像
不会飞的蝴蝶
修改于 2018-08-08 02:37:57
修改于 2018-08-08 02:37:57
13.2K00
代码可运行
举报
运行总次数:0
代码可运行

介绍

MQTT(消息队列遥测传输)是ISO 标准下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。

Mosquitto是一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。它具有强大的社区支持,并且易于安装和配置。

在本教程中,我们将教你安装Mosquitto,并通过腾讯云免费的SSL证书进行加密配置。

准备

在开始本教程之前,您需要:

  • 一台安装Centos 7系统的服务器,我们建议您使用腾讯云免费开发者实验室进行试验。
  • 一个指向服务器的域名,可以参考腾讯云快速添加域名解析,本教程将使用mqtt.example.com进行简介。
  • nano文本编辑器。本教程将自始至终使用nano,您可以使用sudo yum -y install nano命令进行安装或者替换您最喜欢的文本编辑器。

第1步 - 安装Mosquitto

CentOS 7 默认没有mosquitto包。要安装它,首先我们将安装一个额外的软件软件包,即 EPEL的额外软件存储库。该存储库中充满了可在CentOS,Red Hat和其他面向企业的Linux发行版上的软件。

使用yum软件包管理器安装epel-release软件包。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo yum -y install epel-release

这会将EPEL存储库信息添加到我们的系统中。在整个过程中,-y选项会对几个问题自动回答“是”。现在我们可以安装mosquitto包了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo yum -y install mosquitto

该软件包带有一个简单的默认配置,所以让我们运行它来测试我们是否安装成功。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl start mosquitto

我们还需要启用服务,以确保它在重新启动系统时启动:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl enable mosquitto

现在让我们测试默认配置。mosquitto包附带了一些MQTT客户端命令行。我们将使用其中一个订阅代理上的主题。

主题是您发布消息并订阅的标签。它们按等级排列,你可以有sensors/outside/tempsensors/outside/humidity。在本教程中,我们将使用一个简单的测试主题来测试配置。

您需要创建一个新的终端,创建方法很简单,重新打开一个新的终端页面,重新登录服务器即可。在新的终端中,使用mosquitto_sub订阅测试主题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mosquitto_sub -h localhost -t test

-h用于指定MQTT服务器的主机名,-t是主题名称。按ENTER后你将看不到输出,因为mosquitto_sub正在等待消息到达。切换第一个终端并发布消息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mosquitto_pub -h localhost -t test -m "hello world"

mosquitto_pub的选项与mosquitto_sub相同,这一次我们使用了额外的-m选项来指定我们的消息。点击ENTER,你应该看看hello world 输出在在另一个终端中。你已经学会发送第一条MQTT信息!

在第二个终端中按下CTRL+C退出mosquitto_sub,不要关闭其他终端哦,后面我们还要进行测试。

接下来,我们将使用新的Let's Encrypt客户端Certbot通过SSL保护我们的安装。

第2步 - 申请腾讯云SSl加密证书

申请入口

进入SSL证书管理控制台

单击【申请证书】

查看申请域名型证书型号,单击【确定】

填写申请

填写自己申请的域名,例如qcloud.com,cloud.tencent.com,demo.test.qlcoud.com。

手动DNS验证方式

证书默认支持收到DNS验证,验证方法可查看详情

提交申请后验证身份

提交申请成功后弹窗提示如下,需要前往【证书详情页】获取CName记录添加解析:

获取CName记录如Tips中显示,需要尽快成功添加解析,方可通过CA机构审核:

第3步 - 配置MQTT密码

Mosquitto包含一个工具,用于生成一个特殊的密码文件,名为mosquitto_passwd。此工具将提示您输入指定用户名的密码,并将结果放在/etc/mosquitto/passwd

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo mosquitto_passwd -c /etc/mosquitto/passwd sammy

现在,我们将替换默认的配置文件,并告诉Mosquito使用这个密码文件来要求所有连接的登录。首先,删除现有的 mosquitto.conf

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo rm /etc/mosquitto/mosquitto.conf

现在打开一个新的空白配置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo nano /etc/mosquitto/mosquitto.conf

把下面的内容粘贴进去。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
allow_anonymous false
password_file /etc/mosquitto/passwd

allow_anonymous false将禁用所有未经身份验证的连接,并且password_file告诉Mosquitto在哪里查找用户和密码,保存并退出文件。

现在我们需要重新启动Mosquitto并测试。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl restart mosquitto

尝试在没有密码的情况下发布消息。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mosquitto_pub -h localhost -t "test" -m "hello world"

你应该看到被拒绝的信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Connection Refused: not authorised.
Error: The connection was refused.

在我们再次尝试使用密码登录之前,请再次切换到您的第二个终端窗口,并使用用户名和密码订阅“test”主题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mosquitto_sub -h localhost -t test -u "sammy" -P "password"

它应该连接并等待消息。这个终端可以保持连接,因为我们会定期发送测试消息。现在再次使用用户名和密码给第二个终端发布消息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mosquitto_pub -h localhost -t "test" -m "hello world" -u "sammy" -P "password"

消息应该按照步骤1执行。我们已经成功地为Mosquitto增加了密码保护。但是,我们仍在发送未加密的消息。接下来,我们将通过向Mosquitto添加SSL加密来修复这个问题。

第4步 - 配置MQTT SSL

要启用SSL加密,我们需要告诉Mosquitto存储Let的加密证书的位置。打开我们之前启动的配置文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo nano /etc/mosquitto/mosquitto.conf

在文件末尾粘贴以下内容,留下我们已经添加的两行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
. . .
listener 1883 localhost
listener 8883
certfile /etc/Tencent_Cloud_SSL/live/mqtt.example.com/cert.pem
cafile /etc/Tencent_Cloud_SSL/live/mqtt.example.com/chain.pem
keyfile /etc/Tencent_Cloud_SSL/live/mqtt.example.com/privkey.pem

我们要增加两个单独的listener到配置。第一个,listener 1883 localhost,更新1883端口上的默认mqtt侦听器。1883是标准的未加密的MQTT端口。Mosquitto只将该端口绑定到localhost接口,因此无法从外部访问它。外部请求无论如何都会被防火墙阻止。

listener 8883在端口上设置加密侦听器8883端口。这是MQTT+SSL的标准端口,通常称为MQTTS。接下来的三行,certfile,cafilekeyfile,填写您在腾讯云申请到的证书地址。

保存并退出该文件。

在重新启动Mosquitto以加载新配置之前,我们需要安装一个mosquitto服务文件。systemd这个文件用于确定如何运行mosquitto。在你最喜欢的编辑器里打开它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo nano /etc/systemd/system/multi-user.target.wants/mosquitto.service

找一行写着User=mosquitto然后删除它,然后保存并退出该文件。

Mosquitto仍将作为mosquitto用户,但是当它第一次启动时,它将具有root特权,并自动安装您申请的SSl证书。在装载证书后,它将自动变为到mosquitto的用户。

我们需要重新加载systemd,因此它会注意到我们对服务文件所做的更改。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl daemon-reload

现在我们可以重新启动Mosquitto来更新设置。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl restart mosquitto

更新防火墙以允许连接到8883端口。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo firewall-cmd --permanent --add-port=8883/tcp

重新加载防火墙。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo firewall-cmd --reload

现在我们再次使用mosquitto_pub,和以前不同,我们需要加上几个不同的SSL选项。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mosquitto_pub -h mqtt.example.com -t test -m "hello again" -p 8883 --cafile /etc/ssl/certs/ca-bundle.crt -u "sammy" -P "password"

我们使用的是完整的主机名,而不是localhost。因为我们的ssl证书是为mqtt.example.com,如果我们尝试连接到localhost我们将得到一个错误,即主机名与证书主机名不匹配。

--cafile /etc/ssl/certs/ca-bundle.crtmosquitto_pub启用SSL,并告诉它在哪里查找根证书。它们通常是由操作系统安装的,所以对于MacOSWindows等来说,路径是不同的。mosquitto_pub使用根证书来验证Mosmisto服务器的证书是否已由腾讯云所签发的证书颁发机构正确地签名。重要的是要注意mosquitto_pubmosquitto_sub如果没有此选项,将不会尝试使用ssl连接,即使您正在连接到标准的安全端口8883

如果一切顺利,我们将看到Hello again出现在另一个mosquitto_sub终端。这意味着您的服务器已经完全设置好了!如果您希望扩展MQTT协议以使用WebSocket,则可以执行最后一步。

第5步 - 通过Websockets配置MQTT(可选)

为了在Web浏览器中使用JavaScript来使用MQTT,该协议被调整为在标准WebSocket上工作。如果不需要此功能,则可以跳过此步骤。

我们需要再次打开mosquitto配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo nano /etc/mosquitto/mosquitto.conf

在文件末尾添加以下内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
. . .
listener 8083
protocol websockets
certfile /etc/Tencent_Cloud_SSL/live/mqtt.example.com/cert.pem
cafile /etc/Tencent_Cloud_SSL/live/mqtt.example.com/chain.pem
keyfile /etc/Tencent_Cloud_SSL/live/mqtt.example.com/privkey.pem

除了端口号和协议websockets行之外,这与前一个块大致相同。MQTT在websockets上没有官方标准化端口,但8083是最常见的。

保存并退出该文件,然后重新启动Mosquitto。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl restart mosquitto

现在,在防火墙中打开8083端口。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo firewall-cmd --permanent --add-port=8083/tcp

重新加载防火墙。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo firewall-cmd --reload

为了测试这个功能,我们将使用一个公共的、基于浏览器的MQTT客户端。在浏览器中打开mqtt-admin (校者注:这个页面已经失效了,你可以访问:https://github.com/hobbyquaker/mqtt-admin 获取项目自己搭建服务端),您将看到以下内容:

填写连接信息如下:

  • Protocol(协议)WSS(是 websocket secure)。
  • Host(主机)是你的Mosquitto服务器的域名mqtt.example.com
  • Port(端口)8083
  • User(用户)是你的Mosquitto用户名; 在这里,我们使用了sammy
  • Password(密码)是你设置的密码。
  • ClientId 可以保留为默认值mqtt-admin

按“ Save Setting”后mqtt-admin将连接到你的Mosquitto服务器。在下一个屏幕中,填写Topic作为test,输入Payload的任何消息,然后按Publish。该消息将显示在mosquitto_sub终端中。

结论

现在,我们已经建立了一个安全的、受密码保护的MQTT服务器,并使用了腾讯云SSL证书。这将作为一个强大和安全的消息传递平台,无论你梦想什么项目。与MQTT协议很好地工作的一些流行的软件和硬件包括:

  • OwnTracks一个开源的地理跟踪应用程序,你可以安装在你的手机上。 OwnTracks将定期向您的MQTT服务器报告位置信息,然后您可以将其存储并显示在地图上,或者根据您的位置创建警报和激活物联网硬件。
  • Node-RED是一个基于浏览器的图形界面,用于“连接”物联网。您可以将一个节点的输出拖到另一个节点的输入中,并可以通过筛选器、不同协议之间的信息路由数据库,等等。MQTT得到了Node-red的很好的支持.
  • ESP 8266是一种价格低廉的具有MQTT功能的wifi微控制器

这些只是MQTT生态系统中几个流行的例子。外面有更多的硬件和软件来表达协议。如果您已经有了最喜欢的硬件平台或软件语言,那么它可能具有MQTT功能。让你们的“东西”互相交谈。腾讯云现在也推出了物联网通信(IoT Hub)服务 ,旨在提供一个安全、稳定、高效的连接平台,帮助开发者低成本、快速地实现“设备-设备”、“设备-用户应用”、“设备-云服务”之间可靠、高并发的数据通信。也就是说,腾讯物联网通信可以实现设备之间的互动、设备的数据上报和配置下发,还可以基于规则引擎和腾讯云产品打通,方便快捷的实现海量设备数据的存储、计算以及智能分析。总之,基于腾讯物联网通信,开发者可以低成本实现“设备-数据-应用-云服务”的连接,快速搭建物联网应用平台。 欢迎您试用。更多Linux教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Install and Secure the Mosquitto MQTT Messaging Broker on CentOS 7》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
物联网入门:搭建MQTT服务器
MQTT(消息队列遥测传输)是ISO 标准下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。
无敌小笼包
2018/07/23
31.7K0
如何在Ubuntu 18.04上安装和保护Mosquitto MQTT Messaging Broker
MQTT是一种机器到机器的消息传递协议,旨在为“物联网”设备提供轻量级的发布/订阅通信。它通常用于地理跟踪车队,家庭自动化,环境传感器网络和公用事业规模数据收集。
乌鸦
2018/09/29
8.7K1
如何部署 MQTT 服务器
MQTT是一种机器到机器的消息传递协议,旨在为“物联网”设备提供轻量级的发布/订阅通信。Mosquitto是一种流行的MQTT服务器(或MQTT中的代理),具有出色的社区支持,易于安装和配置。
大数据弄潮儿
2018/11/14
9.8K0
如何部署 MQTT 服务器
如何在Ubuntu上搭建MQTT服务器
MQTT(消息队列遥测传输)是ISO 标准下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。
angel_郁
2018/07/31
13.3K1
如何在Ubuntu上搭建MQTT服务器
[快速入门]如何在Ubuntu 18.04上安装和保护Mosquitto MQTT消息传递代理
MQTT是一种机器到机器的消息传递协议,旨在为“物联网”设备提供轻量级的发布/订阅通信。Mosquitto是一种流行的MQTT服务器(或MQTT中的代理),具有出色的社区支持,易于安装和配置。
信姜缘
2018/09/29
2.8K1
MQTT服务器Mosquitto安装及使用
看到Successfully startedmosquitto(label: homebrew.mxcl.mosquitto) 说明我们成功了!!!
先知先觉
2019/01/21
5.9K0
MQTT服务器搭建–Mosquitto[通俗易懂]
MQTT(MQ Telemetry Transport),消息队列遥测传输协议,轻量级的发布/订阅协议, 适用于一些条件比较苛刻的环境,进行低带宽、不可靠或间歇性的通信。目前已经是物联网消息通信事实上的标准协议了。值得一提的是mqtt提供三种不同质量的消息服务:
全栈程序员站长
2022/08/23
8.7K0
MQTT服务器搭建–Mosquitto[通俗易懂]
使用 WebSocket 客户端连接 MQTT 服务器
近年来随着 Web 前端的快速发展,浏览器新特性层出不穷,越来越多的应用可以在浏览器端或通过浏览器渲染引擎实现,Web 应用的即时通信方式 WebSocket 得到了广泛的应用。
杨奉武
2018/12/28
16.7K0
EMQ X | 百万级的开源MQTT消息服务器(搭建一个私有MQTT服务器)
EMQ X 全称 Erlang/Enterprise/Elastic MQTT Broker,它是基于 Erlang/OTP 语言平台开发,支持大规模连接和分布式集群,发布订阅模式的百万级开源 MQTT 消息服务器。
Mculover666
2020/07/16
16K0
EMQ X | 百万级的开源MQTT消息服务器(搭建一个私有MQTT服务器)
Windows10下安装mosquitto服务
Eclipse Mosquitto™ 一款实现了 MQTT v3.1/v3.1.1 协议的轻量级开源消息代理软件。它支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器、手机、嵌入式计算机、微型控制器等移动设备。
ccf19881030
2020/12/11
2.1K0
Windows10下安装mosquitto服务
MQTT服务器搭建和测试[通俗易懂]
本文将使用Mosquitoo 进行测试,进入到安装页面,下载自己电脑的系统所适配的程序
全栈程序员站长
2022/09/07
4.1K0
MQTT服务器搭建和测试[通俗易懂]
Mqtt学习笔记--交叉编译移植(1)
这里选用的mosquitto进行移植,mosquitto依赖openssl和uuid,下面是我选用的版本:
fensnote
2023/09/14
1.3K0
Mqtt学习笔记--交叉编译移植(1)
轻量MQTT服务器mosquitto搭建笔记
搭建流程 安装 直接yum yum install mosquitto 添加用户 用户信息都是保存在一个文件中的。 添加有两种方式,一种是直接覆写文件,一种是追加文件;前者添加后原用户信息全部丢失,后者不会。 创建用户密码文件并添加用户(如存在则覆写) 格式:sudo mosquitto_passwd -c [文件路径] [用户名] sudo mosquitto_passwd -c /etc/mosquitto/pwdfile [用户名] - 输入用户密码 - 再次输入用户密码 追加用户(不会覆写) 格式:
xinhuo
2022/03/11
3.7K0
【C++】开源:MQTT安装与配置使用(mosquitto)
MQTT (Message Queuing Telemetry Transport) 是一种轻量级的消息传输协议,通常用于物联网设备和应用程序之间进行通信。它是基于发布/订阅模式设计的,其中消息发布者将消息发布到特定主题(Topic),然后订阅该主题的客户端将收到这些消息。MQTT 特别适合在网络带宽有限的情况下进行通信,因为它使用的数据包非常小。此外,它还提供了多种 QoS (Quality of Service) 级别来确保消息的可靠性和有效性。
DevFrank
2024/07/24
2.1K0
MQTT 服务器介绍
MQTT 是基于 发布(Publish)/订阅(Subscribe) 模式来进行通信及数据交换的,与 HTTP 的 请求(Request)/应答(Response) 的模式有本质的不同。
全栈程序员站长
2022/08/25
7K0
MQTT 服务器介绍
101-STM32+BC26基本控制篇-加密通信-MQTT服务器配置SSL单向认证(.Windows系统)
<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/ZLBC26AA/" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>
杨奉武
2020/12/18
9360
101-STM32+BC26基本控制篇-加密通信-MQTT服务器配置SSL单向认证(.Windows系统)
MQTT服务器部署
现在物联网常用的通信方式有哪些?RF433/315M、蓝牙、Zigbee、wifi、以太网等等,通信协议也按不同功能分了许多种,例如TCP、MQTT等,具体可到https://blog.csdn.net/sinat_36098122/article/details/80930168 研究。我当前用的比较多的是MQTT协议,它被较多的用来需要省电的设备通信上,采用发布/订阅的形式传输消息,具体可参考https://www.cnblogs.com/skullboyer/p/9085210.html。 要使用MQTT通信,就少不了MQTT服务器,它是消息传送的中转站(代理)。也就是说MQTT服务器并不存储消息,消息的发布与接收都由客户端完成。我主要写一下目前也是较流行的两者MQTT服务器的搭建:EMQ和Mosquitto。这两种服务器都是开源的,这里写的是部署在windows服务器上的方法(没办法菜鸟只能搞win,以后再玩玩Linux)。
全栈程序员站长
2022/08/24
6.8K0
MQTT服务器部署
在CentOS服务器使用Mosquitto安装和部署MQTT
之前在Windows服务器上安装部署RabbitMQ3.8,今天又双叒叕换了软件,叫MQTT,首先先了解下软件,RabbitMQ : 是一个支持AMQP协议的消息中间件,用于在多个应用程序之间传递消息。它有助于分发任务,协调过程,实现异步通信,而MQTT : 是一种轻量级的发布/订阅消息协议,用于在网络连接的设备之间传递消息数据。它使用基于可移植的文本协议,可以节约带宽和电力,帮助物联网开发人员在受限网络中运行应用程序。
李洋博客
2024/08/19
2.2K0
在CentOS服务器使用Mosquitto安装和部署MQTT
Ubuntu18和Raspbian搭建LAMP环境+部署图片上传网页+安装Mosquitto
视频链接:https://www.bilibili.com/video/BV1XK411G7AW/ pictureViewer.zip下载链接:https://download.csdn.net/download/sxf1061700625/13113746
小锋学长生活大爆炸
2020/11/24
9820
物联网云智能开发—MosQuitto服务器的安装 测试 订阅&发布及加密教程
在物联网云智能开发中,MQTT协议是最为常用的协议之一,之前在一篇文章中和大家简要的介绍了MQTT协议的基本概念,感兴趣的小伙伴可以移步这篇文章“浅谈物联网开发最热协议-MQTT协议”。
灰小猿
2020/09/23
2K0
物联网云智能开发—MosQuitto服务器的安装 测试 订阅&发布及加密教程
推荐阅读
相关推荐
物联网入门:搭建MQTT服务器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验