Tous les services opérationnels Devise EUR Aucun frais de mise en service Vous êtes à La Réunion ?
‹ Serveurs VPS et Docker

Installer n8n avec Docker Compose sur un serveur

Pour installer n8n sur votre serveur, la méthode recommandée par n8n est Docker Compose : un conteneur n8n, un proxy Traefik qui obtient le certificat HTTPS, et un fichier .env qui porte votre domaine. En dix minutes, n8n répond sur https://n8n.votre-domaine.fr, avec des webhooks joignables depuis Internet et des données gardées dans un volume Docker.

Par Jonathan Dewaele · publié le

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 avec docker --version et docker 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

  1. Créer le dossier et celui des fichiers partagés : mkdir -p ~/n8n-compose/local-files && cd ~/n8n-compose.
  2. Écrire le fichier `.env` :
DOMAIN_NAME=votre-domaine.fr
SUBDOMAIN=n8n
GENERIC_TIMEZONE=Europe/Paris
[email protected]
  1. É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.

  1. Démarrer : docker compose up -d. Traefik obtient le certificat au premier appel du domaine.
  2. 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_HOST et N8N_PROTOCOL disent à n8n sous quelle adresse il est servi. Fausses, les liens de l'interface et les redirections de connexion OAuth se cassent.
  • N8N_WEBHOOK_URL est 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'appelait WEBHOOK_URL.
  • GENERIC_TIMEZONE rè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

  1. Sauvegarder le volume n8n_data.
  2. Lire les notes de version de n8n, qui signalent les changements incompatibles.
  3. docker compose pull puis docker 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