Serveurs Dédiés & VPS12 décembre 2025 17 vues

Guide d'installation de n8n sur serveur Linux

Guide d'installation de n8n sur serveur Linux

Guide d'installation de n8n sur serveur Linux

Qu'est-ce que n8n ?

n8n (prononcé "n-eight-n") est une plateforme d'automatisation de workflows open-source et auto-hébergeable. Elle permet de connecter différentes applications et services entre eux pour automatiser des tâches répétitives, le tout via une interface visuelle intuitive de type "drag and drop".

n8n est souvent présenté comme une alternative auto-hébergée à des solutions SaaS comme Zapier, Make (ex-Integromat) ou Microsoft Power Automate, avec l'avantage de garder le contrôle total sur vos données.

Fonctionnalités principales

  • +400 intégrations natives : Gmail, Slack, Notion, GitHub, Google Sheets, Stripe, bases de données, APIs REST, etc.
  • Éditeur visuel de workflows : Création de workflows par glisser-déposer
  • Nœuds IA intégrés : Support natif d'OpenAI, Ollama, et autres modèles LLM
  • Exécution par événements : Webhooks, planification cron, déclencheurs manuels
  • Code personnalisé : Possibilité d'intégrer du JavaScript ou Python dans les workflows
  • API complète : Gestion programmatique des workflows
  • Multi-utilisateurs : Gestion des équipes et des permissions (version Enterprise)

Cas d'usage typiques

  • Synchronisation automatique de données entre applications
  • Notifications et alertes automatisées
  • Collecte et traitement de leads marketing
  • Automatisation de rapports et tableaux de bord
  • Intégration avec des outils d'IA pour l'analyse de données
  • Automatisation DevOps (CI/CD, monitoring, alertes)

Version documentée

Ce guide couvre l'installation de n8n version 1.123.x (version stable recommandée pour la production).

ℹ️ Note : La version 2.0 est actuellement en beta (décembre 2025). Elle apporte des améliorations de sécurité et de stabilité mais nécessite une migration. Pour un environnement de production, nous recommandons la version 1.x stable.


Prérequis

Configuration matérielle

Ressource Minimum Recommandé (Production)
CPU 2 cœurs 4 cœurs
RAM 2 Go 4-8 Go
Stockage 10 Go SSD 50 Go SSD
Bande passante 100 Mbps 1 Gbps

💡 Astuce : Pour des workflows complexes ou un usage intensif avec de nombreux utilisateurs, prévoyez 8 Go de RAM et 4 cœurs CPU minimum.

Logiciels requis

Logiciel Version minimum Rôle
Système d'exploitation Debian 12 / Ubuntu 22.04+ OS serveur
Docker 20.10+ Conteneurisation
Docker Compose 2.0+ (plugin) Orchestration des conteneurs
Nginx 1.18+ Reverse proxy
Certbot 2.0+ Certificats SSL Let's Encrypt

Ports réseau utilisés

Port Protocole Usage Exposition
22 TCP SSH Externe (administration)
80 TCP HTTP (redirection HTTPS) Externe
443 TCP HTTPS Externe
5678 TCP n8n (interne) Localhost uniquement
5432 TCP PostgreSQL (interne) Localhost uniquement

Nom de domaine et DNS

Avant de commencer, assurez-vous d'avoir :

  • Un nom de domaine ou sous-domaine (ex: n8n.votredomaine.fr)
  • Un enregistrement DNS de type A pointant vers l'IP publique de votre serveur

Exemple de configuration DNS :

n8n.votredomaine.fr.    IN    A    203.0.113.50

Installation étape par étape

Étape 1 : Mise à jour du système

Connectez-vous à votre serveur en SSH et mettez à jour les paquets :

sudo apt update && sudo apt upgrade -y

Cette commande met à jour la liste des paquets disponibles et installe les dernières versions des paquets installés.

Étape 2 : Installation de Docker

Installez les dépendances nécessaires :

sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

Ajoutez la clé GPG officielle de Docker :

curl -fsSL https://download.docker.com/linux/$(. /etc/os-release && echo "$ID")/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Ajoutez le dépôt Docker :

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/$(. /etc/os-release && echo "$ID") $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Installez Docker Engine et le plugin Compose :

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

