FR|NL|EN

n8n self-hosted sur VPS : installation complète pas à pas (2026)

n8n est devenu l’outil d’automatisation open source de reference pour les PME qui veulent garder le controle de leurs workflows. En choisissant une installation n8n self-hosted sur VPS, vous garantissez la souverainete totale de vos donnees — un point critique pour les entreprises belges et europeennes soumises au RGPD. Contrairement aux solutions SaaS comme Zapier ou Make.com, le self-hosting elimine toute dependance envers un fournisseur tiers pour le stockage et le traitement de vos donnees. C’est aussi une question de maitrise des couts : la ou n8n Cloud demarre a 24 EUR/mois pour seulement 2 500 executions, un VPS a 15-25 EUR/mois vous offre des executions illimitees. Ce guide vous accompagne pas a pas pour installer n8n sur un VPS en 2026, avec Debian 12, Traefik SSL, PostgreSQL et des sauvegardes automatiques. A la fin de ce tutoriel, vous disposerez d’une plateforme d’automatisation self-hosted de qualite production, prete a orchestrer vos processus metier.

Prerequis

  • Un VPS avec minimum 2 vCPU et 4 GB RAM (recommande : 4 vCPU / 8 GB RAM). Chez OVHcloud, un VPS Value a 4 vCPU / 8 GB RAM coute environ 15 EUR HT/mois — un rapport qualite/prix imbattable pour du self-hosting en Europe.
  • Debian 12 (Bookworm) fraichement installe. Debian est le choix privilegie pour les serveurs de production grace a sa stabilite legendaire et ses cycles de support longs (5 ans de mises a jour de securite).
  • Un nom de domaine pointant vers l’IP du VPS (ex. : automator.votre-domaine.be). Assurez-vous que l’enregistrement DNS A est bien propage avant de lancer l’installation — utilisez dig +short automator.votre-domaine.be pour verifier.
  • Acces SSH root au serveur. Preferez une connexion par cle SSH plutot que par mot de passe des le depart.
  • Connaissances de base en administration Linux. Si vous savez naviguer dans un terminal, editer un fichier avec nano et utiliser systemctl, vous avez le niveau requis.

Phase 1 : Preparation du serveur

Commencez par securiser et mettre a jour votre serveur. Cette etape est fondamentale : un serveur non durci est une cible facile pour les attaques automatisees qui scannent en permanence les IP publiques. En moyenne, un VPS expose sur Internet recoit ses premieres tentatives de connexion SSH en moins de 10 minutes.

apt update && apt upgrade -y
apt install -y curl wget gnupg2 software-properties-common ufw fail2ban

Configurez le pare-feu UFW pour n’autoriser que les ports strictement necessaires. Le principe du moindre privilege s’applique ici : seuls SSH (22), HTTP (80, pour la redirection vers HTTPS) et HTTPS (443) doivent etre ouverts.

ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

Configurez fail2ban pour proteger SSH contre le brute force. Creez le fichier /etc/fail2ban/jail.local avec les parametres adaptes a votre usage. Un bon point de depart est de configurer maxretry = 3 et bantime = 3600 (une heure de ban apres 3 tentatives echouees). Verifiez que fail2ban est actif avec fail2ban-client status sshd. Si vous constatez des IP bannies des les premieres heures, c’est normal — cela confirme que la protection fonctionne.

Phase 2 : Installation de Node.js

n8n requiert Node.js 18 ou superieur. Nous recommandons Node.js 20 LTS (Long Term Support) car il beneficie d’un support actif jusqu’en avril 2026 et de performances significativement ameliorees par rapport a la version 18, notamment au niveau du garbage collector. Installez via NodeSource, le depot officiel maintenu par l’equipe Node.js :

curl -fsSL https://deb.nodesource.com/setup_20.x | bash -
apt install -y nodejs
node --version  # Doit afficher v20.x

