version: '3'

services:
  traefik:
    image: traefik:latest
    container_name: traefik
    restart: unless-stopped
    ports:
      - '80:80'
      - '443:443'
    environment:
      - TZ=Europe/Helsinki
    security_opt:
      - no-new-privileges:true
    networks:
      - proxy
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /docker/træfik/træfik/traefik.yml:/traefik.yml:ro
      - /docker/træfik/træfik/dashboard-users:/dashboard-users:ro
      - /docker/træfik/træfik/acme.json:/acme.json
      - /docker/træfik/træfik/log:/var/log
    labels:
      - 'traefik.enable=true'

      - 'traefik.http.routers.redirect.entrypoints=http'
      - 'traefik.http.routers.redirect.rule=Host(`traefik.korhonen.cc`)'
      - 'traefik.http.middlewares.http2https.redirectscheme.scheme=https'
      - 'traefik.http.routers.redirect.middlewares=http2https'

      - 'traefik.http.routers.dashboard.entrypoints=https'
      - 'traefik.http.routers.dashboard.rule=Host(`traefik.korhonen.cc`)'
      - 'traefik.http.middlewares.dashboard-auth.basicauth.usersfile=/dashboard-users'
      - 'traefik.http.routers.dashboard.middlewares=dashboard-auth'
      - 'traefik.http.routers.dashboard.tls=true'
      - 'traefik.http.routers.dashboard.tls.certresolver=http'
      - 'traefik.http.routers.dashboard.service=api@internal'

  fail2ban:
    image: crazymax/fail2ban:latest
    container_name: fail2ban
    restart: unless-stopped
    network_mode: "host"
    cap_add:
      - NET_ADMIN
      - NET_RAW
    volumes:
      - /docker/træfik/træfik/log:/var/log/træfik:ro
      - /docker/træfik/fail2ban:/data
networks:
  proxy:
    external: true