Ajoutez votre utilisateur au groupe docker (pour éviter d'utiliser sudo) :

sudo usermod -aG docker $USER
newgrp docker

Point de vérification : Vérifiez l'installation :

docker --version
docker compose version

Vous devriez voir les versions installées (Docker 24.x+ et Compose 2.x+).

Étape 3 : Création de la structure de répertoires

Créez le répertoire de travail pour n8n :

sudo mkdir -p /opt/docker-compose/n8n
cd /opt/docker-compose/n8n

Créez les sous-répertoires pour les données persistantes :

sudo mkdir -p n8n_data postgres_data

Attribuez les permissions correctes :

sudo chown -R 1000:1000 n8n_data
sudo chown -R 999:999 postgres_data

ℹ️ Explication : Les UID 1000 et 999 correspondent respectivement aux utilisateurs node (dans le conteneur n8n) et postgres (dans le conteneur PostgreSQL).

Étape 4 : Création du fichier d'environnement

Créez le fichier .env pour stocker les variables sensibles :

sudo nano /opt/docker-compose/n8n/.env

Ajoutez le contenu suivant en modifiant les valeurs :

# ===========================================
# Configuration n8n - OuiHeberg
# ===========================================

# Domaine et URL
N8N_HOST=n8n.votredomaine.fr
N8N_PORT=5678
N8N_PROTOCOL=https
WEBHOOK_URL=https://n8n.votredomaine.fr/

# Sécurité
N8N_ENCRYPTION_KEY=VotreCleDeCryptage32CaracteresMin!
N8N_PROXY_HOPS=1

# Timezone
GENERIC_TIMEZONE=Europe/Paris
TZ=Europe/Paris

# Base de données PostgreSQL
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=postgres
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=n8n
DB_POSTGRESDB_USER=n8n
DB_POSTGRESDB_PASSWORD=VotreMotDePassePostgres123!

# Variables PostgreSQL (pour le conteneur)
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=VotreMotDePassePostgres123!
POSTGRES_NON_ROOT_USER=n8n
POSTGRES_NON_ROOT_PASSWORD=VotreMotDePassePostgres123!

⚠️ Important : Remplacez impérativement :

  • n8n.votredomaine.fr par votre domaine réel
  • VotreCleDeCryptage32CaracteresMin! par une clé unique et complexe (min. 32 caractères)
  • VotreMotDePassePostgres123! par un mot de passe sécurisé

Générez une clé de chiffrement sécurisée :

openssl rand -hex 32

Étape 5 : Création du fichier Docker Compose

Créez le fichier docker-compose.yml :

sudo nano /opt/docker-compose/n8n/docker-compose.yml

Ajoutez le contenu suivant :

version: '3.8'

services:
  # ===========================================
  # Base de données PostgreSQL
  # ===========================================
  postgres:
    image: postgres:15-alpine
    container_name: n8n-postgres
    restart: unless-stopped
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    volumes:
      - ./postgres_data:/var/lib/postgresql/data
    networks:
      - n8n-network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 10s
      timeout: 5s
      retries: 5

  # ===========================================
  # Application n8n
  # ===========================================
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      # Configuration générale
      - N8N_HOST=${N8N_HOST}
      - N8N_PORT=${N8N_PORT}
      - N8N_PROTOCOL=${N8N_PROTOCOL}
      - WEBHOOK_URL=${WEBHOOK_URL}
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - N8N_PROXY_HOPS=${N8N_PROXY_HOPS}
      # Timezone
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
      - TZ=${TZ}
      # Base de données
      - DB_TYPE=${DB_TYPE}
      - DB_POSTGRESDB_HOST=${DB_POSTGRESDB_HOST}
      - DB_POSTGRESDB_PORT=${DB_POSTGRESDB_PORT}
      - DB_POSTGRESDB_DATABASE=${DB_POSTGRESDB_DATABASE}
      - DB_POSTGRESDB_USER=${DB_POSTGRESDB_USER}
      - DB_POSTGRESDB_PASSWORD=${DB_POSTGRESDB_PASSWORD}
    ports:
      - "127.0.0.1:5678:5678"
    volumes:
      - ./n8n_data:/home/node/.n8n
    networks:
      - n8n-network

networks:
  n8n-network:
    driver: bridge

💡 Note : Le port 5678 est exposé uniquement sur 127.0.0.1 (localhost) pour des raisons de sécurité. L'accès externe se fera via le reverse proxy Nginx.

Étape 6 : Démarrage des conteneurs

Lancez les conteneurs en arrière-plan :

cd /opt/docker-compose/n8n
docker compose up -d

Point de vérification : Vérifiez que les conteneurs sont en cours d'exécution :

docker compose ps

Vous devriez voir les deux conteneurs (n8n et n8n-postgres) avec le statut Up ou running (healthy).

Vérifiez les logs en cas de problème :

docker compose logs -f n8n

Testez l'accès local :

curl http://localhost:5678/healthz

La réponse devrait être {"status":"ok"}.


Configuration

Configuration du reverse proxy Nginx

Installation de Nginx

sudo apt install -y nginx

Vérifiez que Nginx est actif :

sudo systemctl status nginx

Création du fichier de configuration

Créez le fichier de configuration pour n8n :

sudo nano /etc/nginx/sites-available/n8n

Ajoutez le contenu suivant :

# ===========================================
# Configuration Nginx pour n8n - OuiHeberg
# ===========================================

# Map pour la gestion des WebSockets
map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

# Redirection HTTP vers HTTPS
server {
    listen 80;
    listen [::]:80;
    server_name n8n.votredomaine.fr;

    # Redirection permanente vers HTTPS
    return 301 https://$host$request_uri;
}

# Configuration HTTPS
server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name n8n.votredomaine.fr;

    # Certificats SSL (seront configurés par Certbot)
    # ssl_certificate /etc/letsencrypt/live/n8n.votredomaine.fr/fullchain.pem;
    # ssl_certificate_key /etc/letsencrypt/live/n8n.votredomaine.fr/privkey.pem;

    # Paramètres SSL recommandés
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;

    # En-têtes de sécurité
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;

    # Taille maximale des uploads (important pour les workflows avec fichiers)
    client_max_body_size 50M;

    # Timeouts pour les workflows longs
    proxy_connect_timeout 300;
    proxy_send_timeout 300;
    proxy_read_timeout 300;

    location / {
        proxy_pass http://127.0.0.1:5678;
        proxy_http_version 1.1;
        
        # Support WebSocket (essentiel pour l'éditeur n8n)
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        
        # En-têtes proxy
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
        
        # Désactivation du buffering pour les événements temps réel
        proxy_buffering off;
        proxy_cache off;
        chunked_transfer_encoding off;
    }
}

