前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >如何部署 MQTT 服务器

如何部署 MQTT 服务器

原创
作者头像
大数据弄潮儿
修改于 2018-11-14 08:11:24
修改于 2018-11-14 08:11:24
9.7K00
代码可运行
举报
运行总次数: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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Netty】使用 Netty 开发 HTTP 服务器
① HTTP 服务器端 : 在服务器端使用 Netty 开发 HTTP 服务器 , 该 HTTP 服务器监听 8888 端口 ;
韩曙亮
2023/03/27
6060
【Netty】使用 Netty 开发 HTTP 服务器
Netty 线程模型与基本使用
Netty 是一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能和高伸缩性的服务器和客户端。Netty 拥有高性能,吞吐量更高,延迟更低,减少资源消耗,最小化不必要的内存复制等优点。
Se7en258
2021/05/18
1.1K0
Netty 线程模型与基本使用
Netty的部分案例实现
Netty简单入门案例实现 server端 package com.shi.netty.netty1.simple; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventL
用户5927264
2020/06/16
6150
Netty第一个入门实例-TCP服务
好了netty的第一个入门案例就到此了,具体的代码解释请多看代码中的注释,有不清楚的欢迎留言交流 O(∩_∩)O哈哈~
用户4919348
2019/12/31
5K0
【Netty】使用 Netty 开发 HTTP 服务器 ( HTTP 请求过滤 )
在上述代码案例中 , 运行后 , 服务器端收到了两次 HTTP 请求 , 这里的两次请求 , 一个是请求 http://127.0.0.1:8888/ 地址资源 , 令一个是请求网站的图标 ;
韩曙亮
2023/03/27
1.1K0
【Netty】使用 Netty 开发 HTTP 服务器 ( HTTP 请求过滤 )
09-Netty 高性能架构设计-基于Netty开发TCP服务
Netty快速入门实例-TCP服务 需求 使用IDEA创建Netty项目 Netty服务器在6668端口监听, 客户端能发送消息给服务器"Hello, 服务器~" 服务器可以回复消息给客户端"hello, 客户端~" 目的: 对Netty线程模型 有一个初步认识, 便于理解Netty 模型理论 编写服务端 编写客户端 对Netty程序进行分析, 看看Netty模型特点 添加Netty依赖 <!-- https://mvnrepository.com/artifact/io.netty/netty-all -
彼岸舞
2022/02/18
4980
【Java】Netty创建网络服务端客户端(TCP/UDP)
Netty是一个基于Java的异步事件驱动的网络应用程序框架,专门用于快速开发高性能、可扩展和可维护的网络服务器和客户端。它提供了简单而强大的API,使开发人员能够轻松地构建各种网络应用,包括TCP、UDP、HTTP、WebSocket等。
DevFrank
2024/07/24
8150
【Java】Netty创建网络服务端客户端(TCP/UDP)
Netty Review - 核心组件扫盲
如果Handler处理器有一些长时间的业务处理,可以交给taskQueue异步处理。
小小工匠
2023/11/15
5050
Netty Review - 核心组件扫盲
[netty]-入门案例
学习了netty后,按照例子,编写了入门案例,深入了解netty的执行过程,记录下笔记。
无敌小菜鸟
2022/01/06
5820
[netty]-入门案例
Netty入门篇
2、Netty简介: netty是一个异步的,基于事件驱动的网络应用框架。可以快速地开发高性能的服务器端和客户端,像dubbo和elasticsearch底层都用了netty。它具有以下优点:
贪挽懒月
2020/07/28
8160
Netty入门篇
java架构之路-(netty专题)netty的基本使用和netty聊天室
  上次博客,我们主要说了我们的IO模型,BIO同步阻塞,NIO同步非阻塞,AIO基于NIO二次封装的异步非阻塞,最重要的就是我们的NIO,脑海中应该有NIO的模型图。
