
Si tu utilises N8N, tu sais à quel point ça devient vite le cerveau de ton infra. Tu commences avec deux automatisations pour envoyer des webhooks vers Slack, puis tu te retrouves un mois plus tard à orchestrer la moitié de tes services avec 50 workflows en prod.
Et là, l’erreur classique : tu lances N8N dans un conteneur Docker “vite fait”, sans volume, juste pour tester. Tu bricoles un peu… et tout fonctionne. Jusqu’au jour où le serveur redémarre. Le conteneur redémarre aussi — mais cette fois, tout est vide. Plus un seul scénario, plus un seul trigger. La panique.
Alors voilà comment faire ça proprement.
1. D’abord, on pose les bases : docker-compose.yml
On va partir sur un fichier docker-compose.yml
bien propre, avec des volumes pour stocker les données critiques. Parce que N8N, par défaut, garde tout en local dans ~/.n8n
. Et ce dossier, tu veux absolument qu’il survive aux redémarrages.
Voici un exemple fonctionnel et simple à adapter :
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
restart: always
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=supermotdepasse
- TZ=Europe/Paris
- GENERIC_TIMEZONE=Europe/Paris
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
Ce volume n8n_data
est le cœur du sujet : tout ce que N8N écrit, que ce soit les workflows, les credentials ou les logs, finit là-dedans.
Si tu ne montes rien, le conteneur partira d’un volume éphémère, et tout sera effacé au moindre
docker rm
ou redémarrage non contrôlé.
2. Besoin de plus ? Passe au bind-mount
Si tu veux vérifier ce qu’il se passe ou faire des backups manuels de temps en temps, tu peux remplacer le volume Docker par un bind mount vers ton disque.
volumes:
- ./data:/home/node/.n8n
Ici, tout est stocké dans un dossier ./data
à côté de ton docker-compose.yml
. Tu peux même le versionner, le sauvegarder avec rsync
, ou le monter sur un stockage réseau si tu fais du HA (oui, on voit les admins barbus passer par là 👋).
3. Ne t’arrête pas au stockage : pense au backup
OK, les données sont persistantes, c’est bien. Mais si tu supprimes accidentellement un workflow ? Ou si le disque tombe ? Un volume persistant, ça ne remplace pas un vrai backup.
Voici un petit tip maison : une cron qui sauvegarde le dossier .n8n
toutes les nuits avec horodatage.
Ajoute ça dans une crontab :
0 2 * * * tar -czf /var/backups/n8n-backup-$(date +\%F).tar.gz -C /opt/n8n/data . && find /var/backups -type f -mtime +7 -delete
Ça crée une archive compressée tous les jours à 2h du matin, et supprime les vieux backups de plus de 7 jours.
4. Quelques options sympa à connaître
Stockage en base de données (si tu veux aller plus loin)
Si tu veux un setup encore plus solide, N8N peut utiliser une base de données externe (PostgreSQL ou MySQL) pour stocker ses workflows au lieu du système de fichiers.
Il suffit de modifier les variables d’environnement :
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=postgres
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=n8n
DB_POSTGRESDB_USER=n8n_user
DB_POSTGRESDB_PASSWORD=motdepasse
Tu gagneras en performance et en scalabilité, surtout si tu gères plusieurs instances N8N en parallèle. Tu peux très bien faire tourner le tout avec un second conteneur Postgres dans ton docker-compose.yml
.
5. Petit détail qui sauve : le restart: always
Ça paraît bête, mais sans ça, ton conteneur ne redémarrera pas automatiquement après un reboot du serveur. Et tu vas te demander pourquoi N8N ne tourne plus après une maintenance.
Ce flag restart: always
dans le docker-compose.yml
te sauve de ces oublis.
6. Bonus : et les mises à jour ?
Tu peux mettre à jour N8N en 5 secondes chrono, sans perdre tes données, grâce au volume.
docker-compose pull
docker-compose down
docker-compose up -d
Le down
ne supprime pas les volumes par défaut (sauf si tu ajoutes -v
, ce qu’il ne faut jamais faire ici). Tu repars donc avec la dernière version de N8N, mais tous tes workflows intacts. Magique.
Et voilà.
Franchement, il m’est arrivé une fois de perdre toute une config N8N à cause d’un conteneur “temporaire” qui était resté en prod par flemme de refaire un docker-compose
. Depuis, je persiste toujours mes volumes. Et je sauve aussi les logs (ça aide quand un webhook ne répond plus à 4h du matin).
Si tu veux une base fiable, rapide à redéployer, et que tu n’as pas besoin d’une infra Kubernetes, Docker + stockage persistant, c’est clairement le bon compromis.
Quelques hébergeurs testés et compatibles N8N :
- D4.FR — hébergeur français, simple et orienté DevOps
- Hetzner — très bon rapport performance/prix pour des VPS scalables
- Netcup — bon plan allemand, idéal pour projets auto-hébergés
- Contabo — pas cher, mais parfois des performances variables selon les datacenters
Et évidemment, Docker reste ta meilleure base pour tester rapidement N8N ou le faire tourner en prod légère.