Actualiser Perso/service-whoami.md

This commit is contained in:
2026-07-19 14:06:03 +00:00
parent 8a4f1ca667
commit 996c11dd6a
+317 -317
View File
@@ -1,318 +1,318 @@
# 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](procedure-https-homelab-infomaniak.md))
- Réseau Docker `traefik_network` créé
- Port forwarding 80/443 configuré sur le routeur
### Commandes
```bash
# 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
```yaml
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)
```bash
# 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
```bash
# 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 :
```json
{
"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
```bash
# 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
```bash
# 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** :
```bash
# 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** :
```bash
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** :
```bash
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** :
```bash
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** :
```bash
docker ps | grep whoami
```
2. **Vérifier que whoami est sur le réseau traefik_network** :
```bash
docker inspect whoami | grep Network
```
3. **Vérifier que Traefik détecte le service** :
```bash
docker logs traefik-proxy | grep whoami
```
4. **Vérifier les routes Traefik** :
```bash
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é** :
```bash
pct list | grep 200
```
2. **Vérifier que Docker est en cours d'exécution dans le CT** :
```bash
ssh root@192.168.0.100
docker ps
```
3. **Vérifier que Traefik est en cours d'exécution** :
```bash
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
```bash
# 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
```bash
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
```bash
# 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
- [Image Docker traefik/whoami](https://hub.docker.com/r/traefik/whoami)
- [Documentation Traefik](https://doc.traefik.io/traefik/)
- [Let's Encrypt Status](https://letsencrypt.status.io/)
---
# 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](procedure-https-homelab-infomaniak.md))
- Réseau Docker `traefik_network` créé
- Port forwarding 80/443 configuré sur le routeur
### Commandes
```bash
# 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
```yaml
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)
```bash
# 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
```bash
# 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 :
```json
{
"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
```bash
# 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
```bash
# 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** :
```bash
# 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** :
```bash
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** :
```bash
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** :
```bash
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** :
```bash
docker ps | grep whoami
```
2. **Vérifier que whoami est sur le réseau traefik_network** :
```bash
docker inspect whoami | grep Network
```
3. **Vérifier que Traefik détecte le service** :
```bash
docker logs traefik-proxy | grep whoami
```
4. **Vérifier les routes Traefik** :
```bash
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é** :
```bash
pct list | grep 200
```
2. **Vérifier que Docker est en cours d'exécution dans le CT** :
```bash
ssh root@192.168.0.100
docker ps
```
3. **Vérifier que Traefik est en cours d'exécution** :
```bash
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
```bash
# 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
```bash
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
```bash
# 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
- [Image Docker traefik/whoami](https://hub.docker.com/r/traefik/whoami)
- [Documentation Traefik](https://doc.traefik.io/traefik/)
- [Let's Encrypt Status](https://letsencrypt.status.io/)
---
*Documentation générée le 17/07/2026 pour ton homelab*