n8n est une solution d’automatisation open source qui permet de connecter et d’automatiser des actions chronophages à partir d’un simple flux (workflow) entre différentes applications et services, sans nécessiter de compétences avancées en programmation. Contrairement à d’autres solutions propriétaires comme Make ou Zapier, n8n peut être hébergé localement ou dans le cloud, offrant ainsi plus de confidentialité et de contrôle total sur vos données sensibles.

Les workflows n8n peuvent être déclenchés par divers événements tels qu’une nouvelle entrée dans une base de données, un webhook recevant des données externes, une planification temporelle (cron), ou encore des intégrations avec plus de 400 services populaires.

Prérequis

Avant de commencer l’installation, assurez-vous de disposer des éléments suivants :

  • Un serveur Linux (Debian 12/Ubuntu 22.04 ou supérieur) avec accès root ou sudo
  • Minimum 2 Go de RAM (4 Go recommandés pour un usage en production)
  • 20 Go d’espace disque disponible
  • Une connexion internet stable
  • Un nom de domaine (optionnel mais recommandé pour la production)

Installation de Docker

Docker est une plateforme de conteneurisation qui permet d’exécuter n8n de manière isolée et portable. Commençons par mettre à jour le système.

Mise à jour du système

Ouvrez un terminal et exécutez les commandes suivantes pour mettre à jour la liste des paquets disponibles et installer les mises à jour existantes :

sudo apt update && sudo apt upgrade -y

Installation des dépendances

Avant d’installer Docker, assurez-vous d’avoir installé les dépendances nécessaires en exécutant la commande suivante :

sudo apt install -y apt-transport-https ca-certificates curl gnupg2 software-properties-common

Ajout du repository Docker officiel

Pour Debian :

Pour garantir l’authenticité des packages Docker téléchargés, ajoutez la clé GPG officielle et le dépôt :

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg

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

Pour Ubuntu :

sudo mkdir -p /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

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

Installation de Docker Engine

Actualisez la liste des paquets et installez Docker en exécutant les commandes suivantes :

sudo apt update

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

Ces commandes installeront Docker Engine (le moteur Docker), Docker CLI (l’interface en ligne de commande), containerd.io (le runtime de conteneurs), ainsi que les plugins Docker Buildx et Docker Compose.

Activation et démarrage du service Docker

Activez et démarrez le service Docker pour qu’il se lance automatiquement au démarrage du système :

sudo systemctl enable --now docker.service

Vérifiez que Docker est bien installé et fonctionne correctement :

sudo docker --version
sudo docker compose version

Configuration pour lancer Docker sans root

Pour exécuter les commandes Docker sans avoir besoin des privilèges root à chaque fois, ajoutez votre utilisateur au groupe Docker :

sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker

Note : Vous devrez vous déconnecter puis vous reconnecter pour que les changements prennent effet, ou exécuter newgrp docker dans votre session actuelle.

Testez votre installation en exécutant la commande suivante sans sudo :

docker run hello-world

Installation de n8n avec Docker Compose

Nous allons déployer n8n avec Docker Compose en utilisant PostgreSQL comme base de données pour assurer de meilleures performances et une meilleure fiabilité que SQLite (base de données par défaut).

Création du répertoire de projet

Créons un répertoire dédié pour notre installation n8n :

mkdir -p ~/n8n
cd ~/n8n

Configuration du fichier docker-compose.yml

Créez un fichier docker-compose.yml avec le contenu suivant :

version: "3.8"

