version: '3.4'

networks:
  traefik:
    external: true

services:
#####################
## Proxy container ##
#####################
## One of the major contributing guides here.
## https://www.digitalocean.com/community/tutorials/how-to-use-traefik-as-a-reverse-proxy-for-docker-containers-on-ubuntu-16-04
  proxy:
    image: traefik:alpine
    command: --api --docker --docker.domain=docker.localhost --logLevel=DEBUG
    networks:
      traefik:
        ipv4_address: 10.5.1.100
    ports:
      - target: 80
        published: 80
        mode: host
      - target: 443
        published: 443
        mode: host
    expose:
      - 8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/traefik.toml
      ## This is going to be stored by default in the following host dir in staging.
      #  There is a rate limit for how many issuances you can request per week.
      #  Because of this we will store the acme.json file persistently.
      #  In production we are going to need to figure out how it'll work with Kubernetes or variant.
      - ./traefik/:/opt/traefik/
    labels:
      # https://docs.traefik.io/user-guide/docker-and-lets-encrypt/
      - "traefik.backend=proxy"
      - "traefik.docker.network=traefik"
      ## Make sure that you either set the .env variable included in this repository or replace the domain string below.
      ## Also your DNS record will need to exist pointing at the machine your Traefik Reverse Proxy will be hosted on before you launch this app cluster.
      - "traefik.frontend.rule=Host:monitor.${DOMAIN}"
      - "traefik.expose=true"
      - "traefik.port=8080"
    healthcheck:
       test: ["CMD", "traefik", "healthcheck"]
       timeout: 10s
       retries: 3