Ce guide vaut pour Ubuntu 26.04 et Debian 13 avec Docker Engine et Compose. Il suit la documentation officielle, relue le 14 octobre 2026 : Docker Compose, et le dépôt n8n-hosting.
Avant de commencer
- Un serveur Linux avec Docker et
docker compose(vérifiez avecdocker --versionetdocker compose version). - Un sous-domaine, par exemple
n8n.votre-domaine.fr, dont l'enregistrement A pointe vers l'adresse IP du serveur. - Les ports 80 et 443 joignables depuis Internet, pour le certificat et pour les webhooks.
Installer n8n
- Créer le dossier et celui des fichiers partagés :
mkdir -p ~/n8n-compose/local-files && cd ~/n8n-compose. - Écrire le fichier `.env` :
DOMAIN_NAME=votre-domaine.fr
SUBDOMAIN=n8n
GENERIC_TIMEZONE=Europe/Paris
[email protected]
- Écrire `compose.yaml` :
services:
traefik:
image: traefik
restart: always
command:
- "--api.insecure=false"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.mytlschallenge.acme.tlschallenge=true"
- "--certificatesresolvers.mytlschallenge.acme.email=${SSL_EMAIL}"
- "--certificatesresolvers.mytlschallenge.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- traefik_data:/letsencrypt
- /var/run/docker.sock:/var/run/docker.sock:ro
n8n:
image: n8nio/n8n
restart: always
ports:
- "127.0.0.1:5678:5678"
labels:
- traefik.enable=true
- traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`)
- traefik.http.routers.n8n.tls=true
- traefik.http.routers.n8n.entrypoints=web,websecure
- traefik.http.routers.n8n.tls.certresolver=mytlschallenge
environment:
- N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
- N8N_PORT=5678
- N8N_PROTOCOL=https
- NODE_ENV=production
- N8N_WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- TZ=${GENERIC_TIMEZONE}
- N8N_RESTRICT_FILE_ACCESS_TO=/files
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
volumes:
- n8n_data:/home/node/.n8n
- ./local-files:/files
volumes:
n8n_data:
traefik_data:
Un seul écart avec l'exemple officiel : --api.insecure y vaut true, ce qui active le tableau de bord de Traefik, inutile ici. Les étiquettes d'en-têtes de sécurité (HSTS) de la documentation peuvent s'ajouter telles quelles.
- Démarrer :
docker compose up -d. Traefik obtient le certificat au premier appel du domaine. - Créer le compte propriétaire en ouvrant
https://n8n.votre-domaine.fr: la première personne qui ouvre la page crée le compte, ouvrez-la sans attendre.
Le port 5678 n'est publié que sur l'adresse locale du serveur : n8n n'est joignable depuis Internet qu'à travers Traefik, en HTTPS.
Les variables qui comptent
N8N_HOSTetN8N_PROTOCOLdisent à n8n sous quelle adresse il est servi. Fausses, les liens de l'interface et les redirections de connexion OAuth se cassent.N8N_WEBHOOK_URLest l'adresse publique des webhooks, celle qu'appelleront les services extérieurs. La documentation précise que ce nom vaut à partir de n8n 2.30.0 ; avant, la variable s'appelaitWEBHOOK_URL.GENERIC_TIMEZONErègle l'heure des déclencheurs planifiés. Sans elle, un déclencheur « tous les jours à 8 h » part à l'heure de New York.
Sauvegarder
Le volume n8n_data contient la base SQLite, vos flux et surtout la clé de chiffrement des identifiants enregistrés. Sans cette clé, une sauvegarde de la base ne permet pas de relire vos identifiants : sauvegardez le volume entier. Exportez aussi vos flux de temps en temps depuis l'interface, en fichiers JSON, pour pouvoir les réimporter ailleurs.
Mettre à jour
- Sauvegarder le volume
n8n_data. - Lire les notes de version de n8n, qui signalent les changements incompatibles.
docker compose pullpuisdocker compose up -d.
Sur un VPS Hubspace
Docker et Compose sont installés à la livraison, utilisables sans sudo par le compte admin : la commande sudo docker compose up -d de la documentation marche aussi sans sudo. Le pare-feu réseau ouvre 80 et 443, ceux dont Traefik a besoin ; 5678 reste fermé depuis Internet, ce qui est voulu. Les ports 25 et 465 sortants sont bloqués contre le spam : pour envoyer des courriels depuis vos flux, passez par un service d'envoi. Si vous utilisez déjà Nginx Proxy Manager sur le serveur, gardez-le comme seul proxy et retirez Traefik du fichier. Les serveurs VPS détaillent ce qui est livré.
Questions fréquentes
Quelle taille de serveur pour n8n ?
Pour quelques flux par jour, un petit serveur suffit. La mémoire devient la limite quand les flux traitent de gros volumes de données ou quand plusieurs s'exécutent en même temps.
Peut-on utiliser PostgreSQL plutôt que SQLite ?
Oui. n8n accepte PostgreSQL, conseillé quand le volume d'exécutions grandit. Le dépôt n8n-hosting donne un exemple de fichier Compose avec PostgreSQL.
Les webhooks ne se déclenchent pas, que vérifier ?
Que N8N_WEBHOOK_URL porte bien l'adresse publique en HTTPS, que le flux est activé (un webhook de test ne répond que pendant l'écoute dans l'éditeur), et que le domaine répond depuis l'extérieur.
Articles liés
- Vaultwarden : installer et sécuriser avec DockerInstaller Vaultwarden avec Docker Compose sur un serveur Linux, derrière Caddy en HTTPS, fermer les inscriptions et protéger la page d'administration.
- Nextcloud Docker : installer Nextcloud sur un VPSInstaller Nextcloud avec Docker sur un VPS grâce à l'image officielle All-in-One, ouvrir son interface sans l'exposer et le servir sur votre domaine en HTTPS.
- Coolify : installer et configurer sur un VPSInstaller Coolify sur un VPS Ubuntu ou Debian, ouvrir son tableau de bord sans l'exposer, puis le servir sur votre domaine en HTTPS : la marche à suivre.