version: '2'
services:
  # The reverse proxy for our web containers
  # See https://github.com/traefik/traefik/tree/v2.7/docs/content/user-guides/docker-compose for some examples for enabling HTTPS using ACME
  # You will need a domain name. E.g. 'example.com'
  # This example requests TLS certs via ACME via DNS challenge using OVHcloud as the DNS provider.
  # For a list of supported DNS providers, see: https://doc.traefik.io/traefik/https/acme/#providers
  traefik:
    image: traefik:v2
    environment:
      - OVH_ENDPOINT=xxx
      - OVH_APPLICATION_KEY=xxx
      - OVH_APPLICATION_SECRET=xxx
      - OVH_CONSUMER_KEY=xxx
    volumes:
      # Allow traefik to listen to the Docker events
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - acme-volume:/letsencrypt
    ports:
      - 80:80
      - 443:443
    networks:
      - traefik-network
    restart: unless-stopped
    command:
      - --global.checknewversion=false
      - --global.sendanonymoususage=false
      # - --log.level=DEBUG
      - --providers.docker=true
      - --providers.docker.exposedbydefault=false
      - --entrypoints.web.address=:80
      - --entrypoints.websecure.address=:443
      - --certificatesresolvers.myresolver.acme.dnschallenge=true
      - --certificatesresolvers.myresolver.acme.dnschallenge.provider=ovh
      # - --certificatesresolvers.myresolver.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory
      - --certificatesresolvers.myresolver.acme.email=postmaster@example.com
      - --certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json

  # snappymail will be available at: https://snappymail.example.com
  snappymail:
    image: djmaze/snappymail:latest
    labels:
      - "traefik.enable=true"
      - "traefik.docker.network=traefik-network"
      # traefik v2
      # http
      - "traefik.http.routers.snappymail-http.entrypoints=web"
      - "traefik.http.routers.snappymail-http.rule=Host(`snappymail.example.com`)"
      - "traefik.http.routers.snappymail-http.middlewares=snappymail-http-myRedirectScheme" # Redirect http to https
      - "traefik.http.middlewares.snappymail-http-myRedirectScheme.redirectScheme.scheme=https" # Redirect http to https
      # https
      - "traefik.http.routers.snappymail.entrypoints=websecure"
      - "traefik.http.routers.snappymail.tls"
      - "traefik.http.routers.snappymail.rule=Host(`snappymail.example.com`)"
      - "traefik.http.services.snappymail.loadbalancer.server.port=8888"
    expose:
      - 8888
    environment:
      - DEBUG=true
    volumes:
      - snappymail:/var/lib/snappymail
    networks:
      - default
      - traefik-network
    restart: unless-stopped

  # This provides prometheus metrics for snappymail's php-fpm
  php-fpm-exporter:
    image: hipages/php-fpm_exporter:2.2.0
    ports:
      - 9253:9253
    environment:
      - PHP_FPM_SCRAPE_URI=tcp://snappymail:9000/status
    networks:
      - default

networks:
  default:
  traefik-network:
    name: traefik-network

volumes:
  acme-volume:
    driver: local
  snappymail:
    driver: local
