La mascotte ours polaire de NordBastion assise sur un banc de pierre sculpté dans un coffre-fort nordique sombre, un ordinateur portable sur les genoux et un grand workflow d'automatisation holographique cyan flottant au-dessus de lui — six nœuds arrondis reliés par des fils courbes lumineux — avec le bouclier-N cyan appuyé contre le banc et une baie de serveurs à ses côtés
Mode d'emploi · Auto-hébergement·13 min de lecture · 30 min pratique

Auto-héberger n8n sur un VPS.
Votre moteur d'automatisation, vos identifiants, votre métal.

Six étapes pour passer d'un VPS nordique nu à un n8n terminé en TLS sur votre propre domaine — Docker Compose, Caddy, PostgreSQL, des webhooks qui se déclenchent vraiment. Des exécutions limitées par votre CPU, pas par un palier d'abonnement, sur une machine qui coûte $3.90 par mois. Testé sur Debian 12 avec n8n 2.x.

Les six étapes
  1. 01

    Provisionner

    VPS + un enregistrement A

  2. 02

    Installer

    get.docker.com

  3. 03

    Compose

    n8n + Caddy + Postgres

  4. 04

    Premier démarrage

    Compte propriétaire + 2FA

  5. 05

    Webhooks

    WEBHOOK_URL

  6. 06

    Durcir

    Élaguer, faire taire, sauvegarder

Avant de commencer · Licence et coût

Ce que vous installez réellement. Et ce que la licence vous permet d'en faire.

n8n est un moteur d'automatisation de workflows : un canevas visuel où vous câblez un déclencheur — un webhook, une planification, une nouvelle ligne dans une base de données, un message dans une file — vers une chaîne de nœuds qui appellent des API, transforment des données, se ramifient selon des conditions, exécutent du JavaScript ou du Python arbitraire, et transmettent le résultat à ce qui vient ensuite. Plusieurs centaines de nœuds d'intégration sont fournis d'origine, plus un nœud générique HTTP Request qui couvre tout le reste. Depuis la lignée 1.x, il porte aussi des nœuds AI Agent et LLM, ce qui explique pourquoi une large part des personnes qui l'installent en 2026 construisent des agents plutôt que de la plomberie ETL classique.

La partie qui compte avant de taper la moindre commande, c'est la licence, car n8n n'est pas open source au sens OSI, et la différence n'a rien d'académique. Le cœur est distribué sous la Sustainable Use License : une concession mondiale, non exclusive et sans redevance, pour utiliser, copier, modifier et distribuer le logiciel à des fins internes à une activité et pour un usage personnel ou non commercial. Ce qu'elle retient, c'est le droit de facturer autrui pour n8n ou pour un dérivé — la clause qui exclut de bâtir dessus un produit « n8n managé » payant. Séparément, tout fichier portant .ee. dans son nom ou .ee dans son chemin est entièrement exclu de cette licence et nécessite une n8n Enterprise License payante.

En clair : faire tourner n8n sur un VPS pour automatiser sa propre entreprise, le travail de ses propres clients livré comme un service qu'on rend, ou sa propre vie personnelle, relève de la concession gratuite et en a toujours relevé. Vendre du n8n-en-tant-que-produit-d'hébergement, non. Presque toute discussion sur internet du type « n8n est-il vraiment gratuit ? » est un dialogue de sourds entre deux personnes de part et d'autre de cette ligne.

Le côté coût. n8n Cloud est facturé à l'exécution : le plan Starter coûte €20 par mois facturé annuellement pour 2 500 exécutions, Pro est à €50 par mois pour 10 000, Business à €667 par mois pour 40 000. En auto-hébergement, le nombre d'exécutions n'est pas du tout une ligne budgétaire — il est borné par la quantité de CPU et de mémoire dont dispose la machine. Un workflow qui interroge une API toutes les cinq minutes brûle à lui seul 8 640 exécutions par mois ; sur Cloud, ce seul workflow force déjà le palier Pro, et sur un VPS à $3.90 c'est une erreur d'arrondi face au CPU au repos.

Option Mensuel Exécutions incluses Qui l'exploite
n8n Cloud · Starter€202 500n8n GmbH
n8n Cloud · Pro€5010 000n8n GmbH
n8n Cloud · Business€66740 000n8n GmbH
Auto-hébergé · VPS Sentinel$3.90Limité par le CPU, pas mesuré à l'usageVous

