EMQX数据持久化以及Mnesia 认证实操

697 阅读2分钟

docker-EMQX数据持久化

emqx版本:4.4.18

emqx通常会创建一下规则引擎或者一些应用账户的信息,这些信息会保存在emqx的容器节点内部 image.png

这些数据通常在重启宿主机或者重建容器后,数据丢失;故需要持久化

持久化方案

  • docker启动固定ip
  • 容器卷挂载

docker启动emqx

docker run  -itd  --name emqService -p 18083:18083 -p 1883:1883 -p 8084:8084 -p 8883:8883 -p 8083:8083 emqx/emqx

容器卷挂载并修改文件权限

docker cp emqx:/opt/emqx/bin /home/emqx
docker cp emqx:/opt/emqx/etc /home/emqx
docker cp emqx:/opt/emqx/lib /home/emqx
docker cp emqx:/opt/emqx/data /home/emqx
docker cp emqx:/opt/emqx/log /home/emqx
  • chmod –R 777 /home/emqx/data/configs
  • chmod –R 777 /home/emqx/data/mnesia

重建容器并固定ip

docker rm -rf emqx

version: "3.0"
#网桥
networks:
  dmkb-bridge:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.20.0.0/16
services:
  emqx:
    image: emqx:4.4.18
    restart: unless-stopped
    container_name: emqx
    environment:
      EMQX_ADMIN_PASSWORD: xxxxx # 设置admin账户,密码为admin
      TZ: Asia/Shanghai
      EMQX_NODE_NAME: emqx@172.20.0.20
    ports:
      - "1883:1883"
      - "8083:8083"
      - "8084:8084"
      - "8883:8883"
      - "8081:8081"
      - "18083:18083"
    volumes:
      - "/home/emqx/etc:/opt/emqx/etc"
      - "/home/emqx/data:/opt/emqx/data"
      - "/home/emqx/lib:/opt/emqx/lib"
      - "/home/emqx/log:/opt/emqx/log"
    networks:
      dmkb-bridge:
        ipv4_address: 172.20.0.20

这样不论是重启服务器,还是重新构建容器,只要挂载对应文件以及设置对应ip,就能找到之前的数据

Mnesia 认证

EMQX 中的认证指的是当一个客户端连接到 EMQX 的时候,通过服务器端的配置来控制客户端连接服务器的权限。

Mnesia 认证使用 EMQX 内置 Mnesia 数据库存储客户端 Client ID/Username 与密码,支持通过 HTTP API 管理认证数据。

关闭默认匿名认证

emqx默认是开启匿名登录

vim /home/emqx/etc/emqx.conf 找到 allow_anonymous = true 改为allow_anonymous = false

配置Mnesia账户

vim /home/emqx/etc/plugins/emqx_auth_mnesia.conf

预设认证数据

预设认证数据格式兼容 emqx_auth_clientid 与 emqx_auth_username 插件的配置格式


## clientid 认证数据
auth.client.1.clientid = admin
auth.client.1.password = public

## username 认证数据
auth.user.2.username = admin
auth.user.2.password = public

认证开启

登录emqx Dashboard,将插件emqx_auth_mnesia启动

image.png

登录测试

image.png 用工具连接测试成功