Aller au contenu
WorkflowPro
n8n

Self-hoster n8n sur VPS : le guide complet (2026)

Tuto complet pour self-hoster n8n sur VPS en 2026 : installation Docker, configuration, backup, SSL, monitoring. Économisez 80% par rapport au cloud.

EA

Etienne Aubry

Développeur & Expert Automatisation IA

· · 7 min de lecture · 1281 mots
Salle serveur représentant l'hébergement self-hosted
Salle serveur représentant l'hébergement self-hosted

Self-hoster n8n est probablement la décision la plus rentable que vous puissiez prendre cette année si vos workflows tournent sur Make ou Zapier. Économie de 80 % en moyenne, données 100 % chez vous, zéro quota d’exécution. Le revers de la médaille : il faut savoir gérer un VPS Linux.

Ce guide couvre toute l’installation, de A à Z, basée sur 30+ déploiements en production que j’ai réalisés depuis 2022. Plan complet, avec les pièges concrets et les solutions éprouvées.

Pourquoi self-hoster n8n ?

Avant de plonger dans la technique, validons que c’est bien le bon choix.

Bonnes raisons de self-hoster :

  • Vous dépassez 5 000 ops/mois (le ROI démarre vite)
  • Vous traitez des données sensibles (RGPD, clients européens)
  • Vous voulez du code custom Python/JS dans vos workflows
  • Vous avez quelqu’un capable de monter un VPS Linux

Mauvaises raisons :

  • “Parce que c’est gratuit” : il vous coûtera 8-15 €/mois VPS + 2-5h/mois maintenance
  • “Pour faire comme Etienne” : si personne ne sait redémarrer un Docker, restez sur n8n Cloud (20 $/mois)
  • “Pour économiser 5 €/mois” : pas rentable, le temps d’install vous coûte plus

Choisir son VPS

Pour 95 % des cas, Hetzner CX22 (Cloud Server) suffit largement :

  • 2 vCPU, 4 Go RAM, 40 Go SSD
  • 8,21 €/mois TTC
  • Datacenter Allemagne (Falkenstein/Helsinki) ou Finlande (Helsinki)

C’est ce que j’utilise pour la majorité de mes clients PME. Pour des volumes > 50 000 ops/jour, prenez plutôt un CX32 (4 vCPU, 8 Go RAM, 16,28 €/mois).

Alternatives valables :

  • DigitalOcean Droplet 12 $/mois (2 vCPU, 2 Go RAM)
  • OVH VPS Value (4,99 €/mois mais moins performant)
  • Scaleway Stardust 1,99 €/mois (très limité, pour tester uniquement)

Évitez les VPS exotiques (revendeurs marketplaces) : la fiabilité chute, le SAV est lent, vos workflows tombent.

Installation pas à pas

Étape 1 — Sécuriser le serveur fraîchement créé

Connectez-vous en root via SSH (Hetzner vous envoie l’IP et le password par mail).

ssh root@VOTRE_IP

Première chose : créer un utilisateur non-root, désactiver le login root, mettre à jour le système :

adduser n8n
usermod -aG sudo n8n
apt update && apt upgrade -y
ufw allow OpenSSH
ufw allow 80
ufw allow 443
ufw enable

Si possible, ajoutez votre clé SSH pour ne plus avoir à taper de mot de passe :

mkdir -p /home/n8n/.ssh
cp ~/.ssh/authorized_keys /home/n8n/.ssh/
chown -R n8n:n8n /home/n8n/.ssh
chmod 700 /home/n8n/.ssh
chmod 600 /home/n8n/.ssh/authorized_keys

Puis désactivez le login root et le password auth dans /etc/ssh/sshd_config :

PermitRootLogin no
PasswordAuthentication no

Et reload : systemctl reload sshd.

Étape 2 — Installer Docker et Docker Compose

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker n8n
sudo apt install docker-compose-plugin -y

Déconnectez-vous, reconnectez en tant que n8n pour que le groupe Docker soit appliqué.

Étape 3 — Créer la stack n8n

Dans /home/n8n/n8n-stack/docker-compose.yml :

services:
  postgres:
    image: postgres:16-alpine
    restart: always
    environment:
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_DB: n8n
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ['CMD-SHELL', 'pg_isready -U n8n']
      interval: 5s

  n8n:
    image: n8nio/n8n:latest
    restart: always
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
      DB_POSTGRESDB_DATABASE: n8n
      N8N_BASIC_AUTH_ACTIVE: 'false'
      N8N_HOST: ${N8N_HOST}
      N8N_PORT: 5678
      N8N_PROTOCOL: https
      WEBHOOK_URL: https://${N8N_HOST}
      GENERIC_TIMEZONE: Europe/Paris
      N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      postgres:
        condition: service_healthy

volumes:
  postgres_data:
  n8n_data:

Et dans /home/n8n/n8n-stack/.env :

POSTGRES_PASSWORD=générezUnMotDePasseLongIci
N8N_HOST=n8n.votredomaine.com
N8N_ENCRYPTION_KEY=générezUneCleAleatoireDe32CarsIci

Pour générer des secrets forts : openssl rand -base64 32.