Tarifs Cloud tels que publiés sur n8n.io en août 2026, facturation annuelle ; la facturation mensuelle coûte plus cher. L'arbitrage ne se joue pas qu'en argent — l'auto-hébergement fait basculer les mises à jour, les sauvegardes, le renouvellement TLS et la disponibilité de votre côté de la ligne.

Avant de commencer · Dimensionnement

Dimensionner la machine. Quatre gigaoctets, c'est le plancher ; le disque, c'est le piège caché.

La documentation Docker Compose officielle de n8n donne 2 vCPU et 4 GB de RAM comme minimum. Ce n'est pas un chiffre marketing : en dessous, le frontend de l'éditeur et un workflow modérément ramifié se disputeront la mémoire, et la première grosse charge utile JSON fera tomber le conteneur avec un kill pour manque de mémoire.

Sentinel · 2 vCPU, 4 GB, 120 GB NVMe, $3.90/mois. Le bon réglage par défaut. Fait tourner n8n, PostgreSQL et Caddy ensemble avec de la marge pour une instance personnelle ou de petite équipe faisant quelques centaines d'exécutions par jour. La mémoire au repos se situe autour de 700 MB sur les trois conteneurs.

Garrison · 4 vCPU, 8 GB, 240 GB NVMe, $7.90/mois. Le palier supérieur quand vous ajoutez le mode file d'attente avec Redis et un ou deux conteneurs worker, quand les workflows gardent régulièrement des charges utiles de plusieurs mégaoctets en mémoire, ou quand vous voulez une marge confortable pour des workflows d'agent IA qui se ramifient en plusieurs branches parallèles.

Ravelin · 8 vCPU, 16 GB, 480 GB NVMe, $16.90/mois. Une instance d'équipe avec des milliers d'exécutions par jour et un travail chargé en binaire — génération de PDF, traitement d'image, transcription audio. Les cœurs dédiés comptent ici car ces charges sont limitées par le CPU plutôt que par l'API.

Le disque est la partie qu'on oublie. n8n stocke l'intégralité des entrées et sorties de chaque nœud de chaque exécution. Un workflow bavard tournant chaque minute écrit des centaines de mégaoctets par semaine. Les valeurs par défaut élaguent bien — EXECUTIONS_DATA_PRUNE vaut true, EXECUTIONS_DATA_MAX_AGE vaut 336 heures (quatorze jours) et EXECUTIONS_DATA_PRUNE_MAX_COUNT vaut 10 000 — mais quatorze jours d'une instance chargée, ça reste beaucoup de NVMe. L'étape 06 resserre tout ça.

Étape 01 · Provisionnement

Un VPS nordique et un enregistrement DNS. Dans cet ordre.

Dans le panneau : Order → VPS → Sentinel, image Debian 12. Aucune adresse e-mail n'est requise pour ouvrir le compte, aucun document d'identité n'est demandé à aucun moment, et la facture se règle en Monero, Bitcoin, Lightning ou tout autre actif pris en charge. Choisissez le bastion selon la latence vers les services que vous automatisez plutôt que vers vous-même — un serveur d'automatisation parle aux API bien plus qu'il ne vous parle.

Créez ensuite l'enregistrement DNS avant de toucher au serveur : un enregistrement A pour n8n.example.com pointant vers l'IPv4 du VPS, et un enregistrement AAAA si vous utilisez IPv6. Cela doit être fait en premier, car Caddy demande un certificat à Let's Encrypt dès que la stack démarre, et une demande de certificat pour un nom qui ne se résout pas échoue — puis se met en retrait, et vous passez vingt minutes à vous demander pourquoi le site est injoignable.

Laissez une minute au DNS pour se propager et vérifiez-le depuis votre propre machine avant de continuer :

dig +short n8n.example.com
# → the IPv4 of your VPS, and nothing else

Avant que quoi que ce soit n'écoute sur un port public, exécutez la checklist de durcissement de la première heure — SSH par clé uniquement, un pare-feu qui n'autorise que 22, 80 et 443, et les mises à jour de sécurité automatiques. Un serveur d'automatisation est un coffre à identifiants ; il mérite l'heure complète.

