docker-compose
version: "3"
services:
emqx:
image: emqx:5.6.0
container_name: emqx
restart: always
privileged: true
environment:
- "EMQX_MQTT__MAX_PACKET_SIZE=10MB"
- "TZ=Asia/Shanghai"
- "EMQX_DASHBOARD__DEFAULT_USERNAME=admin"
- "EMQX_DASHBOARD__DEFAULT_PASSWORD=junpzx@2024"
# 这个必须要指定,不然会导致emqx内部数据库映射出来的数据对应不上
- "EMQX_NODE__NAME=emqx@127.0.0.1"
# 配置客户端认证(内置数据库形式)
- "EMQX_AUTHENTICATION__1__MECHANISM=password_based"
- "EMQX_AUTHENTICATION__1__BACKEND=built_in_database"
- "EMQX_AUTHENTICATION__1__USER_ID_TYPE=username"
- "EMQX_AUTHENTICATION__1__PASSWORD_HASH_ALGORITHM__NAME=sha256"
- "EMQX_AUTHENTICATION__1__PASSWORD_HASH_ALGORITHM__SALT_POSITION=suffix"
- "EMQX_AUTHENTICATION__1__ENABLE=false"
# 配置客户端认证(MYSQL数据库形式)
- "EMQX_AUTHENTICATION__2__MECHANISM=password_based"
- "EMQX_AUTHENTICATION__2__BACKEND=mysql"
- "EMQX_AUTHENTICATION__2__PASSWORD_HASH_ALGORITHM__NAME=sha256"
- "EMQX_AUTHENTICATION__2__PASSWORD_HASH_ALGORITHM__SALT_POSITION=suffix"
- "EMQX_AUTHENTICATION__2__QUERY=SELECT password_hash,salt,is_superuser FROM mqtt_user WHERE username = $${username} LIMIT 1"
- "EMQX_AUTHENTICATION__2__QUERY_TIMEOUT=5s"
- "EMQX_AUTHENTICATION__2__ENABLE=true"
# 改成自己的数据库地址
- "EMQX_AUTHENTICATION__2__SERVER=mysql:3306"
# 数据库
- "EMQX_AUTHENTICATION__2__DATABASE=emqx_auth_user"
- "EMQX_AUTHENTICATION__2__POOL_SIZE=8"
# 账号密码
- "EMQX_AUTHENTICATION__2__USERNAME=root"
- "EMQX_AUTHENTICATION__2__PASSWORD=junpzx@2024"
volumes:
- ./emqx/log:/opt/emqx/log
healthcheck:
test: [ "CMD", "/opt/emqx/bin/emqx_ctl", "status" ]
interval: 5s
timeout: 25s
retries: 5
ports:
- 1883:1883
- 8083:8083
- 8084:8084
- 8883:8883
- 18083:18083
客户端Mysql认证模式
创建表SQL
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for mqtt_user
-- ----------------------------
DROP TABLE IF EXISTS `mqtt_user`;
CREATE TABLE `mqtt_user` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`username` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`password_hash` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`salt` varchar(35) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`is_superuser` tinyint(1) NULL DEFAULT 0,
`created` datetime NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `mqtt_username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of mqtt_user
-- ----------------------------
INSERT INTO `emqx_auth_user`.`mqtt_user` (`id`, `username`, `password_hash`, `salt`, `is_superuser`, `created`) VALUES (1, 'admin', '18266ba713d95b6c4df39f1b0c6c655ffe42cf120f08fe9fd4818922b4da71d0', 'suffix', 1, NULL);
SET FOREIGN_KEY_CHECKS = 1;