[Unraid 系列 v6.10+] 7 Docker 安装配置 Mosquitto

说明

推荐去看 B站 Mosquitto学习心得_哔哩哔哩_bilibili 视频,基本是对照着官网进行口语翻译,基本上工具也是用的是官方提供的,对于初学者相当不错。

UNRAID 社区官方模板

默认模板

说明
名称 mosquitto
存储库 eclipse-mosquitto:2 默认,可以自行修改版本。
网络类型 Bridge 默认。
MQTT Port 1883 标准 MQTT 端口,默认 1883
config /mnt/user/appdata/mosquitto/config/ 默认。
data /mnt/user/appdata/mosquitto/data 默认。
logs /mnt/user/appdata/mosquitto/log 默认。

更新模板

根据 Mosquitto Docker 配置 - 终极指南 |塞达洛 (cedalo.com) 提供的说明,在 unraid 模板中添加以下配置。

说明
RUN_INSECURE_MQTT_SERVER 0 设置默认值为 0
MQTT TLS port 8883 自选。设置默认值为 8883
MQTT Websockets port 9001 自选。设置默认值为 9001
  • RUN_INSECURE_MQTT_SERVER :将此环境变量设置为在端口 1883 上运行接受匿名客户端的不安全的缺省 MQTT 服务器。任何其他值都不起作用。

    若要启用“接受匿名客户端”的功能,将其值设置为 1 即可。

  • MQTT TLS port :自选。经常用作 MQTT TLS 端口。默认情况下不启用。

    • 官方推荐作为非证书保护的 TCP 端口。
    • 8884 :官方推荐作为有证书保护的 TCP 端口。
  • MQTT Websockets port :自选。标准 MQTT Websockets 端口。默认情况下不启用。

Docker Compose

docker-compose.yml

version: '3.8'

services:
    mosquitto:
        image: eclipse-mosquitto:2
        ports:
            - 1883:1883
            - 8883:8883
            - 9001:9001
        volumes:
            - ./mosquitto/config:/mosquitto/config
            - ./mosquitto/data:/mosquitto/data
            - ./mosquitto/log:/mosquitto/log
        networks:
            - mosquitto
networks:
    mosquitto:
        name: mosquitto
        driver: bridge

启动: docker-compose up -d

配置 Mosquitto

设置基于密码的身份认证

创建密码文件附加到容器。运行以下命令以创建用户并将其添加到此文件(可以更改为其他路径):

mosquitto_passwd -c /mnt/user/appdata/mosquitto/config/passwd user_name

如果要将更多用户添加到密码文件,请使用以下命令:

mosquitto_passwd -c /mnt/user/appdata/mosquitto/config/passwd user_name password

如果要删除用户,请运行:

mosquitto_passwd -D /mnt/user/appdata/mosquitto/config/passwd user_name

开启 TLS

使用 X509 格式、PEM 编码的证书。

第三方证书

可以使用阿里的免费证书,证书格式: Apache 证书OV 和 DV 根证书

证书文件后缀为 .crt ,密钥文件为 .key

Apache 证书 有关文件作为客户端证书和密钥, OV 和 DV 根证书 作为 CA 证书。

OpenSSL 生成证书

根据 Mosquitto-tls 手册页 | Eclipse Mosquitto

  • 生成证书颁发机构证书和密钥:

    openssl req -new -x509 -days <持续时间> -extensions v3_ca -keyout ca.key -out ca.crt
    
  • 服务器

    • 生成服务器密钥。

      openssl genrsa -aes256 -out server.key 2048
      
    • 生成不加密的服务器密钥。

      openssl genrsa -out server.key 2048
      
    • 生成要发送到 CA 的证书签名请求。

      openssl req -out server.csr -key server.key -new
      

      注意:当系统提示输入 CN(公用名)时,请输入您的服务器(或代理)主机名或域名。

    • 将 CSR 发送到 CA,或使用您的 CA 密钥对其进行签名。

      openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days <持续时间>
      
  • 客户

    • 生成客户端密钥。

      openssl genrsa -aes256 -out client.key 2048
      
    • 生成要发送到 CA 的证书签名请求。

      openssl req -out client.csr -key client.key -new
      
    • 将 CSR 发送到 CA,或使用您的 CA 密钥对其进行签名。

      openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt -days <持续时间>
      