Tip troubleshooting : si la commande curl echoue avec une erreur de certificat, verifiez que ca-certificates est installe (apt install -y ca-certificates). Si node --version affiche une version 12.x ou 16.x, c’est que le depot Debian par defaut a pris le dessus : supprimez-le avec apt remove nodejs puis relancez l’installation depuis le depot NodeSource.

Phase 3 : Configuration de PostgreSQL

Par defaut, n8n utilise SQLite, ce qui convient pour des tests locaux mais pose des problemes serieux en production : verrouillage en ecriture unique, pas de gestion concurrentielle, et risque de corruption en cas de coupure brutale. PostgreSQL est le choix professionnel pour une installation n8n self-hosted sur VPS : il gere parfaitement les acces concurrents, supporte les transactions ACID, et offre des performances superieures des que vous depassez quelques dizaines de workflows actifs.

apt install -y postgresql postgresql-contrib
sudo -u postgres createuser n8n
sudo -u postgres createdb n8n_db -O n8n
sudo -u postgres psql -c "ALTER USER n8n WITH PASSWORD 'votre_mot_de_passe_securise';"

Bonne pratique : generez un mot de passe fort avec openssl rand -base64 32 plutot que d’utiliser un mot de passe memorisable. Notez-le dans un gestionnaire de mots de passe. Verifiez que PostgreSQL demarre correctement avec systemctl status postgresql et testez la connexion avec psql -U n8n -d n8n_db -h localhost. Si la connexion echoue, editez /etc/postgresql/15/main/pg_hba.conf pour autoriser la methode d’authentification md5 sur les connexions locales.

Phase 4 : Installation et configuration de n8n

Installez n8n globalement via npm. L’installation globale permet de lancer n8n comme un service systeme, ce qui est indispensable pour une utilisation en production :

npm install -g n8n

Creez le fichier de configuration d’environnement /etc/n8n.env. Chaque variable a son importance — voici un fichier commente pour comprendre le role de chaque parametre :

N8N_HOST=automator.votre-domaine.be
N8N_PORT=5678
N8N_PROTOCOL=https
WEBHOOK_URL=https://automator.votre-domaine.be/
N8N_ENCRYPTION_KEY=votre_cle_encryption_unique
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=localhost
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=n8n_db
DB_POSTGRESDB_USER=n8n
DB_POSTGRESDB_PASSWORD=votre_mot_de_passe_securise
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=votre_password_admin
EXECUTIONS_DATA_PRUNE=true
EXECUTIONS_DATA_MAX_AGE=168

Points critiques : la variable N8N_ENCRYPTION_KEY est utilisee pour chiffrer les credentials stockees en base de donnees (tokens API, mots de passe). Generez-la avec openssl rand -hex 32 et ne la perdez jamais — sans elle, toutes vos credentials deviennent illisibles. La variable WEBHOOK_URL doit correspondre exactement a votre domaine public, sinon les webhooks entrants ne fonctionneront pas. Enfin, EXECUTIONS_DATA_MAX_AGE=168 (7 jours en heures) evite que la table des executions ne grossisse indefiniment, ce qui ralentirait l’interface.

Phase 5 : Configuration de Traefik SSL

Traefik v3 sert de reverse proxy avec certificats SSL Let’s Encrypt automatiques. C’est le choix ideal pour du self-hosting car il gere automatiquement le renouvellement des certificats tous les 90 jours, sans intervention manuelle. Comparativement a Nginx + Certbot, Traefik offre une configuration declarative plus simple et un rechargement a chaud sans redemarrage de service.

wget https://github.com/traefik/traefik/releases/download/v3.0.0/traefik_v3.0.0_linux_amd64.tar.gz
tar xzf traefik_v3.0.0_linux_amd64.tar.gz
mv traefik /usr/local/bin/

Creez la configuration Traefik dans /etc/traefik/traefik.yml avec les entrypoints HTTP (80) et HTTPS (443), le resolver Let’s Encrypt avec votre email, et le routage vers n8n sur le port 5678. Assurez-vous de configurer la redirection HTTP vers HTTPS au niveau de l’entrypoint web pour forcer le chiffrement de toutes les connexions.

