Commit 28474e31 authored by Pedro Eduardo Trujillo's avatar Pedro Eduardo Trujillo
Browse files

Pone al día recursos de CI/CD, corrige detalles

Usa plantillas en definición de gitlab-ci.

Revisa y corrige configuración de despliegue en los ficheros compose.

Omite redefinición de listener HTTP por defecto, ya que a pesar de ello
se seguía escuchando en el original.

Apunta Traefik hacia página de estado, añadiendo prefijo obligatorio de
manera transparente al usuario.
parent a2894271
Loading
Loading
Loading
Loading
+5 −88
Original line number Diff line number Diff line
include:
  - project: 'redmic-project/gitlab-ci-templates'
    ref: master
    file: '/deployment.yml'

stages:
  - deploy

image: registry.gitlab.com/redmic-project/docker/docker-deploy:${DOCKER_DEPLOY_IMAGE_TAG}

variables:
  DOCKER_DRIVER: overlay2
  STACK: mqtt
  SERVICES_TO_CHECK: mqtt_${CI_PROJECT_NAME} mqtt_vmq-redis
  STATUS_CHECK_DELAY: 60
  VERNEMQ_IMAGE_TAG: ${VERNEMQ_IMAGE_TAG:-latest}
  REDIS_IMAGE_TAG: ${REDIS_IMAGE_TAG:-latest}

services:
  - docker:dind

deploy-supporting-branch-develop:
  stage: deploy
  variables:
    SSH_REMOTE: ${DEV_SSH_REMOTE}
    COMPOSE_FILE: docker-compose.tmpl.yml:docker-compose.dev.yml
    PUBLIC_HOSTNAME: ${DEV_PUBLIC_HOSTNAME}
    DOCKER_VERNEMQ_ALLOW_ANONYMOUS: ${DEV_DOCKER_VERNEMQ_ALLOW_ANONYMOUS}
    DOCKER_VERNEMQ_DISTRIBUTED_COOKIE: ${DEV_DOCKER_VERNEMQ_DISTRIBUTED_COOKIE}
  script:
    - >
      deploy.sh VERNEMQ_IMAGE_TAG=${VERNEMQ_IMAGE_TAG} REDIS_IMAGE_TAG=${REDIS_IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE}
      PUBLIC_HOSTNAME=${PUBLIC_HOSTNAME} DOCKER_VERNEMQ_ALLOW_ANONYMOUS=${DOCKER_VERNEMQ_ALLOW_ANONYMOUS}
      DOCKER_VERNEMQ_DISTRIBUTED_COOKIE=${DOCKER_VERNEMQ_DISTRIBUTED_COOKIE}
  environment:
    name: dev
  only:
    - branches
  except:
    - master
  when: manual

deploy-stable-branch-develop:
  stage: deploy
  variables:
    SSH_REMOTE: ${DEV_SSH_REMOTE}
    COMPOSE_FILE: docker-compose.tmpl.yml:docker-compose.dev.yml
    PUBLIC_HOSTNAME: ${DEV_PUBLIC_HOSTNAME}
    DOCKER_VERNEMQ_ALLOW_ANONYMOUS: ${DEV_DOCKER_VERNEMQ_ALLOW_ANONYMOUS}
    DOCKER_VERNEMQ_DISTRIBUTED_COOKIE: ${DEV_DOCKER_VERNEMQ_DISTRIBUTED_COOKIE}
  script:
    - >
      deploy.sh VERNEMQ_IMAGE_TAG=${VERNEMQ_IMAGE_TAG} REDIS_IMAGE_TAG=${REDIS_IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE}
      PUBLIC_HOSTNAME=${PUBLIC_HOSTNAME} DOCKER_VERNEMQ_ALLOW_ANONYMOUS=${DOCKER_VERNEMQ_ALLOW_ANONYMOUS}
      DOCKER_VERNEMQ_DISTRIBUTED_COOKIE=${DOCKER_VERNEMQ_DISTRIBUTED_COOKIE}
  environment:
    name: dev
  only:
    - master
  when: manual

deploy-supporting-branch-production:
  stage: deploy
  variables:
    SSH_REMOTE: ${PRO_SSH_REMOTE}
    COMPOSE_FILE: docker-compose.tmpl.yml:docker-compose.prod.yml
    PUBLIC_HOSTNAME: ${PRO_PUBLIC_HOSTNAME}
    DOCKER_VERNEMQ_ALLOW_ANONYMOUS: ${PRO_DOCKER_VERNEMQ_ALLOW_ANONYMOUS}
    DOCKER_VERNEMQ_DISTRIBUTED_COOKIE: ${PRO_DOCKER_VERNEMQ_DISTRIBUTED_COOKIE}
  script:
    - >
      deploy.sh VERNEMQ_IMAGE_TAG=${VERNEMQ_IMAGE_TAG} REDIS_IMAGE_TAG=${REDIS_IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE}
      PUBLIC_HOSTNAME=${PUBLIC_HOSTNAME} DOCKER_VERNEMQ_ALLOW_ANONYMOUS=${DOCKER_VERNEMQ_ALLOW_ANONYMOUS}
      DOCKER_VERNEMQ_DISTRIBUTED_COOKIE=${DOCKER_VERNEMQ_DISTRIBUTED_COOKIE}
  environment:
    name: pro
  only:
    - branches
  except:
    - master
  when: manual