小菜的不能再菜
2020/02/23
1.3K0
Netty框架
Netty 是由 JBOSS 提供的一个 Java 开源框架。Netty 提供异步的、基于事件驱动的网络应用程序框架,用以快速开发高性能、高可靠性的网络 IO 程序。
全栈程序员站长
2022/07/22
3610
Netty框架
史诗级最强教科书式“NIO与Netty编程”
java.nio全称java non-blocking IO,是指JDK1.4开始提供的新API。从JDK1.4开始,Java提供了一系列改进的输入/输出的新特性,也被称为NIO(既New IO),新增了许多用于处理输入输出的类,这些类都被放在java.nio包及子包下,并且对原java.io包中的很多类进行改写,新增类满足NIO的功能。 NIO和BIO有着相同的目的和作用,但是它们的实现方式完全不同,BIO以流的方式处理数据,而NIO以块的方式处理数据,块I/O的效率比流I/O高很多。另外,NIO是非阻塞式的,这一点跟BIO也很不相同,使用它可以提供非阻塞式的高伸缩性网络。 NIO主要有三大核心部分 :Channel(通道),Buffer(缓冲区),Selector(选择器)。传统的BIO基于字节流和字符流进行操作,而NIO基于Channel和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择区)用于监听多个通道的事件(比如 :连接打开,数据到达)。因此使用单个线程就可以监听多个数据管道。
海仔
2019/08/26
9320
史诗级最强教科书式“NIO与Netty编程”
Netty 的编码 解码 案例
1、HTTP 中有一个 Nagle 算法,每个报文都是一段的,使用网络发送发现网络效率低,然后 HTTP 设置一个算法,设置到一定程度发,所以出现一些延时,提高销量,所以形成了粘包
BUG弄潮儿
2021/07/22
1.1K0
Netty服务端与客户端(源码一)
  (4)创建Selector,将之前创建的ServerSocketChannel注册到Selector上,监听SelectionKeyACCEPT。
用户3003813
2018/09/06
1.6K0
Netty服务端与客户端(源码一)
Netty Review - Netty自动重连机制揭秘:原理与最佳实践
Netty Review - 深入探讨Netty的心跳检测机制:原理、实战、IdleStateHandler源码分析
小小工匠
2023/12/25
1.4K0
Netty Review - Netty自动重连机制揭秘:原理与最佳实践
分布式专题|都说netty入门很难,那是因为你没有看我的文章!
在写代码之前,我们先看下netty的线程模型,这比那固定格式的代码将会更有趣,看完线程模型,你就知道netty写的那几段固定代码的意义了。
AI码师
2020/12/26
1.5K0
分布式专题|都说netty入门很难,那是因为你没有看我的文章!
Java网络编程--Netty入门
Netty是一个高性能,高可扩展性的异步事件驱动的网络应用程序框架,它极大的简化了TCP和UDP客户端和服务器端网络开发。它是一个NIO框架,对Java NIO进行了良好的封装。作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。
CodingDiray
2019/09/25
5490
Java网络编程--Netty入门
【Netty】Netty 核心组件 ( Future | Channel | Selector | ChannelHandler )
1 . Netty 中的 IO 操作 : Netty 中的 IO 操作 , 如 数据读取 Read , 数据写出 Write , 接受客户端连接 Accept , 连接服务器 Connect 等
韩曙亮
2023/03/27
1.6K0
漫谈Java IO之 Netty与NIO服务器
前面介绍了基本的网络模型以及IO与NIO,那么有了NIO来开发非阻塞服务器,大家就满足了吗?有了技术支持,就回去追求效率,因此就产生了很多NIO的框架对NIO进行封装——这就是大名鼎鼎的Netty。 前几篇的内容,可以参考: 网络IO的基本知识与概念 普通IO以及BIO服务器 NIO的使用与服务器Hello world Netty的使用与服务器Hello world 为什么要使用开源框架? 这个问题几乎可以当做废话,框架肯定要比一些原生的API封装了更多地功能,重复造轮子在追求效率的情况并不是明智之举。那
用户1154259
2018/04/10
1.1K0
漫谈Java IO之 Netty与NIO服务器
推荐阅读
相关推荐
【Netty】使用 Netty 开发 HTTP 服务器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验