Automatisation et workflows : comment installer n8n avec Docker sur Linux ?
Sommaire
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 :
- Tutoriel - Installer n8n sur un NAS Synology
- Tutoriel - Installer n8n sur Windows ou Linux sans Docker
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 n8nN8N_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 (httpsrecommandé en production).N8N_SECURE_COOKIE: définit si les cookies doivent être sécurisés (falseutile 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.

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.


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.