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) etpostgres(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.frpar votre domaine réelVotreCleDeCryptage32CaracteresMin!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.frpar 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 :
- Entrez votre adresse email
- Acceptez les conditions d'utilisation
- Choisissez si vous souhaitez partager votre email avec l'EFF
- 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 :
- Email : Entrez votre adresse email professionnelle
- Prénom et Nom : Vos informations d'identité
- 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 :
- Cliquez sur "Create account" (Créer un compte)
- Une popup s'affiche pour activer la licence communautaire (gratuite)
- 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 :
- Cliquez sur "Create Workflow" dans le menu latéral
- Cliquez sur le "+" pour ajouter un nœud
- Recherchez "Schedule Trigger" et ajoutez-le
- Ajoutez un nœud "Set" pour définir des données
- Connectez les deux nœuds
- 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 :
- Vérifiez le fichier
.env:grep WEBHOOK_URL /opt/docker-compose/n8n/.env - L'URL doit être
https://n8n.votredomaine.fr/ - 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 :
- Vérifiez l'état de PostgreSQL :
docker compose logs postgres - Vérifiez la cohérence des variables dans
.env - 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
- Documentation officielle : https://docs.n8n.io
- Forum communautaire : https://community.n8n.io
- GitHub Issues : https://github.com/n8n-io/n8n/issues
- Discord : Serveur communautaire n8n
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


