La recente major release v3 di Traefik, ha portato nuove funzionalità o concretizzato alcune. Come i certificati tramite Tailscale e HTTP3. In questa breve guida voglio presentare un esempio di configurazione per utilizzare HTTP3 in Traefik. Il cambiamento non è drastico, perché la funzionalità era già esistente come sperimentale.
Requisiti#
- macchina Linux con docker e compose (altrimenti non saresti qui)
- un dominio
- con il quale si possa ottenere un certificato TLS valido (HTTPS)
- nel esempio uso il dominio, DNS e certificati di traefik.me
Procedura#
- creare i file - docker-compose.ymle- tls.ymlcon il contenuto dei successivi capitoli
- modificare il file - docker-compose.ymlin particolare: il percorso delle cartelle per traefik e sostituire l’indirizzo IP del server (comando- ip a) con il proprio
- creare una cartella - certper salvare i certificati TLS di traefik.me
- scaricare i certificati con il seguente comando (l’opzione -d non è presente): 
sudo docker compose up helper
- creare il container traefikewhoami
sudo docker compose up -d traefik
sudo docker compose up -d whoami
- testare il funzionamento
Docker compose (docker-compose.yml)#
services:
  traefik:
    image: traefik:v3.0
    container_name: traefik
    command:
      - "--log.level=DEBUG"
      - "--providers.docker=true"
      - "--providers.file.filename=/tls.yml"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.websecure.address=:443"
      - "--entrypoints.websecure.http3"
      - "--entrypoints.web.address=:80"
      - "--entryPoints.web.http.redirections.entryPoint.to=websecure"
    ports:
      - 80:80
      - 443:443/tcp
      - 443:443/udp
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - PATH/TO/cert:/etc/ssl/traefik
      - PATH/TO/tls.yml:/tls.yml
  whoami:
    image: containous/whoami:latest
    container_name: whoami
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.rule=Host(`1-2-3-4.traefik.me`)"  # change 1-2-3-4 with you server IP
      - "traefik.http.routers.whoami.tls.domains[0].main=*.traefik.me"
      - "traefik.http.routers.whoami.entrypoints=websecure"
  helper:
    image: alpine
    command: sh -c "cd /etc/ssl/traefik
      && wget traefik.me/cert.pem -O cert.pem
      && wget traefik.me/privkey.pem -O privkey.pem"
    volumes:
      - PATH/TO/cert:/etc/ssl/traefik
File provider di traefik (tls.yml)#
tls:
  stores:
    default:
      defaultCertificate:
        certFile: /etc/ssl/traefik/cert.pem
        keyFile: /etc/ssl/traefik/privkey.pem
  certificates:
    - certFile: /etc/ssl/traefik/cert.pem
      keyFile: /etc/ssl/traefik/privkey.pem
Come testare#
Vi consiglio di testare il funzionamento con Chrome o un browser derivato (io uso Brave). Su Firefox non sono ancora riuscito a far funzionare l’HTTP3.
Aprire gli strumenti per sviluppatori o click con il tasto destro e scegliere l’opzione ispeziona. Aprire il tab network o rete e ricaricare la pagina. Nella tabella è possibile visualizzare i vari file scaricati, nella colonna protocollo potete vederese il vostro server fornisce http2= h2 o http3= h3. Se avete aperto la pagina prima di cambiare la configurazione di traefik può essere consigliato riavviare il browser.
Problemi comuni#
- certificato non valido o scaduto: verificare che nella dashboard di traefik sia attivo il certificato TLS per il nostro router. Se il certificato è giusto ma scaduto, verificare che su traefik.me sia presente uno aggiornato. Se non si può aspettare allora usate Tailscale o acquistate il vostro dominio.
- il dominio *.traefik.me non funziona: traefik.me permette varie notazioni, ma per i certificati gli indirizzi IP non devono essere scritti con il punto, ma con la linea ("-"). Si può testare il corretto funzionamento del dominio provando ad accedere alla dashboard di traefik con l’indirizzo http://1-2-3-4.traefik.me:8080 (attenzione al http non https e sostituire 1-2-3-4 con l’indirizzo IP giusto).
- ho seguito tutti i passaggi, ma il certificato è sempre sbagliato: i file .pemdevono essere salvati con diritti particolari. Usa il containerhelperper scaricarli con i giusti diritti.