Étape 02 · Installation

Docker, et rien d'autre. Une seule commande.

Connectez-vous en SSH et installez le Docker Engine avec le plugin Compose v2 :

apt update && apt install -y ca-certificates curl
curl -fsSL https://get.docker.com | sh
docker compose version

Le script de commodité installe Engine, CLI, containerd et le plugin Compose depuis le dépôt propre à Docker. La dernière ligne doit afficher Docker Compose version v2 ou supérieure ; si elle affiche « docker: 'compose' is not a docker command », vous avez l'ancien paquet docker.io de la distribution installé et devriez d'abord le retirer.

Il existe un installateur n8n en une ligne qui enveloppe tout cela, et il fonctionne. Ce guide écrit plutôt le fichier Compose à la main, car tout ce que vous devrez changer plus tard — la clé de chiffrement, la base de données, l'URL du webhook, la politique de rétention, le nombre de workers — vit dans ce fichier, et une stack que vous ne pouvez pas lire est une stack que vous ne pouvez pas réparer à 3 h du matin.

Étape 03 · Compose

Trois fichiers dans /opt/n8n. n8n, PostgreSQL, Caddy.

Créez d'abord le répertoire et générez les deux secrets. Générez-les maintenant, dans cet ordre, et collez-les dans le .env au fur et à mesure — la clé de chiffrement en particulier doit exister avant le premier démarrage de n8n, pas après.

mkdir -p /opt/n8n && cd /opt/n8n
openssl rand -hex 32   # → N8N_ENCRYPTION_KEY
openssl rand -hex 24   # → POSTGRES_PASSWORD

/opt/n8n/.env

DOMAIN=n8n.example.com
LETSENCRYPT_EMAIL=you@example.com
GENERIC_TIMEZONE=Europe/Stockholm

N8N_ENCRYPTION_KEY=paste_the_32_byte_hex_here
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=paste_the_24_byte_hex_here

Verrouillez le fichier immédiatement — il détient la clé de chaque identifiant que l'instance stockera un jour :

chmod 600 /opt/n8n/.env

/opt/n8n/docker-compose.yml

services:
  caddy:
    image: caddy:2-alpine
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    environment:
      - DOMAIN=${DOMAIN}
      - LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL}
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config

  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    volumes:
      - pg_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 10s
      timeout: 5s
      retries: 10

  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      - N8N_HOST=${DOMAIN}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - N8N_EDITOR_BASE_URL=https://${DOMAIN}
      - WEBHOOK_URL=https://${DOMAIN}/
      - N8N_PROXY_HOPS=1
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
      - TZ=${GENERIC_TIMEZONE}
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
      - DB_POSTGRESDB_USER=${POSTGRES_USER}
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
      - N8N_BLOCK_ENV_ACCESS_IN_NODE=true
      - N8N_DIAGNOSTICS_ENABLED=false
      - N8N_VERSION_NOTIFICATIONS_ENABLED=false
      - N8N_PERSONALIZATION_ENABLED=false
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  caddy_data:
  caddy_config:
  pg_data:
  n8n_data:

/opt/n8n/Caddyfile

{$DOMAIN} {
    encode zstd gzip
    tls {$LETSENCRYPT_EMAIL}
    reverse_proxy n8n:5678
}

Deux choix de conception qui méritent d'être nommés. D'abord, n8n ne publie aucun port. Seul Caddy se lie aux ports 80 et 443 ; n8n écoute sur le 5678 à l'intérieur du réseau Compose, où rien en dehors de l'hôte ne peut l'atteindre. Un nombre surprenant d'instances n8n auto-hébergées se retrouvent sur l'internet public sur le port 5678 sans TLS devant, et les moteurs de recherche de services exposés les indexent. Ensuite, le volume de données n8n reste monté même si PostgreSQL héberge désormais les workflows — ce répertoire porte encore les réglages de l'instance, les fichiers de log et les éléments de contrôle de source.

Démarrez-le :

cd /opt/n8n
docker compose up -d
docker compose logs -f caddy   # watch the certificate being issued
Étape 04 · Premier démarrage

Le compte propriétaire, et la clé que vous ne devez pas perdre. Lisez ce passage deux fois.

