DOC
Accueil/ Projets/ VPS Hostinger - Stack ENGWE/ 05 - Maintenance, sauvegardes, mises à jour, monitoring

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 que latest.

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 .env s'ils ont pu fuiter, puis docker 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.