Actualiser Perso/service-whoami.md
This commit is contained in:
@@ -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*
|
||||
Reference in New Issue
Block a user