mosquitto ds笔记250306

Mosquitto 是一个轻量级的开源 MQTT 协议 代理服务器(Broker),由 Eclipse 基金会开发和维护。它专为物联网(IoT)场景设计,支持设备间的低带宽、高延迟通信,是构建分布式物联网系统的核心工具之一。


核心功能

  1. MQTT 协议支持

    • 支持 MQTT v3.1、v3.1.1 和 v5.0 协议,兼容性强。
    • 提供 发布-订阅 模型,设备通过主题(Topic)交换消息,例如 sensors/temperature
    • 支持 QoS 等级(0/1/2),确保消息可靠传输。
  2. 轻量高效

    • 资源占用低,适合运行在树莓派、嵌入式设备或云端服务器。
    • 单机可支持数万并发连接(取决于硬件配置)。
  3. 安全机制

    • 支持 TLS/SSL 加密通信(MQTT over TLS)。
    • 提供用户名/密码认证、客户端证书认证。
    • 可配置访问控制列表(ACL),限制设备对特定主题的读写权限。
  4. 扩展性

    • 支持插件系统(如认证插件、日志插件)。
    • 可桥接多个 Mosquitto 实例或其他 MQTT Broker,实现分布式架构。

典型应用场景

  • 物联网设备通信
    例如传感器上报数据(温度、湿度)、远程控制设备(开关、灯光)。
  • 移动端消息推送
    通过 MQTT 实现 App 与服务器的实时通信。
  • 工业物联网(IIoT)
    工厂设备状态监控、故障预警。
  • 智能家居
    跨设备联动(如手机控制空调、门锁)。

核心工具

  • mosquitto:MQTT Broker 主程序。

  • mosquitto_pub :命令行客户端,用于发布消息。

    bash 复制代码
    mosquitto_pub -h broker.example.com -t "device/status" -m "online" -q 1
  • mosquitto_sub :命令行客户端,用于订阅消息。

    bash 复制代码
    mosquitto_sub -h broker.example.com -t "sensors/#" -v

快速上手

  1. 安装(以 Ubuntu 为例)

    bash 复制代码
    sudo apt install mosquitto mosquitto-clients
  2. 启动 Broker

    bash 复制代码
    mosquitto -c /etc/mosquitto/mosquitto.conf
  3. 测试通信

    • 终端 1(订阅消息):

      bash 复制代码
      mosquitto_sub -h localhost -t "test/hello"
    • 终端 2(发布消息):

      bash 复制代码
      mosquitto_pub -h localhost -t "test/hello" -m "Hello, MQTT!"

优势与生态

  • 开源免费:社区活跃,文档齐全。
  • 跨平台:支持 Linux、Windows、macOS、嵌入式系统。
  • 丰富的客户端库:支持 Python(paho-mqtt)、JavaScript(MQTT.js)等语言。
  • 与主流 IoT 平台集成:例如 Node-RED、Home Assistant、AWS IoT。

学习资源

Mosquitto 是物联网开发的瑞士军刀,适合快速搭建可靠的消息中间件。需要具体配置或实战示例,随时问我! 🚀




安装mosquitto

以下是 Mosquitto 在不同操作系统上的安装方法,涵盖常见平台:


1. Ubuntu/Debian

bash 复制代码
# 安装 Mosquitto Broker 和客户端工具
sudo apt update
sudo apt install mosquitto mosquitto-clients

# 验证安装
mosquitto -v  # 查看版本(如果提示已作为服务运行,执行以下命令)
sudo systemctl status mosquitto  # 检查服务状态

2. CentOS/RHEL

bash 复制代码
# 添加 EPEL 仓库
sudo yum install epel-release

# 安装 Mosquitto
sudo yum install mosquitto

# 启动服务
sudo systemctl start mosquitto
sudo systemctl enable mosquitto  # 开机自启

3. Windows

  1. 下载二进制文件

    访问 Mosquitto 官网下载页,选择 Windows Installer 版本。

    • 安装时勾选 "Install as Windows Service"(以服务形式运行)。
    • 默认安装路径:C:\Program Files\mosquitto
  2. 命令行使用

    • 打开命令提示符(需将 mosquitto 安装目录加入系统 PATH):

      cmd 复制代码
      mosquitto -v  # 启动 Broker(默认端口 1883)

4. macOS

方法一:Homebrew
bash 复制代码
# 安装
brew install mosquitto

# 启动服务
brew services start mosquitto  # 后台运行
方法二:手动下载

官网 下载 macOS 二进制包,解压后运行:

bash 复制代码
./mosquitto -c /path/to/mosquitto.conf

5. 树莓派(Raspberry Pi)

bash 复制代码
# 基于 Raspbian(Debian 系)
sudo apt update
sudo apt install mosquitto mosquitto-clients

# 验证
sudo systemctl status mosquitto

6. Docker 安装

bash 复制代码
# 拉取镜像并运行(映射端口 1883 和 9001)
docker run -d -p 1883:1883 -p 9001:9001 \
  -v /path/to/mosquitto.conf:/mosquitto/config/mosquitto.conf \
  eclipse-mosquitto

安装后验证

  1. 测试发布/订阅

    • 终端 1(订阅):

      bash 复制代码
      mosquitto_sub -h localhost -t "test"
    • 终端 2(发布):

      bash 复制代码
      mosquitto_pub -h localhost -t "test" -m "Hello, Mosquitto!"
    • 终端 1 应显示接收到的消息。

  2. 检查默认配置

    配置文件通常位于 /etc/mosquitto/mosquitto.conf,首次安装后允许匿名连接(需按需修改安全设置)。


常见问题

  • 端口冲突 :若 1883 端口被占用,修改 mosquitto.conf 中的 listener 端口。
  • 权限问题 :Linux 系统需确保用户对 /var/log/mosquitto/var/lib/mosquitto 有读写权限。

按需选择安装方式,完成后即可开始使用 MQTT 协议进行设备通信! 🌟




配置mosquitto

