Prérequis
  • Un VPS Linux (Ubuntu 22.04 recommandé) — à partir de 4-5 €/mois chez Hetzner ou OVH
  • Un nom de domaine pointant vers l'IP du VPS
  • Notions de base de ligne de commande Linux
  • Docker et Docker Compose installés

Pourquoi auto-héberger n8n ?

n8n.cloud est pratique, mais l'auto-hébergement offre trois avantages majeurs pour les PME françaises :

  • Conformité RGPD totale : vos données n'intègrent jamais les serveurs n8n — elles restent sur votre VPS (idéalement hébergé en Europe)
  • Coût maîtrisé : 5-10 €/mois de VPS vs 24 €/mois minimum sur n8n.cloud pour un usage professionnel
  • Pas de limite d'exécution : pas de plafond de workflows ou d'exécutions mensuelles

Étape 1 — Provisionner le VPS

Pour un usage PME standard, un VPS avec ces caractéristiques suffit :

  • 2 vCPU / 4 Go RAM / 40 Go SSD
  • Ubuntu 22.04 LTS
  • Région : EU (Frankfurt, Amsterdam, Paris)

Options recommandées en Europe :

HébergeurVPSPrix/moisDatacenter EU
HetznerCX22 (2 vCPU, 4 Go)4,35 €Nuremberg, Falkenstein, Helsinki
OVHcloudVPS Starter (2 vCPU, 2 Go)3,59 €Strasbourg, Paris
ScalewayDEV1-S (2 vCPU, 2 Go)7,99 €Paris, Amsterdam
DigitalOceanBasic Droplet (2 vCPU, 2 Go)12 $Amsterdam, Francfort

Étape 2 — Sécuriser le VPS

Avant d'installer n8n, sécurisez le serveur :

# Mettre à jour le système
sudo apt update && sudo apt upgrade -y

# Créer un utilisateur non-root
adduser n8nuser && usermod -aG sudo n8nuser

# Configurer SSH avec clé uniquement (désactiver mot de passe)
nano /etc/ssh/sshd_config
# PasswordAuthentication no
# PermitRootLogin no
sudo systemctl restart sshd

# Activer le pare-feu (UFW)
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Étape 3 — Installer Docker et Docker Compose

# Installer Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

# Vérifier l'installation
docker --version
docker compose version

Étape 4 — Configurer n8n avec Docker Compose

Créez un fichier docker-compose.yml avec la configuration recommandée pour la production :

version: '3.8'

services:
  n8n:
    image: n8nio/n8n:latest
    restart: always
    ports:
      - "5678:5678"
    environment:
      - N8N_HOST=n8n.votredomaine.fr
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://n8n.votredomaine.fr/
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}
      - N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  n8n_data:

Créez ensuite un fichier .env pour les secrets (ne jamais versionner ce fichier) :

N8N_ENCRYPTION_KEY=générez-une-clé-aléatoire-32-chars
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=mot-de-passe-fort-ici

Étape 5 — Configurer HTTPS avec Nginx et Certbot

# Installer Nginx et Certbot
sudo apt install nginx certbot python3-certbot-nginx -y

# Obtenir un certificat SSL (remplacez le domaine)
sudo certbot --nginx -d n8n.votredomaine.fr

# Configurer Nginx comme reverse proxy
sudo nano /etc/nginx/sites-available/n8n

Configuration Nginx recommandée :

server {
  listen 443 ssl;
  server_name n8n.votredomaine.fr;

  location / {
    proxy_pass http://localhost:5678;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    chunked_transfer_encoding off;
    proxy_buffering off;
  }
}

Étape 6 — Lancer n8n

# Lancer n8n en arrière-plan
docker compose up -d

# Vérifier que n8n tourne
docker compose ps
docker compose logs n8n

n8n est maintenant accessible sur https://n8n.votredomaine.fr.

Étape 7 — Sauvegardes automatiques

Les workflows n8n sont précieux — configurez des sauvegardes automatiques :

# Script de sauvegarde quotidienne (backup.sh)
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
docker run --rm -v n8n_data:/data -v /backup:/backup \
  alpine tar czf /backup/n8n_backup_$DATE.tar.gz /data
# Garder uniquement les 7 dernières sauvegardes
ls -t /backup/n8n_backup_*.tar.gz | tail -n +8 | xargs rm -f

# Ajouter dans crontab (crontab -e)
0 2 * * * /home/n8nuser/backup.sh

Étape 8 — Mise à jour de n8n

# Toujours sauvegarder avant de mettre à jour
./backup.sh

# Mettre à jour n8n
docker compose pull
docker compose up -d

Checklist de sécurité post-installation

  • ☐ Authentification basique activée (ou mieux : LDAP/SSO si Enterprise)
  • ☐ HTTPS configuré avec certificat valide
  • ☐ Port 5678 fermé au public (accès uniquement via Nginx)
  • ☐ UFW activé avec règles minimales
  • ☐ Sauvegardes automatiques testées (vérifiez que la restauration fonctionne)
  • ☐ Fichier .env exclu de tout système de versioning
  • ☐ N8N_ENCRYPTION_KEY sauvegardée séparément (perte = perte des credentials)
  • ☐ Mises à jour automatiques de sécurité Ubuntu configurées (unattended-upgrades)

FAQ — n8n self-hosted

Puis-je migrer mes workflows depuis n8n.cloud vers self-hosted ?

Oui. Exportez vos workflows depuis n8n.cloud (menu → Export All Workflows → JSON). Puis importez-les dans votre instance self-hosted. Attention : les credentials (clés API) ne sont pas exportables pour des raisons de sécurité — vous devrez les reconfigurer manuellement.

Faut-il PostgreSQL plutôt que SQLite pour la production ?

Pour une PME avec moins de 10 000 exécutions par mois, SQLite (par défaut) est suffisant. Pour des volumes plus élevés ou si vous avez plusieurs instances, PostgreSQL est recommandé pour la performance et la fiabilité. Ajoutez simplement un service PostgreSQL dans votre docker-compose.yml et configurez DB_TYPE=postgresdb.