Creez la configuration dynamique dans /etc/traefik/dynamic.yml avec le router pour votre domaine et le service pointant vers http://localhost:5678.

Tip troubleshooting : si le certificat SSL ne se genere pas, verifiez trois choses : (1) que le port 80 est bien ouvert dans UFW, car Let’s Encrypt utilise le challenge HTTP-01, (2) que votre DNS pointe correctement vers l’IP du VPS, et (3) que le fichier acme.json a les bonnes permissions (chmod 600 /etc/traefik/acme.json). Consultez les logs Traefik avec journalctl -u traefik -f pour diagnostiquer les erreurs en temps reel.

Phase 6 : Services systemd

Creez le service systemd pour n8n dans /etc/systemd/system/n8n.service. L’utilisation de systemd garantit que n8n redemarre automatiquement en cas de crash ou de reboot du serveur — un element non negociable pour un outil de production qui gere vos automatisations metier :

[Unit]
Description=n8n Workflow Automation
After=network.target postgresql.service

[Service]
Type=simple
User=n8n
EnvironmentFile=/etc/n8n.env
ExecStart=/usr/bin/n8n start
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Notez que le service est configure pour demarrer apres PostgreSQL (After=postgresql.service), ce qui evite les erreurs de connexion a la base de donnees au boot. La directive RestartSec=5 laisse 5 secondes avant chaque tentative de redemarrage, ce qui evite les boucles de redemarrage rapide en cas de probleme de configuration. Creez un utilisateur systeme dedie pour n8n avec useradd -r -s /bin/false n8n afin de limiter les privileges.

Creez egalement un service systemd pour Traefik. Puis activez et demarrez les deux services :

systemctl daemon-reload
systemctl enable n8n traefik
systemctl start traefik
systemctl start n8n

Ordre de demarrage : lancez toujours Traefik avant n8n. Si vous inversez l’ordre, n8n demarre correctement mais les requetes HTTPS n’arrivent pas tant que le reverse proxy n’est pas operationnel.

Phase 7 : Verification

Testez votre installation n8n self-hosted sur VPS methodiquement. Chaque verification confirme le bon fonctionnement d’une couche differente de l’architecture :

  1. Verifiez que n8n tourne : systemctl status n8n. Vous devez voir « active (running) » en vert. Si le status indique « failed », consultez les logs avec journalctl -u n8n -n 50 pour identifier l’erreur.
  2. Verifiez que Traefik tourne : systemctl status traefik. Meme verification que pour n8n.
  3. Accedez a https://automator.votre-domaine.be dans votre navigateur. La page de login de n8n doit s’afficher.
  4. Verifiez le certificat SSL (cadenas vert). Cliquez dessus pour confirmer qu’il est emis par Let’s Encrypt et qu’il est valide.
  5. Connectez-vous avec vos identifiants definis dans N8N_BASIC_AUTH_USER et N8N_BASIC_AUTH_PASSWORD.
  6. Creez un workflow de test simple (Cron > HTTP Request) pour confirmer que les executions fonctionnent. Verifiez aussi que les webhooks sont accessibles depuis l’exterieur en utilisant un outil comme curl https://automator.votre-domaine.be/webhook/test depuis une autre machine.

Phase 8 : Securisation avancee

Une installation n8n self-hosted sur VPS expose des webhooks publics et une interface d’administration. La securisation avancee n’est pas optionnelle — elle est indispensable pour proteger vos workflows et les donnees qu’ils manipulent. Pour une PME belge manipulant des donnees clients, ces mesures repondent directement aux exigences de securite du RGPD (article 32).

  • Desactivez l’acces root SSH : creez un utilisateur dedie et utilisez sudo. Modifiez /etc/ssh/sshd_config pour definir PermitRootLogin no puis relancez le service SSH. C’est la premiere mesure a prendre apres toute installation de VPS.
  • Cles SSH uniquement : desactivez l’authentification par mot de passe en definissant PasswordAuthentication no dans /etc/ssh/sshd_config. Cela bloque 100% des attaques par brute force sur SSH.
  • Rate limiting : configurez les limites dans Traefik pour proteger les webhooks. Un middleware rate-limit a 100 requetes/seconde par IP est un bon point de depart. Cela empeche les attaques par deni de service sur vos endpoints publics.
  • Mises a jour automatiques : activez unattended-upgrades pour les patchs de securite avec apt install -y unattended-upgrades && dpkg-reconfigure -plow unattended-upgrades. Votre VPS recevra automatiquement les correctifs de securite critiques.
  • Monitoring : installez Uptime Kuma pour surveiller la disponibilite. C’est un outil open source leger qui vous alerte par email ou Telegram si n8n tombe. Un check toutes les 60 secondes sur votre URL permet de detecter les problemes avant que vos workflows critiques ne soient affectes.

