如何在 Ubuntu 上安装 Mosquitto MQTT 代理
Mosquitto 是一个开源的消息代理,实现了消息队列遥测传输 (MQTT) 协议。在 Ubuntu 22.04 上安装 MQTT 代理,您可以利用 MQTT 轻量级的 TCP/IP 消息平台,该平台专为资源有限的物联网 (IoT) 设备设计,例如带宽低或电池寿命短的设备。Mosquitto 依赖于发布-订阅 (pub/sub) 拓扑结构,发布者将消息发送到代理,订阅者通过频道接收消息。
简介
Mosquitto 是一个轻量级、开源的消息代理,实现了 MQTT(消息队列遥测传输)和 MQTTv5 协议。它被广泛应用于物联网 (IoT)、传感器网络、移动应用、嵌入式系统等需要轻量级实时数据交换的场景。
主要特点:
- 轻量高效: Mosquitto 占用资源少,非常适合在资源受限的设备上运行。
- 开源免费: 基于 Eclipse Public License v2.0 许可证发布,可以免费使用和修改。
- 支持 MQTT 和 MQTTv5: 兼容 MQTT 协议的多个版本,提供更丰富的功能和更好的性能。
- 易于安装和配置: 提供简单的安装包和配置文件,方便快速部署。
- 支持多种客户端: 提供 C、Python、Java 等多种语言的客户端库,方便与各种应用集成。
- 灵活的主题订阅: 支持通配符和主题层次结构,方便灵活地订阅和发布消息。
- 多种身份验证机制: 支持用户名/密码、TLS/SSL 加密等多种身份验证方式,保障数据安全。
- 消息持久化: 可以将消息持久化到磁盘,防止消息丢失。
- 桥接功能: 可以桥接多个 Mosquitto 代理,实现分布式消息传递。
准备工作
服务器准备
必要前提:
- 一个充满求知欲的大脑。
- 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。本文将以雨云为例进行演示。
我将以 雨云 为例,带大家创建一台自己的云服务器,以便尝试本篇文章的内容。
注册链接: https://rainyun.ivwv.site
创建雨云服务器
以下步骤仅供参考,请根据实际需求选择配置。
点击 云产品 → 云服务器 → 立即购买。
选择距离你较近的区域,以保证低延迟。
按照自己需求选择配置。
选择 Ubuntu 22.04 版本。
最后点击 立即购买,并按照提示进行购买。购买后等待机器部署完毕,点击购买的服务器,进入管理面板,找到远程连接相关信息。
使用 PowerShell 进行远程连接。
输入 ssh root@你的服务器IP
例如 ssh root@154.9.227.239
回车后,首次需要输入 yes
,再次回车后即可登录服务器。
到此为止,我们的云服务器就创建好了。
开始安装
Mosquitto 在 Ubuntu 22.04 的默认软件包仓库中可用。按照以下步骤在 Ubuntu 22.04 上安装 MQTT 代理。
-
安装 Mosquitto 软件包。
sudo apt install -y mosquitto
-
验证新的 Mosquitto 版本。
输出:
1730087147: mosquitto version 2.0.18 starting 1730087147: Using default config. 1730087147: Starting in local only mode. Connections will only be possible from clients running on this machine. 1730087147: Create a configuration file which defines a listener to allow remote access.
管理 Mosquitto 系统服务
Mosquitto 在 mosquitto
下作为系统服务运行。按照以下步骤使用 systemctl
命令管理服务。
-
查看
mosquitto
服务状态并验证其是否处于活动状态。sudo systemctl status mosquitto
输出:
● mosquitto.service - Mosquitto MQTT BrokerLoaded: loaded (/usr/lib/systemd/system/mosquitto.service; enabled; preset: enabled)Active: active (running) since Fri 2024-10-25 06:51:37 UTC; 12min agoDocs: man:mosquitto.conf(5)man:mosquitto(8) ...
-
停止
mosquitto
服务。sudo systemctl stop mosquitto
-
启动
mosquitto
服务。sudo systemctl start mosquitto
-
重启
mosquitto
服务。sudo systemctl restart mosquitto
安装并测试 Mosquitto 客户端
发布者和订阅者可以使用 Mosquitto 命令行界面连接到 Mosquitto 服务器并交换消息。按照以下步骤安装软件包。
-
安装
mosquitto-clients
软件包。sudo apt install -y mosquitto-clients
-
订阅主题,例如
home/sensor/temperature
,通过以下命令作为后台进程运行。mosquitto_sub -t "home/sensor/temperature" &
输出:
23.5
-
向
home/sensor/temperature
主题发布新消息,并将值设置为30.5
。mosquitto_pub -t "home/sensor/temperature" -m "30.5" -q 1 -r
输出:
30.5 30.5
-
发布另一条消息,并将值设置为
45.2
。mosquitto_pub -t "home/sensor/temperature" -m "45.2" -q 1 -r
输出:
45.2 45.2
-
查看所有活动的后台作业,并记录
mosquitto_sub
作业 ID。输出:
[1] Running mosquitto_sub -t "home/lights/sitting_room" &
-
通过指定 ID 停止作业。
输出:
[1] Done mosquitto_sub -t "home/lights/sitting_room" &
保护 Mosquitto 服务器
默认情况下,Mosquitto 允许客户端无需任何形式的身份验证即可连接。按照以下步骤启用基于密码的身份验证,要求客户端使用用户名和密码连接。
-
在
/etc/mosquitto/conf.d
目录中创建一个新的default.conf
配置文件。sudo nano /etc/mosquitto/conf.d/default.conf
-
在
/etc/mosquitto/conf.d/default.conf
文件中添加以下配置,以禁用匿名连接并允许 Mosquitto 读取/etc/mosquitto/passwd
凭据文件。allow_anonymous false password_file /etc/mosquitto/passwd
保存并关闭文件。
-
打开
/etc/mosquitto/passwd
认证文件。sudo nano /etc/mosquitto/passwd
-
在文件中添加以下用户凭据。将
EXAMPLE_PASSWORD
和STRONG_PASSWORD
替换为您希望的值。john_doe:EXAMPLE_PASSWORD mary_smith:STRONG_PASSWORD
保存并关闭文件。
-
使用
mosquitto_passwd
工具加密明文用户密码。sudo mosquitto_passwd -U /etc/mosquitto/passwd
-
查看
/etc/mosquitto/passwd
文件以验证您已加密密码。sudo cat /etc/mosquitto/passwd
输出:
john_doe:$6$TSzNycsj...5Qyvgd4g== mary_smith:$6$DtlKf1lG.../rLHIL0Q==
-
重启
mosquitto
服务以应用配置更改。sudo systemctl restart mosquitto
-
使用有效的用户名和密码订阅
/home/sensor/temperature
主题。例如,john_doe
和EXAMPLE_PASSWORD
。mosquitto_sub -u john_doe -P EXAMPLE_PASSWORD -t "/home/sensor/temperature"
-
向
/home/sensor/temperature
主题发布新消息。mosquitto_pub -u john_doe -P EXAMPLE_PASSWORD -t "home/sensor/temperature" -m "22.5" -q 1 -r
输出:
22.5
-
查看所有活动的后台作业,并记录
mosquitto_sub
作业 ID。输出:
[1] Running mosquitto_sub -u john_doe -P EXAMPLE_PASSWORD -t "home/lights/sitting_room" &
-
通过指定作业 ID 停止主题。
输出:
[1] Done mosquitto_sub -u john_doe -P EXAMPLE_PASSWORD -t "home/lights/sitting_room" &
-
使用错误的凭据尝试订阅
/home/sensor/temperature
主题mosquitto_pub -u john_doe -P VERY_WRONG_PASSWORD -t "home/sensor/temperature" -m "22.5" -q 1 -r
输出:
Connection error: Connection Refused: not authorised. Error: The connection was refused.
上述输出显示连接失败,因为 Mosquitto 无法授权用户。
相关链接
雨云 - 新一代云服务提供商: https://www.rainyun.com/NTEzMTM1_?s=blog
面试鸭:https://mianshiya.com/?shareCode=sq29yv
我的博客:https://blog.ivwv.site