Ouvrez https://n8n.example.com. Le premier écran est la configuration du compte propriétaire — e-mail, mot de passe, nom. Il n'y a plus de variable d'environnement d'authentification HTTP basique à configurer ; la gestion des utilisateurs est intégrée à n8n depuis la lignée 1.x, et le compte que vous créez ici est le propriétaire de l'instance. Utilisez un mot de passe issu de votre gestionnaire de mots de passe, puis allez directement dans Settings → Personal → Two-factor authentication et activez-la. Cette connexion est la porte d'entrée vers chaque clé API que vous collerez un jour dans un nœud.

L'erreur irréversible

n8n chiffre chaque identifiant stocké avec N8N_ENCRYPTION_KEY. Si vous ne le définissez pas, n8n en génère une au premier démarrage et l'écrit dans le volume de données. Recréez ce volume — un docker compose down -v, une migration vers un nouveau serveur, une restauration ratée — et la nouvelle instance génère une clé différente, chaque identifiant de la base devient indéchiffrable, et il n'existe absolument aucune voie de récupération. Vous ressaisissez chaque clé API, jeton OAuth et mot de passe à la main. Fixez la clé explicitement, comme le fait ce guide, et conservez une copie hors du serveur.

Le bon endroit pour cette copie est un gestionnaire de mots de passe que vous contrôlez aussi — le guide du Vaultwarden auto-hébergé en couvre un, et l'idée délibérée est qu'elle ne doit pas vivre sur la même machine que ce qu'elle déverrouille.

Vérifiez que la base de données est bien PostgreSQL et pas le repli SQLite — si les variables DB_ contiennent une faute de frappe, n8n démarre silencieusement sur SQLite et vous le découvrez trois mois plus tard :

docker compose exec postgres psql -U n8n -d n8n -c '\dt' | head
# → a list of n8n tables (workflow_entity, credentials_entity, execution_entity…)
Étape 05 · Webhooks

La moitié qui ne fonctionne pas en silence. Les webhooks derrière un proxy.

Un n8n qui démarre, affiche l'éditeur et exécute un test manuel n'est pas encore un n8n fonctionnel. La moitié qui casse en silence, ce sont les webhooks entrants, et elle casse de façons qui font croire que le service tiers est en cause.

WEBHOOK_URL. Sans elle, n8n construit les URL de webhook à partir de N8N_HOST et N8N_PORT et vous remet quelque chose comme http://localhost:5678/webhook/abc — que vous collez ensuite dans Stripe ou GitHub, où elle ne pourra jamais être atteinte. Le fichier Compose ci-dessus fixe WEBHOOK_URL à la racine HTTPS publique, qui est ce que l'éditeur affichera et ce que le monde extérieur pourra réellement appeler.

N8N_EDITOR_BASE_URL. L'URL publique que n8n utilise pour les liens dans les e-mails qu'il envoie — réinitialisations de mot de passe, invitations d'utilisateurs. Une erreur ici donne un lien d'invitation qui pointe vers localhost, ce qui se traduit par un ticket de support d'un collègue plutôt que par une intégration cassée.

N8N_PROXY_HOPS. n8n lit l'IP du client depuis X-Forwarded-For, et ne fait confiance qu'au nombre de sauts que ce chiffre indique. Avec un seul reverse proxy devant — le Caddy de cette stack — la valeur est 1. Placez Cloudflare devant Caddy et elle devient 2. Laissez-la au 0 par défaut et chaque requête semble venir du proxy lui-même, ce qui casse en silence les limites de débit et toute logique basée sur l'IP dans vos workflows.

N8N_SECURE_COOKIE. Il vaut true par défaut, ce qui signifie que le cookie de session n'est envoyé que via HTTPS. C'est le bon réglage et cette stack le respecte. Cela vaut la peine d'être su, car cela explique le symptôme classique d'une première tentative en http simple : le formulaire de connexion accepte le mot de passe puis vous renvoie vers le formulaire de connexion, indéfiniment. Le correctif, c'est le TLS, pas désactiver le drapeau.

Testez-le correctement. Créez un workflow avec un nœud Webhook, activez le workflow, copiez l'URL de production, puis appelez-la depuis une machine qui n'est pas le serveur :

curl -i https://n8n.example.com/webhook/<path>
# → HTTP/2 200, and a new execution visible in the editor

