EMQX

发布时间 2023-10-12 11:01:41作者: MegaloBox

简介

EMQX是一个性能优异、功能强大的开源MQTT消息中间件,适合构建IoT、M2M、移动、Web、物联网等方面的应用或服务。主要具有以下特点:

  • 支持MQTT、MQTT-SN、TCP、WebSocket等多种协议
  • 跨平台,可以运行在Linux、FreeBSD、macOS等多种平台
  • 高可用性,支持分布式集群部署
  • 低时延、高吞吐量的消息路由和传递能力
  • 插件化扩展机制,支持自定义认证、访问控制等
  • 支持多种持久化方式,包括内存、Redis、MySQL、PostgreSQL等

Docker安装

运行临时容器

docker run -d \
--name emqx-47 \
-p 9610:1883 \
-p 9611:8883 \
-p 9612:8083 \
-p 9613:8084 \
-p 9615:18083 \
emqx/emqx:latest

注解:
9610: MQTT协议端口
9612: Web管理控制台端口
9611: MQTT TLS端口
9613: WebSocket协议端口
9615: dashboard端口

宿主机创建挂载目录

mkdir -p /opt/emqx/{etc,lib,data,log}

拷贝需持久化的文件

docker cp emqx:/opt/emqx/etc /opt/emqx
docker cp emqx:/opt/emqx/lib /opt/emqx
docker cp emqx:/opt/emqx/data /opt/emqx
docker cp emqx:/opt/emqx/log /opt/emqx

修改挂载目录权限

chown -R 1000:1000 /opt/emqx/
chmod -R 755 /opt/emqx/
## 删除临时容器
```bash
docker rm -f emqx

创建持久化emqx容器

docker run -d \
--name emqx \
-p 9610:1883 \
-p 9611:8883 \
-p 9612:8083 \
-p 9613:8084 \
-p 9615:18083 \
-v /opt/emqx/etc:/opt/emqx/etc \
-v /opt/emqx/lib:/opt/emqx/lib \
-v /opt/emqx/data:/opt/emqx/data \
-v /opt/emqx/log:/opt/emqx/log \
emqx/emqx:latest

MQTT连接添加用户密码验证

cat >> /opt/emqx/etc/emqx.conf << EOF
auth.user.1.username = mqttct
auth.user.1.password = 123456
EOF
# 重启emqx容器
docker restart emqx

访问Dashboard

http:ip:9615
账号:admin
默认密码:public

拓展

EMQX 在 Docker 环境中还支持许多其他的环境变量配置(--env ALLOW_ANONYMOUS=true - 允许匿名登录)

主要包括:

  1. 节点名称相关
    EMQX_NAME:设置EMQX节点的节点名称
    EMQX_NODE_NAME: EMQX 节点的名称
    EMQX_NODE_COOKIE: EMQX 节点的 cookie,用于集群间通信
  2. 网络配置
    EMQX_HOST:设置EMQX节点监听的主机名或者IP地址
    EMQX_LISTENERS: EMQX 监听的协议、IP 和端口
    EMQX_MAX_PORTS: EMQX 最大可用端口数
  3. MQTT 协议配置
    EMQX_MQTT_MAX_TOPIC_ALIAS: MQTT 最大主题别名数量
    EMQX_MQTT_KEEPALIVE: MQTTkeepalive心跳间隔
    EMQX_MQTT_MAX_PACKET_SIZE: MQTT最大包大小
  4. 性能调优相关
    EMQX_MAX_CONCURRENT_CLIENTS: EMQX 最大允许的并发客户端数
    EMQX_MAX_MQTT_CONN_RATE: MQTT最大连接速率限制
    EMQX_GC_THRESHOLD: Erlang GC 触发内存阈值
  5. 认证/访问控制相关
    EMQX_ALLOW_ANONYMOUS: 是否允许匿名登录
    EMQX_PASSWORD_HASH: 加密密码的散列算法
    EMQX_AUTH__MYSQL__SERVER: MySQL 后端认证服务器地址
    EMQX_AUTH__MYSQL__USERNAME: MySQL 后端认证用户名
  6. 持久化相关
    EMQX_ZONE__EXTERNAL__SERVER: 外部存储区服务器地址
    EMQX_ZONE__EXTERNAL__POOLSIZE: 外部存储区连接池大小
  7. 扩展插件相关
    EMQX_LOADED_PLUGINS: 加载的 EMQX 插件列表
    以上都是 EMQX 常用的环境变量设置,可以通过环境变量自定义 EMQX 在 Docker 中的行为,实现快速弹性的部署配置。

参考博文:https://www.cnblogs.com/virtulreal/p/14431704.html