⚠️ Important : Remplacez n8n.votredomaine.fr par votre domaine réel.

Activez la configuration :

sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/

Supprimez la configuration par défaut si elle existe :

sudo rm -f /etc/nginx/sites-enabled/default

Testez la configuration Nginx :

sudo nginx -t

Obtention du certificat SSL Let's Encrypt

Installez Certbot avec le plugin Nginx :

sudo apt install -y certbot python3-certbot-nginx

Obtenez le certificat SSL :

sudo certbot --nginx -d n8n.votredomaine.fr

Suivez les instructions :

  1. Entrez votre adresse email
  2. Acceptez les conditions d'utilisation
  3. Choisissez si vous souhaitez partager votre email avec l'EFF
  4. Certbot configurera automatiquement Nginx pour HTTPS

Point de vérification : Vérifiez le renouvellement automatique :

sudo certbot renew --dry-run

Redémarrez Nginx pour appliquer toutes les modifications :

sudo systemctl restart nginx

Variables d'environnement importantes

Variable Description Valeur par défaut
N8N_HOST Nom de domaine de l'instance localhost
N8N_PORT Port d'écoute interne 5678
N8N_PROTOCOL Protocole (http/https) http
WEBHOOK_URL URL publique pour les webhooks -
N8N_ENCRYPTION_KEY Clé de chiffrement des credentials -
N8N_PROXY_HOPS Nombre de proxies devant n8n 0
GENERIC_TIMEZONE Fuseau horaire UTC
DB_TYPE Type de BDD (postgresdb/sqlite) sqlite
N8N_METRICS Activer les métriques Prometheus false
N8N_LOG_LEVEL Niveau de log (info/debug/warn/error) info

Première utilisation

Accès à l'interface

Ouvrez votre navigateur et accédez à :

https://n8n.votredomaine.fr

