菜单
本页目录

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;