mosquitto.conf

主要配置示例

#监听端口 MQTT Default listener
listener 1883 0.0.0.0
#侦听端口 1883 上的所有可用网络接口,可以在上面的侦听器中省略 IP 地址 ,但建议将其保留得更明确

# MQTT over WebSockets
#listener 9001 0.0.0.0
#protocol websockets
#如果还想在 TLS 上使用 websockets 就设置证书
#cafile /path/to/your/ca.crt
#certfile /path/to/your/mosquitto.crt
#keyfile /path/to/your/mosquitto.key

# MQTT over TLS
#listener 8883 0.0.0.0
#cafile /path/to/your/ca.crt
#certfile /path/to/your/mosquitto.crt
#keyfile /path/to/your/mosquitto.key

#持久化数据
persistence true
persistence_location /mosquitto/data/

#启用日志
log_dest file /mosquitto/log/mosquitto.log
log_type error
#取消注释所需的日志级别
#debug/error/warning/notice/information/subscribe/unsubscribe/websockets/none/all/error/warning
#输出日志到控制台
#log_dest stdout

#基于密码的身份认证
password_file /mosquitto/config/passwd

#允许匿名连接
allow_anonymous false
#除了在创建 docker 容器时使用 `RUN_INSECURE_MQTT_SERVER` 环境变量,`allow_anonymous` 参数可防止未经身份验证的客户端连接到代理。。默认情况下,此参数设置为 false,但显式提及它始终是一个好主意。
#如果要实现更高的安全性,请不要允许此设置,并仅使用身份验证进行连接。

重新启动容器以使更改生效。

  • 监听端口。

    从 Mosquitto 2.0.0 开始,您必须显式配置侦听器,或设置 override 变量。

    如果在运行 docker run 命令时使用该选项映射了端口,则侦听器将在 mqtt://0.0.0.0:1883 时可供主机使用。这意味着您的代理也将在主机的端口 1883 上可供外界使用(请注意,如果您希望从外部访问此端口,您可能必须确保防火墙不会阻止此端口)。

子配置

mosquitto 通常通过一个名为 的主配置文件进行配置。但是,为了便于在 unRAID 方案中使用,此容器改用仅包含单个选项的默认主配置文件。

include_dir /mosquitto/config

此配置会导致枚举挂载点中的所有文件,并将它们合并到共享配置中。您可以在此位置创建单个文件,也可以创建单独文件的集合。

例如,您可以创建以下文件:

文件 内容
mosquitto.conf 主 mosquitto 配置文件
tls.conf TLS 的其他侦听器配置
websockets.conf Websockets 的其他侦听器配置

警告:将单个文件应用于配置的顺序不一定是按字母顺序排列的,它是由操作系统和文件系统的特性决定的,因此尝试从一个文件中的设置“覆盖”另一个文件中的设置是不安全的。

客户端

官方 CLI 工具

Mosquitto 自带了 CLI 工具 mosquitto_submosquitto_pub 等,参考: Index of /man/ (mosquitto.org)

示例:

# 接收
mosquitto_sub -h test.mosquitto.org -p 8884 -u user_name -P user_passwd -t "topic" -v --cafile ca.crt --cert client.crt --key client.key

# 发送
mosquitto_pub -u user_name -P user_passwd -t "topic" -m "msg"

MQTTX 图形工具

MQTTX Download

参考

posted @ 2023-11-04 14:09  Yogile  阅读(451)  评论(0编辑  收藏  举报