La distinction qui piège tout le monde une fois : l'URL de test n'écoute que tant que vous avez l'éditeur ouvert avec « Listen for test event » armé. L'URL de production n'existe que lorsque le workflow est basculé sur Active. Un webhook qui fonctionne dans l'éditeur et renvoie 404 en production est presque toujours un workflow inactif.

Étape 06 · Durcir

Élaguer, faire taire, sauvegarder. Les trois qui décident si ça survit un an.

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.

Pour aller plus loin · Montée en charge

Quand un seul processus ne suffit pas. Mode file d'attente, Redis et workers.

Par défaut, n8n s'exécute en mode normal : le même processus qui sert l'éditeur et reçoit les webhooks exécute aussi les workflows. C'est simple et c'est correct jusqu'à ce qu'un long workflow fasse attendre les autres. Le symptôme est sans ambiguïté — les exécutions restent « en cours » pendant des minutes, l'éditeur devient poussif, et un webhook qui devrait répondre en 200 ms répond en huit secondes.

Le mode file d'attente divise le travail. L'instance principale garde l'éditeur, les déclencheurs et les points d'accès webhook ; elle pousse les ID d'exécution dans Redis ; des processus worker séparés les récupèrent, chargent le workflow depuis PostgreSQL, l'exécutent, et rendent compte via Redis. Trois règles découlent de cette architecture, et toutes les trois mordent ceux qui les négligent : chaque instance doit partager la même base PostgreSQL, chaque instance doit porter la même N8N_ENCRYPTION_KEY, et SQLite n'est pas du tout pris en charge.

Les ajouts au fichier Compose sont un service Redis et un service worker, qui est la même image n8n exécutée avec la commande worker :

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    command: ["redis-server", "--save", "60", "1", "--appendonly", "no"]
    volumes:
      - redis_data:/data

  n8n-worker:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: unless-stopped
    command: worker --concurrency=5
    depends_on:
      - redis
      - postgres
    environment:
      # the SAME encryption key and the SAME database as the main instance
      - EXECUTIONS_MODE=queue
      - QUEUE_BULL_REDIS_HOST=redis
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
      - DB_POSTGRESDB_USER=${POSTGRES_USER}
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
      - TZ=${GENERIC_TIMEZONE}

Ajoutez aussi EXECUTIONS_MODE=queue et QUEUE_BULL_REDIS_HOST=redis au service n8n principal — les deux côtés doivent s'accorder sur le mode. Deux options méritent d'être fixées dès le premier jour : OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS=true, pour que cliquer sur « Test workflow » dans l'éditeur n'accapare pas le processus principal, et N8N_GRACEFUL_SHUTDOWN_TIMEOUT, qui vaut 30 secondes par défaut et détermine combien de temps un worker est autorisé à terminer sa tâche en cours lors d'un redéploiement. Si vos workflows durent régulièrement plus d'une demi-minute, augmentez-la, sinon chaque déploiement tue le travail en cours.

Ne commencez pas ici. Le mode file d'attente ajoute deux pièces mobiles et une classe de panne que le mode normal n'a tout simplement pas. Restez en mode normal jusqu'à ce que vous voyiez la file grossir ou qu'un workflow en bloque un autre, puis ajoutez un seul worker sur la même machine avant d'ajouter une deuxième machine. Cette progression — Sentinel en mode normal, Garrison avec un worker, Ravelin avec trois — couvre tout, sauf un déploiement vraiment massif.

La couche sous l'application

Ce que la machine détient réellement. Et pourquoi cela change qui devrait la posséder.

La plupart des guides d'auto-hébergement traitent le choix de l'hébergeur comme une question de performance. Pour un moteur d'automatisation, ce n'en est pas une. Une instance n8n contient deux choses que presque rien d'autre de ce que vous auto-hébergez ne réunit : une unique table chiffrée contenant les clés API, jetons OAuth et mots de passe mail de chaque service que vous automatisez, et — juste à côté — un graphe qui décrit exactement le fonctionnement de votre organisation. Quel CRM. Quel flux bancaire. Quel fournisseur. Quels clients reçoivent quel e-mail, sur quel déclencheur. Lisez la liste des workflows d'une entreprise, et vous avez lu l'entreprise.