services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    restart: unless-stopped
    ports:
      - "5678:5678"
    environment:
      # Configuration de la 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=${DB_PASSWORD}
      
      # Configuration d'authentification (à modifier impérativement)
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=${N8N_USER}
      - N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD}
      
      # Configuration réseau
      - N8N_PROTOCOL=http
      - N8N_HOST=${N8N_HOST:-localhost}
      - WEBHOOK_URL=http://${N8N_HOST:-localhost}:5678/
      
      # Configuration générale
      - GENERIC_TIMEZONE=Africa/Lome
      - NODE_ENV=production
      - N8N_SECURE_COOKIE=false
      
      # Modules Node.js externes autorisés
      - NODE_FUNCTION_ALLOW_EXTERNAL=axios,qs,moment,lodash
      
      # Gestion des exécutions
      - EXECUTIONS_DATA_PRUNE=true
      - EXECUTIONS_DATA_MAX_AGE=168
      
    volumes:
      - n8n_data:/home/node/.n8n
      - ./local-files:/files
    depends_on:
      postgres:
        condition: service_healthy
    networks:
      - n8n-network

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

volumes:
  n8n_data:
    driver: local
  postgres_data:
    driver: local

networks:
  n8n-network:
    driver: bridge

Configuration des variables d’environnement

Pour sécuriser votre installation, créez un fichier .env dans le même répertoire :

nano .env

Ajoutez-y le contenu suivant en remplaçant les valeurs par les vôtres :

# Identifiants de connexion n8n (à personnaliser IMPÉRATIVEMENT)
N8N_USER=admin
N8N_PASSWORD=VotreMotDePasseSecurise123!

# Mot de passe PostgreSQL (à personnaliser IMPÉRATIVEMENT)
DB_PASSWORD=PostgresMotDePasseSecurise456!

# Nom d'hôte ou adresse IP du serveur
N8N_HOST=localhost

⚠️ Important : Modifiez impérativement les mots de passe par défaut et utilisez des mots de passe forts !

Lancement des conteneurs

Démarrez les conteneurs en mode détaché (arrière-plan) :

docker compose up -d

Vérifiez que les conteneurs sont bien démarrés :

docker compose ps

Vous devriez voir les deux conteneurs (n8n et postgres) avec le statut « Up ».

Vérification des logs

Pour surveiller les logs et vous assurer que tout fonctionne correctement :

# Logs de n8n
docker compose logs -f n8n

# Logs de PostgreSQL
docker compose logs -f postgres

Appuyez sur Ctrl+C pour arrêter l’affichage des logs.

Gestion avec Portainer (Optionnel)

Portainer est une interface web graphique open-source et légère qui permet de gérer facilement vos conteneurs Docker. Son rôle principal est de fournir une interface conviviale pour la gestion des conteneurs, des images, des volumes et des réseaux Docker, ainsi que pour la surveillance des ressources système.

Si vous souhaitez gérer vos conteneurs Docker via une interface graphique, consultez notre guide dédié : Gérer vos conteneurs Docker avec Portainer

Une fois Portainer installé, vous pourrez :

  • Visualiser l’état de vos conteneurs n8n et PostgreSQL
  • Consulter les logs directement depuis l’interface web
  • Gérer les volumes et les réseaux Docker
  • Surveiller les ressources utilisées (CPU, mémoire, réseau)
  • Déployer de nouvelles stacks facilement
Interface Portainer montrant n8n
Gestion de n8n via Portainer

Premier accès à n8n

Vous pouvez maintenant accéder à n8n depuis votre navigateur web préféré. Dans la barre d’adresse, saisissez :

http://VOTRE_IP_SERVEUR:5678

ou si vous êtes sur le serveur local :

http://localhost:5678

Vous serez invité à créer votre premier compte administrateur. Utilisez les identifiants définis dans votre fichier .env pour vous connecter.

Interface de connexion n8n
Interface de connexion n8n

Commandes utiles

Voici quelques commandes essentielles pour gérer votre installation n8n :

# Arrêter les conteneurs
docker compose stop

# Démarrer les conteneurs
docker compose start

# Redémarrer les conteneurs
docker compose restart

# Arrêter et supprimer les conteneurs (conserve les volumes)
docker compose down

# Mettre à jour n8n vers la dernière version
docker compose pull
docker compose up -d

