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.
Etienne Aubry
Développeur & Expert Automatisation IA
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 :
| Solution | Coût annuel | Temps 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.
À lire ensuite
Comparatif n8n vs Make vs Zapier en 2026 : lequel choisir ?
n8n, Make ou Zapier en 2026 ? Comparaison des prix, performances, intégrations et limites de chaque outil d'automatisation. Notre verdict sans bullshit.
n8n + Airtable : synchroniser une base en temps réel
Comment synchroniser Airtable avec n8n en temps réel : webhooks, polling, gestion des conflits. Guide pratique avec captures et code.
n8n credentials : gérer les secrets et tokens en sécurité
Guide complet pour gérer les credentials n8n : chiffrement, rotation, variables d'environnement, External Secrets, audit. Tout ce qu'il faut savoir pour ne pas leaker tes tokens.
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.