Skip to content

Docker 部署

  • FreeMQTT Plus 只提供Linux下的 Docker 镜像部署方式
  • 我们还提供 FreeMQTT Plus 部署 stack YAML file 文件

使用 Docker Swarm Ingress 负载平衡情形

docker-swarm-compose.yml

yaml
#version: '3'
networks:
  swarm_net:
    driver: overlay

configs:
  # freemqtt plus configs
  freemqtt_conf:
    external: true
  freemqtt_license:
    external: true

  # nginx service configs
  nginx_conf:
    external: true
  freemqtt_cert:
    external: true
  freemqtt_key:
    external: true

#volumes:
#  freemqtt_log_v:

services:
  # A-node
  anode:
    image: registry.freemqtt.cn/freemqttplus:v260519
    hostname: "{{.Service.Name}}-{{.Task.Slot}}"
    ulimits:
      nofile:
        soft: 65535
        hard: 65535
    deploy:
      replicas: 3
    configs:
      - source: freemqtt_conf
        target: /freemqttd/conf.d/config.toml
      - source: freemqtt_license
        target: /freemqttd/conf.d/license.toml
      - source: freemqtt_cert
        target: /freemqttd/ssl/freemqtt.crt
      - source: freemqtt_key
        target: /freemqttd/ssl/freemqtt.key

    command: ["--type=A", "--nodeid=A"]

    networks:
      - swarm_net
    environment:
      - MY_PEER_ID={{.Task.Slot}}
      - MY_HOSTNAME={{.Service.Name}}-{{.Task.Slot}}
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
    ports:
      - target: 1883
        published: 1883
        protocol: tcp

      - target: 8883
        published: 8883
        protocol: tcp

      - target: 80
        published: 8080
        protocol: tcp

      - target: 443
        published: 8443
        protocol: tcp

  # B-node
  bnode:
    image: registry.freemqtt.cn/freemqttplus:v260519
    hostname: "{{.Service.Name}}-{{.Task.Slot}}"
    deploy:
      replicas: 2
    configs:
      - source: freemqtt_conf
        target: /freemqttd/conf.d/config.toml
      - source: freemqtt_license
        target: /freemqttd/conf.d/license.toml
    environment:
      - MY_PEER_ID={{.Task.Slot}}
      - MY_HOSTNAME={{.Service.Name}}-{{.Task.Slot}}
    command: ["--type=B", "--nodeid=B"]
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
    networks:
      - swarm_net
    depends_on:
      - anode

使用 NGINX 负载平衡情形

docker-swarm-compose-with-nginx.yml

yaml
#version: '3'
networks:
  swarm_net:
    driver: overlay

configs:
  # freemqtt plus configs
  freemqtt_conf2:
    external: true
  freemqtt_license:
    external: true

  # nginx service configs
  nginx_conf:
    external: true
  freemqtt_cert:
    external: true
  freemqtt_key:
    external: true

#volumes:
#  freemqtt_log_v:

services:
  # A-node
  anode:
    image: registry.freemqtt.cn/freemqttplus:v260519
    hostname: "{{.Service.Name}}-{{.Task.Slot}}"
    ulimits:
      nofile:
        soft: 65535
        hard: 65535
    deploy:
      replicas: 3
    configs:
      - source: freemqtt_conf2
        target: /freemqttd/conf.d/config.toml
      - source: freemqtt_license
        target: /freemqttd/conf.d/license.toml
      - source: freemqtt_cert
        target: /freemqttd/ssl/freemqtt.crt
      - source: freemqtt_key
        target: /freemqttd/ssl/freemqtt.key
    command: ["--type=A", "--nodeid=A"]
    networks:
      - swarm_net
    environment:
      - MY_PEER_ID={{.Task.Slot}}
      - MY_HOSTNAME={{.Service.Name}}-{{.Task.Slot}}
    volumes:
      - "/etc/localtime:/etc/localtime:ro"

  # B-node
  bnode:
    image: registry.freemqtt.cn/freemqttplus:v260519
    hostname: "{{.Service.Name}}-{{.Task.Slot}}"
    deploy:
      replicas: 2
    configs:
      - source: freemqtt_conf2
        target: /freemqttd/conf.d/config.toml
      - source: freemqtt_license
        target: /freemqttd/conf.d/license.toml
    environment:
      - MY_PEER_ID={{.Task.Slot}}
      - MY_HOSTNAME={{.Service.Name}}-{{.Task.Slot}}
    command: ["--type=B", "--nodeid=B"]
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
    networks:
      - swarm_net
    depends_on:
      - anode

  nginx:
    image: nginx:latest
    hostname: "{{.Service.Name}}-{{.Task.Slot}}"
    ulimits:
      nofile:
        soft: 65535
        hard: 65535
    deploy:
      replicas: 1
    configs:
      - source: nginx_conf
        target: /etc/nginx/nginx.conf
      - source: freemqtt_cert
        target: /etc/nginx/ssl/freemqtt.crt
      - source: freemqtt_key
        target: /etc/nginx/ssl/freemqtt.key
        
    volumes:
      - "/etc/localtime:/etc/localtime:ro"
    ports:
      - target: 1883
        published: 1883
        protocol: tcp
        mode: host

      - target: 8883
        published: 8883
        protocol: tcp
        mode: host

      - target: 8443
        published: 8443
        protocol: tcp
        mode: host

    networks:
      - swarm_net

    depends_on:
      - bnode