Docker-Compose en production : monitoring, logs et sauvegardes

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.

docker compose serveur production maintenance monitoring
Docker-compose en production — surveiller, alertes, backups

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-recreate puis docker 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

📦

Mini PC N100 16Go RAM
Idéal pour docker-compose + monitoring Grafana — 16Go DDR5, 512Go NVMe

Amazon →

📦

NAS Synology 2 bays pour backup
Sauvegarde externalisée de vos volumes Docker — protection anti-défaillance serveur

Amazon →

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.

Ressources

Laisser un commentaire