05/12/2025

Linux

Automatisation et workflows : comment installer n8n avec Docker sur Linux ?

I. Présentation

Découvrez comment déployer facilement votre propre instance d'automatisation n8n grâce à Docker, et prenez le contrôle de vos workflows. Que vous souhaitiez automatiser la publication de contenu sur vos réseaux sociaux, synchroniser des données entre différentes applications cloud ou encore créer des webhooks pour interconnecter vos services, n8n est un outil puissant et flexible. Ce tutoriel vous guidera pas à pas dans l'installation de n8n sur votre propre serveur.

Voici d'autres tutoriels d'installation de n8n :

Retrouvez aussi notre article "Qu'est-ce que n8n ? Comment créer son premier workflow ?" pour en savoir plus sur cette solution et sur la création d'un premier workflow.

II. Prérequis

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

  • Un serveur sous Linux (Debian, Ubuntu, etc.) ou une machine Windows avec WSL.
  • Docker (et Docker Compose) installés sur ce même serveur.
  • Facultatif, mais recommandé pour un usage en production : un reverse proxy (Nginx, Haproxy, Traefik, etc.) et un nom de domaine associé. Cela vous permettra notamment de sécuriser l'accès via un certificat SSL/TLS (par exemple, un certificat gratuit avec Let's Encrypt). L'intérêt : pouvoir bénéficier des formulaires natifs dans n8n et de la fonction de webhooks (appels entrants depuis une application externe qui déclenche un workflow).

n8n s'appuie par défaut sur une base de données SQLite. Nous verrons comment utiliser à la place une base de données PostgreSQL, ce qui est plus adapté pour les instances destinées à faire tourner une multitude de workflows.

III. Déploiement de n8n avec Docker

Pour simplifier le processus, nous allons nous appuyer sur une configuration Docker Compose prête à l'emploi.

A. Récupération des fichiers de configuration

Connectez-vous à votre serveur et créez un répertoire pour stocker les données de n8n. Comme je le fais habituellement, un sous-répertoire sera créé dans le dossier /opt/docker-compose. Ici, ce sera un dossier n8n.

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

Nous devons aussi créer trois répertoires, l'un pour les données de PostgreSQL et les deux autres pour n8n (données de l'application en elle-même et un répertoire pour échanger des données avec l'application). Ces répertoires seront ensuite mappés dans les conteneurs.

sudo mkdir /opt/docker-compose/n8n/{postgresql,n8n_data,n8n_files}

B. Personnalisation de la configuration

Dans le répertoire créé précédemment (/opt/docker-compose/n8n), nous allons créer deux fichiers : un fichier docker-compose.yml pour déclarer le projet Docker et un fichier de configuration .env.

Commençons par créer le fichier destiné à accueillir les variables d'environnement. Ceci permet de sortir du fichier Docker Compose tout ce qui est propre à l'environnement local. C'est aussi intéressant quand il y a plusieurs conteneurs pour appeler facilement la même valeur sans se tromper.

sudo nano .env

Ensuite, vous pouvez ajouter ce contenu dans ce fichier :

# Configuration globale de n8n
N8N_HOST=n8n.it-connect.local
N8N_WEBHOOK_URL=https://n8n.it-connect.local
N8N_WEBHOOK_TUNNEL_URL=https://n8n.it-connect.local
N8N_PROTOCOL=https
N8N_SECURE_COOKIE=false
N8N_GENERIC_TIMEZONE=Europe/Paris

# Configuration de PostgreSQL
POSTGRES_DB=2025_n8n
POSTGRES_USER=2025_n8n_user
POSTGRES_PASSWORD=MotDePasseSecure-2025

