Files
homelab-config/service-whoami.md
T
2026-07-19 14:56:31 +02:00

7.8 KiB
Executable File

Service Whoami - Test et Validation Traefik

📋 Description

Whoami est un service simple de Traefik qui renvoie des informations sur la requête HTTP reçue. Il est utilisé comme service de test pour valider que Traefik et Let's Encrypt sont correctement configurés.


🎯 Fonctionnalités

  • Affiche l'adresse IP source
  • Affiche les headers HTTP
  • Affiche l'hôte et le chemin de la requête
  • Utilisé pour tester la configuration reverse proxy

📡 Accès

  • URL: https://test.peis.fr
  • Type: HTTPS (certificat Let's Encrypt production)
  • Service: whoami (traefik/whoami)
  • Réseau: traefik_network
  • Conteneur: whoami
  • IP Traefik: 192.168.0.100 (CT 200 - traefik-proxy)

🚀 Déploiement

Prérequis

  • Traefik déployé et fonctionnel (voir procédure HTTPS homelab)
  • Réseau Docker traefik_network créé
  • Port forwarding 80/443 configuré sur le routeur

Commandes

# Déployer le service whoami
cd /opt/traefik
docker-compose -f docker-compose-whoami.yml up -d

# Vérifier que le conteneur est en cours d'exécution
docker ps

# Voir les logs
docker logs whoami

📄 Fichier docker-compose-whoami.yml

version: '3.8'

services:
  whoami:
    image: traefik/whoami
    container_name: whoami
    restart: unless-stopped
    labels:
      - "traefik.enable=true"
      # Router HTTP → HTTPS (redirection automatique)
      - "traefik.http.routers.whoami-http.rule=Host(`test.peis.fr`)"
      - "traefik.http.routers.whoami-http.entrypoints=web"
      - "traefik.http.routers.whoami-http.middlewares=redirect-to-https@file"
      # Router HTTPS (principal)
      - "traefik.http.routers.whoami.rule=Host(`test.peis.fr`)"
      - "traefik.http.routers.whoami.entrypoints=websecure"
      - "traefik.http.routers.whoami.tls=true"
      - "traefik.http.routers.whoami.tls.certresolver=letsencrypt"
      # Configuration du service
      - "traefik.http.services.whoami.loadbalancer.server.port=80"
    networks:
      - traefik_network

networks:
  traefik_network:
    external: true

⚠️ Note : Le sous-domaine test.peis.fr doit exister dans votre DNS Infomaniak avec un enregistrement CNAME pointant vers lab.peis.fr (qui pointe vers 82.67.139.7).


Validation

1. Tester la connectivité HTTP (redirection)

# Depuis un terminal interne ou externe
curl -v http://test.peis.fr

Résultat attendu: Redirection 301 vers https://test.peis.fr


2. Tester HTTPS

# Depuis un navigateur
Ouvrir : https://test.peis.fr

# Depuis un terminal
curl -vk https://test.peis.fr

Résultat attendu : Réponse JSON avec les informations de la requête

Exemple de réponse :

{
  "host": "freebox.peis.fr",
  "method": "GET",
  "path": "/",
  "headers": {
    "Accept": ["*/*"],
    "User-Agent": ["curl/7.88.1"],
    "X-Forwarded-For": ["192.168.0.1"],
    "X-Forwarded-Host": ["freebox.peis.fr"],
    "X-Forwarded-Port": ["443"],
    "X-Forwarded-Proto": ["https"],
    "X-Forwarded-Server": ["traefik"],
    "X-Real-Ip": ["192.168.0.1"]
  }
}

3. Vérifier le certificat SSL

# Depuis un navigateur
1. Ouvrir https://test.peis.fr
2. Cliquer sur l'icône 🔒 dans la barre d'adresse
3. Vérifier que le certificat est émis par "Let's Encrypt"

# Depuis un terminal (openssl)
openssl s_client -connect test.peis.fr:443 -servername test.peis.fr | openssl x509 -noout -text | grep -A 5 "Issuer:"

En mode production : Le certificat sera émis par "Let's Encrypt"


4. Vérifier dans les logs Traefik

# Voir les logs du conteneur Traefik
docker logs traefik-proxy | grep -i certificate

# Voir les certificats obtenus
docker exec traefik-proxy cat /etc/traefik/certs/acme.json | jq

Résultat attendu :

legolog: [INFO] [test.peis.fr] acme: Obtaining bundled SAN certificate
legolog: [INFO] [test.peis.fr] acme: Validations succeeded

🔧 Dépannage

Problème : Certificat non généré

Symptômes :

  • Le site n'est pas accessible en HTTPS
  • Erreur de certificat dans le navigateur
  • Logs Traefik : "Unable to obtain ACME certificate"

Solutions :

  1. Vérifier le port forwarding :

    # Depuis une machine externe (pas votre réseau local)
    curl -v http://test.peis.fr/.well-known/acme-challenge/test
    

    → Doit retourner une réponse HTTP (même une 404)

  2. Vérifier que Traefik écoute sur le port 80 :

    docker exec traefik-proxy netstat -tuln | grep 80
    

    → Doit afficher :::80 ou 0.0.0.0:80

  3. Vérifier que le DNS pointe vers la bonne IP :

    dig +short test.peis.fr
    

    → Doit retourner 82.67.139.7 (via CNAME lab.peis.fr)

  4. Vérifier que Let's Encrypt n'est pas rate limité :

    • Attendez 1 heure si vous avez fait beaucoup de tests
  5. Vérifier la configuration Let's Encrypt :

    docker exec traefik-proxy cat /etc/traefik/traefik.yml | grep -A 5 certificatesResolvers
    

    → Doit afficher email: theo@peis.fr et pas de caServer: acme-staging


Problème : 404 Not Found

Symptômes :

  • La page renvoie 404
  • Pas de réponse whoami

Solutions :

  1. Vérifier que le conteneur whoami est en cours d'exécution :

    docker ps | grep whoami
    
  2. Vérifier que whoami est sur le réseau traefik_network :

    docker inspect whoami | grep Network
    
  3. Vérifier que Traefik détecte le service :

    docker logs traefik-proxy | grep whoami
    
  4. Vérifier les routes Traefik :

    docker exec traefik-proxy traefik get routers | grep whoami
    

Problème : Erreur de connection

Symptômes :

  • Impossible de se connecter à freebox.peis.fr
  • Timeout ou connection refused

Solutions :

  1. Vérifier que le CT 200 est démarré :

    pct list | grep 200
    
  2. Vérifier que Docker est en cours d'exécution dans le CT :

    ssh root@192.168.0.100
    docker ps
    
  3. Vérifier que Traefik est en cours d'exécution :

    docker ps | grep traefik
    
  4. Vérifier le port forwarding sur le routeur :

    • TCP 80 → 192.168.0.100
    • TCP 443 → 192.168.0.100

📚 Exemples d'utilisation

Exemple 1 : Tester depuis un navigateur

  1. Ouvrir https://test.peis.fr
  2. Vous devriez voir une page JSON avec les détails de votre requête
  3. Vérifier que l'URL est bien en HTTPS et que le cadenas est présent

Exemple 2 : Tester avec curl depuis une machine externe

# Depuis un smartphone en 4G ou une machine en dehors de votre réseau
curl -v https://test.peis.fr

Exemple 3 : Tester avec différents headers

curl -H "X-Custom-Header: test-value" https://test.peis.fr

→ Vous devriez voir "X-Custom-Header": ["test-value"] dans la réponse JSON


🗑️ Suppression

# Arrêter et supprimer le conteneur whoami
cd /opt/traefik
docker-compose -f docker-compose-whoami.yml down

# Supprimer le fichier de configuration (optionnel)
rm docker-compose-whoami.yml

# Redémarrer whoami (après modification)
docker-compose -f docker-compose-whoami.yml up -d --force-recreate

🔗 Liens utiles


Documentation générée le 17/07/2026 pour ton homelab