前言

本篇记录在 ubuntu18-x64 虚拟机上通过安装的方式部署 mosquitto broker 全过程,做备忘用、同时供有需求的小伙伴参考。

环境说明:
(1). 虚拟机 VMware-15
(2). 系统版本 ubuntu18-x64
(3). 虚拟机网络:桥接模式

第一步 安装 mosquitto

sudo apt-get install mosquitto
sudo apt-get install mosquitto-client

第二步 部署 mosquitto 运行环境

2.1 创建组和用户

sudo groupadd mosquitto
sudo useradd -s /usr/sbin/nologin mosquitto -g mosquitto -d /var/lib/mosquitto

2.2 创建 mosquitto 运行中使用的文件

sudo mkdir -p /var/log/mosquitto /var/log/mosquitto
sudo mkdir -p /var/log/mosquitto /var/lib/mosquitto

sudo chown -R mosquitto:mosquitto /var/log/mosquitto
sudo chown -R mosquitto:mosquitto /var/lib/mosquitto

sudo mkdir /var/run/mosquitto
sudo chown mosquitto:mosquitto /var/run/mosquitto

2.3 编辑 mosquitto.conf 配置文件

配置文件/etc/mosquitto/mosquitto.conf参数配置如下

# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example

pid_file /var/run/mosquitto/mosquitto.pid

user mosquitto

# 连接信息配置
#bind_address
port 1883
max_connections 100
connection_messages true

# 数据持久化
persistence true
persistence_location /var/lib/mosquitto/

# log 记录相关参数
log_timestamp true
log_type error
log_type warning
log_type information
log_dest file /var/log/mosquitto/mosquitto.log

# 禁止匿名登录
allow_anonymous false

# 授权登录用户白名单
password_file /etc/mosquitto/pwfile

# 用户权限管理
acl_file /etc/mosquitto/aclfile

include_dir /etc/mosquitto/conf.d

此文件各参数定义可参考文件末尾的附录说明。

2.4 授权用户

建立授权文件

sudo touch /etc/mosquitto/pwfile

创建用户名和密码

                      授权文件               用户名
sudo mosquitto_passwd /etc/mosquitto/pwfile administartor
Password: 
Reenter password: 

文件pwfile内容如下

router@ubuntu:~$ sudo cat /etc/mosquitto/pwfile
admin:$6$8eWmW1HmzA6YN5mr$DEvR5sag8CAWcmxHzf85/uYZYhe5w32AWa/cLgHPred64nkQn3l/Zbk8NEwTF51GfNlt6ugtHTUHkv7RQP04eQ==
user:$6$CWKTSqcslTjw5Fu3$OoaIf5kEkVod1wJif1zb6rEBlVUG/7uGZIGo+jb3ndHs0GbMC7MQv8HMWKt1mej1dcOuUW2PZ7Vi83C700tkaw==
user1:$6$TbDvT4/qr7h2Y/oA$t7jss4uYLhzscWxjKaFbxeDLwz6AQ2+Y77IWRGj1SkpVXwNy1N6JiSwBcuSGY/Or91vylJ/bjJFxRjVP3HXuxw==
530226:$6$WbqBrs7fLJ35nsNA$ljvfHp20JNrsNGtic2oo5//AUpDtb12w/g6HS+3wiUFbVnbIOjCokU6Jqx5l7f3JevVdRZJDgBnbSyFiOwkv+w==
administartor:$6$/YIS3IBo/+DsWobI$/P17tvDyb25tvbizKNBaJxe6tHsBqRNwlRCE5VgB5AgaZ85G/LUe2G1577EWUSPASin7LnSOZUrEtR9a3sRxbA==

2.5 用户权限

建立权限管理文件

sudo touch /etc/mosquitto/aclfile

给用户授权、配置内容如下:

router@ubuntu:~$ sudo cat /etc/mosquitto/aclfile
# 用户 admin 可以读写
user admin
topic esp32_topic_data_down
topic esp32_topic_data_uplink

# 用户 user1: down 写、 uplink 读
user user1
topic write esp32_topic_data_down
topic read esp32_topic_data_uplink

#esp32 device: down 读、uplink 写
user 530226
topic read esp32_topic_data_down
topic write esp32_topic_data_uplink

2.6 mosquitto 管理

sudo systemctl restart mosquitto
sudo systemctl stop mosquitto
sudo systemctl start mosquitto
sudo systemctl status mosquitto

重启服务器器后、查询mosquitto运行状态

