MENU

利用Docker + NanoMQ快速搭建Broker(wss://)

January 6, 2025 • Read: 39 • 随心笔记

有时候需要迅速拉起一个MQTT Broker使用,而轻量的NanoMQ和Docker搭配再合适不过,因为考虑到公网传输,所以会使用SSL加密,最终的协议就是 wss://

配置文件

针对文件/etc/nanomq/nanomq.conf写入以下配置:

# NanoMQ Configuration 0.18.0

# #============================================================
# # NanoMQ Broker
# #============================================================

mqtt {
    property_size = 32
    max_packet_size = 260MB
    max_mqueue_len = 2048
    retry_interval = 10s
    keepalive_multiplier = 1.25

    # Three of below, unsupported now
    max_inflight_window = 2048
    max_awaiting_rel = 10s
    await_rel_timeout = 10s
}

listeners.ws {
    bind = "0.0.0.0:8083/mqtt"
}

log {
    to = [file, console]
    level = warn
    dir = "/tmp"
    file = "nanomq.log"
    rotation {
        size = 10MB
        count = 5
    }
}

auth {
    allow_anonymous = false
    no_match = allow
    deny_action = ignore

    cache = {
        max_size = 32
        ttl = 1m
    }

    # 配置密码认证
    password = {
        "admin": "123234zxc"
    }
}

Docker 部署

docker run -d --restart unless-stopped \
    --name nanomq-ws \
    -p 8083:8083 \
    -v /etc/nanomq/nanomq.conf:/etc/nanomq.conf \
    emqx/nanomq:latest

然后浏览器访问http://你的IP:8083/如果出现一个404页面,则表示启动成功,具体也可看 docker log 日志。

SSL配置

其实NanoMQ自身可以配置证书,但维护SSL是一件繁琐的事情,个人喜欢将证书交给Caddy自动维护,所以利用Caddy反代一下 NanoMQ自身的ws协议,再配合Caddy自身主动维护SSL证书,于是就得到咯wss://

这个步骤说的比较笼统,但原理就是这个原理,这里给出一个Caddy参考配置:

{
    "admin": {
        "disabled": true
    },
    "apps": {
        "http": {
            "servers": {
                "site": {
                    "listen": [
                        ":80",
                        ":443"
                    ],
                    "routes": [
                        {
                            "match": [
                                {
                                    "host": [
                                        "您的域名"
                                    ]
                                }
                            ],
                            "handle": [
                                {
                                    "handler": "reverse_proxy",
                                    "upstreams": [
                                        {
                                            "dial": "172.17.0.1:8083"
                                        }
                                    ]
                                }
                            ]
                        }
                    ]
                }
            }
        }
    }
}

MQTTX连接配置

客户端连接参考配置:

mqttx.png