以下是 Mosquitto 的详细配置指南,涵盖核心配置项和安全优化步骤:


配置文件路径

  • Linux : /etc/mosquitto/mosquitto.conf
  • Windows : 安装目录下的 mosquitto.conf(如 C:\Program Files\mosquitto\mosquitto.conf
  • macOS (Homebrew) : /usr/local/etc/mosquitto/mosquitto.conf

基础配置

  1. 监听端口

    修改默认端口或绑定特定 IP:

    conf 复制代码
    listener 1883  # 默认非加密端口
    listener 8883  # TLS 加密端口
    bind_address 192.168.1.100  # 绑定到指定 IP
  2. 持久化存储

    保留消息和订阅状态(重启后不丢失):

    conf 复制代码
    persistence true
    persistence_location /var/lib/mosquitto/
  3. 日志配置

    控制日志级别和输出:

    conf 复制代码
    log_dest file /var/log/mosquitto/mosquitto.log
    log_type error  # 可选:error, warning, notice, information, debug
    connection_messages true  # 记录连接/断开事件

安全配置

1. 密码认证
  • 步骤
    1. 创建密码文件(首次添加 -c 参数):

      bash 复制代码
      sudo mosquitto_passwd -c /etc/mosquitto/passwd username
    2. 修改配置文件:

      conf 复制代码
      allow_anonymous false  # 禁用匿名访问
      password_file /etc/mosquitto/passwd
2. TLS/SSL 加密
  • 步骤
    1. 生成或获取证书(如自签名证书):

      bash 复制代码
      openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout key.pem
    2. 配置 TLS:

      conf 复制代码
      listener 8883
      certfile /path/to/cert.pem
      keyfile /path/to/key.pem
      tls_version tlsv1.2  # 指定 TLS 版本
3. 访问控制列表(ACL)

定义客户端对主题的读写权限:

conf 复制代码
acl_file /etc/mosquitto/acl

ACL 文件示例 (/etc/mosquitto/acl):

conf 复制代码
user username
topic read sensors/#       # 允许订阅 sensors/ 下的所有主题
topic write control/led    # 允许发布到 control/led

高级配置

1. 桥接多个 Broker

连接两个 Mosquitto 实例(跨服务器同步消息):

conf 复制代码
connection bridge-to-remote
address remote.broker.com:1883
topic # both 2  # 同步所有主题,QoS 2
2. 消息保留(Retained Messages)

配置全局保留消息行为:

conf 复制代码
retain_available true  # 启用保留消息功能
3. 限制资源占用

防止过量资源消耗:

conf 复制代码
max_connections 1000     # 最大并发连接数
message_size_limit 1024  # 单条消息最大大小(字节)

验证配置

  1. 检查配置文件语法

    bash 复制代码
    mosquitto -c /etc/mosquitto/mosquitto.conf --test
  2. 重启服务

    bash 复制代码
    sudo systemctl restart mosquitto  # Linux
    net stop mosquitto && net start mosquitto  # Windows
  3. 测试 TLS 连接

    bash 复制代码
    mosquitto_sub -h localhost -t "test" -p 8883 --cafile cert.pem -u username -P password

故障排查

  • 查看实时日志

    bash 复制代码
    tail -f /var/log/mosquitto/mosquitto.log
  • 常见错误

    • Error: Address already in use → 端口冲突,修改 listener 端口。
    • Permission denied → 检查证书或日志文件的权限(chmod 644)。

通过合理配置,Mosquitto 可满足从家庭物联网到企业级应用的需求。需要具体场景的配置示例,请随时告知! 🔧📡




docker部署mosquitto

以下是使用 Docker 部署 Mosquitto 的详细指南,涵盖基础配置、持久化存储、安全设置和常见操作:


1. 快速启动(基础版)

bash 复制代码
# 拉取官方镜像
docker pull eclipse-mosquitto

# 运行容器(默认配置,开放端口 1883)
docker run -d --name mosquitto \
  -p 1883:1883 \
  -p 9001:9001 \
  eclipse-mosquitto
  • 1883: MQTT 默认端口
  • 9001: WebSocket 端口(可选)

2. 自定义配置文件

步骤 1:创建本地配置文件
bash 复制代码
mkdir -p ~/mosquitto/config
touch ~/mosquitto/config/mosquitto.conf
步骤 2:编辑配置文件

示例配置 (~/mosquitto/config/mosquitto.conf):

conf 复制代码
persistence true
persistence_location /mosquitto/data/
log_dest file /mosquitto/log/mosquitto.log

# 安全配置(按需启用)
allow_anonymous false
password_file /mosquitto/config/passwd
步骤 3:挂载配置运行
bash 复制代码
docker run -d --name mosquitto \
  -p 1883:1883 \
  -v ~/mosquitto/config:/mosquitto/config \
  -v ~/mosquitto/data:/mosquitto/data \
  -v ~/mosquitto/log:/mosquitto/log \
  eclipse-mosquitto

3. 启用 TLS 加密

步骤 1:生成证书
bash 复制代码
openssl req -x509 -newkey rsa:2048 -days 365 \
  -keyout key.pem -out cert.pem -nodes \
  -subj "/CN=mosquitto"
步骤 2:配置 TLS

修改 mosquitto.conf

conf 复制代码
listener 8883
certfile /mosquitto/config/cert.pem
keyfile /mosquitto/config/key.pem
tls_version tlsv1.2
步骤 3:启动容器
bash 复制代码
docker run -d --name mosquitto \
  -p 8883:8883 \
  -v ~/mosquitto/config:/mosquitto/config \
  eclipse-mosquitto

4. 添加用户认证

步骤 1:创建密码文件
bash 复制代码
# 进入容器内操作
docker exec -it mosquitto sh

# 容器内执行
mosquitto_passwd -c /mosquitto/config/passwd username
步骤 2:修改配置文件
conf 复制代码
allow_anonymous false
password_file /mosquitto/config/passwd
步骤 3:重启容器
bash 复制代码
docker restart mosquitto

5. 使用 Docker Compose

创建 docker-compose.yml

yaml 复制代码
version: '3'

services:
  mosquitto:
    image: eclipse-mosquitto
    container_name: mosquitto
    ports:
      - "1883:1883"
      - "8883:8883"
      - "9001:9001"
    volumes:
      - ./config:/mosquitto/config
      - ./data:/mosquitto/data
      - ./log:/mosquitto/log
    restart: always

启动服务:

bash 复制代码
docker-compose up -d

6. 验证部署

测试订阅/发布
bash 复制代码
# 订阅(使用 TLS 和密码)
mosquitto_sub -h localhost -t "test" -p 8883 \
  --cafile ./config/cert.pem -u username -P password

# 发布
mosquitto_pub -h localhost -t "test" -m "Hello Docker" \
  -p 8883 --cafile ./config/cert.pem -u username -P password

7. 常见问题处理

权限错误
  • 确保挂载目录权限:

    bash 复制代码
    chmod -R a+rw ~/mosquitto/config
查看日志
bash 复制代码
docker logs mosquitto
配置热重载
bash 复制代码
docker kill -s HUP mosquitto

8. 高级配置

桥接多个 Broker

mosquitto.conf 中添加:

conf 复制代码
connection bridge-aws
address aws-iot-endpoint:8883
topic # both 2
bridge_insecure false
限制资源
yaml 复制代码
# 在 docker-compose.yml 中限制资源
deploy:
  resources:
    limits:
      cpus: '0.5'
      memory: 256M

通过 Docker 部署 Mosquitto,您可以快速搭建安全、可扩展的 MQTT 服务。根据实际需求调整配置即可! 🐳🔌




docker-compose安装部署mosquitto

以下是通过 Docker Compose 快速部署 Mosquitto MQTT Broker 的完整指南,包含基础配置、安全加固和持久化存储:


一、基础部署(匿名访问)

1. 创建 docker-compose.yml
yaml 复制代码
version: '3'

services:
  mosquitto:
    image: eclipse-mosquitto:latest
    container_name: mosquitto
    ports:
      - "1883:1883"   # MQTT 默认端口
      - "9001:9001"   # WebSocket 端口(可选)
    volumes:
      - ./mosquitto/data:/mosquitto/data  # 持久化数据
      - ./mosquitto/log:/mosquitto/log    # 日志目录
    restart: always
2. 启动服务
bash 复制代码
# 创建目录结构
mkdir -p mosquitto/{data,log}

# 启动容器
docker-compose up -d

二、启用密码认证

1. 生成密码文件
bash 复制代码
# 进入容器生成密码文件(或本地生成后挂载)
docker exec -it mosquitto sh
mosquitto_passwd -c /mosquitto/config/passwd your_username
# 输入密码并退出
2. 修改 docker-compose.yml
yaml 复制代码
services:
  mosquitto:
    volumes:
      - ./mosquitto/data:/mosquitto/data
      - ./mosquitto/log:/mosquitto/log
      - ./mosquitto/config:/mosquitto/config  # 挂载配置文件
    environment:
      - MOSQUITTO_ALLOW_ANONYMOUS=false       # 禁用匿名访问
3. 创建配置文件
bash 复制代码
mkdir mosquitto/config
echo 'password_file /mosquitto/config/passwd' > mosquitto/config/mosquitto.conf
4. 重启服务
bash 复制代码
docker-compose restart

三、启用 TLS 加密

1. 生成自签名证书
bash 复制代码
mkdir -p mosquitto/certs
openssl req -x509 -newkey rsa:2048 -days 365 -nodes \
  -keyout mosquitto/certs/key.pem \
  -out mosquitto/certs/cert.pem \
  -subj "/CN=your.domain.com"
2. 更新 docker-compose.yml
yaml 复制代码
services:
  mosquitto:
    ports:
      - "8883:8883"  # 添加 TLS 端口
    volumes:
      - ./mosquitto/certs:/mosquitto/certs  # 挂载证书
    environment:
      - MOSQUITTO_TLS_VERSION=tlsv1.2
3. 更新配置文件
bash 复制代码
echo '
listener 8883
certfile /mosquitto/certs/cert.pem
keyfile /mosquitto/certs/key.pem
' >> mosquitto/config/mosquitto.conf
4. 重启服务
bash 复制代码
docker-compose restart

四、完整版 docker-compose.yml(含认证和 TLS)

yaml 复制代码
version: '3'

services:
  mosquitto:
    image: eclipse-mosquitto:latest
    container_name: mosquitto
    ports:
      - "1883:1883"   # 非加密端口
      - "8883:8883"   # TLS 加密端口
      - "9001:9001"   # WebSocket
    volumes:
      - ./mosquitto/data:/mosquitto/data
      - ./mosquitto/log:/mosquitto/log
      - ./mosquitto/config:/mosquitto/config
      - ./mosquitto/certs:/mosquitto/certs
    environment:
      - MOSQUITTO_ALLOW_ANONYMOUS=false
      - MOSQUITTO_TLS_VERSION=tlsv1.2
    restart: unless-stopped

五、验证部署

1. 测试非加密连接
bash 复制代码
mosquitto_pub -h localhost -t "test" -m "Hello" -u your_username -P your_password
mosquitto_sub -h localhost -t "test" -u your_username -P your_password
2. 测试 TLS 加密连接
bash 复制代码
mosquitto_pub -h localhost -p 8883 -t "test" -m "Secure" \
  --cafile mosquitto/certs/cert.pem \
  -u your_username -P your_password

六、常见问题解决

权限错误
bash 复制代码
# 确保挂载目录可写
chmod -R a+rw mosquitto/{data,log,config,certs}
WebSocket 支持

mosquitto/config/mosquitto.conf 添加:

conf 复制代码
listener 9001
protocol websockets
查看实时日志
bash 复制代码
docker logs mosquitto -f

通过 Docker Compose,您可以在 5 分钟内搭建一个安全的 MQTT 服务。按需调整配置即可适配开发或生产环境! 🐳🔐




k8s安装部署mosquitto

以下是在 Kubernetes (k8s) 集群中部署 Mosquitto MQTT Broker 的详细指南,支持高可用、持久化存储和 TLS 加密:


1. 准备工作

创建 Namespace
yaml 复制代码
# mosquitto-namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: mqtt
bash 复制代码
kubectl apply -f mosquitto-namespace.yaml

2. 配置文件管理

创建 ConfigMap

将 Mosquitto 的配置文件挂载到容器中:

yaml 复制代码
# mosquitto-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mosquitto-config
  namespace: mqtt
data:
  mosquitto.conf: |
    listener 1883
    persistence true
    persistence_location /mosquitto/data/
    log_dest stdout
    allow_anonymous false  # 需配合密码文件使用
    password_file /mosquitto/secrets/passwd
bash 复制代码
kubectl apply -f mosquitto-configmap.yaml

3. 密钥管理

创建密码文件 Secret
  1. 本地生成密码文件:

    bash 复制代码
    mosquitto_passwd -c passwd your_username
  2. 创建 Secret:

    bash 复制代码
    kubectl create secret generic mosquitto-secrets \
      --namespace=mqtt \
      --from-file=passwd=./passwd
TLS 证书 Secret(可选)
bash 复制代码
kubectl create secret tls mosquitto-tls \
  --namespace=mqtt \
  --cert=cert.pem \
  --key=key.pem

4. 持久化存储

创建 PersistentVolumeClaim (PVC)
yaml 复制代码
# mosquitto-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mosquitto-pvc
  namespace: mqtt
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: standard  # 根据集群存储类调整
bash 复制代码
kubectl apply -f mosquitto-pvc.yaml

5. 部署 Mosquitto

Deployment 配置
yaml 复制代码
# mosquitto-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: mosquitto
  namespace: mqtt
spec:
  replicas: 1  # 单副本(MQTT Broker 通常需自定义集群方案)
  selector:
    matchLabels:
      app: mosquitto
  template:
    metadata:
      labels:
        app: mosquitto
    spec:
      containers:
      - name: mosquitto
        image: eclipse-mosquitto:2.0.15
        ports:
        - containerPort: 1883
          name: mqtt
        volumeMounts:
        - name: config
          mountPath: /mosquitto/config/mosquitto.conf
          subPath: mosquitto.conf
        - name: secrets
          mountPath: /mosquitto/secrets
          readOnly: true
        - name: data
          mountPath: /mosquitto/data
      volumes:
      - name: config
        configMap:
          name: mosquitto-config
      - name: secrets
        secret:
          secretName: mosquitto-secrets
      - name: data
        persistentVolumeClaim:
          claimName: mosquitto-pvc
bash 复制代码
kubectl apply -f mosquitto-deployment.yaml

6. 暴露服务

Service 配置
yaml 复制代码
# mosquitto-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: mosquitto-service
  namespace: mqtt
spec:
  selector:
    app: mosquitto
  ports:
    - protocol: TCP
      port: 1883
      targetPort: 1883
  type: LoadBalancer  # 根据环境选择 NodePort 或 ClusterIP
bash 复制代码
kubectl apply -f mosquitto-service.yaml

7. 验证部署

查看 Pod 状态
bash 复制代码
kubectl get pods -n mqtt
查看服务外部 IP
bash 复制代码
kubectl get svc -n mqtt mosquitto-service
测试连接
bash 复制代码
mosquitto_pub -h <EXTERNAL_IP> -t "test" -m "Hello k8s!" -u your_username -P your_password

8. 高级配置

启用 TLS(需更新 ConfigMap 和 Service)
  1. 更新 ConfigMap

    conf 复制代码
    listener 8883
    certfile /mosquitto/secrets/tls.crt
    keyfile /mosquitto/secrets/tls.key
    tls_version tlsv1.2
  2. 挂载 TLS Secret

    yaml 复制代码
    # 在 Deployment 的 volumes 中添加
    - name: tls
      secret:
        secretName: mosquitto-tls
    # 在 volumeMounts 中添加
    - name: tls
      mountPath: /mosquitto/secrets
      readOnly: true
  3. 更新 Service 端口

    yaml 复制代码
    ports:
      - protocol: TCP
        port: 8883
        targetPort: 8883

9. 故障排查

查看日志
bash 复制代码
kubectl logs -n mqtt <POD_NAME> -f
检查持久化存储
bash 复制代码
kubectl describe pvc mosquitto-pvc -n mqtt
kubectl describe pv  # 查看 PV 绑定状态
进入容器调试
bash 复制代码
kubectl exec -n mqtt -it <POD_NAME> -- /bin/sh

10. 清理资源

bash 复制代码
kubectl delete -f mosquitto-deployment.yaml
kubectl delete -f mosquitto-service.yaml
kubectl delete -f mosquitto-pvc.yaml
kubectl delete -f mosquitto-configmap.yaml
kubectl delete secret mosquitto-secrets -n mqtt
kubectl delete namespace mqtt

注意事项

  1. 高可用方案

    Mosquitto 原生不支持集群,可通过以下方式实现高可用:

    • 使用 MQTT 桥接 连接多个 Broker。
    • 部署 EMQXHiveMQ 等支持集群的 MQTT Broker。
  2. 性能优化

    • 调整 resources 限制 CPU/内存。
    • 使用更高效的存储类(如 SSD)。
  3. 监控

    • 集成 Prometheus + Grafana 监控消息吞吐量和连接数。

通过以上步骤,您可以在 Kubernetes 集群中快速部署生产级 Mosquitto 服务! 🚀📡




Windows部署mosquitto

以下是 Windows 系统 上部署 Mosquitto MQTT Broker 的详细步骤,涵盖安装、配置和常见问题处理:


1. 下载与安装

步骤 1:下载二进制文件
  1. 访问 Mosquitto 官网下载页
  2. 选择适用于 Windows 的安装包(如 mosquitto-2.0.15-install-windows-x64.exe)。
步骤 2:运行安装程序
  1. 双击安装包,选择安装路径(默认:C:\Program Files\mosquitto)。
  2. 关键选项
    • 勾选 "Install as Windows Service"(以服务形式运行)。
    • 勾选 "Add Mosquitto to System PATH"(将工具加入环境变量)。

2. 启动与验证

启动服务
  • 方法 1:通过服务管理器

    按下 Win + R,输入 services.msc,找到 Mosquitto Broker 服务,右键选择 启动

  • 方法 2:命令行操作

    cmd 复制代码
    net start mosquitto  # 启动服务
    net stop mosquitto   # 停止服务
验证安装

打开命令提示符(管理员权限):

cmd 复制代码
mosquitto -v
# 输出示例:mosquitto version 2.0.15

3. 配置文件与基础配置

配置文件路径

默认配置文件位于安装目录的 mosquitto.conf(如 C:\Program Files\mosquitto\mosquitto.conf)。

常用配置示例
  1. 修改监听端口

    conf 复制代码
    listener 1883
    listener 9000  # 添加额外端口
  2. 启用日志

    conf 复制代码
    log_dest file C:\mosquitto\log\mosquitto.log
    log_type all
持久化存储
conf 复制代码
persistence true
persistence_location C:\mosquitto\data\

4. 安全配置

密码认证
  1. 创建密码文件

    打开命令提示符,进入 Mosquitto 的安装目录(如 C:\Program Files\mosquitto):

    cmd 复制代码
    mosquitto_passwd -c C:\mosquitto\passwd username

    输入密码并确认。

  2. 配置认证

    修改 mosquitto.conf

    conf 复制代码
    allow_anonymous false
    password_file C:\mosquitto\passwd
启用 TLS/SSL 加密
  1. 生成证书 (示例):

    使用 OpenSSL 生成自签名证书(需提前安装 OpenSSL):

    cmd 复制代码
    openssl req -x509 -newkey rsa:2048 -days 365 -nodes -keyout key.pem -out cert.pem -subj "/CN=localhost"

    将生成的 cert.pemkey.pem 保存到 C:\mosquitto\certs\

  2. 配置 TLS

    修改 mosquitto.conf

    conf 复制代码
    listener 8883
    certfile C:\mosquitto\certs\cert.pem
    keyfile C:\mosquitto\certs\key.pem
    tls_version tlsv1.2

5. 测试通信

订阅消息
cmd 复制代码
mosquitto_sub -h localhost -t "test" -u username -P password
发布消息
cmd 复制代码
mosquitto_pub -h localhost -t "test" -m "Hello Windows!" -u username -P password
测试 TLS 连接
cmd 复制代码
mosquitto_sub -h localhost -p 8883 -t "test" --cafile C:\mosquitto\certs\cert.pem -u username -P password

6. 常见问题解决

端口冲突
  • 错误提示Error: Address already in use
  • 解决方案
    1. 修改 mosquitto.conf 中的 listener 端口。

    2. 重启服务:

      cmd 复制代码
      net stop mosquitto
      net start mosquitto
权限问题
  • 错误提示Permission denied
  • 解决方案
    1. 以管理员权限运行命令提示符。
    2. 确保 Mosquitto 服务账户对配置文件、证书和日志目录有读写权限。
防火墙配置
  • 允许 Mosquitto 通过 Windows 防火墙:
    1. 打开 控制面板 > Windows Defender 防火墙 > 允许应用通过防火墙
    2. 添加 mosquitto.exe 并允许 TCP 1883TCP 8883 端口。

7. 进阶操作

作为服务调试
  • 查看服务日志
    日志默认路径为 C:\mosquitto\log\mosquitto.log(需在配置文件中指定)。
自定义服务启动参数
  1. 修改服务属性:

    cmd 复制代码
    sc config mosquitto binPath= "\"C:\Program Files\mosquitto\mosquitto.exe\" -c C:\mosquitto\mosquitto.conf -v"
  2. 重启服务生效。


8. 卸载 Mosquitto

  1. 停止服务:

    cmd 复制代码
    net stop mosquitto
  2. 运行安装程序并选择 Uninstall ,或手动删除以下内容:

    • 安装目录 C:\Program Files\mosquitto
    • 服务注册项(通过 sc delete mosquitto 删除)

通过以上步骤,您可以在 Windows 上快速搭建安全的 MQTT 服务。如需进一步优化或集成,可参考 官方文档! 🖥️🔧




Ubuntu部署mosquitto

以下是 Ubuntu 系统 上部署 Mosquitto MQTT Broker 的完整指南,涵盖安装、安全配置、服务管理和故障排查:


一、安装 Mosquitto

1. 更新软件源
bash 复制代码
sudo apt update
2. 安装 Mosquitto 服务端和客户端工具
bash 复制代码
sudo apt install mosquitto mosquitto-clients
3. 验证安装
bash 复制代码
mosquitto -v  # 查看版本(若提示服务已运行,检查状态)
sudo systemctl status mosquitto  # 确保服务已启动

二、基础配置

1. 配置文件路径
  • 主配置文件: /etc/mosquitto/mosquitto.conf
  • 日志文件: /var/log/mosquitto/mosquitto.log
  • 数据目录: /var/lib/mosquitto/
2. 编辑配置文件
bash 复制代码
sudo nano /etc/mosquitto/mosquitto.conf
3. 常用配置示例
conf 复制代码
# 监听端口(默认1883,如需添加其他端口)
listener 1883

# 持久化存储(重启后保留订阅和消息)
persistence true
persistence_location /var/lib/mosquitto/

# 日志配置
log_dest file /var/log/mosquitto/mosquitto.log
log_type error
connection_messages true  # 记录连接事件
4. 重启服务生效
bash 复制代码
sudo systemctl restart mosquitto

三、安全加固

1. 密码认证
  1. 创建密码文件

    bash 复制代码
    sudo mosquitto_passwd -c /etc/mosquitto/passwd your_username

    输入密码并确认。

  2. 修改配置

    conf 复制代码
    allow_anonymous false  # 禁用匿名访问
    password_file /etc/mosquitto/passwd
2. TLS/SSL 加密
  1. 生成自签名证书

    bash 复制代码
    sudo openssl req -x509 -newkey rsa:2048 -days 365 -nodes \
      -keyout /etc/mosquitto/certs/key.pem \
      -out /etc/mosquitto/certs/cert.pem \
      -subj "/CN=your_domain_or_ip"
  2. 配置 TLS

    conf 复制代码
    listener 8883
    certfile /etc/mosquitto/certs/cert.pem
    keyfile /etc/mosquitto/certs/key.pem
    tls_version tlsv1.2
  3. 设置证书权限

    bash 复制代码
    sudo chmod 644 /etc/mosquitto/certs/*.pem
3. 访问控制列表(ACL)
  1. 创建 ACL 文件

    bash 复制代码
    sudo nano /etc/mosquitto/acl
  2. 定义规则

    conf 复制代码
    user your_username
    topic read sensors/#   # 允许订阅 sensors/ 下所有主题
    topic write control/#  # 允许发布到 control/ 下主题
  3. 启用 ACL

    conf 复制代码
    acl_file /etc/mosquitto/acl

四、服务管理

1. 常用命令
bash 复制代码
sudo systemctl start mosquitto    # 启动服务
sudo systemctl stop mosquitto     # 停止服务
sudo systemctl restart mosquitto  # 重启服务
sudo systemctl enable mosquitto   # 开机自启
2. 查看实时日志
bash 复制代码
sudo tail -f /var/log/mosquitto/mosquitto.log

五、测试通信

1. 本地订阅消息(密码认证)
bash 复制代码
mosquitto_sub -h localhost -t "test" -u your_username -P your_password
2. 本地发布消息
bash 复制代码
mosquitto_pub -h localhost -t "test" -m "Hello Ubuntu!" -u your_username -P your_password
3. 测试 TLS 加密连接
bash 复制代码
mosquitto_sub -h localhost -p 8883 -t "test" \
  --cafile /etc/mosquitto/certs/cert.pem \
  -u your_username -P your_password

六、防火墙配置

bash 复制代码
sudo ufw allow 1883   # 开放默认 MQTT 端口
sudo ufw allow 8883   # 开放 TLS 端口
sudo ufw reload       # 应用规则

七、常见问题解决

1. 端口冲突
  • 错误提示Error: Address already in use
  • 解决方案
    • 修改 mosquitto.conf 中的 listener 端口。

    • 终止占用端口的进程:

      bash 复制代码
      sudo lsof -i :1883  # 查找占用进程
      sudo kill <PID>      # 终止进程
2. 认证失败
  • 错误提示Connection Refused: bad user name or password
  • 检查步骤
    • 确认密码文件路径正确且权限为 644
    • 重启服务:sudo systemctl restart mosquitto
3. 证书权限问题
  • 错误提示Error loading certificate or key

  • 解决方案

    bash 复制代码
    sudo chmod 644 /etc/mosquitto/certs/*.pem

八、进阶配置

1. 启用 WebSocket 支持
conf 复制代码
listener 9001
protocol websockets
2. 限制资源使用
conf 复制代码
max_connections 1000      # 最大连接数
message_size_limit 256000 # 单条消息大小限制(字节)
3. 桥接其他 MQTT Broker
conf 复制代码
connection aws-iot
address your-aws-iot-endpoint:8883
topic # both 2
bridge_insecure false

九、卸载 Mosquitto

bash 复制代码
sudo apt purge mosquitto mosquitto-clients  # 删除软件包和配置
sudo rm -rf /etc/mosquitto/ /var/lib/mosquitto/  # 清理残留文件

通过以上步骤,您可以在 Ubuntu 上快速搭建一个安全的 MQTT 服务。建议结合 官方文档 进行深度定制! 🚀




Fedora安装部署mosquitto

以下是 Fedora 系统 上安装和配置 Mosquitto MQTT Broker 的详细步骤:


1. 安装 Mosquitto

通过 DNF 包管理器安装
bash 复制代码
# 更新软件包列表
sudo dnf update

# 安装 Mosquitto 及其客户端工具
sudo dnf install mosquitto mosquitto-clients

# 验证安装
mosquitto -v  # 查看版本
验证服务状态
bash 复制代码
sudo systemctl status mosquitto  # 检查服务是否已启动

2. 基础配置

配置文件路径
  • 主配置文件 : /etc/mosquitto/mosquitto.conf
  • 日志文件 : /var/log/mosquitto/mosquitto.log
  • 数据目录 : /var/lib/mosquitto/
编辑配置文件
bash 复制代码
sudo nano /etc/mosquitto/mosquitto.conf
常用配置示例
conf 复制代码
# 监听默认端口
listener 1883

# 持久化存储(重启后保留消息和订阅)
persistence true
persistence_location /var/lib/mosquitto/

# 日志配置
log_dest file /var/log/mosquitto/mosquitto.log
log_type error
重启服务生效
bash 复制代码
sudo systemctl restart mosquitto

3. 安全加固

密码认证
  1. 创建密码文件

    bash 复制代码
    sudo mosquitto_passwd -c /etc/mosquitto/passwd your_username

    输入密码并确认。

  2. 禁用匿名访问

    conf 复制代码
    allow_anonymous false
    password_file /etc/mosquitto/passwd
TLS/SSL 加密
  1. 生成自签名证书

    bash 复制代码
    sudo mkdir -p /etc/mosquitto/certs
    sudo openssl req -x509 -newkey rsa:2048 -days 365 -nodes \
      -keyout /etc/mosquitto/certs/key.pem \
      -out /etc/mosquitto/certs/cert.pem \
      -subj "/CN=your_server_ip_or_domain"
  2. 配置 TLS 监听

    conf 复制代码
    listener 8883
    certfile /etc/mosquitto/certs/cert.pem
    keyfile /etc/mosquitto/certs/key.pem
    tls_version tlsv1.2
  3. 设置证书权限

    bash 复制代码
    sudo chmod 644 /etc/mosquitto/certs/*.pem

4. 防火墙配置

bash 复制代码
# 开放 MQTT 默认端口和 TLS 端口
sudo firewall-cmd --permanent --add-port=1883/tcp
sudo firewall-cmd --permanent --add-port=8883/tcp
sudo firewall-cmd --reload

5. 测试通信

订阅消息(本地测试)
bash 复制代码
mosquitto_sub -h localhost -t "test" -u your_username -P your_password
发布消息
bash 复制代码
mosquitto_pub -h localhost -t "test" -m "Hello Fedora!" -u your_username -P your_password
测试 TLS 加密连接
bash 复制代码
mosquitto_sub -h localhost -p 8883 -t "test" \
  --cafile /etc/mosquitto/certs/cert.pem \
  -u your_username -P your_password

6. 服务管理

bash 复制代码
sudo systemctl start mosquitto     # 启动服务
sudo systemctl stop mosquitto      # 停止服务
sudo systemctl restart mosquitto   # 重启服务
sudo systemctl enable mosquitto    # 开机自启

7. 常见问题解决

SELinux 权限问题
  • 错误现象:服务启动失败或无法写入日志/数据。

  • 解决方案 :临时禁用 SELinux 或添加策略规则:

    bash 复制代码
    # 临时禁用 SELinux(重启后失效)
    sudo setenforce 0
    
    # 永久禁用(需编辑 /etc/selinux/config)
    sudo nano /etc/selinux/config  # 修改 SELINUX=disabled
端口冲突
  • 错误提示Error: Address already in use
  • 解决方法
    1. 检查占用端口的进程:

      bash 复制代码
      sudo ss -tulnp | grep ':1883'
    2. 终止进程或修改 mosquitto.conf 中的 listener 端口。


8. 卸载 Mosquitto

bash 复制代码
sudo dnf remove mosquitto mosquitto-clients
sudo rm -rf /etc/mosquitto/ /var/lib/mosquitto/

通过以上步骤,您可以在 Fedora 上快速搭建安全的 MQTT 服务。如需更多高级配置(如 WebSocket 支持、ACL 访问控制),可参考 官方文档! 🚀🔧




CentOS安装部署mosquitto

以下是 CentOS 系统 上安装和配置 Mosquitto MQTT Broker 的详细指南:


1. 安装 Mosquitto

步骤 1:添加 EPEL 仓库
bash 复制代码
sudo yum install epel-release
sudo yum update
步骤 2:安装 Mosquitto
bash 复制代码
sudo yum install mosquitto mosquitto-clients
步骤 3:验证安装
bash 复制代码
mosquitto -v  # 查看版本(若未显示版本,重启服务)
sudo systemctl start mosquitto    # 启动服务
sudo systemctl enable mosquitto   # 设置开机自启

2. 基础配置

配置文件路径
  • 主配置文件 : /etc/mosquitto/mosquitto.conf
  • 日志文件 : /var/log/mosquitto/mosquitto.log
  • 数据目录 : /var/lib/mosquitto/
编辑配置文件
bash 复制代码
sudo vi /etc/mosquitto/mosquitto.conf
配置示例
conf 复制代码
# 监听默认端口
listener 1883

# 持久化存储
persistence true
persistence_location /var/lib/mosquitto/

# 日志配置
log_dest file /var/log/mosquitto/mosquitto.log
log_type error
重启服务
bash 复制代码
sudo systemctl restart mosquitto

3. 安全加固

密码认证
  1. 创建密码文件

    bash 复制代码
    sudo mosquitto_passwd -c /etc/mosquitto/passwd your_username

    输入密码并确认。

  2. 禁用匿名访问

    conf 复制代码
    allow_anonymous false
    password_file /etc/mosquitto/passwd
TLS/SSL 加密
  1. 生成自签名证书

    bash 复制代码
    sudo mkdir -p /etc/mosquitto/certs
    sudo openssl req -x509 -newkey rsa:2048 -days 365 -nodes \
      -keyout /etc/mosquitto/certs/key.pem \
      -out /etc/mosquitto/certs/cert.pem \
      -subj "/CN=your_server_ip_or_domain"
  2. 配置 TLS

    conf 复制代码
    listener 8883
    certfile /etc/mosquitto/certs/cert.pem
    keyfile /etc/mosquitto/certs/key.pem
    tls_version tlsv1.2
  3. 设置证书权限

    bash 复制代码
    sudo chmod 644 /etc/mosquitto/certs/*.pem

4. 防火墙配置

bash 复制代码
# 开放 MQTT 端口
sudo firewall-cmd --permanent --add-port=1883/tcp
sudo firewall-cmd --permanent --add-port=8883/tcp
sudo firewall-cmd --reload

5. 测试通信

订阅消息
bash 复制代码
mosquitto_sub -h localhost -t "test" -u your_username -P your_password
发布消息
bash 复制代码
mosquitto_pub -h localhost -t "test" -m "Hello CentOS!" -u your_username -P your_password
测试 TLS 连接
bash 复制代码
mosquitto_sub -h localhost -p 8883 -t "test" \
  --cafile /etc/mosquitto/certs/cert.pem \
  -u your_username -P your_password

6. 服务管理

bash 复制代码
sudo systemctl start mosquitto     # 启动服务
sudo systemctl stop mosquitto      # 停止服务
sudo systemctl restart mosquitto   # 重启服务

7. 常见问题解决

SELinux 权限问题
  • 错误现象:服务无法写入日志或证书被拒绝。

  • 临时解决方案

    bash 复制代码
    sudo setenforce 0  # 临时禁用 SELinux
  • 永久解决方案
    编辑 /etc/selinux/config,设置 SELINUX=permissive,然后重启系统。

端口冲突
  • 检查占用端口

    bash 复制代码
    sudo netstat -tulnp | grep ':1883'
  • 修改配置 :调整 mosquitto.conf 中的 listener 端口。


8. 卸载 Mosquitto

bash 复制代码
sudo yum remove mosquitto mosquitto-clients
sudo rm -rf /etc/mosquitto/ /var/lib/mosquitto/

通过以上步骤,您可以在 CentOS 系统上快速部署安全的 MQTT 服务。如需支持 MQTT 5.0 或更高级功能,建议从源码编译安装(参考 官方文档)。 🔧📡




Debian安装部署mosquitto

以下是 Debian 系统 上安装和配置 Mosquitto MQTT Broker 的详细步骤:


1. 安装 Mosquitto

步骤 1:更新软件源
bash 复制代码
sudo apt update
sudo apt upgrade -y
步骤 2:安装软件包
bash 复制代码
sudo apt install mosquitto mosquitto-clients
步骤 3:验证安装
bash 复制代码
mosquitto -v  # 查看版本
sudo systemctl status mosquitto  # 检查服务状态

2. 基础配置

配置文件路径
  • 主配置文件 : /etc/mosquitto/mosquitto.conf
  • 日志文件 : /var/log/mosquitto/mosquitto.log
  • 数据目录 : /var/lib/mosquitto/
修改配置文件
bash 复制代码
sudo nano /etc/mosquitto/mosquitto.conf
配置示例
conf 复制代码
# 监听默认端口(MQTT)
listener 1883

# 持久化存储(防止重启后数据丢失)
persistence true
persistence_location /var/lib/mosquitto/

# 日志配置
log_dest file /var/log/mosquitto/mosquitto.log
log_type error
重启服务生效
bash 复制代码
sudo systemctl restart mosquitto

3. 安全加固

密码认证
  1. 创建密码文件

    bash 复制代码
    sudo mosquitto_passwd -c /etc/mosquitto/passwd your_username

    输入密码并确认。

  2. 禁用匿名访问

    修改配置文件:

    conf 复制代码
    allow_anonymous false
    password_file /etc/mosquitto/passwd
TLS/SSL 加密
  1. 生成自签名证书

    bash 复制代码
    sudo mkdir -p /etc/mosquitto/certs
    sudo openssl req -x509 -newkey rsa:2048 -days 365 -nodes \
      -keyout /etc/mosquitto/certs/key.pem \
      -out /etc/mosquitto/certs/cert.pem \
      -subj "/CN=your_server_ip_or_domain"
  2. 配置 TLS 监听

    conf 复制代码
    listener 8883
    certfile /etc/mosquitto/certs/cert.pem
    keyfile /etc/mosquitto/certs/key.pem
    tls_version tlsv1.2
  3. 设置证书权限

    bash 复制代码
    sudo chmod 644 /etc/mosquitto/certs/*.pem

4. 防火墙配置

bash 复制代码
# 开放 MQTT 默认端口和 TLS 端口
sudo ufw allow 1883/tcp
sudo ufw allow 8883/tcp
sudo ufw reload

5. 测试通信

订阅消息
bash 复制代码
mosquitto_sub -h localhost -t "test" -u your_username -P your_password
发布消息
bash 复制代码
mosquitto_pub -h localhost -t "test" -m "Hello Debian!" -u your_username -P your_password
测试 TLS 加密连接
bash 复制代码
mosquitto_sub -h localhost -p 8883 -t "test" \
  --cafile /etc/mosquitto/certs/cert.pem \
  -u your_username -P your_password

6. 服务管理

bash 复制代码
sudo systemctl start mosquitto     # 启动服务
sudo systemctl stop mosquitto      # 停止服务
sudo systemctl restart mosquitto   # 重启服务
sudo systemctl enable mosquitto    # 开机自启

7. 常见问题解决

权限错误
  • 错误提示Permission denied
  • 解决方案
    1. 确保服务账户对证书和日志目录有权限:

      bash 复制代码
      sudo chown -R mosquitto:mosquitto /etc/mosquitto/certs/
      sudo chmod 644 /etc/mosquitto/certs/*.pem
端口冲突
  • 检查占用端口的进程

    bash 复制代码
    sudo lsof -i :1883
    sudo kill <PID>  # 终止占用进程
查看实时日志
bash 复制代码
sudo tail -f /var/log/mosquitto/mosquitto.log

8. 卸载 Mosquitto

bash 复制代码
sudo apt purge mosquitto mosquitto-clients
sudo rm -rf /etc/mosquitto/ /var/lib/mosquitto/

通过以上步骤,您可以在 Debian 系统上快速搭建一个安全的 MQTT 服务。如需更多高级功能(如 WebSocket 支持、ACL 权限控制),请参考 官方文档! 🚀🔌




相关推荐
Lin桐12 分钟前
②Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网
linux·网络协议·tcp/ip·网络安全·缓存·信息与通信·信号处理
银河小铁骑plus38 分钟前
Go学习笔记:基础语法6
笔记·学习·golang
希望_睿智1 小时前
C++网络编程之套接字选项配置
c++·网络协议
sealaugh322 小时前
aws(学习笔记第三十二课) 深入使用cdk(API Gateway + event bridge)
笔记·学习·aws
江小年2 小时前
Gin学习笔记
笔记·学习·gin
愚公搬代码4 小时前
【愚公系列】《Python网络爬虫从入门到精通》045-Charles的SSL证书的安装
网络·爬虫·python·网络协议·ssl
cliff,5 小时前
【python爬虫】酷狗音乐爬取
笔记·爬虫·python·学习
EasyCVR9 小时前
EasyRTC嵌入式视频通话SDK的跨平台适配,构建web浏览器、Linux、ARM、安卓等终端的低延迟音视频通信
android·arm开发·网络协议·tcp/ip·音视频·webrtc
车载测试工程师12 小时前
车载以太网测试-3【Wireshark介绍】
经验分享·功能测试·网络协议·车载系统
PinkandWhite14 小时前
MySQL复习笔记
数据库·笔记·mysql