deploy-stable-branch-production:
  stage: deploy
  variables:
    SSH_REMOTE: ${PRO_SSH_REMOTE}
    COMPOSE_FILE: docker-compose.tmpl.yml:docker-compose.prod.yml
    PUBLIC_HOSTNAME: ${PRO_PUBLIC_HOSTNAME}
    DOCKER_VERNEMQ_ALLOW_ANONYMOUS: ${PRO_DOCKER_VERNEMQ_ALLOW_ANONYMOUS}
    DOCKER_VERNEMQ_DISTRIBUTED_COOKIE: ${PRO_DOCKER_VERNEMQ_DISTRIBUTED_COOKIE}
  script:
    - >
      deploy.sh VERNEMQ_IMAGE_TAG=${VERNEMQ_IMAGE_TAG} REDIS_IMAGE_TAG=${REDIS_IMAGE_TAG} COMPOSE_FILE=${COMPOSE_FILE}
      PUBLIC_HOSTNAME=${PUBLIC_HOSTNAME} DOCKER_VERNEMQ_ALLOW_ANONYMOUS=${DOCKER_VERNEMQ_ALLOW_ANONYMOUS}
      DOCKER_VERNEMQ_DISTRIBUTED_COOKIE=${DOCKER_VERNEMQ_DISTRIBUTED_COOKIE}
  environment:
    name: pro
  only:
    - master
  when: manual
+8 −2
Original line number Diff line number Diff line
SUBDOMAIN=mqtt
DOCKER_VERNEMQ_ALLOW_ANONYMOUS=off
DOCKER_VERNEMQ_LISTENER__HTTP__DEFAULT=127.0.0.1:8889
DOCKER_IP_ADDRESS=0.0.0.0
DOCKER_VERNEMQ_DISTRIBUTED_COOKIE=changeme
DOCKER_VERNEMQ_PLUGINS__VMQ_PASSWD=off
@@ -9,3 +7,11 @@ DOCKER_VERNEMQ_PLUGINS__VMQ_DIVERSITY=on
DOCKER_VERNEMQ_VMQ_DIVERSITY__AUTH_REDIS__ENABLED=on
DOCKER_VERNEMQ_VMQ_DIVERSITY__REDIS__HOST=vmq-redis
DOCKER_VERNEMQ_VMQ_DIVERSITY__REDIS__PORT=6379

EXTERNAL_MQTT_PORT=1883
MQTT_PORT=1883
EXTERNAL_SECURE_MQTT_PORT=8883
SECURE_MQTT_PORT=8883
PORT_MODE=ingress
HTTP_PORT=8888
REDIS_DATA_VOL_NAME=vernemq-redis-data-vol
+1 −1
Original line number Diff line number Diff line
@@ -2,4 +2,4 @@ version: '3.5'

volumes:
  redis-data-vol:
    name: ${REDIS_DATA_VOL_NAME:-vernemq-redis-data-vol}
    name: ${REDIS_DATA_VOL_NAME}
+1 −1
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@ services:

volumes:
  redis-data-vol:
    name: ${REDIS_DATA_VOL_NAME:-vernemq-redis-data-vol}
    name: ${REDIS_DATA_VOL_NAME}
    driver: 'cloudstor:aws'
    driver_opts:
      backing: shared
+41 −43
Original line number Diff line number Diff line
@@ -2,81 +2,79 @@ version: '3.5'

