Aller au contenu

Docker Auto-Updates

Le workflow Docker Auto-Updates est un système de mise à jour automatisée des images Docker. Il utilise DIUN (Docker Image Update Notifier) pour détecter les nouvelles versions et N8N pour appliquer des politiques différenciées selon la criticité des services.

ComposantRôle
DIUNDétection des nouvelles images (surveillance des registres)
N8N WorkflowRoutage selon les politiques et exécution des updates
Data TablesConfiguration des politiques par image
TelegramInterface d’approbation pour les images applicatives
CatégorieComportementExemples
criticalUpdate immédiat + health checkcaddy, crowdsec
baseQueue pour fenêtre 03h-05hpostgres, redis, prometheus
applicatifApprobation admin requisen8n, odoo, grafana

ProblèmeSans ce workflowAvec ce workflow
Images obsolètesVulnérabilités non patchéesUpdates automatiques
Downtime utilisateurUpdates en pleine journéeFenêtre de maintenance nocturne
Updates risquésPas de validation préalableApprobation pour les apps critiques
Rollback manuelIntervention tardiveHealth check + rollback automatique
CatégorieJustification
criticalSécurité prioritaire, update immédiat (Caddy = point d’entrée)
baseInfra stable, update nocturne pour minimiser l’impact
applicatifBusiness-critical, validation humaine requise

DIUN détecte nouvelle image
┌─────────────────────────────────────────────────────────┐
│ Workflow Docker DIUN │
│ ├─ Lookup Data Table "image_policies" │
│ └─ Route selon catégorie │
└───────────────────────┬─────────────────────────────────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ critical │ │ base │ │ applicatif │
│ │ │ │ │ │
│ Update │ │ Queue pour │ │ Demande │
│ immédiat │ │ 03h-05h │ │ approbation │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │
▼ ▼ ▼
Backup? Schedule Telegram
│ │ [Approve]
▼ ▼ [Reject]
Update Update [Later]
│ │ │
▼ ▼ ▼
Health check Health check Si approved:
│ │ Update
▼ ▼
Notify Notify

image_policies — Définit la politique par image

ColonneTypeDescription
image_keyTextClé unique: project/service
categoryTextcritical / base / applicatif
backupBooleanBackup requis avant update
custom_buildBooleanImage custom (build vs pull)
github_repoTextowner/repo pour changelog
compose_dirTextChemin absolu du docker-compose

pending_updates — Queue pour les updates programmés

ColonneTypeDescription
image_keyTextClé unique
imageTextNom complet de l’image
projectTextNom du projet
serviceTextNom du service
custom_buildBooleanBuild au lieu de pull
created_atTextTimestamp ISO
Fenêtre de terminal
# Image standard
docker compose -f /path/to/stack/docker-compose.yaml pull
docker compose -f /path/to/stack/docker-compose.yaml up -d
# Image custom (custom_build = true)
docker compose -f /path/to/stack/docker-compose.yaml pull --ignore-buildable
docker compose -f /path/to/stack/docker-compose.yaml build --no-cache
docker compose -f /path/to/stack/docker-compose.yaml up -d
image_keyServiceBuild command
n8n-stack/n8nn8n + workersbuild --no-cache
security-stack/caddycaddy-crowdsecbuild --no-cache
ai-stack/claude-ollamaclaude-ollamabuild --no-cache
Image applicative détectée
┌─────────────────────────────────────────────────────────┐
│ Notification Telegram │
│ ┌────────────────────────────────────────────────────┐ │
│ │ 🐳 Nouvelle version disponible │ │
│ │ │ │
│ │ Image: n8nio/n8n:latest → 1.73.0 │ │
│ │ Service: n8n-stack/n8n │ │
│ │ │ │
│ │ [✅ Approve] [❌ Reject] [⏰ Later] │ │
│ └────────────────────────────────────────────────────┘ │
└───────────────────────┬─────────────────────────────────┘
┌───────────────┼───────────────┐
▼ ▼ ▼
Approve Reject Later
│ │ │
▼ ▼ ▼
Backup? Notify Move to
│ "Skipped" pending_updates
▼ (03h-05h)
Update
Health check
┌────┴────┐
▼ ▼
OK KO
│ │
▼ ▼
Notify Rollback
success + Notify

Après chaque update, un health check vérifie que les conteneurs sont healthy :

Fenêtre de terminal
docker compose -f /path/to/stack/docker-compose.yaml ps --format json

Si un conteneur est unhealthy après 2 minutes, un rollback est déclenché.

{
"type": "update_success|update_failed|update_queued|approval_request",
"severity": "info|warning|critical",
"title": "Docker Update: n8n-stack",
"container": "n8n",
"image": "n8nio/n8n:1.73.0",
"project": "n8n-stack",
"timestamp": "2026-01-20T10:30:00.000Z"
}
Fenêtre de terminal
# Forcer un check DIUN
docker exec diun diun --test
# Logs DIUN
docker logs diun --tail 50
# Voir les politiques configurées
# N8N → Data → Tables → image_policies
# Voir les updates en attente
# N8N → Data → Tables → pending_updates

LimiteImpactMitigation
Pas de tests automatiquesRisque de régression non détectéeHealth check basique uniquement
Rollback manuelIntervention requise si rollback échoueNotification immédiate
Dépendance DIUNPas de détection si DIUN downMonitoring du conteneur

Si un update cause une régression :

  • Health check détecte le problème
  • Rollback automatique vers l’image précédente
  • Notification avec détails pour investigation

Si les updates sont trop fréquents :

  • Ajuster le polling DIUN (actuellement 6h)
  • Créer une catégorie “stable” avec updates mensuels
  • Filtrer par semantic versioning (major uniquement)

Si besoin de tests plus poussés :

  • Intégrer des smoke tests post-update
  • Ajouter un délai d’observation avant notification success
  • Créer un environnement staging pour tests préalables