如何在 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。 如果您有任何疑问,请随时问我。