services:
  vernemq:
    image: erlio/docker-vernemq:${VERNEMQ_IMAGE_TAG:-latest}
    image: ${VERNEMQ_IMAGE_NAME:-erlio/docker-vernemq}:${VERNEMQ_IMAGE_TAG:-latest}
    environment:
      - DOCKER_VERNEMQ_ALLOW_ANONYMOUS
      - DOCKER_VERNEMQ_LISTENER__HTTP__DEFAULT
      - DOCKER_IP_ADDRESS
      - DOCKER_VERNEMQ_DISTRIBUTED_COOKIE
      - DOCKER_VERNEMQ_PLUGINS__VMQ_PASSWD
      - DOCKER_VERNEMQ_PLUGINS__VMQ_ACL
      - DOCKER_VERNEMQ_PLUGINS__VMQ_DIVERSITY
      - DOCKER_VERNEMQ_VMQ_DIVERSITY__AUTH_REDIS__ENABLED
      - DOCKER_VERNEMQ_VMQ_DIVERSITY__REDIS__HOST
      - DOCKER_VERNEMQ_VMQ_DIVERSITY__REDIS__PORT
      DOCKER_VERNEMQ_ALLOW_ANONYMOUS:
      DOCKER_IP_ADDRESS:
      DOCKER_VERNEMQ_DISTRIBUTED_COOKIE:
      DOCKER_VERNEMQ_PLUGINS__VMQ_PASSWD:
      DOCKER_VERNEMQ_PLUGINS__VMQ_ACL:
      DOCKER_VERNEMQ_PLUGINS__VMQ_DIVERSITY:
      DOCKER_VERNEMQ_VMQ_DIVERSITY__AUTH_REDIS__ENABLED:
      DOCKER_VERNEMQ_VMQ_DIVERSITY__REDIS__HOST:
      DOCKER_VERNEMQ_VMQ_DIVERSITY__REDIS__PORT:
    networks:
      - vernemq-net
      - traefik-net
      - metric-net
      vernemq-net:
      metric-net:
    ports:
      - target: 1883
        published: 1883
      - target: ${MQTT_PORT}
        published: ${EXTERNAL_MQTT_PORT}
        protocol: tcp
        mode: ingress
      - target: 8883
        published: 8883
        mode: ${PORT_MODE}
      - target: ${SECURE_MQTT_PORT}
        published: ${EXTERNAL_SECURE_MQTT_PORT}
        protocol: tcp
        mode: ingress
        mode: ${PORT_MODE}
    volumes:
      - vernemq-data-vol:/vernemq/data
      - vernemq-etc-vol:/vernemq/etc
      - vernemq-log-vol:/vernemq/log
    deploy:
      mode: replicated
      replicas: 1
      replicas: ${VERNEMQ_REPLICAS:-1}
      restart_policy:
        delay: ${VERNEMQ_RESTART_DELAY:-10s}
      update_config:
        delay: ${VERNEMQ_UPDATE_DELAY:-1m}
      labels:
        traefik.frontend.rule: Host:${SUBDOMAIN}.${PUBLIC_HOSTNAME}
        traefik.frontend.rule: Host:${TRAEFIK_SUBDOMAIN:-vernemq}.${PUBLIC_HOSTNAME};AddPrefix:/status
        traefik.backend: vernemq
        traefik.port: '8080'
      restart_policy:
        delay: 10s
        window: 2m
        traefik.port: '${HTTP_PORT}'
      resources:
        limits:
          cpus: '1'
          memory: 256M
          cpus: '${VERNEMQ_RESOURCES_LIMITS_CPUS:-1}'
          memory: ${VERNEMQ_RESOURCES_LIMITS_MEMORY:-256M}
        reservations:
          memory: 205M
          cpus: '${VERNEMQ_RESOURCES_RESERVATIONS_CPUS:-0.001}'
          memory: ${VERNEMQ_RESOURCES_RESERVATIONS_MEMORY:-80M}

  vmq-redis:
    image: redis:${REDIS_IMAGE_TAG:-latest}
    image: ${REDIS_IMAGE_NAME:-redis}:${REDIS_IMAGE_TAG:-latest}
    command: redis-server --appendonly yes
    networks:
      - vernemq-net
      vernemq-net:
    volumes:
      - redis-data-vol:/data
    deploy:
      mode: replicated
      replicas: 1
      replicas: ${REDIS_REPLICAS:-1}
      restart_policy:
        delay: 10s
        window: 1m
        delay: ${REDIS_RESTART_DELAY:-5s}
      update_config:
        delay: ${REDIS_UPDATE_DELAY:-1m}
      resources:
        limits:
          cpus: '0.1'
          memory: 64M
          cpus: '${REDIS_RESOURCES_LIMITS_CPUS:-0.1}'
          memory: ${REDIS_RESOURCES_LIMITS_MEMORY:-64M}
        reservations:
          memory: 32M
          cpus: '${REDIS_RESOURCES_RESERVATIONS_CPUS:-0.001}'
          memory: ${REDIS_RESOURCES_RESERVATIONS_MEMORY:-16M}

networks:
  vernemq-net:
    name: ${VERNEMQ_NET_NAME:-vernemq-net}
    driver: overlay
    attachable: ${VERNEMQ_NET_ATTACHABLE:-true}

  traefik-net:
    name: ${TRAEFIK_NET_NAME:-traefik-net}
    external: true
    driver: ${VERNEMQ_NET_DRIVER:-overlay}
    attachable: ${VERNEMQ_NET_ATTACHABLE:-false}

  metric-net:
    name: ${METRIC_NET_NAME:-metric-net}