Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何部署 MQTT 服务器

如何部署 MQTT 服务器

原创
作者头像
大数据弄潮儿
修改于 2018-11-14 08:11:24
修改于 2018-11-14 08:11:24
10.1K00
代码可运行
举报
运行总次数:0
代码可运行

MQTT是一种机器到机器的消息传递协议,旨在为“物联网”设备提供轻量级的发布/订阅通信。Mosquitto是一种流行的MQTT服务器(或MQTT中的代理),具有出色的社区支持,易于安装和配置。

在本篇教程中,我们将安装和配置Mosquitto,并使用Let的加密SSL证书来保护我们的MQTT流量。如果您还没有腾讯云的服务器,可以先点击这里进行免费套餐的试用。免费套餐包含企业版和个人版,超过11款热门产品和42款长期免费的云产品可以供您选择。如果您有长期搭建服务器的需求的话,可以点击这里进行服务器的购买,现在的促销力度很大哦。

安装软件

首先,我们将安装一个自定义软件存储库以获取最新版本的Certbot,即Let的加密客户端:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo add-apt-repository ppa:certbot/certbot

ENTER了接受,然后安装Mosquitto和Certbot的软件包:

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

接下来我们将获取SSL证书。

下载SSL证书

打开防火墙中的端口80

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo ufw allow 80

然后运行Certbot以获取证书。请务必在此处替换您服务器的域名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo certbot certonly --standalone --preferred-challenges http -d mqtt.example.com

系统将提示您输入电子邮件地址并同意服务条款。执行此操作后,您应该会看到一条消息,告诉您进程是否成功以及您的证书存储在何处。

我们接下来将Mosquitto配置为使用这些证书。

配置Mosquitto

首先,我们将创建一个Mosquitto将用于验证连接的密码文件。使用mosquitto_passwd来创建这个文件,请确保使用你喜欢的用户名替换它:

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

系统将提示您输入两次密码。

现在为Mosquitto打开一个新的配置文件:

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

这将打开一个空文件。粘贴如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
allow_anonymous false
password_file /etc/mosquitto/passwd
​
listener 1883 localhost
​
listener 8883
certfile /etc/letsencrypt/live/mqtt.example.com/cert.pem
cafile /etc/letsencrypt/live/mqtt.example.com/chain.pem
keyfile /etc/letsencrypt/live/mqtt.example.com/privkey.pem
​
listener 8083
protocol websockets
certfile /etc/letsencrypt/live/mqtt.example.com/cert.pem
cafile /etc/letsencrypt/live/mqtt.example.com/chain.pem
keyfile /etc/letsencrypt/live/mqtt.example.com/privkey.pem

请务必替换您在步骤2中使用的域名为mqtt.example.com。完成后保存并关闭文件。

该文件执行以下操作:

  • 禁用匿名登录
  • 使用我们的密码文件启用密码验证
  • 仅在端口1883上为localhost设置不安全的侦听器
  • 在端口8883上设置安全侦听器
  • 在端口8083上设置基于websocket的安全侦听器

重启Mosquitto以获取配置更改:

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

检查以确保服务再次运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl status mosquitto
● mosquitto.service - LSB: mosquitto MQTT v3.1 message broker
   Loaded: loaded (/etc/init.d/mosquitto; generated)
   Active: active (running) since Mon 2018-07-16 15:03:42 UTC; 2min 39s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 6683 ExecStop=/etc/init.d/mosquitto stop (code=exited, status=0/SUCCESS)
  Process: 6699 ExecStart=/etc/init.d/mosquitto start (code=exited, status=0/SUCCESS)
    Tasks: 1 (limit: 1152)
   CGroup: /system.slice/mosquitto.service
           └─6705 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

状态应该是active (running)。如果不是,请检查配置文件并重新启动。Mosquitto的日志文件中可能会提供更多信息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo tail /var/log/mosquitto/mosquitto.log

如果一切顺利,请使用ufw允许两个新端口通过防火墙:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo ufw allow 8883
sudo ufw allow 8083

现在已经建立了Mosquitto,我们将在续订证书后配置Certbot以重启Mosquitto。

配置Certbot续订

Certbot会在它们到期之前自动续订我们的SSL证书,但需要告知它在重新启动之后重启Mosquitto服务。

打开域名的Certbot续订配置文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo nano /etc/letsencrypt/renewal/mqtt.example.com.conf

在最后一行添加以下renew_hook选项:

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

保存并关闭该文件,然后运行Certbot dry run以确保语法正常:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo certbot renew --dry-run

如果您没有看到任何错误,那么您已经完成了设置。让我们接下来测试我们的MQTT服务器。

测试Mosquitto

我们在步骤1中安装了一些命令行MQTT客户端。我们可以在localhost监听器上订阅主题测试,如下所示:

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

我们可以用mosquitto_pub发布:

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

要使用端口8883上的安全侦听器进行订阅,请执行以下操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mosquitto_sub -h mqtt.example.com -t test -p 8883 --capath /etc/ssl/certs/ -u "your-username" -P "your-password"

