Rétention. Les valeurs par défaut conservent quatorze jours ou 10 000 exécutions, selon ce qui arrive en premier, avec les données d'entrée et de sortie complètes de chaque nœud. Sur un petit NVMe avec un déclencheur programmé actif, c'est ce qui remplit le disque. Ajoutez ceci au bloc d'environnement n8n et redémarrez :
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168 # hours — one week
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=5000
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none # keep failures, drop the noise
EXECUTIONS_DATA_SAVE_ON_SUCCESS=none est le gain le plus important sur une instance à haute fréquence : cela arrête d'écrire les charges utiles des exécutions réussies, tout en conservant intégralement chaque exécution échouée pour que vous puissiez la déboguer. Gardez-le à « all » tant que vous construisez encore le workflow, puis basculez-le une fois le workflow devenu ennuyeux.
Silence. Le fichier Compose désactive déjà les diagnostics, les notifications de version et le sondage de personnalisation. Le dernier appelant sortant est la galerie de modèles, qui interroge api.n8n.io ; fixez N8N_TEMPLATES_ENABLED=false si vous ne voulez aucun appel tiers du tout. Si vous désactivez les notifications de version, mettez un rappel mensuel dans votre calendrier pour lire les notes de version — une instance auto-hébergée que personne ne met à jour est un pire résultat qu'une instance qui ping pour des versions.
Le nœud Code. N8N_BLOCK_ENV_ACCESS_IN_NODE=true, déjà présent dans le fichier, empêche les expressions et les nœuds Code de lire les variables d'environnement du processus — ce qui, sur cette machine, veut dire le mot de passe PostgreSQL et la clé de chiffrement. Si vous n'utilisez pas l'API REST publique, ajoutez N8N_PUBLIC_API_DISABLED=true et fermez aussi cette surface.
Sauvegardes — les trois parties ou aucune. Une sauvegarde de la base de données seule ne vaut rien sans la clé de chiffrement, et la clé seule ne restaure rien. Sauvegardez ensemble le dump PostgreSQL, le volume de données n8n et le .env, et conservez au moins une copie hors du serveur :
cd /opt/n8n
docker compose exec -T postgres pg_dump -U n8n n8n | gzip > backup-db-$(date +%F).sql.gz
docker run --rm -v n8n_n8n_data:/data -v "$PWD":/backup alpine \
tar czf /backup/backup-vol-$(date +%F).tar.gz -C /data .
cp .env backup-env-$(date +%F)
Le nom du volume est le nom du projet Compose plus le nom du volume ; si votre répertoire ne s'appelle pas n8n, lancez docker volume ls et utilisez ce que vous voyez. Mettez les trois lignes dans une tâche cron, expédiez les archives ailleurs, et testez une restauration une fois — une sauvegarde non testée est une croyance, pas une sauvegarde.
Mises à jour. docker compose pull suivi de docker compose up -d. Prenez d'abord un instantané : n8n exécute des migrations de base de données au démarrage, et les migrations ne sont pas conçues pour revenir en arrière. Lors d'un changement de version majeure — le saut de 1.x à 2.x, par exemple — lisez les notes de version avant de tirer plutôt qu'après, et envisagez d'épingler un tag d'image explicite plutôt que :latest, pour qu'un redémarrage non surveillé ne vous mette jamais à niveau par surprise.