Actualiser Perso/service-whoami.md
This commit is contained in:
@@ -1,318 +1,318 @@
|
|||||||
# Service Whoami - Test et Validation Traefik
|
# Service Whoami - Test et Validation Traefik
|
||||||
|
|
||||||
## 📋 Description
|
## 📋 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.
|
**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
|
## 🎯 Fonctionnalités
|
||||||
|
|
||||||
- Affiche l'adresse IP source
|
- Affiche l'adresse IP source
|
||||||
- Affiche les headers HTTP
|
- Affiche les headers HTTP
|
||||||
- Affiche l'hôte et le chemin de la requête
|
- Affiche l'hôte et le chemin de la requête
|
||||||
- Utilisé pour tester la configuration reverse proxy
|
- Utilisé pour tester la configuration reverse proxy
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📡 Accès
|
## 📡 Accès
|
||||||
|
|
||||||
- **URL**: https://test.peis.fr
|
- **URL**: https://test.peis.fr
|
||||||
- **Type**: HTTPS (certificat Let's Encrypt **production**)
|
- **Type**: HTTPS (certificat Let's Encrypt **production**)
|
||||||
- **Service**: whoami (traefik/whoami)
|
- **Service**: whoami (traefik/whoami)
|
||||||
- **Réseau**: traefik_network
|
- **Réseau**: traefik_network
|
||||||
- **Conteneur**: whoami
|
- **Conteneur**: whoami
|
||||||
- **IP Traefik**: 192.168.0.100 (CT 200 - traefik-proxy)
|
- **IP Traefik**: 192.168.0.100 (CT 200 - traefik-proxy)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🚀 Déploiement
|
## 🚀 Déploiement
|
||||||
|
|
||||||
### Prérequis
|
### Prérequis
|
||||||
|
|
||||||
- Traefik déployé et fonctionnel (voir [procédure HTTPS homelab](procedure-https-homelab-infomaniak.md))
|
- Traefik déployé et fonctionnel (voir [procédure HTTPS homelab](procedure-https-homelab-infomaniak.md))
|
||||||
- Réseau Docker `traefik_network` créé
|
- Réseau Docker `traefik_network` créé
|
||||||
- Port forwarding 80/443 configuré sur le routeur
|
- Port forwarding 80/443 configuré sur le routeur
|
||||||
|
|
||||||
### Commandes
|
### Commandes
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Déployer le service whoami
|
# Déployer le service whoami
|
||||||
cd /opt/traefik
|
cd /opt/traefik
|
||||||
docker-compose -f docker-compose-whoami.yml up -d
|
docker-compose -f docker-compose-whoami.yml up -d
|
||||||
|
|
||||||
# Vérifier que le conteneur est en cours d'exécution
|
# Vérifier que le conteneur est en cours d'exécution
|
||||||
docker ps
|
docker ps
|
||||||
|
|
||||||
# Voir les logs
|
# Voir les logs
|
||||||
docker logs whoami
|
docker logs whoami
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📄 Fichier docker-compose-whoami.yml
|
## 📄 Fichier docker-compose-whoami.yml
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
version: '3.8'
|
version: '3.8'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
whoami:
|
whoami:
|
||||||
image: traefik/whoami
|
image: traefik/whoami
|
||||||
container_name: whoami
|
container_name: whoami
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
# Router HTTP → HTTPS (redirection automatique)
|
# Router HTTP → HTTPS (redirection automatique)
|
||||||
- "traefik.http.routers.whoami-http.rule=Host(`test.peis.fr`)"
|
- "traefik.http.routers.whoami-http.rule=Host(`test.peis.fr`)"
|
||||||
- "traefik.http.routers.whoami-http.entrypoints=web"
|
- "traefik.http.routers.whoami-http.entrypoints=web"
|
||||||
- "traefik.http.routers.whoami-http.middlewares=redirect-to-https@file"
|
- "traefik.http.routers.whoami-http.middlewares=redirect-to-https@file"
|
||||||
# Router HTTPS (principal)
|
# Router HTTPS (principal)
|
||||||
- "traefik.http.routers.whoami.rule=Host(`test.peis.fr`)"
|
- "traefik.http.routers.whoami.rule=Host(`test.peis.fr`)"
|
||||||
- "traefik.http.routers.whoami.entrypoints=websecure"
|
- "traefik.http.routers.whoami.entrypoints=websecure"
|
||||||
- "traefik.http.routers.whoami.tls=true"
|
- "traefik.http.routers.whoami.tls=true"
|
||||||
- "traefik.http.routers.whoami.tls.certresolver=letsencrypt"
|
- "traefik.http.routers.whoami.tls.certresolver=letsencrypt"
|
||||||
# Configuration du service
|
# Configuration du service
|
||||||
- "traefik.http.services.whoami.loadbalancer.server.port=80"
|
- "traefik.http.services.whoami.loadbalancer.server.port=80"
|
||||||
networks:
|
networks:
|
||||||
- traefik_network
|
- traefik_network
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
traefik_network:
|
traefik_network:
|
||||||
external: true
|
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).
|
> ⚠️ **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
|
## ✅ Validation
|
||||||
|
|
||||||
### 1. Tester la connectivité HTTP (redirection)
|
### 1. Tester la connectivité HTTP (redirection)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Depuis un terminal interne ou externe
|
# Depuis un terminal interne ou externe
|
||||||
curl -v http://test.peis.fr
|
curl -v http://test.peis.fr
|
||||||
```
|
```
|
||||||
|
|
||||||
**Résultat attendu**: Redirection 301 vers `https://test.peis.fr`
|
**Résultat attendu**: Redirection 301 vers `https://test.peis.fr`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 2. Tester HTTPS
|
### 2. Tester HTTPS
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Depuis un navigateur
|
# Depuis un navigateur
|
||||||
Ouvrir : https://test.peis.fr
|
Ouvrir : https://test.peis.fr
|
||||||
|
|
||||||
# Depuis un terminal
|
# Depuis un terminal
|
||||||
curl -vk https://test.peis.fr
|
curl -vk https://test.peis.fr
|
||||||
```
|
```
|
||||||
|
|
||||||
**Résultat attendu** : Réponse JSON avec les informations de la requête
|
**Résultat attendu** : Réponse JSON avec les informations de la requête
|
||||||
|
|
||||||
Exemple de réponse :
|
Exemple de réponse :
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"host": "freebox.peis.fr",
|
"host": "freebox.peis.fr",
|
||||||
"method": "GET",
|
"method": "GET",
|
||||||
"path": "/",
|
"path": "/",
|
||||||
"headers": {
|
"headers": {
|
||||||
"Accept": ["*/*"],
|
"Accept": ["*/*"],
|
||||||
"User-Agent": ["curl/7.88.1"],
|
"User-Agent": ["curl/7.88.1"],
|
||||||
"X-Forwarded-For": ["192.168.0.1"],
|
"X-Forwarded-For": ["192.168.0.1"],
|
||||||
"X-Forwarded-Host": ["freebox.peis.fr"],
|
"X-Forwarded-Host": ["freebox.peis.fr"],
|
||||||
"X-Forwarded-Port": ["443"],
|
"X-Forwarded-Port": ["443"],
|
||||||
"X-Forwarded-Proto": ["https"],
|
"X-Forwarded-Proto": ["https"],
|
||||||
"X-Forwarded-Server": ["traefik"],
|
"X-Forwarded-Server": ["traefik"],
|
||||||
"X-Real-Ip": ["192.168.0.1"]
|
"X-Real-Ip": ["192.168.0.1"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 3. Vérifier le certificat SSL
|
### 3. Vérifier le certificat SSL
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Depuis un navigateur
|
# Depuis un navigateur
|
||||||
1. Ouvrir https://test.peis.fr
|
1. Ouvrir https://test.peis.fr
|
||||||
2. Cliquer sur l'icône 🔒 dans la barre d'adresse
|
2. Cliquer sur l'icône 🔒 dans la barre d'adresse
|
||||||
3. Vérifier que le certificat est émis par "Let's Encrypt"
|
3. Vérifier que le certificat est émis par "Let's Encrypt"
|
||||||
|
|
||||||
# Depuis un terminal (openssl)
|
# Depuis un terminal (openssl)
|
||||||
openssl s_client -connect test.peis.fr:443 -servername test.peis.fr | openssl x509 -noout -text | grep -A 5 "Issuer:"
|
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"
|
**En mode production** : Le certificat sera émis par "Let's Encrypt"
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### 4. Vérifier dans les logs Traefik
|
### 4. Vérifier dans les logs Traefik
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Voir les logs du conteneur Traefik
|
# Voir les logs du conteneur Traefik
|
||||||
docker logs traefik-proxy | grep -i certificate
|
docker logs traefik-proxy | grep -i certificate
|
||||||
|
|
||||||
# Voir les certificats obtenus
|
# Voir les certificats obtenus
|
||||||
docker exec traefik-proxy cat /etc/traefik/certs/acme.json | jq
|
docker exec traefik-proxy cat /etc/traefik/certs/acme.json | jq
|
||||||
```
|
```
|
||||||
|
|
||||||
**Résultat attendu** :
|
**Résultat attendu** :
|
||||||
```
|
```
|
||||||
legolog: [INFO] [test.peis.fr] acme: Obtaining bundled SAN certificate
|
legolog: [INFO] [test.peis.fr] acme: Obtaining bundled SAN certificate
|
||||||
legolog: [INFO] [test.peis.fr] acme: Validations succeeded
|
legolog: [INFO] [test.peis.fr] acme: Validations succeeded
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔧 Dépannage
|
## 🔧 Dépannage
|
||||||
|
|
||||||
### Problème : Certificat non généré
|
### Problème : Certificat non généré
|
||||||
|
|
||||||
**Symptômes** :
|
**Symptômes** :
|
||||||
- Le site n'est pas accessible en HTTPS
|
- Le site n'est pas accessible en HTTPS
|
||||||
- Erreur de certificat dans le navigateur
|
- Erreur de certificat dans le navigateur
|
||||||
- Logs Traefik : "Unable to obtain ACME certificate"
|
- Logs Traefik : "Unable to obtain ACME certificate"
|
||||||
|
|
||||||
**Solutions** :
|
**Solutions** :
|
||||||
|
|
||||||
1. **Vérifier le port forwarding** :
|
1. **Vérifier le port forwarding** :
|
||||||
```bash
|
```bash
|
||||||
# Depuis une machine externe (pas votre réseau local)
|
# Depuis une machine externe (pas votre réseau local)
|
||||||
curl -v http://test.peis.fr/.well-known/acme-challenge/test
|
curl -v http://test.peis.fr/.well-known/acme-challenge/test
|
||||||
```
|
```
|
||||||
→ Doit retourner une réponse HTTP (même une 404)
|
→ Doit retourner une réponse HTTP (même une 404)
|
||||||
|
|
||||||
2. **Vérifier que Traefik écoute sur le port 80** :
|
2. **Vérifier que Traefik écoute sur le port 80** :
|
||||||
```bash
|
```bash
|
||||||
docker exec traefik-proxy netstat -tuln | grep 80
|
docker exec traefik-proxy netstat -tuln | grep 80
|
||||||
```
|
```
|
||||||
→ Doit afficher `:::80` ou `0.0.0.0:80`
|
→ Doit afficher `:::80` ou `0.0.0.0:80`
|
||||||
|
|
||||||
3. **Vérifier que le DNS pointe vers la bonne IP** :
|
3. **Vérifier que le DNS pointe vers la bonne IP** :
|
||||||
```bash
|
```bash
|
||||||
dig +short test.peis.fr
|
dig +short test.peis.fr
|
||||||
```
|
```
|
||||||
→ Doit retourner `82.67.139.7` (via CNAME lab.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é** :
|
4. **Vérifier que Let's Encrypt n'est pas rate limité** :
|
||||||
- Attendez 1 heure si vous avez fait beaucoup de tests
|
- Attendez 1 heure si vous avez fait beaucoup de tests
|
||||||
|
|
||||||
5. **Vérifier la configuration Let's Encrypt** :
|
5. **Vérifier la configuration Let's Encrypt** :
|
||||||
```bash
|
```bash
|
||||||
docker exec traefik-proxy cat /etc/traefik/traefik.yml | grep -A 5 certificatesResolvers
|
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`
|
→ Doit afficher `email: theo@peis.fr` et **pas** de `caServer: acme-staging`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Problème : 404 Not Found
|
### Problème : 404 Not Found
|
||||||
|
|
||||||
**Symptômes** :
|
**Symptômes** :
|
||||||
- La page renvoie 404
|
- La page renvoie 404
|
||||||
- Pas de réponse whoami
|
- Pas de réponse whoami
|
||||||
|
|
||||||
**Solutions** :
|
**Solutions** :
|
||||||
|
|
||||||
1. **Vérifier que le conteneur whoami est en cours d'exécution** :
|
1. **Vérifier que le conteneur whoami est en cours d'exécution** :
|
||||||
```bash
|
```bash
|
||||||
docker ps | grep whoami
|
docker ps | grep whoami
|
||||||
```
|
```
|
||||||
|
|
||||||
2. **Vérifier que whoami est sur le réseau traefik_network** :
|
2. **Vérifier que whoami est sur le réseau traefik_network** :
|
||||||
```bash
|
```bash
|
||||||
docker inspect whoami | grep Network
|
docker inspect whoami | grep Network
|
||||||
```
|
```
|
||||||
|
|
||||||
3. **Vérifier que Traefik détecte le service** :
|
3. **Vérifier que Traefik détecte le service** :
|
||||||
```bash
|
```bash
|
||||||
docker logs traefik-proxy | grep whoami
|
docker logs traefik-proxy | grep whoami
|
||||||
```
|
```
|
||||||
|
|
||||||
4. **Vérifier les routes Traefik** :
|
4. **Vérifier les routes Traefik** :
|
||||||
```bash
|
```bash
|
||||||
docker exec traefik-proxy traefik get routers | grep whoami
|
docker exec traefik-proxy traefik get routers | grep whoami
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Problème : Erreur de connection
|
### Problème : Erreur de connection
|
||||||
|
|
||||||
**Symptômes** :
|
**Symptômes** :
|
||||||
- Impossible de se connecter à freebox.peis.fr
|
- Impossible de se connecter à freebox.peis.fr
|
||||||
- Timeout ou connection refused
|
- Timeout ou connection refused
|
||||||
|
|
||||||
**Solutions** :
|
**Solutions** :
|
||||||
|
|
||||||
1. **Vérifier que le CT 200 est démarré** :
|
1. **Vérifier que le CT 200 est démarré** :
|
||||||
```bash
|
```bash
|
||||||
pct list | grep 200
|
pct list | grep 200
|
||||||
```
|
```
|
||||||
|
|
||||||
2. **Vérifier que Docker est en cours d'exécution dans le CT** :
|
2. **Vérifier que Docker est en cours d'exécution dans le CT** :
|
||||||
```bash
|
```bash
|
||||||
ssh root@192.168.0.100
|
ssh root@192.168.0.100
|
||||||
docker ps
|
docker ps
|
||||||
```
|
```
|
||||||
|
|
||||||
3. **Vérifier que Traefik est en cours d'exécution** :
|
3. **Vérifier que Traefik est en cours d'exécution** :
|
||||||
```bash
|
```bash
|
||||||
docker ps | grep traefik
|
docker ps | grep traefik
|
||||||
```
|
```
|
||||||
|
|
||||||
4. **Vérifier le port forwarding sur le routeur** :
|
4. **Vérifier le port forwarding sur le routeur** :
|
||||||
- TCP 80 → 192.168.0.100
|
- TCP 80 → 192.168.0.100
|
||||||
- TCP 443 → 192.168.0.100
|
- TCP 443 → 192.168.0.100
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 📚 Exemples d'utilisation
|
## 📚 Exemples d'utilisation
|
||||||
|
|
||||||
### Exemple 1 : Tester depuis un navigateur
|
### Exemple 1 : Tester depuis un navigateur
|
||||||
|
|
||||||
1. Ouvrir https://test.peis.fr
|
1. Ouvrir https://test.peis.fr
|
||||||
2. Vous devriez voir une page JSON avec les détails de votre requête
|
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
|
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
|
### Exemple 2 : Tester avec curl depuis une machine externe
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Depuis un smartphone en 4G ou une machine en dehors de votre réseau
|
# Depuis un smartphone en 4G ou une machine en dehors de votre réseau
|
||||||
curl -v https://test.peis.fr
|
curl -v https://test.peis.fr
|
||||||
```
|
```
|
||||||
|
|
||||||
### Exemple 3 : Tester avec différents headers
|
### Exemple 3 : Tester avec différents headers
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -H "X-Custom-Header: test-value" https://test.peis.fr
|
curl -H "X-Custom-Header: test-value" https://test.peis.fr
|
||||||
```
|
```
|
||||||
|
|
||||||
→ Vous devriez voir `"X-Custom-Header": ["test-value"]` dans la réponse JSON
|
→ Vous devriez voir `"X-Custom-Header": ["test-value"]` dans la réponse JSON
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🗑️ Suppression
|
## 🗑️ Suppression
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Arrêter et supprimer le conteneur whoami
|
# Arrêter et supprimer le conteneur whoami
|
||||||
cd /opt/traefik
|
cd /opt/traefik
|
||||||
docker-compose -f docker-compose-whoami.yml down
|
docker-compose -f docker-compose-whoami.yml down
|
||||||
|
|
||||||
# Supprimer le fichier de configuration (optionnel)
|
# Supprimer le fichier de configuration (optionnel)
|
||||||
rm docker-compose-whoami.yml
|
rm docker-compose-whoami.yml
|
||||||
|
|
||||||
# Redémarrer whoami (après modification)
|
# Redémarrer whoami (après modification)
|
||||||
docker-compose -f docker-compose-whoami.yml up -d --force-recreate
|
docker-compose -f docker-compose-whoami.yml up -d --force-recreate
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔗 Liens utiles
|
## 🔗 Liens utiles
|
||||||
|
|
||||||
- [Image Docker traefik/whoami](https://hub.docker.com/r/traefik/whoami)
|
- [Image Docker traefik/whoami](https://hub.docker.com/r/traefik/whoami)
|
||||||
- [Documentation Traefik](https://doc.traefik.io/traefik/)
|
- [Documentation Traefik](https://doc.traefik.io/traefik/)
|
||||||
- [Let's Encrypt Status](https://letsencrypt.status.io/)
|
- [Let's Encrypt Status](https://letsencrypt.status.io/)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
*Documentation générée le 17/07/2026 pour ton homelab*
|
*Documentation générée le 17/07/2026 pour ton homelab*
|
||||||
Reference in New Issue
Block a user