这就是您向安全监听器发布的方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mosquitto_pub -h mqtt.example.com -t test -m "hello world" -p 8883 --capath /etc/ssl/certs/ -u "your-username" -P "your-password"

请注意,我们使用的是完整的主机名而不是localhost。因为我们为mqtt.example.com发布了SSL证书,如果我们尝试安全连接到localhost,我们会收到一条错误消息,指出主机名与证书主机名不匹配。

要测试websocket功能,我们将使用基于浏览器的公共MQTT客户端。在浏览器中打开Eclipse Paho javascript客户端实用程序并填写连接信息,如下所示:

  • 主机是您的Mosquitto服务器的域,mqtt.example.com
  • 端口8083
  • ClientId可以保留为默认的随机值
  • 路径可以保留为/ ws的默认值
  • 用户名是步骤3中的Mosquitto用户名
  • 密码是您在步骤3中选择的密码

其余字段可以保留其默认值。

Connect后,客户端将连接到您的服务器。您可以使用连接窗格下的订阅发布消息窗格进行发布和订阅。

结论

我们现在已经设置并测试了一个安全的,受密码保护和SSL加密的MQTT服务器。这可以作为物联网,家庭自动化或其他项目的强大而安全的消息传递平台。腾讯云 SSL证书(SSL Certificates)提供了安全套接层(SSL)证书的一站式服务,包括证书申请、管理及部署功能,与顶级的数字证书授权(CA)机构和代理商合作,为您的网站、移动应用提供 HTTPS 解决方案。

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
物联网入门:搭建MQTT服务器
MQTT(消息队列遥测传输)是ISO 标准下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。
无敌小笼包
2018/07/23
32.5K0
如何在Ubuntu 18.04上安装和保护Mosquitto MQTT Messaging Broker
MQTT是一种机器到机器的消息传递协议,旨在为“物联网”设备提供轻量级的发布/订阅通信。它通常用于地理跟踪车队,家庭自动化,环境传感器网络和公用事业规模数据收集。
乌鸦
2018/09/29
9K1
如何在CentOS上安装Mosquitto服务器
MQTT(消息队列遥测传输)是ISO 标准下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。
不会飞的蝴蝶
2018/08/08
13.7K5
如何在CentOS上安装Mosquitto服务器
[快速入门]如何在Ubuntu 18.04上安装和保护Mosquitto MQTT消息传递代理
MQTT是一种机器到机器的消息传递协议,旨在为“物联网”设备提供轻量级的发布/订阅通信。Mosquitto是一种流行的MQTT服务器(或MQTT中的代理),具有出色的社区支持,易于安装和配置。
信姜缘
2018/09/29
3K1
Certbot实现自动签发及续签Let's Encrypt免费SSL证书
由于目前免费SSL证书有效期通常只有90天,在到期前需要手动申请、部署证书较为麻烦,甚至会因为未及时续签证书导致网址无法访问。
参谋带个长
2024/09/19
1.3K0
Nginx配置使用certbot自动申请HTTPS证书
在当今互联网环境中,网站的安全性越来越受到重视。HTTPS 作为一种能够提供加密通信和验证网站真实性的协议,已经成为网站安全的基本标准。然而,许多平台提供的 HTTPS 证书往往有有效期限制,比如腾讯云等平台目前提供的证书只有3个月的有效期。这不仅增加了证书管理的复杂性,还可能因为证书过期而导致网站访问中断。
王先森sec
2024/06/28
2.6K0
Nginx配置使用certbot自动申请HTTPS证书
使用 WebSocket 客户端连接 MQTT 服务器
近年来随着 Web 前端的快速发展,浏览器新特性层出不穷,越来越多的应用可以在浏览器端或通过浏览器渲染引擎实现,Web 应用的即时通信方式 WebSocket 得到了广泛的应用。
杨奉武
2018/12/28
17.3K0
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
7.3K0
MQTT服务器部署
MQTT 服务器介绍
MQTT 是基于 发布(Publish)/订阅(Subscribe) 模式来进行通信及数据交换的,与 HTTP 的 请求(Request)/应答(Response) 的模式有本质的不同。
全栈程序员站长
2022/08/25
7.9K0
MQTT 服务器介绍
在CentOS服务器使用Mosquitto安装和部署MQTT
之前在Windows服务器上安装部署RabbitMQ3.8,今天又双叒叕换了软件,叫MQTT,首先先了解下软件,RabbitMQ : 是一个支持AMQP协议的消息中间件,用于在多个应用程序之间传递消息。它有助于分发任务,协调过程,实现异步通信,而MQTT : 是一种轻量级的发布/订阅消息协议,用于在网络连接的设备之间传递消息数据。它使用基于可移植的文本协议,可以节约带宽和电力,帮助物联网开发人员在受限网络中运行应用程序。
李洋博客
2024/08/19
2.9K0
在CentOS服务器使用Mosquitto安装和部署MQTT
免费给 Spring Boot 加个证书
在我之前的博客文章中,我们熟悉了带有自签名证书的 Spring Boot 应用程序的配置。自签名证书适用于特定目的,例如测试和开发。但是,如果需要将他的应用程序发送到生产环境,证书应该由已知且合法的证书颁发机构 (CA) 签署。
终码一生
2022/04/15
1.7K0
免费给 Spring Boot 加个证书
Gitea 服务器搭建:如何在公司服务器搭建 Gitea 环境实现代码仓库私有化托管
在当今软件开发高速迭代的时代,企业对「私有化代码仓库托管」的需求愈发迫切。通过在公司服务器部署 Gitea,不仅可以实现“Git 私有化托管”与“代码安全隔离”,还能够结合 CI/CD 流水线快速交付,彻底摆脱公有云成本与权限风控的双重烦恼。本教程将手把手教您在 Ubuntu 20.04 环境下,完成从服务器准备、依赖安装到域名配置、SSL 加密、自动化运维的一整套 “Gitea 服务器搭建” 方案,确保您能够快速上手 “Gitea 安装教程” 并实现“企业级 Git 自托管”最佳实践。 本文详细介绍在公司服务器上从零开始部署 Gitea 服务的全流程。全程使用 Ubuntu 20.04 LTS 作为示例操作系统,其他 Linux 发行版亦可参照操作。
猫头虎
2025/06/08
6260
如何使用Certbot独立模式检索我们在Ubuntu 18.04上加密SSL证书
Let's Encrypt是一种通过自动API提供免费SSL证书的服务。最受欢迎的Let's Encrypt客户端是EFF的Certbot。
丰一川
2018/10/25
1.8K0
使用Let's Encrypt的SSL证书配置HTTPS手记
前段时间,看见很多大会都在分享全站HTTPS的经验。HTTPS固然好,前提是SSL证书,并且签发证书的机构要靠谱。沃通的CA证书就相继被Mozilla和Google封杀了。曾经对于普通用户,权威,安全,并且免费的证书无疑就像天上的星星,可望而不可及。现在,这些星星变成了馅饼掉了下来。没错,我们可以申请安全免费的ssl证书--- Let's Encrypt。 Let’s Encrypt是电子前哨基金会(EFF)发布的免费 SSL 证书服务,Google,Mozilla和Microsoft都极力支持。很早之前就
李海彬
2018/03/19
2.8K0
使用Let's Encrypt的SSL证书配置HTTPS手记
nginx HTTPS反向代理
configure arguments里的with-http_ssl_module是必须的,在./configure时必须添上该选项启用ssl模块,否则比较麻烦(没有类似于phpize这种东西,只能添上参数重新编译按需覆盖)
ayqy贾杰
2019/06/12
3.4K0
如何在Ubuntu 14.04上使用Let's Encrypt来保护Nginx
Let's Encrypt是一个新的证书颁发机构(CA),它提供了一种获取和安装免费TLS / SSL证书的简便方法,从而在Web服务器上启用加密的HTTPS。它通过提供软件客户端Certbot简化了流程,该客户端尝试自动化大多数(如果不是全部)所需步骤。目前,获取和安装证书的整个过程在Apache和Nginx Web服务器上都是完全自动化的。
独钓寒江雪_Ly
2018/10/16
1.4K0
如何在CVM上安装Matrix Synapse
Matrix是分散通信的开放标准。它使用标准化API实时同步的在线消息传递到其他服务器。
苏子晨
2018/07/19
4K1
如何使用CentOS 7上的Let's Encrypt来保护Nginx
Let's Encrypt是一个新的证书颁发机构(CA),它提供了一种获取和安装免费TLS / SSL证书的简便方法,从而在Web服务器上启用加密的HTTPS。它通过提供软件客户端Certbot简化了流程,该客户端尝试自动化大多数(如果不是全部)所需步骤。目前,获取和安装证书的整个过程在Apache和Nginx Web服务器上都是完全自动化的。
水门
2018/10/16
2.4K0
在Ubuntu 18.04上使用Let’s Encrypt保护Nginx
Let's Encrypt是由互联网安全研究组(ISRG)开发的免费开放认证机构。 Let's Encrypt颁发的证书现在几乎所有浏览器都信任。
星哥玩云
2022/07/13
1.6K0
在Ubuntu 18.04上使用Let’s Encrypt保护Nginx
在 CentOS 8 上使用 Let’s Encrypt 保护 Apache
Let’s Encrypt 是一个免费的,自动的,开放证书供应商。它由提供免费 SSL 证书的 Internet Security Research Group(ISRG)开发。
雪梦科技
2020/05/11
1.5K0
在 CentOS 8 上使用 Let’s Encrypt 保护 Apache
推荐阅读
相关推荐
物联网入门:搭建MQTT服务器
更多 >
领券
一站式MCP教程库,解锁AI应用新玩法
涵盖代码开发、场景应用、自动测试全流程,助你从零构建专属AI助手
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档