# Voir l'utilisation des ressources
docker stats

# Sauvegarder les données PostgreSQL
docker exec n8n-postgres pg_dump -U n8n n8n > backup_n8n_$(date +%Y%m%d).sql

Configuration pour la production

Configuration HTTPS avec Nginx et Let’s Encrypt

Pour une utilisation en production, il est fortement recommandé de configurer un reverse proxy avec HTTPS. Voici un exemple de configuration Nginx :

1. Installez Nginx et Certbot :

sudo apt install -y nginx certbot python3-certbot-nginx

2. Créez la configuration Nginx pour n8n :

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

Ajoutez la configuration suivante (remplacez votre-domaine.com par votre nom de domaine) :

server {
    listen 80;
    server_name votre-domaine.com;

    location / {
        proxy_pass http://localhost:5678;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        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;
    }
}

3. Activez la configuration et obtenez un certificat SSL :

sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d votre-domaine.com

4. Mettez à jour votre fichier .env :

N8N_HOST=votre-domaine.com
N8N_PROTOCOL=https
N8N_SECURE_COOKIE=true

5. Redémarrez n8n :

docker compose down
docker compose up -d

Sauvegarde automatique

Créez un script de sauvegarde automatique avec cron :

sudo nano /usr/local/bin/backup-n8n.sh

Contenu du script :

#!/bin/bash
BACKUP_DIR="/backup/n8n"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR

# Sauvegarde de PostgreSQL
docker exec n8n-postgres pg_dump -U n8n n8n > $BACKUP_DIR/n8n_db_$DATE.sql

# Sauvegarde des fichiers n8n
docker run --rm \
  -v n8n_data:/data \
  -v $BACKUP_DIR:/backup \
  alpine tar czf /backup/n8n_files_$DATE.tar.gz /data

# Suppression des sauvegardes de plus de 30 jours
find $BACKUP_DIR -name "*.sql" -mtime +30 -delete
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete

echo "Sauvegarde terminée : $DATE"

Rendez le script exécutable et ajoutez-le au cron :

sudo chmod +x /usr/local/bin/backup-n8n.sh
sudo crontab -e

Ajoutez cette ligne pour une sauvegarde quotidienne à 2h du matin :

0 2 * * * /usr/local/bin/backup-n8n.sh >> /var/log/n8n-backup.log 2>&1

Dépannage (Troubleshooting)

Problème : n8n ne peut pas se connecter à PostgreSQL

Solution : Vérifiez que PostgreSQL est bien démarré et accessible :

docker compose logs postgres
docker exec -it n8n-postgres psql -U n8n -d n8n

Problème : Le port 5678 est déjà utilisé

Solution : Identifiez le processus utilisant le port et libérez-le, ou changez le port dans le docker-compose.yml :

sudo lsof -i :5678
# Ou changez le port mapping dans docker-compose.yml : "8080:5678"

Problème : Les webhooks ne fonctionnent pas

Solution : Assurez-vous que la variable WEBHOOK_URL est correctement configurée avec votre domaine ou IP publique.

Problème : Les workflows s’exécutent lentement

Solution : Augmentez les ressources allouées au conteneur ou activez le mode de purge des exécutions :

# Dans .env
EXECUTIONS_DATA_PRUNE=true
EXECUTIONS_DATA_MAX_AGE=168  # 7 jours

Vous disposez maintenant d’une installation complète et sécurisée de n8n sur votre serveur Linux avec Docker. Cette configuration avec PostgreSQL vous garantit de meilleures performances et une meilleure stabilité qu’avec SQLite par défaut.

Pour aller plus loin, je vous recommande de consulter la documentation officielle de n8n pour découvrir toutes les possibilités d’automatisation offertes par cet outil puissant.

N’hésitez pas à partager cet article et à laisser un commentaire si vous avez des questions ou des suggestions d’amélioration !

Découverte complète de n8n : Installation et présentation

Articles similaires

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *