EMQX服务docker-compose启动

端口介绍

1883:MQTT 协议端口
8084:MQTT/SSL 端口
8083:MQTT/WebSocket 端口
8080:HTTP API 端口
18083:Dashboard 管理控制台端口

相关配置文件

docker-compose.yml文件

version: '3'
services:
  emqx:
    container_name: emqx
    image: emqx/emqx:latest
    restart: always
    privileged: true
    ports:
        - 18083:18083
        - 1883:1883
        - 8883:8883
        - 8083:8083
        - 8084:8084
        - 8081:8081
    volumes:
        # 如果emqx不需要配置SSL证书,则etc目录可以不进行映射
        - /data1/data/emqx/etc:/opt/emqx/etc
        - /data1/data/emqx/data:/opt/emqx/data
        - /data1/data/emqx/log:/opt/emqx/log

emqx.conf文件

注:容器内的配置文件路径为/opt/emqx/etc/emqx.conf

## NOTE:
## This config file overrides data/configs/cluster.hocon,
## and is merged with environment variables which start with 'EMQX_' prefix.
##
## Config changes made from EMQX dashboard UI, management HTTP API, or CLI
## are stored in data/configs/cluster.hocon.
## To avoid confusion, please do not store the same configs in both files.
##
## See https://www.emqx.io/docs/en/v5.0/configuration/configuration.html for more details.
## Configuration full example can be found in etc/examples

node {
  name = "emqx@127.0.0.1"
  cookie = "emqxsecretcookie"
  data_dir = "data"
}

cluster {
  name = emqxcl
  discovery_strategy = manual
}

dashboard {
    listeners.http {
        bind = 18083
    }
}

// 配置SSL证书(结合实际情况选择是否删除)
// 新版本与老版本的配置规则不一样,此处为新版本的配置规则
listeners.wss.default {
  bind = "0.0.0.0:8084"
  max_connections = 512000
  websocket.mqtt_path = "/mqtt"
  ssl_options {
    keyfile = "etc/certs/myCert/jxglgcjczx.car.jxbd.com.cn.key"
    certfile = "etc/certs/myCert/jxglgcjczx.car.jxbd.com.cn.pem"
    cacertfile = "etc/certs/cacert.pem"
  }
}

## 修改日志打印级别(EMQX的默认日志级别为warning,所以一般正常设备连接成功、消息发送成功等信息都不会在日志文件中体现)
log {
  console_handler {
    level = debug
    formatter = text
  }
}

  

关于/opt/emqx/etc目录映射方法

启动临时容器

docker run -dit --name emqx -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx/emqx:latest

拷贝配置文件

docker cp emqx:/opt/emqx/etc /data1/data/emqx/etc

删除临时容器 

docker rm -f emqx

  若yml文件启动后,发现EMQX一直在重启,查看日志:显示“没有权限创建文件夹或写数据”、“文件找不到”等错误;

    针对权限不够问题,可以通过chmod命令解决

chmod -R 777 <文件目录路径>

    针对文件找不到问题,主要etc目录映射出了问题

 

 

SSL证书配置

修改emqx.conf配置文件,设置证书路径

listeners.wss.default {
  bind = "0.0.0.0:8084"
  max_connections = 512000
  websocket.mqtt_path = "/mqtt"
  ssl_options {
    keyfile = "etc/certs/my/bdcloud.jxbd.com.cn.key"
    certfile = "etc/certs/my/bdcloud.jxbd.com.cn.pem"
    cacertfile = "etc/certs/cacert.pem"
  }
}

注:配置了ssl证书后,要想使用ssl连接wss就不能使用ip访问wss了,必须使用域名!!!

 

附加篇

  MQTT服务docker-compose启动:https://blog.csdn.net/xy3233/article/details/126728187

 

问题排查

两个独立的项目同时连接emqx相同端口时,似乎会发生抢占,导致一方连接不上

 

参考文章

【1】emqx日志配置

【2】emqx配置SSL证书

posted @ 2023-08-28 10:07  先娶国王后取经  阅读(673)  评论(0编辑  收藏  举报