Infrastructure complète de déploiement avec Docker Compose incluant une API Express, PostgreSQL, Redis, Traefik comme reverse proxy, et une stack de monitoring avec Prometheus et Grafana.
- Description
- Architecture
- Prérequis
- Installation
- Démarrage
- Services disponibles
- Structure du projet
- Commandes utiles
- Dépannage
Ce projet implémente une infrastructure complète de déploiement avec :
- API Express : Application Node.js avec métriques Prometheus
- PostgreSQL : Base de données relationnelle
- Redis : Cache applicatif
- Traefik : Reverse proxy avec routage automatique
- Prometheus : Collecte et stockage des métriques
- Grafana : Visualisation des métriques et dashboards
- cAdvisor : Métriques des conteneurs Docker
┌─────────────────────────────────────────────┐
│ RÉSEAU FRONTEND │
│ ┌──────────┐ ┌──────────┐ │
│ │ Traefik │─────────│ API │ │
│ │ (proxy) │ │ │ │
│ └──────────┘ └─────┬────┘ │
└─────────────────────────────┼───────────────┘
│
┌─────────────────────────────┼───────────────┐
│ RÉSEAU BACKEND │ │
│ │ │
│ ┌──────────┐ ┌────────▼────┐ ┌──────┐ │
│ │PostgreSQL│ │ API │ │Redis │ │
│ └──────────┘ └─────────────┘ └──────┘ │
└─────────────────────────────────────────────┘
┌─────────────────────────────────────────────┐
│ RÉSEAU MONITORING │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │Prometheus│ │ Grafana │ │ cAdvisor │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────┘
Internet → Traefik (frontend) → API (frontend + backend) → PostgreSQL/Redis (backend)
↓
Prometheus (backend + monitoring)
- macOS (version récente) ou Linux
- Docker Desktop installé et démarré
- Docker Compose v2.x
- Accès internet pour télécharger les images Docker
docker --version
docker compose version
docker ps # Vérifie que Docker fonctionne- Cloner ou naviguer dans le projet :
cd /Users/jd/dev/local/projects/tp-docker- Vérifier la structure :
ls -la
# Vous devriez voir : app/, traefik/, prometheus/, docker-compose.yml# Construire et démarrer tous les services
docker compose up -d --build
# Vérifier l'état des services
docker compose ps
# Voir les logs
docker compose logs -f# 1. Démarrer les services backend (DB, Redis)
docker compose up -d postgres redis
# 2. Attendre que les healthchecks passent
docker compose ps
# 3. Démarrer l'API
docker compose up -d api
# 4. Démarrer Traefik
docker compose up -d traefik
# 5. Démarrer le monitoring
docker compose up -d prometheus grafana cadvisor| Service | URL | Description | Identifiants |
|---|---|---|---|
| API | http://api.localhost | API Express | - |
| Traefik Dashboard | http://localhost:8080 | Dashboard Traefik | - |
| Prometheus | http://localhost:9090 | Interface Prometheus | - |
| Grafana | http://localhost:3000 | Dashboards Grafana | admin / admin123 |
| cAdvisor | http://localhost:8081 | Métriques conteneurs | - |
GET /health- Health checkGET /api/data- Données avec cache RedisGET /metrics- Métriques Prometheus
# Health check
curl http://api.localhost/health
# Données (première requête = DB, suivantes = cache)
curl http://api.localhost/api/data
# Métriques Prometheus
curl http://api.localhost/metricstp-docker/
├── app/ # Application Express
│ ├── app.js # Code de l'API
│ ├── package.json # Dépendances Node.js
│ └── Dockerfile # Image Docker de l'API
│
├── traefik/ # Configuration Traefik
│ └── traefik.yml # Configuration Traefik
│
├── prometheus/ # Configuration Prometheus
│ ├── prometheus.yml # Configuration Prometheus
│ └── alert.rules.yml # Règles d'alerte
│
├── grafana/ # Configuration Grafana
│ └── provisioning/ # Dashboards provisionnés
│
├── docker-compose.yml # Configuration Docker Compose
├── TP-Infrastructure-Docker.md # Énoncé du TP
└── REVISION-QCM-RESEAU.md # Révision réseau
# Démarrer tous les services
docker compose up -d
# Arrêter tous les services
docker compose down
# Redémarrer un service spécifique
docker compose restart api
# Voir les logs d'un service
docker compose logs -f api
# Reconstruire un service après modification
docker compose up -d --build api# État des conteneurs
docker compose ps
# Logs de tous les services
docker compose logs
# Logs en temps réel
docker compose logs -f
# Inspecter un réseau
docker network inspect tp-docker_frontend
# Tester la connectivité
docker exec -it traefik ping api
docker exec -it traefik nslookup api
# Accéder à un conteneur
docker exec -it api sh
docker exec -it postgres psql -U appuser -d appdb# Arrêter et supprimer les conteneurs (garder les volumes)
docker compose down
# Arrêter et supprimer tout (conteneurs + volumes)
docker compose down -v
# Supprimer les images non utilisées
docker image prune -aLes variables sont définies dans docker-compose.yml :
- PostgreSQL :
POSTGRES_DB,POSTGRES_USER,POSTGRES_PASSWORD - API :
DB_HOST,DB_NAME,DB_USER,DB_PASSWORD,REDIS_HOST - Grafana :
GF_SECURITY_ADMIN_USER,GF_SECURITY_ADMIN_PASSWORD
Le projet utilise 3 réseaux :
- frontend : Traefik, API (point d'entrée)
- backend : PostgreSQL, Redis, API, Prometheus (services internes)
- monitoring : Prometheus, Grafana, cAdvisor (supervision)
- Accéder à http://localhost:3000
- Se connecter :
admin/admin123 - Ajouter Prometheus comme data source :
- URL :
http://prometheus:9090 - Save & Test
- URL :
- cAdvisor : Dashboard ID
14282(métriques conteneurs) - API personnalisé : Créer avec les métriques
app_requests_total,app_request_latency_seconds
app_requests_total: Nombre total de requêtesapp_request_latency_seconds: Latence des requêtes- Métriques cAdvisor : CPU, mémoire, réseau des conteneurs
# Vérifier que l'API est démarrée
docker compose ps api
# Vérifier les logs
docker compose logs api
# Tester depuis Traefik
docker exec -it traefik wget -qO- http://api:5000/health
# Vérifier la résolution DNS
docker exec -it traefik nslookup api# Vérifier que PostgreSQL est démarré et healthy
docker compose ps postgres
# Tester la connexion
docker exec -it postgres psql -U appuser -d appdb -c "SELECT 1;"
# Vérifier les logs
docker compose logs postgres# Vérifier les ports utilisés
lsof -i :80
lsof -i :3000
lsof -i :9090
# Arrêter le service qui utilise le port ou modifier le port dans docker-compose.yml# Arrêter et supprimer tout
docker compose down -v
# Supprimer les images
docker image rm tp-docker-api
# Redémarrer
docker compose up -d --build- TP complet : Voir
TP-Infrastructure-Docker.md - Révision réseau : Voir
REVISION-QCM-RESEAU.md - Documentation Docker : https://docs.docker.com/
- Documentation Traefik : https://doc.traefik.io/traefik/
- Documentation Prometheus : https://prometheus.io/docs/
Ce projet permet de :
- ✅ Comprendre les réseaux Docker (bridge, isolation, DNS)
- ✅ Configurer un reverse proxy avec Traefik
- ✅ Implémenter une stack de monitoring complète
- ✅ Débugger des problèmes réseau dans Docker
- ✅ Comprendre l'architecture multi-conteneurs
- Développement local : HTTPS désactivé pour simplifier (certificats auto-signés disponibles)
- Production : Activer HTTPS avec Let's Encrypt (voir
traefik/traefik.yml) - Secrets : En production, utiliser Docker Secrets ou un gestionnaire de secrets (Vault)
Ce projet fait partie d'un TP pédagogique. Pour toute question ou amélioration, référez-vous à l'énoncé du TP dans TP-Infrastructure-Docker.md.
Bon TP ! 🚀