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端口详情:
| 端口 | 协议 | 释义 |
|---|---|---|
| 1883 | TCP | MQTT over TCP 监听器端口,主要用于未加密的 MQTT 连接。 |
| 8883 | TCP | MQTT over SSL/TLS 监听器端口,用于加密的 MQTT 连接。 |
| 8083 | TCP | MQTT over WebSocket 监听器端口,使 MQTT 能通过 WebSocket 进行通信。 |
| 8084 | TCP | MQTT over WSS (WebSocket over SSL) 监听器端口,提供加密的 WebSocket 连接。 |
| 18083 | HTTP | EMQX 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端口详情:
| 端口 | 协议 | 释义 |
|---|---|---|
| 1883 | TCP | MQTT over TCP 监听器端口,主要用于未加密的 MQTT 连接。 |
| 8883 | TCP | MQTT over SSL/TLS 监听器端口,用于加密的 MQTT 连接。 |
| 8083 | TCP | MQTT over WebSocket 监听器端口,使 MQTT 能通过 WebSocket 进行通信。 |
| 8084 | TCP | MQTT 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 );