如何在 Ubuntu 22.04 上安装 Mosquitto MQTT 服务器

如何在 Ubuntu 22.04 上安装 Mosquitto MQTT 服务器

Mosquitto 是 MQTT 协议的免费、开源、轻量级服务器实现。 它专为所有设备而设计,从低功耗单板计算机到完整的服务器。 MQTT 在 TCP/IP 协议之上工作,并使用您现有的互联网家庭网络向您的 IoT 设备发送消息并响应这些消息。 它是用 C 语言编写的,这使得它比其他 MQTT 代理更快、更高效。

这篇文章将向您展示如何在 Ubuntu 22.04 上安装 Mosquitto 服务器。

先决条件

  • 运行 Ubuntu 22.04 的服务器。
  • 您的服务器上配置了 root 密码。

安装所需的依赖项

在开始之前,建议将所有系统软件包更新并升级到更新版本。 您可以通过运行以下命令来更新它们:

apt update -y
apt upgrade -y

升级所有软件包后,运行以下命令安装其他所需的软件包:

apt-get install curl gnupg2 wget git apt-transport-https ca-certificates -y

安装所有必需的软件包后,您可以继续下一步。

安装 Mosquitto 服务器

默认情况下,Mosquitto 软件包在 Ubuntu 22.04 默认存储库中不可用。 因此,您需要将 Mosquitto 的官方存储库添加到 APT。 您可以使用以下命令添加它:

add-apt-repository ppa:mosquitto-dev/mosquitto-ppa -y

将存储库添加到 APT 后,您可以使用以下命令安装它:

apt install mosquitto mosquitto-clients -y

安装完成后,您可以使用以下命令验证 Mosquitto 状态:

systemctl status mosquitto

您应该看到以下输出:

? mosquitto.service - Mosquitto MQTT Broker
     Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2022-12-06 04:50:33 UTC; 8s ago
       Docs: man:mosquitto.conf(5)
             man:mosquitto(8)
    Process: 5491 ExecStartPre=/bin/mkdir -m 740 -p /var/log/mosquitto (code=exited, status=0/SUCCESS)
    Process: 5492 ExecStartPre=/bin/chown mosquitto:mosquitto /var/log/mosquitto (code=exited, status=0/SUCCESS)
    Process: 5493 ExecStartPre=/bin/mkdir -m 740 -p /run/mosquitto (code=exited, status=0/SUCCESS)
    Process: 5494 ExecStartPre=/bin/chown mosquitto:mosquitto /run/mosquitto (code=exited, status=0/SUCCESS)
   Main PID: 5495 (mosquitto)
      Tasks: 1 (limit: 2242)
     Memory: 1.3M
        CPU: 23ms
     CGroup: /system.slice/mosquitto.service
             ??5495 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

Dec 06 04:50:32 ubuntu2204 systemd[1]: Starting Mosquitto MQTT Broker...
Dec 06 04:50:33 ubuntu2204 systemd[1]: Started Mosquitto MQTT Broker.

创建 MQTT 管理密码

出于安全考虑,建议为MQTT配置密码认证。

让我们使用以下命令设置管理员用户和密码:

mosquitto_passwd -c /etc/mosquitto/passwd hitesh

设置密码如下图:

Password: 
Reenter password: 

接下来,编辑 MQTT 配置文件并定义端口和密码文件。

nano /etc/mosquitto/conf.d/default.conf

添加以下行:

listener 1883
password_file /etc/mosquitto/passwd

保存并关闭文件,然后重新启动 Mosquitto 服务以应用更改。

systemctl restart mosquitto

如何使用MQTT发送和接收消息

您将需要使用 Mosquitto 客户端连接到 Mosquitto 服务器,然后发送和接收不同主题的消息。

在发送和接收消息之前,您需要订阅一个主题。 您可以在家庭自动化应用程序中使用以下主题之一。

  • 家/灯/客厅
  • 家/灯/厨房
  • 家/灯/master_bedroom
  • 家/灯/kids_bedroom

让我们运行以下命令来订阅 home/lights/kids_bedroom 主题。

mosquitto_sub -u hitesh -P password -t "home/lights/kids_bedroom"

接下来,打开新的终端界面,并使用以下命令向 home/lights/kids_bedroom 主题发布消息。

mosquitto_pub -u hitesh -P password -m "ON" -t "home/lights/kids_bedroom"

在第一个终端上,您将获得有效负载:

ON

现在,转到第二个终端并发送关于同一主题的 OFF 消息。