Configuration initiale

Lors du premier accès, n8n vous demandera de créer un compte propriétaire :

  1. Email : Entrez votre adresse email professionnelle
  2. Prénom et Nom : Vos informations d'identité
  3. Mot de passe : Choisissez un mot de passe fort (min. 8 caractères, majuscules, chiffres, caractères spéciaux)

Création du compte administrateur

Après avoir rempli le formulaire :

  1. Cliquez sur "Create account" (Créer un compte)
  2. Une popup s'affiche pour activer la licence communautaire (gratuite)
  3. Cliquez sur "Activate" pour bénéficier de toutes les fonctionnalités self-hosted

💡 Astuce : La licence communautaire est gratuite et donne accès à toutes les fonctionnalités d'automatisation sans restriction.

Premier workflow

Pour tester votre installation :

  1. Cliquez sur "Create Workflow" dans le menu latéral
  2. Cliquez sur le "+" pour ajouter un nœud
  3. Recherchez "Schedule Trigger" et ajoutez-le
  4. Ajoutez un nœud "Set" pour définir des données
  5. Connectez les deux nœuds
  6. Cliquez sur "Execute Workflow" pour tester

Maintenance

Mise à jour de n8n

Pour mettre à jour n8n vers la dernière version :

cd /opt/docker-compose/n8n

# Arrêt des conteneurs
docker compose down

# Téléchargement de la nouvelle image
docker compose pull

# Redémarrage
docker compose up -d

# Vérification
docker compose ps

⚠️ Avant toute mise à jour majeure (ex: 1.x vers 2.x), consultez les notes de version et effectuez une sauvegarde complète.

Sauvegarde

Sauvegarde complète (recommandée)

Créez un script de sauvegarde /opt/docker-compose/n8n/backup.sh :

#!/bin/bash
# ===========================================
# Script de sauvegarde n8n - OuiHeberg
# ===========================================

BACKUP_DIR="/opt/backups/n8n"
DATE=$(date +%Y%m%d_%H%M%S)
N8N_DIR="/opt/docker-compose/n8n"

# Création du répertoire de sauvegarde
mkdir -p $BACKUP_DIR

# Sauvegarde de la base de données PostgreSQL
docker exec n8n-postgres pg_dump -U n8n n8n > $BACKUP_DIR/n8n_db_$DATE.sql

# Sauvegarde des fichiers n8n
tar -czf $BACKUP_DIR/n8n_data_$DATE.tar.gz -C $N8N_DIR n8n_data

# Sauvegarde des fichiers de configuration
tar -czf $BACKUP_DIR/n8n_config_$DATE.tar.gz -C $N8N_DIR .env docker-compose.yml

# Nettoyage des sauvegardes de plus de 30 jours
find $BACKUP_DIR -type f -mtime +30 -delete

echo "Sauvegarde terminée : $DATE"

Rendez le script exécutable et planifiez-le :

sudo chmod +x /opt/docker-compose/n8n/backup.sh

# Ajout au cron (sauvegarde quotidienne à 3h du matin)
echo "0 3 * * * /opt/docker-compose/n8n/backup.sh >> /var/log/n8n-backup.log 2>&1" | sudo tee -a /etc/crontab

Restauration

Pour restaurer à partir d'une sauvegarde :

cd /opt/docker-compose/n8n

# Arrêt des conteneurs
docker compose down

# Restauration de la base de données
cat /opt/backups/n8n/n8n_db_YYYYMMDD_HHMMSS.sql | docker exec -i n8n-postgres psql -U n8n n8n

# Restauration des fichiers n8n
tar -xzf /opt/backups/n8n/n8n_data_YYYYMMDD_HHMMSS.tar.gz -C /opt/docker-compose/n8n/

# Redémarrage
docker compose up -d

Logs et monitoring

Consultation des logs

# Logs n8n en temps réel
docker compose logs -f n8n

# Logs PostgreSQL
docker compose logs -f postgres

# Dernières 100 lignes de logs n8n
docker compose logs --tail=100 n8n

Vérification de l'état des services

# État des conteneurs
docker compose ps

# Utilisation des ressources
docker stats n8n n8n-postgres

# Espace disque utilisé
docker system df

Endpoint de santé

n8n expose un endpoint de santé accessible localement :

