Votre serveur docker-compose tourne. Vos conteneurs sont lancés. Mais maintenant se posent les vraies questions : comment surveiller la santé de vos services ? Comment être alerté quand quelque chose ne va pas ? Comment sauvegarder vos données et les restaurer en cas de crash ? Comment organiser vos fichiers pour que tout soit maintenable dans 6 mois ?
Cet article est la suite logique du guide docker-compose basics. Nous passons maintenant à la mise en production serieuse : monitoring, logs centralisés, backup automatisé et organisation du datastore.

Organiser l’arborescence serveur
La première chose à faire avant de monitorer, c’est d’organiser. Voici l’arborescence que j’utilise sur mes serveurs :
/opt/
docker/
docker-compose.yml # fichier principal
.env # variables (NE PAS VERSIONNER)
traefik/
config.yml
acme.json
cloudflared/
config.yml
homeassistant/
config/
portainer/
watchtower/
influxdb/
grafana/
/opt/backup/
daily/
weekly/
monthly/
/opt/scripts/
backup.sh
restore.sh
health-check.sh
Chaque service a son propre sous-dossier. Le fichier docker-compose principal est à la racine de /opt/docker/. C’est simple, cohérent, et facile à sauvegarder.
Monitoring avec Docker stats et Prometheus
Docker stats — la commande de base
# Statuts de tous les conteneurs en temps réel
docker stats
# Statuts en continu dans un fichier
docker stats --no-stream > /tmp/stats.txt
# Un conteneur en particulier
docker stats homeassistant
docker stats donne CPU, RAM, réseau et I/O pour chaque conteneur. C’est votre premier outil de diagnostic.
Prometheus + Grafana — monitoring complet
Pour une solution plus sérieuse, Docker expose ses métriques au format Prometheus. Ajoutez ceci à votre configuration :
# docker-compose.yml
services:
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
restart: unless-stopped
grafana:
image: grafana/grafana:latest
container_name: grafana
ports:
- "3000:3000"
volumes:
- ./grafana:/var/lib/grafana
restart: unless-stopped
# Dans le service que vous voulez monitorer, ajoutez :
# scrape_configs:
# - job_name: 'docker'
# static_configs:
# - targets: ['host.docker.internal:9323']
Grafana est accessible sur le port 3000 avec les identifiants par défaut admin/admin — changez-les immédiatement.
Logs : comment les consulter et les centraliser
Consulter les logs d’un conteneur
# Logs en temps réel
docker logs -f homeassistant
# 200 dernières lignes
docker logs --tail 200 homeassistant
# Logs avec timestamp
docker logs -t homeassistant
# Logs depuis un moment précis
docker logs --since "2026-04-17T08:00:00" homeassistant
Rotation automatique des logs
Ajoutez dans votre daemon.json :
# /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
Cela limite chaque fichier de log à 10 Mo et conserve 3 fichiers de rotation. Appliquez avec :
sudo systemctl restart docker
Sauvegardes automatisées
Principe du backupdocker
Pour chaque conteneur important, vous voulez sauvegarder :
- Le fichier docker-compose.yml
- Les volumes persistants (données)
- Le fichier .env
Script de backup automatique
#!/bin/bash
# /opt/scripts/backup.sh
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/opt/backup/daily"
mkdir -p $BACKUP_DIR
# Backup docker-compose principal
cp /opt/docker/docker-compose.yml $BACKUP_DIR/docker-compose_$DATE.yml
# Backup des volumes principaux (exemple Home Assistant)
docker run --rm \
-v /opt/homeassistant/config:/data \
-v $BACKUP_DIR:/backup \
alpine tar czf /backup/homeassistant_$DATE.tar.gz /data
# Supprimer les backups de plus de 7 jours
find $BACKUP_DIR -type f -mtime +7 -delete
echo "[$DATE] Backup terminé"
Planifiez ce script avec cron :
# crontab -e
0 3 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1
# Lance tous les jours à 3h du matin
Healthchecks — vérifier que vos services sont vivants
Ajoutez des healthchecks dans votre docker-compose pour que Docker vérifie automatiquement l’état de vos conteneurs :
services:
homeassistant:
image: homeassistant/home-assistant:stable
container_name: homeassistant
network_mode: host
volumes:
- /opt/homeassistant/config:/config
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8123/api/"]
interval: "60s"
timeout: "10s"
retries: 3
start_period: "300s"
traefik:
image: traefik:v3.0
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://localhost:80/"]
interval: "60s"
timeout: "5s"
retries: 3
Vérifiez l’état avec :
docker ps --format "table {.Names}\t{.Status}"
Notifications Telegram pour les alertes
Couplez votre monitoring avec un script Telegram pour être alerté en temps réel :
# /opt/scripts/alert.sh
#!/bin/bash
TOKEN="VOTRE_BOT_TOKEN"
CHAT_ID="VOTRE_CHAT_ID"
curl -s -X POST https://api.telegram.org/bot$TOKEN/sendMessage \
-d chat_id=$CHAT_ID \
-d text="$1"
Utilisez-le dans vos scripts de healthcheck :
# Vérification si Home Assistant ne répond pas
if ! curl -sf http://localhost:8123/api/ > /dev/null 2>&1; then
/opt/scripts/alert.sh "⚠️ Home Assistant DOWN sur $(hostname)"
fi
Quand tout échoue — la checklist de debug
- Conteneur ne démarre pas :
docker-compose up -d service --force-recreatepuisdocker logs service - Port déjà utilisé :
docker-compose ps+netstat -tlnp | grep PORT - Volume corrompu :
docker volume ls+docker volume inspect nom_volume - Image старый :
docker-compose pull && docker-compose up -d - Permission refusée :
sudo chown -R $USER:$USER /opt/service
🛒 Équipement pour un serveur production
Idéal pour docker-compose + monitoring Grafana — 16Go DDR5, 512Go NVMe
Sauvegarde externalisée de vos volumes Docker — protection anti-défaillance serveur
Liens Amazon Partenaires — wayang-21 · Sponsorisé
📌 Article en évolution
Cet article complète le guide docker-compose de base. Pour les bases, consultez l’article introduction à docker-compose.