docker部署EMQ X

305 阅读5分钟

docker部署EMQ X

1、拉取镜像

docker pull emqx/emqx:5.8.3

2、创建挂载目录

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

3、启动容器,复制文件

docker部署EMQX服务

1、拉取镜像

docker pull emqx/emqx:5.8.3

2、创建挂载目录

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

3、启动容器,复制文件

# 启动容器
docker run -d --name emqx -p 17770:18083 -p 17771:1883  emqx/emqx:5.8.3
​
# 拷贝文件
docker cp emqx:/opt/emqx/etc /opt/develop/docker/emqx
docker cp emqx:/opt/emqx/data /opt/develop/docker/emqx
​
# 给文件赋权
chmod -R 777 /opt/develop/docker/emqx
​
# 删除容器
docker rm -f emqx

4、运行容器

docker run方式

# docker run
docker run -d --name emqx \
-p 18083:18083 -p 1883:1883 -p 8883:8883 -p 8083:8083 -p 8084:8084  \
-e TZ=Asia/Shanghai \
-v /opt/develop/docker/emqx/etc:/opt/emqx/etc \
-v /opt/develop/docker/emqx/data:/opt/emqx/data \
-v /opt/develop/docker/emqx/log:/opt/emqx/log \
emqx/emqx:5.8.3

docker compose方式

# docker-compose
# 指定docker-compose文件版本
version: "3"
services:
  # 服务名
  jyy-emqx:
    # 容器名称
    container_name: emqx
    # 镜像
    image: emqx/emqx:5.8.3
    # 重启策略
    restart: always
    # 映射端口
    ports:
      - "18083:18083"
      - "1883:1883"
      - "8883:8883"
      - "8083:8083"
      - "8084:8084"
    # 容器内环境配置
    environment:
      - TZ=Asia/Shanghai
    # 挂载目录
    volumes:
      - /opt/develop/docker/emqx/etc:/opt/emqx/etc
      - /opt/develop/docker/emqx/data:/opt/emqx/data
      - /opt/develop/docker/emqx/log:/opt/emqx/log
    # 网络配置
    networks:
      - jyy_service_bridge
    # 网络配置
    hostname: jyy_emqx_host
# 全局网络配置
networks:
  # 配置网络名称
  jyy_service_bridge:
    # 配置方式
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.7.0/24

EMQ X端口详情:

端口协议释义
1883TCPMQTT over TCP 监听器端口,主要用于未加密的 MQTT 连接。
8883TCPMQTT over SSL/TLS 监听器端口,用于加密的 MQTT 连接。
8083TCPMQTT over WebSocket 监听器端口,使 MQTT 能通过 WebSocket 进行通信。
8084TCPMQTT over WSS (WebSocket over SSL) 监听器端口,提供加密的 WebSocket 连接。
18083HTTPEMQX Dashboard 和 REST API 端口,用于管理控制台和 API 接口。

5、新建认证用户

左边菜单,点击 访问控制-->客户端认证-->右上角创建,选择认证方式为Password-Based,选择MySQL或者时内置数据库。

5.1、如果选择mysql,直接执行以下sql,建库建表。

CREATE DATABASE `mqtt_user` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
​
use mqtt_user;
​
CREATE TABLE IF NOT EXISTS `mqtt_user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(100) DEFAULT NULL,
  `password_hash` varchar(100) DEFAULT NULL,
  `salt` varchar(35) DEFAULT NULL,
  `is_superuser` tinyint(1) DEFAULT 0,
  `created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `mqtt_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

5.2、新建认证用户的DML:添加一名用户名为 jyy、密码为 password!、盐值为 ThTntX3rBDcbeauVdZMyTOO_UpcWJg、散列方式为 sha256 且超级用户标志为 true 的用户

INSERT INTO mqtt_user ( username, password_hash, salt, is_superuser )
VALUES
( 'jyy', 
 SHA2 ( concat( 'password!', 'ThTntX3rBDcbeauVdZMyTOO_UpcWJg==' ), 256 ), 
 'ThTntX3rBDcbeauVdZMyTOO_UpcWJg==',
 1 );

EMQ X官方文档:docs.emqx.com/zh/emqx/lat…

4、运行容器

docker run

# docker run
docker run -d --name emqx \
-p 27010:18083 -p 27011:1883 -p 27012:8883 -p 27013:8083 -p 27014:8084  \
-e TZ=Asia/Shanghai \
-v /opt/develop/docker/emqx/etc:/opt/emqx/etc \
-v /opt/develop/docker/emqx/data:/opt/emqx/data \
-v /opt/develop/docker/emqx/log:/opt/emqx/log \
emqx/emqx:5.8.3

docker-compose

# docker-compose
# 指定docker-compose文件版本
version: "3"
services:
  # 服务名
  jyy-emqx:
    # 容器名称
    container_name: emqx
    # 镜像
    image: emqx/emqx:5.8.3
    # 重启策略
    restart: always
    # 映射端口
    ports:
      - "27010:18083"
      - "27011:1883"
      - "27012:8883"
      - "27013:8083"
      - "27014:8084"
    # 容器内环境配置
    environment:
      - TZ=Asia/Shanghai
    # 挂载目录
    volumes:
      - /opt/develop/docker/emqx/etc:/opt/emqx/etc
      - /opt/develop/docker/emqx/data:/opt/emqx/data
      - /opt/develop/docker/emqx/log:/opt/emqx/log
    # 网络配置
    networks:
      - jyy_service_bridge
    # 网络配置
    hostname: jyy_emqx_host
# 全局网络配置
networks:
  # 配置网络名称
  jyy_service_bridge:
    # 配置方式
    driver: bridge
    ipam:
      config:
        - subnet: 192.168.7.0/24

EMQ X端口详情:

端口协议释义
1883TCPMQTT over TCP 监听器端口,主要用于未加密的 MQTT 连接。
8883TCPMQTT over SSL/TLS 监听器端口,用于加密的 MQTT 连接。
8083TCPMQTT over WebSocket 监听器端口,使 MQTT 能通过 WebSocket 进行通信。
8084TCPMQTT over WSS (WebSocket over SSL) 监听器端口,提供加密的 WebSocket 连接。

5、新建认证用户

访问后台页面:ip:27010

默认登录账号:admin

默认登录密码:public

左边菜单,点击 访问控制-->客户端认证-->右上角创建,选择认证方式为Password-Based,选择MySQL或者时内置数据库。

5.1、如果选择mysql,新建个mqtt_user的库,然后再在编辑框中输入DDL

CREATE TABLE IF NOT EXISTS `mqtt_user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(100) DEFAULT NULL,
  `password_hash` varchar(100) DEFAULT NULL,
  `salt` varchar(35) DEFAULT NULL,
  `is_superuser` tinyint(1) DEFAULT 0,
  `created` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `mqtt_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

5.2、新建认证用户的DML:添加一名用户名为 kj、密码为 password!、盐值为 ThTntX3rBDcbeauVdZMyTOO_UpcWJg、散列方式为 sha256 且超级用户标志为 true 的用户

INSERT INTO mqtt_user ( username, password_hash, salt, is_superuser )
VALUES
( 'kj', 
 SHA2 ( concat( 'password!', 'ThTntX3rBDcbeauVdZMyTOO_UpcWJg==' ), 256 ), 
 'ThTntX3rBDcbeauVdZMyTOO_UpcWJg==',
 1 );

官方文档:docs.emqx.com/zh/emqx/lat…