Note importante : N8N_ENCRYPTION_KEY chiffre toutes les credentials stockées. Si vous la perdez, vos credentials sont irrécupérables. Sauvegardez-la dans un gestionnaire de mots de passe (1Password, Bitwarden).

Étape 4 — Configurer Caddy en reverse proxy HTTPS

Caddy est plus simple que Nginx pour gérer Let’s Encrypt automatiquement.

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

Éditez /etc/caddy/Caddyfile :

n8n.votredomaine.com {
  reverse_proxy 127.0.0.1:5678
  encode gzip zstd
  header {
    Strict-Transport-Security "max-age=31536000;"
    X-Content-Type-Options nosniff
    X-Frame-Options DENY
  }
}

Pointez votre DNS sur l’IP du VPS (record A) puis :

sudo systemctl reload caddy

Caddy obtient et renouvelle automatiquement les certificats Let’s Encrypt. Magique.

Étape 5 — Lancer n8n

cd ~/n8n-stack
docker compose up -d
docker compose logs -f n8n

Attendez 30 secondes. Ouvrez https://n8n.votredomaine.com : interface de création du compte admin. Créez immédiatement le compte admin avant d’être indexé.

Configurer les sauvegardes (CRITIQUE)

Une seule règle : un workflow non sauvegardé est un workflow perdu.

Script de backup quotidien, dans /home/n8n/backup.sh :

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

# Backup PostgreSQL
docker compose -f /home/n8n/n8n-stack/docker-compose.yml \
  exec -T postgres pg_dump -U n8n n8n | gzip > $BACKUP_DIR/n8n_$DATE.sql.gz

# Garde 14 jours
find $BACKUP_DIR -name "n8n_*.sql.gz" -mtime +14 -delete

# Envoi vers S3/B2/Wasabi (recommandé)
# aws s3 cp $BACKUP_DIR/n8n_$DATE.sql.gz s3://mon-bucket/n8n-backups/

Rendez-le exécutable et planifiez-le :

chmod +x /home/n8n/backup.sh
crontab -e
# Ajoutez :
0 3 * * * /home/n8n/backup.sh > /home/n8n/backup.log 2>&1

Stockez vos backups hors du VPS : Backblaze B2, AWS S3, Wasabi, ou n’importe quel stockage objet. Sinon, si votre VPS tombe, vous perdez aussi vos backups.

Monitoring : savoir si ça tourne

Ajoutez un check externe sur votre URL n8n. Solutions gratuites :

  • UptimeRobot : 50 monitors gratuits, ping toutes les 5 min
  • Better Stack : 10 monitors, ping toutes les 30s, beau dashboard
  • Healthchecks.io : pour monitorer aussi les cron jobs et les backups

Configurez l’alerte par email ou Slack. Quand n8n tombe à 3h du matin, vous le saurez avant vos clients.

Pour les workflows critiques, ajoutez dans n8n même un workflow “heartbeat” qui ping Healthchecks toutes les 5 minutes. Si Healthchecks ne reçoit plus le ping → alerte.

Mise à jour de n8n

Docker rend ça trivial :

cd ~/n8n-stack
docker compose pull
docker compose up -d

Faites un backup AVANT chaque mise à jour majeure. n8n suit semver, les majors peuvent inclure des migrations de base de données.

Je recommande de mettre à jour 1× par mois max, pas plus. Le mardi matin idéalement (pas le vendredi soir, hein).

Pièges classiques

Workflows lents alors que le VPS a l’air libre : c’est probablement la base PostgreSQL qui sature en I/O. Solution : passer sur un VPS avec SSD NVMe (Hetzner CX par défaut), ou activer EXECUTIONS_DATA_PRUNE pour purger les vieilles exécutions.

Webhooks qui timeout : vérifiez que votre Cloudflare (si activé) accepte les longs timeouts, ou utilisez WEBHOOK_URL correctement configuré. Sur les webhooks > 100s d’exécution, passez en mode “queue” avec Redis.

Erreur “encryption key changed” : vous avez modifié N8N_ENCRYPTION_KEY après que des credentials soient stockées. Restaurez l’ancienne clé, sinon recréez toutes les credentials.

Le coût total réel

Comparons sur 1 an pour 50 000 ops/mois :

SolutionCoût annuelTemps de maintenance
Zapier Team~3 500 $2h/an
Make Pro~720 $4h/an
n8n Cloud Enterprise~600 $4h/an
n8n self-hosted~100 € (VPS+backup)12-20h/an

Verdict : self-hosted gagne dès qu’on dépasse ~10 000 ops/mois, à condition d’avoir 1h/mois à consacrer à la maintenance.

Si la maintenance vous fait peur, je propose un forfait maintenance mensuelle à 185 €/mois qui couvre la surveillance proactive, les correctifs API et les optimisations. Vous gardez tous les bénéfices sans le stress.

Si vous voulez l’install clé-en-main avec n8n self-hosted, le pack Architecture complète inclut VPS configuré, monitoring, backup et formation 2h. Sinon, on en parle dans un audit gratuit pour valider votre cas.

Partager cet article

Décrivez votre besoin en 2 min, je vous réponds sous 4 h

Audit gratuit · Pas de relance commerciale · Vous repartez avec un plan d'action utilisable.