05 - Maintenance, sauvegardes, mises à jour, monitoring
Une stack en production, ça se surveille et ça se sauvegarde. Voici les gestes essentiels.
1. Commandes du quotidien
cd ~/stack
docker compose ps # état des services
docker compose logs -f n8n # logs d'un service
docker compose restart n8n # redémarrer un service
docker stats --no-stream # RAM/CPU par conteneur (surveille les 8 Go)
docker system df # espace disque utilisé par Docker
2. Mettre à jour les services
Docker rend les mises à jour simples : on récupère les nouvelles images et on recrée les conteneurs (les données dans les volumes sont conservées).
cd ~/stack
docker compose pull # télécharge les dernières images
docker compose up -d # recrée uniquement ce qui a changé
docker image prune -f # nettoie les vieilles images
Conseil : pour n8n, sauvegarde avant chaque mise à jour majeure (§3). Épingle des versions précises dans
docker-compose.yml(ex.n8n:1.70.0) si tu veux des updates maîtrisées plutôt quelatest.
3. Sauvegardes des bases de données
PostgreSQL (toutes les bases)
cd ~/stack
docker compose exec -T postgres pg_dumpall -U "$POSTGRES_USER" \
| gzip > ~/backups/pg_$(date +%F).sql.gz
MongoDB
docker compose exec -T mongo sh -c \
'mongodump --username "$MONGO_INITDB_ROOT_USERNAME" \
--password "$MONGO_INITDB_ROOT_PASSWORD" \
--authenticationDatabase admin --archive --gzip' \
> ~/backups/mongo_$(date +%F).archive.gz
Volumes (n8n, NocoDB, NPM, Open WebUI)
Les données applicatives sont dans des volumes Docker. Sauvegarde-les :
mkdir -p ~/backups
for vol in n8n_data nocodb_data npm_data npm_letsencrypt openwebui_data; do
docker run --rm -v ${vol}:/data -v ~/backups:/backup alpine \
tar czf /backup/${vol}_$(date +%F).tar.gz -C /data .
done
Automatiser (cron quotidien à 3 h)
Crée ~/backup.sh regroupant les commandes ci-dessus, rends-le exécutable, puis :
crontab -e
# ajoute :
0 3 * * * /home/engwe-seer/backup.sh >> /home/engwe-seer/backups/backup.log 2>&1
Important : copie régulièrement
~/backups/hors du VPS (ton PC, un stockage objet S3, etc.). Une sauvegarde qui reste sur la même machine ne protège pas d'une perte du serveur.
4. Restauration (exemple PostgreSQL)
gunzip -c ~/backups/pg_2026-07-09.sql.gz \
| docker compose exec -T postgres psql -U "$POSTGRES_USER" -d postgres
Teste tes restaurations de temps en temps : une sauvegarde jamais restaurée n'est pas une sauvegarde fiable.
5. Sécurité - entretien
sudo apt update && sudo apt upgrade -y # correctifs système (les MAJ de
# sécurité sont déjà automatiques)
sudo ufw status # pare-feu toujours actif
sudo fail2ban-client status sshd # IP bannies éventuelles
- Garde l'admin NPM (port 81) fermé : accès uniquement par tunnel SSH.
- Ne publie jamais les ports des bases dans
docker-compose.yml. - Change les secrets du
.envs'ils ont pu fuiter, puisdocker compose up -d --force-recreate.
6. Monitoring léger (optionnel)
Pour un tableau de bord conteneurs/hôte sans surcharger les 8 Go :
- Dozzle (logs web temps réel, ~30 Mo) - image
amir20/dozzle. - Uptime Kuma (surveillance de disponibilité + alertes, ~150 Mo) -
image
louislam/uptime-kuma.
Ajoute-les au docker-compose.yml sur le réseau proxy et crée un Proxy Host
dédié (avec Access List) comme les autres.
7. Surveiller la RAM
free -h # RAM + swap
docker stats # par conteneur, en direct
Si tu approches la limite : réduis les services latest gourmands, ou envisage
un upgrade de plan Hostinger. Avec la stack décrite (~2 Go), tu as de la marge.
Tu as maintenant un VPS propre, sécurisé, avec toute ta stack en HTTPS. 🎉 Reviens au README pour la vue d'ensemble.