Couche un — qui l'hébergeur pense que vous êtes. La couche applicative est ici vraiment bonne : les identifiants sont chiffrés au repos, l'éditeur est derrière TLS et la 2FA. La couche qui fuit est celle du dessous. Un plan hébergé connaît votre entité légale, votre adresse de facturation et votre carte. Un hyperscaler connaît la même chose et la conserve pendant des années. Ce n'est pas une exposition hypothétique ; c'est la clé de jointure entre « un coffre chiffré existe » et « il appartient à telle entreprise nommée ». Une inscription sans e-mail et sans document d'identité, réglée en Monero, supprime la clé de jointure plutôt que le coffre.

Couche deux — le disque. Le chiffrement au repos n'aide que contre quelqu'un qui n'a pas aussi la clé, et sur une installation par défaut, la clé se trouve sur le même système de fichiers que la base de données. Gardez le .env en mode 600, conservez une copie de la clé hors de la machine, et préférez un hébergeur dont la juridiction ne fait pas d'un datacentre un endroit commode pour signifier une procédure — c'est tout l'argument du guide sur les juridictions nordiques.

Couche trois — l'IP de sortie. Chaque nœud HTTP Request part de l'adresse du VPS, et cette adresse porte une réputation. Les plages des hyperscalers sont les plus agressivement limitées en débit et verrouillées par CAPTCHA sur internet, car c'est là que vivent les scrapers ; un workflow qui scrape ou interroge en boucle commencera à échouer sur une IP AWS ou DigitalOcean bien avant d'échouer sur une plage nordique plus discrète. n8n respecte aussi les variables standard HTTP_PROXY, HTTPS_PROXY, ALL_PROXY et NO_PROXY, si bien que la poignée de workflows ayant besoin d'une sortie différente peut être routée via un proxy SOCKS local ou Tor pendant que tout le reste part en direct.

Une porte de plus, nouvelle dans la lignée 2.x : n8n peut exposer un serveur MCP au niveau de l'instance pour qu'un agent IA appelle vos workflows comme des outils. C'est vraiment utile, et c'est aussi un point d'accès public dans votre couche d'automatisation, qui mérite le même traitement que n'importe quel autre — voir le guide du serveur MCP distant pour le raisonnement sur le TLS, l'OAuth et l'exposition.

Notes de terrain · Six pièges

Six façons que ça tourne mal. Dans l'ordre où on les rencontre.

Piège 01 · Irréversible

Tous les identifiants échouent soudain à se déchiffrer

Le volume de données a été recréé et n8n a généré une nouvelle clé de chiffrement. Rien ne récupère les anciens identifiants. Fixez toujours N8N_ENCRYPTION_KEY explicitement et conservez une copie hors du serveur.

Piège 02 · Intégration

L'URL du webhook indique localhost

WEBHOOK_URL n'est pas défini, donc n8n construit les URL à partir de N8N_HOST. Fixez WEBHOOK_URL et N8N_EDITOR_BASE_URL à l'adresse HTTPS publique et redémarrez le conteneur.

Piège 03 · Accès

Le formulaire de connexion boucle indéfiniment

Vous accédez à l'éditeur en http simple et le cookie de session sécurisé est refusé. Terminez la configuration TLS plutôt que de fixer N8N_SECURE_COOKIE à false sur une instance publique.

Piège 04 · Capacité

Le disque se remplit au bout de deux mois

Quatorze jours de données d'exécution complètes issues d'un déclencheur minute par minute. Resserrez EXECUTIONS_DATA_MAX_AGE et PRUNE_MAX_COUNT, et arrêtez d'enregistrer les exécutions réussies.

Piège 05 · Mise à niveau

Un redémarrage non surveillé a tiré une version majeure

Le tag :latest plus des migrations de base de données qui ne reviennent pas en arrière. Épinglez un tag explicite, prenez un instantané avant chaque pull, et lisez les notes de version en cas de changement de version majeure.

Piège 06 · Planification

Les déclencheurs programmés se déclenchent à la mauvaise heure

GENERIC_TIMEZONE vaut America/New_York par défaut, ce qui n'est presque jamais ce que l'on veut. Fixez GENERIC_TIMEZONE et TZ au même fuseau réel et redémarrez.

FAQ · Auto-héberger n8n

Questions, réponses.