Mais, alors, à quoi correspondent toutes ces valeurs ? Que doit-on adapter ? Voici déjà le rôle de chaque variable.

  • N8N_HOST : nom d'hôte complet n8n
  • N8N_WEBHOOK_URL : URL publique complète utilisée par n8n pour recevoir des webhooks entrants.
  • N8N_WEBHOOK_TUNNEL_URL : URL utilisée par n8n en cas d'utilisation d'un tunnel (utile dans certains cas spécifiques pour la connexion à certains services).
  • N8N_PROTOCOL : protocole utilisé par n8n (https recommandé en production).
  • N8N_SECURE_COOKIE : définit si les cookies doivent être sécurisés (false utile en environnement de test/local, surtout si vous n'avez pas prévu de mettre un reverse proxy pour basculer en HTTPS). Vous pouvez changer par la suite.
  • N8N_GENERIC_TIMEZONE : fuseau horaire global utilisé par n8n et PostgreSQL (Europe/Paris).
  • POSTGRES_DB : nom de la base de données PostgreSQL utilisée par n8n.
  • POSTGRES_USER : utilisateur de la base PostgreSQL.
  • POSTGRES_PASSWORD : mot de passe associé à l'utilisateur PostgreSQL.

Vous devez adapter le nom d'hôte, les URL, éventuellement le fuseau horaire, et vous pouvez personnaliser les informations de connexion à la base de données.

Désormais, vous pouvez créer le fichier Docker Compose :

sudo nano docker-compose.yml

Et, y insérer ce contenu :

services:
  postgres:
    image: postgres:17
    container_name: n8n-postgresql
    hostname: n8n-postgresql
    security_opt:
      - no-new-privileges:true
    healthcheck:
      test: ["CMD", "pg_isready", "-q", "-d", "${POSTGRES_DB}", "-U", "${POSTGRES_USER}"]
      timeout: 60s
      interval: 5s
      retries: 3
    restart: always
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      TZ: ${N8N_GENERIC_TIMEZONE}
    volumes:
      - ./postgresql:/var/lib/postgresql/data:rw
  n8n:
    image: docker.n8n.io/n8nio/n8n
    container_name: n8n
    security_opt:
      - no-new-privileges:true
    restart: always
    ports:
      - "5678:5678"
    environment:
      N8N_HOST: ${N8N_HOST}
      N8N_PORT: 5678
      N8N_PROTOCOL: https
      N8N_SECURE_COOKIE: ${N8N_SECURE_COOKIE}
      N8N_RUNNERS_ENABLED: true
      N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: true
      NODE_ENV: production
      WEBHOOK_URL: ${N8N_WEBHOOK_URL}
      WEBHOOK_TUNNEL_URL: ${N8N_WEBHOOK_TUNNEL_URL}
      GENERIC_TIMEZONE: ${N8N_GENERIC_TIMEZONE}
      TZ: ${N8N_GENERIC_TIMEZONE}
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: n8n-postgresql
      DB_POSTGRESDB_DATABASE: ${POSTGRES_DB}
      DB_POSTGRESDB_PORT: 5432
      DB_POSTGRESDB_USER: ${POSTGRES_USER}
      DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
    volumes:
      - ./n8n_data:/home/node/.n8n:rw
      - ./n8n_files:/files:rw
    depends_on:
      postgres:
        condition: service_healthy

En principe, vous n'avez pas à éditer ce fichier Docker Compose, car la personnalisation doit être effectuée via le fichier .env. Si vous avez des interrogations quant aux directives intégrées à ce fichier, consultez mon tutoriel d'installation de n8n sur Synology, tout y est expliqué.

Pour en savoir plus sur toutes les variables d'environnement disponibles, consultez la documentation :

C. Ajustement des permissions

Nous pourrions avoir envie de lancer la création du projet dès maintenant, mais ça ne fonctionnera pas. En effet, pour que le conteneur n8n puisse écrire ses données persistantes, il est nécessaire d'ajuster les droits sur le dossier n8n_data. Je n'aime pas trop faire cette modification des permissions, mais sinon n8n ne fonctionnera pas... Finalement, c'est la même difficulté et le même comportement que lors de l'installation sur un NAS où nous devons ajuster les permissions (pour le groupe Everyone).

Exécutez la commande suivante :

sudo chmod 777 n8n_data/

Bien que cette commande (chmod 777) soit très permissive, j'insiste sur le fait qu'elle est requise pour permettre au conteneur de démarrer correctement sans problème de droits d'écriture. Sans cela, vous risquez d'obtenir cette erreur :

D. Lancement des conteneurs

Nous pouvons maintenant lancer la construction de notre projet Docker.

sudo docker compose up -d

Quelques minutes plus tard, les deux conteneurs seront lancés :

[+] Running 2/2
 ✔ Container n8n-postgresql  Healthy                                                                                                                                                           
 ✔ Container n8n             Started

Je vous recommande d'afficher les journaux pour suivre le processus de démarrage et identifier une éventuelle erreur.

sudo docker compose logs -f

Surveillez les logs. Le démarrage est complet lorsque vous voyez un message confirmant que n8n est prêt et en écoute sur le port configuré. Vous pouvez alors quitter l'affichage des logs avec Ctrl + C. Vous verrez notamment ces lignes :

Editor is now accessible via:
https://n8n.it-connect.local

IV. Première connexion et initialisation de n8n

Ouvrez votre navigateur web et rendez-vous à l'URL que vous avez configurée. Vous devriez voir la page de création du compte propriétaire. Remplissez le formulaire avec votre adresse e-mail, prénom, nom et un mot de passe sécurisé. Attention, cet utilisateur sera l'administrateur de l'instance n8n. Validez

Ensuite, un second formulaire vous demande quelques informations sur votre usage. Vous pouvez répondre ou simplement cliquer sur Get started. L'assistant vous proposera aussi d'obtenir une clé de licence gratuite.

Connexion à n8n installé sur Docker

Vous êtes maintenant sur le tableau de bord principal de n8n ! L'interface est prête à accueillir vos premiers Workflows.

V. Reverse Proxy Nginx pour n8n

Pour finir, nous allons voir comment installer un reverse proxy Nginx sur le serveur local, afin d'accéder à notre instance n8n en HTTPS. Nous allons utiliser un certificat TLS auto-signé (généré avec OpenSSL), mais il peut s'avérer plus judicieux d'utiliser un certificat valide obtenu auprès de Let's Encrypt (ou une autre CA reconnue).

Remarque : vous pouvez aussi utiliser un conteneur Docker avec Nginx, mais dans ce cas, pensez à connecter les conteneurs sur le même réseau Docker;

Installez le paquet Nginx :

sudo apt update && sudo apt install nginx

Créez le répertoire suivant pour stocker le certificat TLS :

sudo mkdir -p /etc/nginx/ssl

Générez le certificat TLS et sa clé privée. Il sera valide 365 jours.

sudo openssl req -x509 -nodes -days 365 -newkey rsa:4096-keyout /etc/nginx/ssl/n8n.key -out /etc/nginx/ssl/n8n.crt

Ensuite, nous allons créer le fichier de configuration /etc/nginx/sites-available/n8n.it-connect.local pour déclarer les directives nécessaires afin de publier l'application.

sudo nano /etc/nginx/sites-available/n8n.it-connect.local

Voici la configuration complète, au sein de laquelle vous devez uniquement adapter le nom DNS complet. Pour ma part, il s'agit de n8n.it-connect.local. Il faut être cohérent vis-à-vis de la configuration du conteneur n8n. Une redirection HTTP vers HTTPS sera aussi configurée (premier bloc server de la configuration).

server {
    listen 80;
    server_name n8n.it-connect.local;

    # Redirection HTTP vers HTTPS
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name n8n.it-connect.local;

    # Certificat auto-signé
    ssl_certificate /etc/nginx/ssl/n8n.crt;
    ssl_certificate_key /etc/nginx/ssl/n8n.key;

    # Configuration SSL / TLS
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # Proxy vers l'application n8n
    location / {
        proxy_pass http://127.0.0.1:5678;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        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_buffering off;
        proxy_read_timeout 300s;
    }
}

Sauvegardez la configuration, et lancez les deux commandes suivantes pour activer le site n8n (lien symbolique vers sites-enabled) et rechargez Nginx.

sudo ln -s /etc/nginx/sites-available/n8n.it-connect.local /etc/nginx/sites-enabled/
sudo systemctl reload nginx

À partir de votre navigateur, vous devriez pouvoir accéder à n8n à partir de la nouvelle URL en HTTPS ! Il y a un avertissement lié au certificat, mais c'est tout à fait normal puisqu'il est auto-signé.

VI. Conclusion

Félicitations ! Vous disposez désormais d'une instance n8n fonctionnelle et auto-hébergée grâce à Docker. Cette installation locale est prête à automatiser vos tâches répétitives et créer des ponts entre vos applications. Vous pouvez dès à présent commencer à explorer l'interface de n8n et les intégrations disponibles afin de construire votre premier workflow d'automatisation. N'oubliez pas qu'il y a des modèles sur le site de n8n, que vous pouvez utiliser comme source d'inspiration.

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

1 commentaire sur “Automatisation et workflows : comment installer n8n avec Docker sur Linux ?

  • Utiliser un outil dont la licence n’est pas valide en terme de liberté et en faire tout une panoplie de pubs partout… Alors que NodeRed mérite qu’on le présente, qu’on les aide, et qui marche tellement bien…
    NodeRed c’est vraiment open, c’est aisément extensible, on y attache de l’IA, des bdd, on crée des interfaces graphiques pour piloter le workflow… C’est terrible de se battre pendant 25 ans à expliquer qu’il faut fuire les outils comme n8n qui vont vous la faire à l’envers quand ils auront bien envahi vos machines.

    Répondre

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.