volumes: vol-emqx-data1: name: foo-emqx-data1 external: true # vol-emqx-data2: # name: foo-emqx-data2 # external: true services: emqx1: image: emqx:latest # environment: # - "EMQX_NODE_NAME=emqx@node1.emqx.io" # - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static" # - "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io,emqx@node2.emqx.io]" healthcheck: test: ["CMD", "/opt/emqx/bin/emqx", "ctl", "status"] interval: 60s timeout: 25s retries: 5 networks: net: # emqx-bridge: # aliases: # - node1.emqx.io ports: - "1883:1883" # - 8083:8083 # - 8084:8084 # - 8883:8883 # - 18083:18083 volumes: - vol-emqx-data1:/opt/emqx/data labels: - "traefik.enable=true" - "traefik.http.routers.emqx1.entrypoints=web-secure" - "traefik.http.routers.emqx1.rule=Host(`mqtt.${DOMAINNAME}`)" - "traefik.http.routers.emqx1.tls.certresolver=letsencrypt" - "traefik.http.routers.emqx1.service=emqx-dashboard" - "traefik.http.services.emqx-dashboard.loadbalancer.server.port=18083" # emqx2: # image: emqx:latest # container_name: emqx2 # environment: # - "EMQX_NODE_NAME=emqx@node2.emqx.io" # - "EMQX_CLUSTER__DISCOVERY_STRATEGY=static" # - "EMQX_CLUSTER__STATIC__SEEDS=[emqx@node1.emqx.io,emqx@node2.emqx.io]" # healthcheck: # test: ["CMD", "/opt/emqx/bin/emqx", "ctl", "status"] # interval: 60s # timeout: 25s # retries: 5 # networks: # net: # emqx-bridge: # aliases: # - node2.emqx.io # volumes: # - vol-emqx-data2:/opt/emqx/data mqttx-web: image: emqx/mqttx-web:latest restart: unless-stopped networks: - net labels: - "traefik.enable=true" - "traefik.http.routers.mqttx-web.entrypoints=web-secure" - "traefik.http.routers.mqttx-web.rule=Host(`mqttx.${DOMAINNAME}`)" - "traefik.http.routers.mqttx-web.tls.certresolver=letsencrypt" - "traefik.http.routers.mqttx-web.service=mqttx-web-service" - "traefik.http.services.mqttx-web-service.loadbalancer.server.port=80" networks: # emqx-bridge: # driver: bridge net: external: true name: ${NETWORK:-web}