Comment auto-héberger n8n sur votre NAS Synology ?
Sommaire
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 :
- Utiliser un certificat SSL Let’s Encrypt avec Synology DDNS
- Synology : publier une application Web avec le Reverse Proxy
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 :
- n8n
- data
- files

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: n8nio/n8n:latest
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 (n8nio/n8n:latest).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 port5678du conteneur (valeur de droite) sur le port5678de l'hôte (valeur de gauche).environment: les variables d'environnementN8N_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/filesdu 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: n8nio/n8n:latest
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'imagepostgres:17container_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 PostgreSQLtest: 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, ici2025_n8n.POSTGRES_USER: nom de l'utilisateur PostgreSQL, ici2025_n8n_user.POSTGRES_PASSWORD: mot de passe sécurisé associé à l'utilisateur, iciMotDePasseSecure-2025TZ: fuseau horaire du conteneur (Europe/Paris).
volumes:- Dossier
/var/lib/postgresql/datalié à/volume1/docker/n8n/postgresqlsur l’hôte. Le moteur de base de données stockera toutes ses données dans ce dossier.
- 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 n8nDB_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, ici2025_n8n.DB_POSTGRESDB_PORT: port utilisé par PostgreSQL (5432 par défaut).DB_POSTGRESDB_USER: utilisateur PostgreSQL, ici2025_n8n_user.DB_POSTGRESDB_PASSWORD: mot de passe PostgreSQL de l'utilisateur, iciMotDePasseSecure-2025.
depends_on: conditionne le démarrage de ce conteneur à l'état du conteneur PostgreSQL, lorsque ce dernier est considéré comme prêt (étathealthy).
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 ?


Merci Florian, je cherchais justement un tutoriel. Le fait que ce soit toi qui le proposes me réjouit particulièrement.
Tu fais un super travail pour la communauté. Bravo
Merci Florian. Tu es toujours au top dans tes explications. C’est génial de pouvoir reproduire ton travail. Je vais faire des tests sur la sécurité de Synology mais il est vrai que c’est un vrai casse tête. En voulant monter un serveur Web sur mon DS220+ j’avais dû faire du bidouillage dans les fichiers httacces mais rien a faire. Merci encore.
Bonjour,
Merci pour le tuto ! Perso j’ai fait un test en mettant « SYSTEM » en Read & Write plutôt que « Everyone » et ça marche nickel 🙂
https://i.imgur.com/5XCWg1n.png
Bonjour Florian,
Top ce tuto ! Pour ma part impossible d’accéder à l’adresse : https://n8n.itc-14.synology.me:5443/setup
« Ce site est inaccessible! »
Merci d’avance pour votre aide.
Bonjour Pascal,
Ici, il s’agit de l’URL que j’ai utilisée pour ma démo et qui correspond à mon NAS, donc vous devez adapter pour votre environnement.
Salut Florian,
Merci pour ce tuto, que j’ai suivi à la lettre, mais je n’arrive pas à ouvrir la page de set de n8n.
J’ai une page certainement issue du web station qui me dit « votre site n’est pas encore prêt ». Est ce que ça pourrait venir de là ? Sachant qu’a la fin de l’installation on me demande si je veux configurer le portail web via web station et je sait pas ni quoi répondre ni comment configurer web station correctement…
Hello,
Il faut ignorer l’étape de configuration de Web Station (simplement continuer).
Super! merci, tout semble fonctionner correctement. Par contre les MAJ de N8N ne semblent pas se faire toutes seules, comment procéder ? Je suis le lien proposé dans l’application mais ca m’aide pas vraiment… 😬
Bonjour Florian,
Merci pour ce tuto.
Quelle est la meilleure méthode pour mettre à jour N8N ? N’ayant rien trouvé de mieux j’ai fait un « recreate » dans Portainer, en activant l’option « re-pull image ». Y a t’il une autre méthode ? Le « recreate » ne risque t’il pas de faire perdre des infos ? (je pense que toute la configuration est dans la bdd)
Pour le problème de droit, il faut rajouter user: 0:0 dans le compose car l’image met par défaut node (1000:1000) comme user
Tout d’abord merci pour le tuto, c’est parfait pour les personnes pas trop calé !
J’ai pu mettre n8n sur mon NAS sans difficultés.
Concernant SQLite, c’est facile à installer ?
Je n’ai rien trouvé à ce sujet. Faut créer un conteneur SQlite ?
Merci
Bonjour ,
Merci pour ce tuto .
Je vois que tu ne télécharges pas d’image depuis container manager / images .
Le docker compose va t il permettre de le télécharger directement ?
Merci
Bonjour Herve,
Oui, Docker sait quelle image télécharger grâce à cette instruction : image: docker.n8n.io/n8nio/n8n
Merci d’avoir eclairé ma lanterne
Bonjour Florian,
merci pour ce tutoriel et pour votre travail de manière générale, tout fonctionne très bien.
Je rejoins les autres demandes concernant un petit ajout sur le tuto qui permettrait de savoir comment mettre à jour l’image pour avoir la dernière version de n8n. Sur la doc n8n ils disent d’utiliser la commande « docker compose pull » mais mes maigres compétences s’arrêtent là…
Par ailleurs, si on peut avoir une idée de comment installer en local des nodes ce serait top !
Merci.
Bravo et merci pour ce tuto, mais qui ne fonctionne pas chez moi avec un ds920+ dsm 7, jobtiens ça : « The plain HTTP request was sent to HTTPS port »
j’ai bien sur active letsencrypt avec synology, et bosse bien avec leur domaine synology.me (bien que je n’ai besoin que d’un acces local).
j’ai essayé les http et https dans le proxy reverse, et postgrsql ou sqlite, et dans les deux cas c’est ce message que j’obtiens…est-ce que c’est le container qui refuse la connextion ou la base de données…bref, marche pas 🙂
Si quelqu’un a une idée ou piste.
Bonjour Florian et merci pour tous ces tutos.
J’ai suivi et refait plusieurs fois la procédure mais il y a un truc qui ne fonctionne pas a chaque fois j’ai le message d’erreur :
Your n8n server is configured to use a secure cookie…
j’ai essayé de changer le paramètre N8N_SECURE_COOKIE: en false
et je peux alors accéder mais lorsque j’ai voulu connecter avec mon mail m365 il me dit que mon accès n’est pas sécurisé et n’accepte pas la connexion d’application M365.
je n’ai pour l’instant pas trouvé de solution…
Merci
Bonsoir xtof,
Tu effectues bien la connexion en HTTPS à l’application ? Je pense que le problème vient de là.
alors en effet c’est quand j’essaye de me connecter en http mais par contre lorsque je me connecte en HTTPS, j’ai l’erreur suivante (comme si le certificat ne fonctionnait pas alors qu’il est bien installé sur le syno et qu’on le voit bien sur le https:n8n…..synology.me:5443) :
This site can’t provide a secure connection
n8n.*****.synology.me sent an invalid response.
Try running Windows Network Diagnostics.
ERR_SSL_PROTOCOL_ERROR