curl http://localhost:5678/healthz

Dépannage

Problèmes courants et solutions

1. "Connection lost" dans l'éditeur

Cause : Problème de WebSocket avec le reverse proxy.

Solution :

# Vérifiez la configuration Nginx
sudo nginx -t

# Assurez-vous que ces lignes sont présentes dans la config Nginx :
# proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection $connection_upgrade;

2. Les webhooks ne fonctionnent pas

Cause : URL de webhook incorrecte ou variable WEBHOOK_URL non définie.

Solution :

  1. Vérifiez le fichier .env :
    grep WEBHOOK_URL /opt/docker-compose/n8n/.env
    
  2. L'URL doit être https://n8n.votredomaine.fr/
  3. Redémarrez n8n après modification :
    docker compose restart n8n
    

3. Erreur "EACCES: permission denied"

Cause : Permissions incorrectes sur les volumes.

Solution :

sudo chown -R 1000:1000 /opt/docker-compose/n8n/n8n_data
sudo chown -R 999:999 /opt/docker-compose/n8n/postgres_data
sudo chmod -R 755 /opt/docker-compose/n8n/n8n_data

4. "Connection to database failed"

Cause : PostgreSQL n'est pas prêt ou credentials incorrects.

Solution :

  1. Vérifiez l'état de PostgreSQL :
    docker compose logs postgres
    
  2. Vérifiez la cohérence des variables dans .env
  3. Testez la connexion :
    docker exec -it n8n-postgres psql -U n8n -d n8n -c "SELECT 1;"
    

5. L'interface est lente ou ne répond pas

Cause : Ressources insuffisantes.

Solution :

# Vérifiez l'utilisation des ressources
docker stats

# Si la RAM est saturée, augmentez-la ou ajoutez des limites :
# Dans docker-compose.yml, sous le service n8n :
# deploy:
#   resources:
#     limits:
#       memory: 2G

Commandes de diagnostic

# État complet du système Docker
docker system info

# Inspection du conteneur n8n
docker inspect n8n

# Vérification des réseaux Docker
docker network ls
docker network inspect n8n_n8n-network

# Test de connectivité interne
docker exec n8n ping -c 3 postgres

# Vérification des ports utilisés
sudo netstat -tlnp | grep -E "80|443|5678"

Où trouver de l'aide


Ressources

Liens officiels

Ressource URL
Site officiel https://n8n.io
Documentation https://docs.n8n.io
GitHub https://github.com/n8n-io/n8n
Docker Hub https://hub.docker.com/r/n8nio/n8n
Forum https://community.n8n.io
Notes de version https://docs.n8n.io/release-notes/
Blog officiel https://blog.n8n.io

Templates de workflows

n8n propose une bibliothèque de workflows prêts à l'emploi :

Intégrations populaires

  • Google Workspace (Gmail, Sheets, Drive, Calendar)
  • Slack, Discord, Microsoft Teams
  • GitHub, GitLab, Bitbucket
  • Notion, Airtable, Coda
  • Stripe, PayPal
  • OpenAI, Anthropic, Ollama

Annexe : Configuration avancée

Activation des métriques Prometheus

Ajoutez dans le fichier .env :

N8N_METRICS=true
N8N_METRICS_PREFIX=n8n_

Les métriques seront disponibles sur http://localhost:5678/metrics.

Configuration SMTP pour les notifications

Ajoutez dans le fichier .env :

N8N_EMAIL_MODE=smtp
N8N_SMTP_HOST=smtp.votredomaine.fr
N8N_SMTP_PORT=587
[email protected]
N8N_SMTP_PASS=VotreMotDePasseSMTP
[email protected]
N8N_SMTP_SSL=false

Mode queue avec Redis (haute disponibilité)

Pour les déploiements à forte charge, n8n supporte un mode "queue" avec Redis :

# Ajoutez ce service dans docker-compose.yml
redis:
  image: redis:7-alpine
  container_name: n8n-redis
  restart: unless-stopped
  networks:
    - n8n-network

Et ces variables dans .env :

EXECUTIONS_MODE=queue
QUEUE_BULL_REDIS_HOST=redis
QUEUE_BULL_REDIS_PORT=6379

Guide rédigé par OuiHeberg - Décembre 2025 Dernière mise à jour : 12/12/2025