router@ubuntu:~$ sudo systemctl status mosquitto
[sudo] password for router: 
● mosquitto.service - Mosquitto MQTT v3.1/v3.1.1 Broker
     Loaded: loaded (/lib/systemd/system/mosquitto.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-09-05 18:18:47 CST; 15h ago
       Docs: man:mosquitto.conf(5)
             man:mosquitto(8)
   Main PID: 2632 (mosquitto)
      Tasks: 3 (limit: 4588)
     Memory: 1.6M
     CGroup: /system.slice/mosquitto.service
             └─2632 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf

Sep 05 18:18:47 ubuntu systemd[1]: Starting Mosquitto MQTT v3.1/v3.1.1 Broker...
Sep 05 18:18:47 ubuntu mosquitto[2632]: [ 4643.573567]~DLT~ 2632~INFO     ~FIFO /tmp/dlt cannot be opened. Retrying later...
Sep 05 18:18:47 ubuntu systemd[1]: Started Mosquitto MQTT v3.1/v3.1.1 Broker.

运行正常、如何运行错误的话,一般都是 mosquitto.conf参数配置出现错误

第三步 验证测试

下载安装 MQTTx 客户端软件; 配置MQTTx连接信息如下:

MQTTx 参数配置信息解释对照
Name: 客户端的名称,mosquitto 系统内不可以重名;
ClientID: 客户端ID号, mosquitto 系统内不可以重号;
这两个字段在产品侧、使用产品的SN编编码来填充,
例如:
ClientID = 产品编码
Name = ‘SN’+产品编码

Host: mqtt:// + ip地址或域名URL地址
Port: 端口号,mosquitto.conf文件中的port

username: 用户名、在pwfile文件建立用户名;
Password: 密码、、在pwfile文件建立用户密码;
在这里插入图片描述图: 参数配置

测试连接如下:

在这里插入图片描述图:通讯测试

附录 mosquitto.conf参数详细说明

# =================================================================
# General configuration
# =================================================================

# 客户端心跳的间隔时间
#retry_interval 20

# 系统状态的刷新时间
#sys_interval 10

# 系统资源的回收时间,0表示尽快处理
#store_clean_interval 10

# 服务进程的PID
#pid_file /var/run/mosquitto.pid

# 服务进程的系统用户
#user mosquitto

# 客户端心跳消息的最大并发数
#max_inflight_messages 10

# 客户端心跳消息缓存队列
#max_queued_messages 100

# 用于设置客户端长连接的过期时间,默认永不过期
#persistent_client_expiration

# =================================================================
# Default listener
# =================================================================

# 服务绑定的IP地址
#bind_address

# 服务绑定的端口号
#port 1883

# 允许的最大连接数,-1表示没有限制
#max_connections -1

# cafile:CA证书文件
# capath:CA证书目录
# certfile:PEM证书文件
# keyfile:PEM密钥文件
#cafile
#capath
#certfile
#keyfile

# 必须提供证书以保证数据安全性
#require_certificate false

# 若require_certificate值为true,use_identity_as_username也必须为true
#use_identity_as_username false

# 启用PSK(Pre-shared-key)支持
#psk_hint

# SSL/TSL加密算法,可以使用“openssl ciphers”命令获取
# as the output of that command.
#ciphers

# =================================================================
# Persistence
# =================================================================

# 消息自动保存的间隔时间
#autosave_interval 1800

# 消息自动保存功能的开关
#autosave_on_changes false

# 持久化功能的开关
persistence true

# 持久化DB文件
#persistence_file mosquitto.db

# 持久化DB文件目录
#persistence_location /var/lib/mosquitto/

# =================================================================
# Logging
# =================================================================

# 4种日志模式:stdoutstderr、syslog、topic
# none 则表示不记日志,此配置可以提升些许性能
log_dest none

# 选择日志的级别(可设置多项)
#log_type error
#log_type warning
#log_type notice
#log_type information

# 是否记录客户端连接信息
#connection_messages true

# 是否记录日志时间
#log_timestamp true

# =================================================================
# Security
# =================================================================

# 客户端ID的前缀限制,可用于保证安全性
#clientid_prefixes

# 允许匿名用户
#allow_anonymous true

# 用户/密码文件,默认格式:username:password
#password_file

# PSK格式密码文件,默认格式:identity:key
#psk_file

# pattern write sensor/%u/data
# ACL权限配置,常用语法如下:
# 用户限制:user <username>
# 话题限制:topic [read|write] <topic>
# 正则限制:pattern write sensor/%u/data
#acl_file

# =================================================================
# Bridges
# =================================================================

# 允许服务之间使用“桥接”模式(可用于分布式部署)
#connection <name>
#address <host>[:<port>]
#topic <topic> [[[out | in | both] qos-level] local-prefix remote-prefix]

# 设置桥接的客户端ID
#clientid

# 桥接断开时,是否清除远程服务器中的消息
#cleansession false

# 是否发布桥接的状态信息
#notifications true

# 设置桥接模式下,消息将会发布到的话题地址
# $SYS/broker/connection/<clientid>/state
#notification_topic

# 设置桥接的keepalive数值
#keepalive_interval 60

# 桥接模式,目前有三种:automatic、lazy、once
#start_type automatic

# 桥接模式automatic的超时时间
#restart_timeout 30

# 桥接模式lazy的超时时间
#idle_timeout 60

# 桥接客户端的用户名
#username

# 桥接客户端的密码
#password

# bridge_cafile:桥接客户端的CA证书文件
# bridge_capath:桥接客户端的CA证书目录
# bridge_certfile:桥接客户端的PEM证书文件
# bridge_keyfile:桥接客户端的PEM密钥文件
#bridge_cafile
#bridge_capath
#bridge_certfile
#bridge_keyfile

# 自己的配置可以放到以下目录中
include_dir /etc/mosquitto/conf.d
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