
I. Présentation
Si vous cherchez à déployer la solution n8n sur votre NAS Synology, vous êtes au bon endroit ! Mais, avant d’évoquer l’installation de cette solution, nous allons évoquer son intérêt, notamment dans le contexte de l’IT.
La solution n8n a pour objectif de vous permettre d’automatiser des tâches répétitives et d’orchestrer des actions entre vos différents outils. Autrement dit, c’est un outil d’automatisation de workflows, dans l’esprit No Code, et capable de s’interfacer avec l’intelligence artificielle (IA) bien que ce soit facultatif. Il est même possible de créer vos propres agents IA avec lesquels vous pouvez interagir depuis un chat.
Basé sur une interface web, n8n permet de construire des scénarios (workflows) en connectant des “nœuds”. Chaque nœud représente une application (Gmail, Slack, TheHive, etc.) ou une action (lire un fichier, exécuter une requête HTTP, etc.). Cette approche rend la création d’automatisations à la fois intuitive et puissante, sans nécessiter de compétences avancées en développement. À ce jour, n8n est capable d’effectuer des intégrations avec plus de 1 000 applications (voir cette page).
Vous pouvez utiliser n8n en tant que solution SaaS (via le Cloud) ou l’héberger vous-même, sur votre serveur (self-hosted). Dans le cas présent, nous allons utiliser un NAS Synology pour héberger n8n, le tout par l’intermédiaire de Docker. L’avantage étant de garder la maitrise des données, notamment, car cette application est destinée à stocker une multitude d’informations d’accès pour se connecter à vos outils.
Découvrez ce tutoriel au format vidéo :
Note : n8n est distribué selon un modèle de licence spécifique : le Fair Code. Le Fair Code est un modèle de licence qui, contrairement à l’Open Source, autorise l’accès et la modification du code source, mais restreint son usage commercial. n8n a une version communautaire, publiée sur GitHub, et une version payante.
Voici d’autres tutoriels d’installation de n8n :
II. Configurer le reverse proxy DSM pour n8n
Avant même de déployer la solution n8n avec Container Manager, nous allons devoir effectuer la configuration du reverse proxy de DSM. En effet, l’application doit être publiée en HTTPS avec une URL publique, dans le cas où vous souhaitez utiliser la fonction de Webhook (des applications externes peuvent taper sur une URL particulière pour déclencher un workflow). Ce sera aussi utile si vous envisagez d’exploiter la fonction de formulaire intégrée à n8n.
L’application sera accessible via l’adresse https://n8n.itc-14.synology.me:5443. Vous pouvez adapter le numéro de port, et bien entendu, adaptez selon le nom de domaine que vous utilisez. Je dispose déjà d’un certificat wildcard (*) pour couvrir tous les sous-domaines de mon domaine Synology DDNS.
Pour éviter de me répéter au sujet de la gestion du DDNS sur DSM et la configuration du reverse proxy, suivez ces tutoriels si nécessaire :
Pour configurer le proxy inversé, suivez ces étapes. Connectez-vous à l’interface de DSM, ouvrez le “Panneau de configuration”.
1 – Accédez à la section “Portail de connexion”.
2 – Cliquez sur l’onglet “Avancé” puis sur le bouton nommé “Proxy inversé”.
3 – Créez une nouvelle entrée avec le bouton “Créer” puis déclarez votre application.
4 – Voici des instructions pour vous aider :
Nom du proxy inversé : n8n
Source
Protocole : HTTPS
Nom d’hôte : le nom de domaine de l’application LanguageTool, ici n8n.itc-14.synology.me
Port : port sur lequel vous souhaitez publier l’application. De préférence, choisissez autre chose que 5001 (car c’est le port par défaut de DSM en HTTPS)
Activez l’option HSTS pour plus de sécurité.
Destination
Protocole : HTTP
Nom d’hôte : localhost, car notre conteneur n8n sera en local sur le NAS
Port : 5678, car le conteneur sera accessible sur ce port.
Cliquez ensuite sur l’onglet “En-tête personnalisé”, puis cliquez sur le bouton “Créer” et choisissez “WebSocket”.
5 – Sauvegardez quand la configuration est prête.
Pour le moment, nous ne pouvons pas tester la configuration puisque l’application n’est pas déployée.
III. Préparer l’espace de stockage n8n
Passons maintenant à la prochaine étape de la configuration : la préparation du stockage. En effet, n8n doit disposer d’un espace de stockage persistant pour stocker ses données, sinon tout sera perdu à chaque redémarrage du conteneur. Ainsi, créez la structure suivante sur votre NAS, au sein du dossier docker :
Nous devrons aussi ajouter des droits d’écriture sur le dossier data, sinon l’application ne pourra pas écrire dans le répertoire. Dans le cas du déploiement de n8n sur un NAS Synology, je n’ai pas trouvé d’autres façons de faire pour le moment. Donc, sur le dossier data, et uniquement sur ce dossier, ajoutez des droits en écriture pour le groupe Everyone (Tout le monde). Si vous mieux, je suis preneur.
L’espace de stockage est prêt !
IV. Docker : créer un conteneur n8n
Désormais, passons à l’étape tant attendue : le déploiement du projet n8n avec Docker. Ouvrez la console Container Manager sur votre NAS et créez un nouveau projet. Nommez ce projet, par exemple n8n, sélectionnez le répertoire /docker/n8n créé précédemment, et déclarez le fichier Docker Compose.
Voici un déploiement de n8n avec un seul et unique conteneur. Cela signifie qu’une base de données SQLite sera utilisée pour stocker les informations. Plus loin dans ce tutoriel, nous verrons comment utiliser un second conteneur avec PostgreSQL pour stocker les données.
services:
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.itc-14.synology.me
N8N_PORT: 5678
N8N_PROTOCOL: https
N8N_SECURE_COOKIE: true
N8N_RUNNERS_ENABLED: true
NODE_ENV: production
WEBHOOK_URL: https://n8n.itc-14.synology.me:5543
GENERIC_TIMEZONE: Europe/Paris
TZ: Europe/Paris
volumes:
– /volume1/docker/n8n/data:/home/node/.n8n:rw
– /volume1/docker/n8n/files:/files:rw
Ci-dessous, les explications nécessaires pour vous permettre de comprendre ce fichier et de l’adapter à vos besoins :
image : indique l’image Docker utilisée, ici l’image officielle (docker.n8n.io/n8nio/n8n).
container_name : donne explicitement le nom du conteneur (n8n).
security_opt : limite les privilèges du conteneur pour renforcer la sécurité (no-new-privileges:true).
restart : redémarre automatiquement le conteneur en cas d’arrêt ou d’erreur (always).
ports : expose le port 5678 du conteneur (valeur de droite) sur le port 5678 de l’hôte (valeur de gauche).
environment : les variables d’environnement
N8N_HOST : domaine sur lequel l’application n8n sera accessible.
N8N_PORT : port interne utilisé par n8n (5678). Doit être cohérent avec le paramètre précédent.
N8N_PROTOCOL : protocole utilisé (https).
N8N_SECURE_COOKIE : activation des cookies sécurisés (true).
N8N_RUNNERS_ENABLED : Active les runners sur les workflows (true).
NODE_ENV : mode d’exécution (production).
WEBHOOK_URL : URL publique pour les webhooks entrants (avec port personnalisé 5543).
GENERIC_TIMEZONE : fuseau horaire pour l’application (Europe/Paris).
TZ : fuseau horaire du conteneur (Europe/Paris).
volumes : points de montage pour la persistance des données.
/volume1/docker/n8n/data : persistance des données de configuration et workflows (/home/node/.n8n).
/volume1/docker/n8n/files : stockage externe partagé dans le dossier /files du conteneur, utile pour échanger des données avec l’application.
Quand c’est bon pour vous, lancez le déploiement et patientez. L’image près plus de 670 Mo, donc cette opération peut prendre plusieurs minutes.
Voilà, nous disposons d’un conteneur n8n actif sur le NAS ! Comment s’y connecter ?
Désormais, accédez à l’interface web de votre instance n8n, en utilisant l’adresse déclarée dans le reverse proxy. Ce sera l’occasion de s’assurer que tout fonctionne bien. Vous devriez arriver sur une page de Setup, où vous devez configurer un compte : il s’agit du compte d’administration de la plateforme.
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 arrivez ensuite sur le tableau de bord de n8n ! Vous allez aussi recevoir une licence gratuite par e-mail, il est nécessaire de l’inscrire dans les options de l’application, via l’interface web. La suite des opérations : créer votre premier workflow.
V. Docker : créer un conteneur n8n avec PostgreSQL
Cette partie de l’article s’adresse aux personnes qui préfèrent utiliser PostgreSQL plutôt que SQLite pour stocker les données de n8n. Ceci peut s’avérer judicieux sur les instances où de nombreux workflows seront exécutés. Par rapport à la première configuration évoquée, dans le répertoire /docker/n8n, créez un autre sous-répertoire nommé postgresql.
Dans ce cas, créez un projet dans Container Manager, sur le même principe que précédemment. La différence se situe au niveau du code Docker Compose, que voici :
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”, “2025_n8n”, “-U”, “2025_n8n_user”]
timeout: 60s
interval: 5s
retries: 3
restart: always
environment:
POSTGRES_DB: 2025_n8n
POSTGRES_USER: 2025_n8n_user
POSTGRES_PASSWORD: MotDePasseSecure-2025
TZ: Europe/Paris
volumes:
– /volume1/docker/n8n/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.itc-14.synology.me
N8N_PORT: 5678
N8N_PROTOCOL: https
N8N_SECURE_COOKIE: true
N8N_RUNNERS_ENABLED: true
NODE_ENV: production
WEBHOOK_URL: https://n8n.itc-14.synology.me:5443
GENERIC_TIMEZONE: Europe/Paris
TZ: Europe/Paris
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: n8n-postgresql
DB_POSTGRESDB_DATABASE: 2025_n8n
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_USER: 2025_n8n_user
DB_POSTGRESDB_PASSWORD: MotDePasseSecure-2025
volumes:
– /volume1/docker/n8n/data:/home/node/.n8n:rw
– /volume1/docker/n8n/files:/files:rw
depends_on:
postgres:
condition: service_healthy
Là encore, des explications sont nécessaires puisqu’il y a quand même une belle quantité de directives à assimiler. Il y a deux services déclarés dans ce projet : PostgreSQL et n8n.
PostgreSQL :
image : indique l’utilisation de PostgreSQL en version 17, via l’image postgres:17
container_name : nomme le conteneur PostgreSQL (n8n-postgresql).
hostname : définit le nom d’hôte interne du conteneur (n8n-postgresql).
security_opt : limite les privilèges du conteneur pour renforcer la sécurité (no-new-privileges:true).
healthcheck : vérifie l’état du conteneur PostgreSQL
test : commande exécutée pour tester l’état de PostgreSQL, ici une tentative de connexion à l’instance avec notre utilisateur.
timeout : temps maximal avant que le test ne soit considéré comme échoué (60 secondes).
interval : fréquence de vérification de l’état (toutes les 5 secondes).
retries : nombre maximal d’échecs autorisés avant que le conteneur ne soit considéré en erreur (3 essais).
restart : redémarre automatiquement PostgreSQL en cas d’arrêt ou de panne (always).
environment : variables d’environnement pour ce conteneur.
POSTGRES_DB : nom de la base de données créée au démarrage, ici 2025_n8n.
POSTGRES_USER : nom de l’utilisateur PostgreSQL, ici 2025_n8n_user.
POSTGRES_PASSWORD : mot de passe sécurisé associé à l’utilisateur, ici MotDePasseSecure-2025
TZ : fuseau horaire du conteneur (Europe/Paris).
volumes :
Dossier /var/lib/postgresql/data lié à /volume1/docker/n8n/postgresql sur l’hôte. Le moteur de base de données stockera toutes ses données dans ce dossier.
n8n :
Quelques différences sont à noter au niveau de la configuration du conteneur n8n, notamment pour lui spécifier le serveur PostgreSQL. Par rapport à la version avec un seul conteneur, nous avons les différences suivantes :
environment : variables d’environnement pour n8n
DB_TYPE : type de base de données utilisé (postgresdb).
DB_POSTGRESDB_HOST : hôte PostgreSQL utilisé par n8n.
DB_POSTGRESDB_DATABASE : nom de la base PostgreSQL, ici 2025_n8n.
DB_POSTGRESDB_PORT : port utilisé par PostgreSQL (5432 par défaut).
DB_POSTGRESDB_USER : utilisateur PostgreSQL, ici 2025_n8n_user.
DB_POSTGRESDB_PASSWORD : mot de passe PostgreSQL de l’utilisateur, ici MotDePasseSecure-2025.
depends_on : conditionne le démarrage de ce conteneur à l’état du conteneur PostgreSQL, lorsque ce dernier est considéré comme prêt (état healthy).
Ensuite, vous pouvez lancer la création du projet, où vous aurez cette fois-ci 2 conteneurs associés :
Une connexion en ligne de commande au conteneur PostgreSQL permet de naviguer dans la base de données et voir qu’elle est bien utilisée par n8n.
Pour la suite, connectez-vous à votre instance n8n pour effectuer la mise en route sur le même principe que nous l’avons vu précédemment.
VI. Conclusion
Que faire ensuite ? n8n est installé, c’est une chose, mais comment créer son premier workflow ? Je vous encourage à regarder ma vidéo où je vous présente rapidement la création d’un workflow, ainsi que certains workflows. Pour débuter, vous pouvez aussi piocher dans la bibliothèque de modèles n8n et les réadapter, ou simplement vous amuser pour faire quelques tests.
Retrouvez aussi notre article Qu’est-ce que n8n ? pour apprendre à créer un premier workflow.
Aimeriez-vous d’autres tutoriels sur la création de workflows adaptés à l’IT ?
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.