mosquitto_pub -u hitesh -P password -m "OFF" -t "home/lights/kids_bedroom"

您应该在第一个终端上看到以下消息:

ON
OFF

完成后,您可以继续下一步。

使用 Let’s Encrypt SSL 保护 Mosquitto

要使用 SSL 保护 Mosquitto,您需要将 Certbot 客户端包安装到您的服务器上。

首先,使用以下命令安装 Snap 包管理器:

apt install snapd

接下来,使用以下命令更新 Snap 包:

snap install core 
snap refresh core

接下来,使用以下命令安装 Certbot 软件包:

snap install --classic certbot

接下来,创建 Certbot 二进制文件到系统位置的符号链接。

ln -s /snap/bin/certbot /usr/bin/certbot

接下来,运行以下命令生成 SSL 证书。

certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d mosquitto.linuxbuz.com

您应该看到以下输出:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for mosquitto.linuxbuz.com

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/mosquitto.linuxbuz.com/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/mosquitto.linuxbuz.com/privkey.pem
This certificate expires on 2023-03-06.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

您可以使用以下命令查看所有生成的证书文件:

ls /etc/letsencrypt/live/mosquitto.linuxbuz.com/

您将得到以下输出:

cert.pem  chain.pem  fullchain.pem  privkey.pem  README

接下来,使用以下命令生成 Diffie-Hellman 证书:

openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

完成后,您可以继续下一步。

配置 MQTT 以使用 Let’s Encrypt SSL

首先,使用以下命令将所有生成的证书复制到 Mosquitto 目录:

cp /etc/letsencrypt/live/mosquitto.linuxbuz.com/fullchain.pem /etc/mosquitto/certs/server.pem
cp /etc/letsencrypt/live/mosquitto.linuxbuz.com/privkey.pem /etc/mosquitto/certs/server.key

接下来,为 Mosquitto 证书设置适当的所有权。

chown -R mosquitto: /etc/mosquitto/certs

接下来,编辑 Mosquitto 配置文件并定义 Let’s Encrypt SSL。

nano /etc/mosquitto/conf.d/default.conf

添加以下行:

listener 8883
certfile /etc/mosquitto/certs/server.pem
cafile  /etc/ssl/certs/ISRG_Root_X1.pem
keyfile /etc/mosquitto/certs/server.key
dhparamfile /etc/ssl/certs/dhparam.pem

保存并关闭文件,然后重新启动 Mosquitto 服务以应用更改。

systemctl restart mosquitto

接下来,使用以下命令验证 Mosquitto 连接:

mosquitto_pub -h mosquitto.linuxbuz.com -t "home/lights/kids_bedroom" -m "hello" -p 8883 --capath /etc/ssl/certs/ -u hitesh -P password

完成后,您可以继续通过网络浏览器测试 Mosquitto 连接。

配置 Mosquitto Websocket

接下来,您需要配置 Websockets 以在浏览器中使用 MQTT 协议。 您可以通过编辑 Mosquitto 默认配置文件来启用它:

nano /etc/mosquitto/conf.d/default.conf

添加以下行:

listener 8083
protocol websockets
certfile /etc/mosquitto/certs/server.pem
cafile  /etc/ssl/certs/ISRG_Root_X1.pem
keyfile /etc/mosquitto/certs/server.key
dhparamfile /etc/ssl/certs/dhparam.pem

保存并关闭文件,然后重新启动 Mosquitto 服务以应用更改。

systemctl restart mosquitto

接下来,打开终端界面并运行以下命令:

mosquitto_sub -u hitesh -P password -t "home/lights/kids_bedroom"

现在,打开 Web 浏览器并使用基于浏览器的 MQTT 客户端来测试 WebSockets 功能。 您应该看到以下屏幕:

提供您的 Mosquitto 服务器主机、端口、用户名、密码,然后单击“连接”按钮。 您应该看到以下屏幕:

现在,输入任何主题、消息,然后单击“发布”按钮。

接下来,回到终端界面。 您应该在以下输出中看到您发布的消息:

Hi

结论

在这篇文章中,我们解释了如何在 Ubuntu 22.04 上安装 Mosquitto 服务器并使用 Let’s Encrypt SSL 保护它。 我们还通过基于浏览器的客户端测试 Mosquitto。 如果您有任何疑问,请随时问我。

资讯来源:由0x资讯编译自HOWTOFORGE,版权归作者所有,未经许可,不得转载
你可能还喜欢