Skip to content

Docker 部署指南

本节将指导您使用官方 Docker 镜像快速安装和运行 NanoMQ,以及 Docker 部署模式下如何加载自定义配置。我们将以最新版的 NanoMQ 为例进行说明,如希望体验其他版本,可前往 NanoMQ 下载页面

拉取 Docker 镜像

NanoMQ 目前提供了三个 Docker 部署版本,功能差异见下表:

功能NanoMQ 基础版(默认)NanoMQ Slim 版NanoMQ 完整版
MQTT Broker 功能
TLS/SSL
SQLite
规则引擎
MQTT over TCP 桥接
MQTT over QUIC 桥接
AWS 桥接 *
ZMQ 网关
SOME/IP 网关
DDS 网关
Bench 基准测试工具集

[^*]: Docker 部署中暂不支持 AWS 桥接,如希望使用 AWS 桥接,请通过源码编译安装

您可根据需要选择要拉取的 Docker 镜像,如latest,此时将拉取最新的基础版镜像:

bash
docker pull emqx/nanomq:latest

如希望拉取指定版本 Slim 或者完整版镜像,还应指定版本号:

bash
docker pull emqx/nanomq:0.18.2-slim

或完整版

bash
docker pull emqx/nanomq:0.18.2-full

有关 NanoMQ 官方镜像的更多信息,请查看 Docker Hub - nanomq

通过 Docker 运行 NanoMQ

运行以下命令启动 NanoMQ:

bash
docker run -d --name nanomq -p 1883:1883 -p 8083:8083 -p 8883:8883 emqx/nanomq:latest

加载自定义配置

NanoMQ 也支持通过配置文件或环境变量加载自定义配置。

通过配置文件加载

如希望通过配置文件启动 NanoMQ:

  • 在 Docker 容器中修改 /etc/nanomq.conf

  • 将本机已修改的配置文件通过 docker cp 命令拷贝到容器中 /etc/nanomq.conf路径:

    docker cp nanomq.conf nanomq:/etc/nanomq.conf

以下为 MQTT 桥接配置示例,更多关于 NanoMQ 的配置项说明,可参考 配置说明

bash
bridges.mqtt.name {
	server = "mqtt-tcp://broker.emqx.io:1883"
	proto_ver = 4
	clean_start = true
	keepalive = 60s
	forwards = [
		{
			remote_topic = "fwd/topic1"
			local_topic = "topic1"
		}
		{
			remote_topic = "fwd/topic2"
			local_topic = "topic2"
		}
	]
	subscription = [
		{
			remote_topic = "cmd/topic1"
			local_topic = "topic3"
			qos = 1
		},
		{
			remote_topic = "cmd/topic2"
			local_topic = "topic4"
			qos = 2
		}
	]
	max_parallel_processes = 2 
	max_send_queue_len = 1024
	max_recv_queue_len = 1024
}

完成配置文件的更新后,可运行以下命令启动 NanoMQ:

docker run -d -p 1883:1883 -v {YOU LOCAL PATH}: /etc \
            --name nanomq  emqx/nanomq:latest

通过环境变量加载

NanoMQ 也支持通过环境变量自定义配置,支持的环境变量列表如下:

变量名数据类型描述
NANOMQ_BROKER_URLStringnmq-tcp://host:port
tls+nmq-tcp://host:port
NANOMQ_DAEMONBoolean后台启动(默认:False)
NANOMQ_NUM_TASKQ_THREADInteger任务线程数 (范围:0 ~ 256)
NANOMQ_MAX_TASKQ_THREADInteger最大任务线程数 (范围:0 ~ 256)
NANOMQ_PARALLELLong并行数
NANOMQ_PROPERTY_SIZEInteger最大属性长度
NANOMQ_MSQ_LENInteger队列长度
NANOMQ_QOS_DURATIONIntegerQoS 消息定时间隔时间
NANOMQ_ALLOW_ANONYMOUSBoolean允许匿名登录(默认:True)
NANOMQ_WEBSOCKET_ENABLEBoolean启动 WebSocket 监听(默认:True)
NANOMQ_WEBSOCKET_URLStringnmq-ws://host:port/path
nmq-wss://host:port/path
NANOMQ_HTTP_SERVER_ENABLEBoolean启动 HTTP 服务监听(默认:False)
NANOMQ_HTTP_SERVER_PORTIntegerHTTP 服务端监听端口(默认:8081)
NANOMQ_HTTP_SERVER_USERNAMEString访问 HTTP 服务的用户名
NANOMQ_HTTP_SERVER_PASSWORDString访问 HTTP 服务的密码
NANOMQ_TLS_ENABLEBoolean启动 TLS 监听(默认:False)
NANOMQ_TLS_URLString'tls+nmq-tcp://host:port'.
NANOMQ_TLS_CA_CERT_PATHStringTLS CA 证书数据
NANOMQ_TLS_CERT_PATHStringTLS Cert 证书数据
NANOMQ_TLS_KEY_PATHStringTLS 私钥数据
NANOMQ_TLS_KEY_PASSWORDStringTLS 私钥密码
NANOMQ_TLS_VERIFY_PEERBoolean验证客户端证书 (默认:False)
NANOMQ_TLS_FAIL_IF_NO_PEER_CERTBoolean拒绝无证书连接,与 tls.verify_peer 配合使用(默认:False)
NANOMQ_LOG_TOString日志输出类型数组,使用竖线 `
NANOMQ_LOG_LEVELString日志等级:trace, debug, info, warn, error, fatal
NANOMQ_LOG_DIRString日志文件存储路径(输出文件时生效)
NANOMQ_LOG_FILEString日志文件名(输出文件时生效)
NANOMQ_LOG_ROTATION_SIZEString每个日志文件的最大占用空间
单位:`KB
NANOMQ_LOG_ROTATION_COUNTInteger轮换的最大日志文件数
默认: 5
NANOMQ_CONF_PATHStringNanoMQ 配置文件路径(默认: /etc/nanomq.conf

示例:通过环境变量指定配置文件路径

bash
docker run -d -p 1883:1883 -e NANOMQ_CONF_PATH="/usr/local/etc/nanomq.conf" \
            [-v {LOCAL PATH}:{CONTAINER PATH}] \
            --name nanomq emqx/nanomq:0.14.0-slim

性能调优

为了获取更优异的性能表现,您可在配置文件 nanomq.conf 中调整以下配置项的设置:

配置项类型描述
system.num_taskq_threadLong使用的 taskq 线程数,推荐设为 CPU 核数。
system.max_taskq_threadLong可使用的最大 taskq 线程数,推荐设为 CPU 核数。
system.parallelLong并行处理数,推荐设为 CPU 核数的两倍。
mqtt.session.msq_lenInteger用于重发消息的 Inflight 窗口/队列长度。如内存允许,推荐设为最大值:65535。

示例

比如在一个 4 核操作系统中,可进行如下设置,更新将在重启 NanoMQ 后生效。

bash
system.num_taskq_thread = 4
system.max_taskq_thread = 4
system.parallel = 8
mqtt.session.msq_len = 65535