Docker Traefik Setup

This is my basic traefik setup for docker. Create the file and compose up the docker-compose and done.

You can add let's encrypt if need be, or use custom certs.


Here's the docker-compose.yml:


networks:
  ingress:
      name: ingress
volumes:
  traefik-letsencrypt:
 

services:
  reverse-proxy:
    image: traefik:v3
    # environment:
    # If needed: - INFOMANIAK_ACCESS_TOKEN=TOKEN
    command: 
    - "--api.insecure=false"
    - "--api.dashboard=false"
    - "--providers.docker"
    
    # Public Endpoint
    - "--entrypoints.web-http.address=:1080"
    - "--entrypoints.web-http.http.redirections.entrypoint.to=:443"
    - "--entrypoints.web-http.http.redirections.entrypoint.scheme=https"
    - "--entrypoints.web.address=:1443"

    # Allow proxying to self signed certs
    - "--serverstransport.insecureskipverify=true"

    # Custom Certs
    # - "--providers.file.filename=/etc/traefik/dynamic.yaml"
    
    # Letsencrypt Config
    # - "--certificatesresolvers.le.acme.dnschallenge.provider=infomaniak"
    # - "--certificatesresolvers.le.acme.dnschallenge.delaybeforecheck=0"

    labels:
    - "traefik.enable=false"
   
    networks:
      - ingress
      - default
    ports:
      - "80:1080"
      - "443:1443"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - traefik-letsencrypt:/letsencrypt"
      # - ./configuration:/etc/traefik
      # - ./certs:/certs


If you need custom certs, put the configuration file inside ./configuration and the certs in ./certs. In configuration place the dynamic.yaml like this: (!use yaml not yml)

tls:
  options:
    default:
      sniStrict: false
  certificates:
    - certFile: /certs/fullchain.pem
      keyFile: /certs/key.pem
  stores:
    default:
      defaultCertificate:
        certFile: /certs/fullchain.pem
        keyFile: /certs/key.pem
serversTransport:
  insecureSkipVerify: true


Now to use it:

networks:
  ingress:
      external: true
      name: ingress

services:
  (...)
    networks:
    - default
    - ingress
    labels:
      # Setup Traefik
      - "traefik.enable=true"
      - "traefik.docker.network=ingress"
      - "traefik.http.routers.${TRAEFIK_SERVICE_NAME}.entrypoints=web"

      # Rule to match the traffic
      - "traefik.http.routers.${TRAEFIK_SERVICE_NAME}.rule=Host(`${TRAEFIK_SUBDOMAIN}.214.li`) || Host(`${TRAEFIK_SUBDOMAIN}.suter.dev`) || Host(`${TRAEFIK_SUBDOMAIN}.postme.ch`)"
      
      # TLS
      - "traefik.http.routers.${TRAEFIK_SERVICE_NAME}.tls=true"
      - "traefik.http.routers.${TRAEFIK_SERVICE_NAME}.tls.certresolver=le"