Phase 9 : Sauvegarde automatique

Les sauvegardes sont votre filet de securite. Sans elles, un crash disque ou une mauvaise manipulation peut vous faire perdre des mois de workflows et de configurations. Chez Agile Minds, nous avons constate que les PME sous-estiment souvent ce point — jusqu’au jour ou elles en ont besoin. La regle d’or est la strategie 3-2-1 : 3 copies, 2 supports differents, 1 hors site.

Creez un script de sauvegarde dans /opt/backup-n8n.sh :

#!/bin/bash
BACKUP_DIR="/opt/backups/n8n"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR

# Sauvegarde PostgreSQL
pg_dump -U n8n n8n_db | gzip > "$BACKUP_DIR/n8n_db_$DATE.sql.gz"

# Rotation : garder les 30 dernieres sauvegardes
ls -t $BACKUP_DIR/n8n_db_*.sql.gz | tail -n +31 | xargs rm -f

echo "Backup completed: $DATE"

Planifiez l’execution quotidienne via cron. L’heure 02h00 est choisie pour minimiser l’impact sur les performances, car la plupart des workflows tournent en journee :

chmod +x /opt/backup-n8n.sh
crontab -e
# Ajouter : 0 2 * * * /opt/backup-n8n.sh >> /var/log/n8n-backup.log 2>&1

Pour aller plus loin : ajoutez un envoi des sauvegardes vers un stockage distant (un bucket S3, un autre VPS, ou un NAS local) via rsync ou rclone. Testez regulierement la restauration avec gunzip < backup.sql.gz | psql -U n8n n8n_db pour confirmer que vos sauvegardes sont exploitables. Une sauvegarde non testee est une sauvegarde qui n’existe pas.

Resultat final

Vous disposez maintenant d’une instance n8n self-hosted sur VPS de qualite production, avec une architecture complete et securisee :

  • SSL automatique via Let’s Encrypt, avec renouvellement transparent tous les 90 jours
  • Base de donnees PostgreSQL robuste, capable de gerer des centaines de workflows actifs
  • Services systemd avec redemarrage automatique, garantissant un uptime maximal
  • Securisation SSH et pare-feu, conformes aux bonnes pratiques de securite serveur
  • Sauvegardes quotidiennes automatiques avec rotation, pour une tranquillite d’esprit totale

En termes de couts, cette installation complete revient a environ 15-25 EUR/mois pour le VPS (selon la configuration choisie chez OVHcloud), contre 50 a 200+ EUR/mois pour n8n Cloud avec un volume d’executions equivalent. Sur 12 mois, l’economie peut atteindre 500 a 2 000 EUR — un budget que vous pouvez reinvestir dans le developpement de vos automatisations.

C’est exactement le setup que nous utilisons chez Agile Minds sur automator.agile-minds.be pour orchestrer nos workflows d’automatisation et nos agents IA. Pour les PME belges soucieuses de la souverainete de leurs donnees et de la conformite RGPD, le self-hosting n’est pas seulement un choix technique — c’est un choix strategique.



Patrick Impens · CEO Agile Minds SRL · agile-minds.be

Automatisation marketing avec n8n pour votre PME

Maintenance et support de votre infrastructure n8n.

Parlons de votre projet

Prendre rendez-vous →