Dix questions qui se posent avant, pendant et après le déplacement d'une instance n8n sur votre propre serveur.

L'auto-hébergement de n8n est-il vraiment gratuit ?

Pour vos propres automatisations, oui. n8n est distribué sous la Sustainable Use License : vous pouvez l'utiliser, le copier, le modifier et le distribuer à des fins internes à votre activité et pour un usage personnel ou non commercial, sans frais. Ce que la licence interdit, c'est de facturer autrui pour n8n ou un dérivé — en pratique, revendre de « l'hébergement n8n » comme produit. Les fichiers portant .ee. dans leur nom ou .ee dans leur chemin de répertoire sont exclus de cette licence et nécessitent une n8n Enterprise License payante. Donc : automatiser sa propre entreprise sur un VPS qu'on loue relève carrément de la concession gratuite ; bâtir dessus une activité d'hébergement n8n, non.

De quel VPS ai-je besoin pour faire tourner n8n ?

La documentation Docker Compose officielle de n8n indique un minimum de 2 vCPU et 4 GB de RAM. C'est exactement le palier Sentinel ($3.90/mois — 2 vCPU, 4 GB, 120 GB NVMe), qui fait tourner confortablement n8n plus PostgreSQL plus Caddy pour une instance personnelle ou de petite équipe. Passez au Garrison (4 vCPU, 8 GB, $7.90/mois) quand vous ajoutez des workers en mode file d'attente ou faites tourner des workflows qui gardent de grosses charges utiles en mémoire, et au Ravelin (8 vCPU, 16 GB, $16.90/mois) pour une instance d'équipe faisant des milliers d'exécutions par jour avec des données binaires — PDF, images, audio.

SQLite ou PostgreSQL pour n8n ?

SQLite est le choix par défaut et il convient vraiment pour une seule personne avec une poignée de workflows. Passez à PostgreSQL quand vous avez des exécutions concurrentes, quand l'historique d'exécution dépasse quelques centaines de milliers de lignes, ou quand vous prévoyez de monter en charge — et notez que le mode file d'attente ne prend pas du tout en charge SQLite. Migrer plus tard signifie exporter workflows et identifiants puis les réimporter dans une instance neuve, ce qui est un après-midi que vous n'apprécierez pas. S'il existe une chance de croissance, démarrez sur PostgreSQL ; le fichier Compose de ce guide le fait déjà.

Que se passe-t-il si je perds la N8N_ENCRYPTION_KEY ?

Chaque identifiant de la base devient définitivement illisible. n8n chiffre les identifiants stockés — jetons OAuth, clés API, mots de passe SMTP — avec cette clé, et il n'existe ni mécanisme de récupération ni ticket de support qui les ramènera. Vous ressaisissez chaque identifiant à la main. C'est la façon la plus courante de détruire une instance n8n auto-hébergée : quelqu'un recrée le volume Docker, n8n génère une nouvelle clé, et tous les workflows échouent d'un coup avec une erreur de déchiffrement. Fixez la clé explicitement dans votre .env avant le premier démarrage, et conservez une copie ailleurs que sur le serveur.

Pourquoi mes webhooks n8n ne se déclenchent-ils pas ?

Quatre causes, par ordre de fréquence. (1) WEBHOOK_URL n'est pas défini, donc l'éditeur vous remet une URL http://localhost:5678/webhook/… qu'aucun service externe ne peut atteindre — fixez-la à votre URL HTTPS publique. (2) Le workflow n'est pas activé ; l'URL de test n'écoute que pendant que l'éditeur est ouvert, l'URL de production n'existe qu'une fois le workflow actif. (3) Le DNS ou le pare-feu : l'enregistrement ne se résout pas, ou les ports 80/443 sont fermés. (4) Vous êtes derrière une couche de proxy supplémentaire et n'avez pas défini N8N_PROXY_HOPS, donc n8n lit la mauvaise IP client. Testez avec un simple curl depuis une machine qui n'est pas le serveur.

Puis-je exécuter n8n aux côtés d'autres services sur le même VPS ?

Oui, et c'est le schéma normal — un seul Caddy devant, un seul réseau Compose, n8n sur un nom d'hôte et Vaultwarden, Nextcloud ou SearXNG sur d'autres. Deux réserves. Mémoire : n8n plus PostgreSQL tournent au repos autour de 700 MB et un workflow lourd peut largement dépasser ça, donc laissez de la marge. Rayon d'impact : la base de données n8n est ce qu'il y a de plus dense en identifiants sur la machine, donc tout ce qui partage cet hôte hérite de son profil de risque. Sur un palier à $3.90/mois, il est raisonnable de donner au moteur d'automatisation son propre serveur.

Un n8n auto-hébergé communique-t-il avec l'extérieur ?

Par défaut, trois points d'accès. La télémétrie produit anonyme (N8N_DIAGNOSTICS_ENABLED, true par défaut), la vérification de nouvelle version et de mise à jour de sécurité auprès d'api.n8n.io (N8N_VERSION_NOTIFICATIONS_ENABLED, true par défaut), et le navigateur de modèles de workflow, qui interroge https://api.n8n.io (N8N_TEMPLATES_ENABLED, true par défaut). Aucun ne transmet vos identifiants ni vos données de workflow, mais tous les trois annoncent qu'une instance existe à votre IP. Mettez les trois à false si vous voulez que la machine reste silencieuse — vous perdez la galerie de modèles et la bannière de mise à jour, donc surveillez les versions vous-même.

n8n Cloud ou auto-hébergé — où se situe le seuil de rentabilité ?

n8n Cloud Starter coûte €20/mois facturé annuellement pour 2 500 exécutions ; Pro est à €50/mois pour 10 000. Un VPS Sentinel coûte $3.90/mois et le nombre d'exécutions n'est borné que par le CPU et la RAM, ce qui, pour des workflows webhook-et-API typiques, représente des dizaines de milliers. Le seuil de rentabilité en argent est immédiat ; le vrai coût est opérationnel. S'auto-héberger, c'est posséder les mises à jour, les sauvegardes, le renouvellement TLS et l'incident de disque plein à 3 h du matin. La règle honnête : si vous n'auriez pas mis à jour l'instance vous-même dans le mois suivant une sortie de sécurité, payez pour Cloud. Si un docker compose pull mensuel fait déjà partie de votre vie, auto-hébergez.

Pourquoi un hébergeur sans KYC compte-t-il spécifiquement pour un serveur d'automatisation ?

À cause de ce que contient une instance n8n. La table des identifiants est un unique coffre chiffré regroupant les clés API, jetons OAuth et mots de passe mail de chaque service que vous automatisez, et le graphe de workflow juste à côté est une carte lisible du fonctionnement réel de votre activité — quel CRM, quel flux bancaire, quel fournisseur, quels clients. Un site statique ne fuit rien de tout cela. La couche applicative le protège bien ; c'est la couche des métadonnées qui fuit. Si l'inscription pour la machine exige un scan de passeport et une carte, vous avez chiffré le coffre et écrit votre nom sur la porte. Un hébergeur sans KYC payé en Monero garde les deux couches alignées.

Puis-je exécuter des agents IA dans n8n sur ce VPS ?

Oui pour le cas courant — un nœud AI Agent qui appelle une API de modèle distante. Cette charge est limitée par les E/S, elle attend le fournisseur, et un Sentinel s'en charge. Ce qui ne convient pas, c'est de faire tourner le modèle lui-même : un modèle local 7B veut environ 8 GB de RAM et une vraie vitesse d'inférence veut un GPU, que ces paliers ne portent pas. Pointez n8n vers un point d'accès distant compatible OpenAI et gardez le VPS léger. Le guide compagnon sur l'exécution d'un agent IA 24/7 couvre le côté runtime — politiques de redémarrage, secrets, plafonds de dépense et le piège de la boucle de crash.

Obtenir le métal

Un VPS nordique pour votre moteur d'automatisation. Sans KYC, payé en crypto.

Sentinel (2 vCPU, 4 GB, 120 GB NVMe, $3.90/mois) satisfait le minimum n8n avec de la marge pour PostgreSQL et Caddy sur la même machine. Pas d'e-mail à l'inscription, pas de document d'identité, exécutions illimitées.

Dernière révision · 2026-08-24 · Références · Documentation d'hébergement n8n, n8n LICENSE.md (Sustainable Use License), page tarifaire n8n.io, docs upstream de Docker et Caddy · Fréquence · annuellement