Auto-hébergement de n8n sur Hetzner Cloud : tutoriel complet de configuration Docker
L’automatisation des flux de travail est devenue essentielle pour les entreprises modernes, mais les solutions SaaS peuvent devenir coûteuses à mesure que les équipes grandissent. Nous vous montrons comment configurer votre propre instance n8n sur Hetzner Cloud pour environ 6 €/mois plus le coût du nom de domaine (en octobre 2026), ce qui vous donne un nombre illimité de flux de travail et un contrôle total sur votre plateforme d’automatisation.
Ce que vous allez construire
À la fin de ce tutoriel, vous disposerez de :
- Une installation n8n entièrement fonctionnelle avec HTTPS
- Des certificats SSL automatiques via Let's Encrypt
- Une intégration de la messagerie pour les comptes utilisateurs
- Un démarrage automatique après les redémarrages du serveur
- Une base solide pour un usage professionnel, que vous pouvez sécuriser davantage pour la production
Coût mensuel : 5,99 € (serveur CX23, hors TVA, avec une adresse IPv4 principale incluse, en octobre 2026) + coût du nom de domaine
Prérequis
- Nom de domaine pointant vers l’IP de votre serveur
- Connaissances de base en ligne de commande
- Compte Hetzner Cloud
Étape 1 : configuration du serveur
Créer un serveur Hetzner Cloud
- Connectez-vous à la console Hetzner Cloud
- Créez un nouveau projet
- Ajoutez un serveur avec ces spécifications :
- Image : Ubuntu 24.04 LTS
- Type : CX23 (2 vCPU, 4 Go de RAM, 40 Go de disque) ; Hetzner a retiré le CX11 des nouvelles commandes en septembre 2024 et la disponibilité des offres à coût optimisé varie selon la localisation
- Localisation : choisissez la plus proche de vos utilisateurs
- Clé SSH : ajoutez votre clé publique
Configuration initiale du serveur
Connectez-vous à votre serveur :
ssh root@YOUR_SERVER_IP
Mettez à jour le système :
apt update && apt upgrade -y
Étape 2 : installer Docker
Installez Docker et Docker Compose :
# Install dependencies
apt install apt-transport-https ca-certificates curl software-properties-common gnupg -y
# Add Docker GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Add Docker repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install Docker
apt update
apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
# Create Docker network for our services
docker network create proxy
Vérifiez l’installation de Docker :
docker --version
docker compose version
Étape 3 : configurer le proxy inverse Traefik
Créez la structure de répertoires :
mkdir -p /opt/traefik/data
cd /opt/traefik
Créez le fichier de configuration Traefik :
nano /opt/traefik/data/traefik.yml
Ajoutez cette configuration :
api:
dashboard: false
entryPoints:
http:
address: ":80"
http:
redirections:
entryPoint:
to: https
scheme: https
https:
address: ":443"
providers:
docker:
endpoint: "unix:///var/run/docker.sock"
exposedByDefault: false
certificatesResolvers:
letsencrypt:
acme:
email: [email protected] # Change this!
storage: acme.json
httpChallenge:
entryPoint: http
Créez le fichier acme.json pour les certificats SSL :
touch /opt/traefik/data/acme.json
chmod 600 /opt/traefik/data/acme.json
Créez le fichier Docker Compose de Traefik :
nano /opt/traefik/docker-compose.yml
Ajoutez cette configuration :
version: '3'
services:
traefik:
image: traefik:v3.4
container_name: traefik
restart: always
ports:
- "80:80"
- "443:443"
networks:
- proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./data/traefik.yml:/etc/traefik/traefik.yml
- ./data/acme.json:/acme.json
labels:
- "traefik.enable=true"
networks:
proxy:
external: true
Étape 4 : configurer le relais SMTP (facultatif mais recommandé)
Créez le répertoire du serveur de messagerie :
mkdir -p /opt/mailserver
cd /opt/mailserver
Créez le fichier Docker Compose :
nano /opt/mailserver/docker-compose.yml
Ajoutez cette configuration :
version: '3'
services:
mailserver:
image: bytemark/smtp
restart: always
networks:
- proxy
environment:
- RELAY_HOST=smtp.gmail.com # Change to your SMTP provider
- RELAY_PORT=587
- [email protected] # Change this
- RELAY_PASSWORD=your-app-password # Change this
- MAILNAME=mail.yourdomain.com # Change this
networks:
proxy:
external: true
Remarque : n8n accède au relais via le réseau partagé proxy. Le relais ne publie donc aucun port. Les ports publiés par Docker contournent les règles UFW ; n’en ajoutez un que si un autre hôte doit envoyer des messages via le relais. MAILNAME définit le nom d’hôte de messagerie du relais. Pour Gmail, vous devrez :
- Activer l’authentification à deux facteurs
- Générer un mot de passe d’application
- Utiliser le mot de passe d’application (pas votre mot de passe habituel)
Étape 5 : configurer n8n
Créez le répertoire n8n. Le conteneur n8n s’exécute avec l’utilisateur node (UID 1000). Assurez-vous donc que cet utilisateur peut écrire dans le dossier data monté par bind mount, par exemple avec mkdir -p /opt/n8n/data && chown -R 1000:1000 /opt/n8n/data :
mkdir -p /opt/n8n
cd /opt/n8n
Créez le fichier Docker Compose :
nano /opt/n8n/docker-compose.yml
Ajoutez cette configuration :
version: '3'
services:
n8n:
image: n8nio/n8n:1.95.2
restart: always
environment:
- N8N_HOST=n8n.yourdomain.com # Change this!
- NODE_ENV=production
- N8N_PROTOCOL=https
- N8N_PORT=5678
- N8N_EDITOR_BASE_URL=https://n8n.yourdomain.com # Change this!
# Email configuration
- N8N_EMAIL_MODE=smtp
- N8N_SMTP_HOST=mailserver
- N8N_SMTP_PORT=25
- N8N_SMTP_SSL=false
- N8N_SMTP_USER=
- N8N_SMTP_PASS=
- [email protected] # Change this!
# Important fixes for proxy setup
- N8N_PROXY_HOPS=1
- N8N_RUNNERS_ENABLED=true
volumes:
- ./data:/home/node/.n8n
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.n8n.rule=Host(`n8n.yourdomain.com`)" # Change this!
- "traefik.http.routers.n8n.entrypoints=https"
- "traefik.http.routers.n8n.tls.certresolver=letsencrypt"
- "traefik.http.services.n8n.loadbalancer.server.port=5678"
networks:
proxy:
external: true
Étape 6 : créer les services Systemd pour le démarrage automatique
Service Traefik
nano /etc/systemd/system/traefik-docker.service
Ajoutez cette configuration :
[Unit]
Description=Traefik Docker Compose
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/traefik
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
[Install]
WantedBy=multi-user.target
Service du serveur de messagerie
nano /etc/systemd/system/mailserver-docker.service
Ajoutez cette configuration :
[Unit]
Description=Mailserver Docker Compose
Requires=docker.service
After=docker.service
Before=n8n-docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/mailserver
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
[Install]
WantedBy=multi-user.target
Service n8n
nano /etc/systemd/system/n8n-docker.service
Ajoutez cette configuration :
[Unit]
Description=n8n Docker Compose
Requires=docker.service
After=docker.service traefik-docker.service mailserver-docker.service
Wants=network-online.target
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/n8n
ExecStartPre=/bin/bash -c 'until docker container inspect traefik > /dev/null 2>&1; do sleep 2; done'
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
Restart=on-failure
RestartSec=30
TimeoutStartSec=180
[Install]
WantedBy=multi-user.target
Activer et démarrer les services
# Reload systemd daemon
systemctl daemon-reload
# Enable services to start on boot
systemctl enable traefik-docker.service
systemctl enable mailserver-docker.service
systemctl enable n8n-docker.service
# Start services
systemctl start traefik-docker.service
sleep 10
systemctl start mailserver-docker.service
sleep 10
systemctl start n8n-docker.service
Étape 7 : configuration DNS
Dirigez votre domaine vers votre serveur :
- Accédez à l’interface de votre bureau d’enregistrement de noms de domaine ou de votre fournisseur DNS
- Créez un enregistrement A :
- Nom : n8n
- Type : A
- Valeur : YOUR_SERVER_IP
- TTL : 300 (ou le minimum autorisé)
Attendez la propagation DNS (elle peut prendre jusqu’à 24 heures, mais elle est généralement bien plus rapide).
Étape 8 : tester votre installation
Vérifiez si les services fonctionnent :
docker ps
Vous devriez voir trois conteneurs en cours d’exécution : traefik, mailserver et n8n.
Visitez votre instance n8n :
https://n8n.yourdomain.com
Vous devriez voir la page de configuration n8n en HTTPS, avec un certificat indiqué comme valide par votre navigateur.
Résolution des problèmes courants
Le certificat SSL ne fonctionne pas
Vérifiez les journaux Traefik :
docker logs traefik
Causes courantes :
- Le DNS ne pointe pas vers le serveur
- Le pare-feu bloque les ports 80/443
- Mauvais domaine dans la configuration
n8n non accessible
Vérifiez les journaux n8n :
docker logs n8n-n8n-1
Corrections courantes :
- Vérifiez que la configuration du domaine correspond dans tous les fichiers
- Vérifiez que tous les conteneurs sont dans le même réseau
- Si les journaux affichent
ERR_ERL_UNEXPECTED_X_FORWARDED_FOR, vérifiez queN8N_PROXY_HOPS=1est défini comme dans la configuration ci-dessus ; n8n le documente pour un fonctionnement derrière un proxy inverse
La messagerie ne fonctionne pas
Vérifiez les journaux du serveur de messagerie :
docker logs mailserver-mailserver-1
Vérifiez les identifiants et paramètres SMTP.
Les services ne démarrent pas après un redémarrage
Vérifiez le statut des services :
systemctl status traefik-docker.service
systemctl status n8n-docker.service
Redémarrez si nécessaire :
systemctl restart traefik-docker.service
systemctl restart n8n-docker.service
Maintenance et mises à jour
Maintenance régulière
Vérifications hebdomadaires :
# Check container status
docker ps
# Check disk space
df -h
# Check logs for errors
docker logs n8n-n8n-1 | grep -i error
Mises à jour mensuelles :
# Update container images
cd /opt/n8n && docker compose pull && docker compose up -d
cd /opt/traefik && docker compose pull && docker compose up -d
cd /opt/mailserver && docker compose pull && docker compose up -d
# Clean up old images
docker system prune -f
Sauvegarder vos données
Créez un script de sauvegarde. La base SQLite utilisée par défaut est copiée pendant que n8n fonctionne. Arrêtez donc brièvement n8n ou lancez la sauvegarde pendant une période de faible activité pour éviter une copie incohérente, et testez une restauration avant de vous y fier :
nano /opt/backup-n8n.sh
Ajoutez ce contenu :
#!/bin/bash
mkdir -p /opt/backups
tar -czf /opt/backups/n8n-backup-$(date +%Y%m%d).tar.gz /opt/n8n/data
find /opt/backups -name "n8n-backup-*.tar.gz" -mtime +30 -delete
Rendez-le exécutable et planifiez son exécution avec cron :
chmod +x /opt/backup-n8n.sh
# Add to crontab (daily backup at 2 AM)
crontab -e
# Add this line:
0 2 * * * /opt/backup-n8n.sh
Renforcement de la sécurité
Configurer le pare-feu
# Install UFW
apt install ufw
# Set defaults
ufw default deny incoming
ufw default allow outgoing
# Allow SSH
ufw allow 22
# Allow HTTP/HTTPS
ufw allow 80
ufw allow 443
# Enable firewall
ufw enable
Sécuriser SSH
Modifiez la configuration SSH :
nano /etc/ssh/sshd_config
Effectuez ces changements :
PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes
Redémarrez SSH :
systemctl restart ssh
Configurer Fail2Ban
apt install fail2ban
# Copy default configuration
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# Enable and start
systemctl enable fail2ban
systemctl start fail2ban
Détail des coûts
Coûts mensuels :
- Serveur Hetzner CX23 : 5,99 € (hors TVA, avec une adresse IPv4 principale incluse, en octobre 2026)
- Domaine (annuel, variable) : ~10-15 €/an
- Total : ~7 €/mois
Comparaison avec n8n Cloud :
- n8n Starter : 20 €/mois avec facturation annuelle (2 500 exécutions, en octobre 2026)
- n8n Pro : 50 €/mois avec facturation annuelle (10 000 exécutions)
- Économies : environ 150–520 €/an
Faire évoluer votre configuration
Plusieurs instances n8n
Vous pouvez exécuter plusieurs instances n8n isolées pour différentes équipes :
Créez /opt/n8n-team2/docker-compose.yml :
version: '3'
services:
n8n-team2:
image: n8nio/n8n:1.95.2
restart: always
environment:
- N8N_HOST=team2.yourdomain.com
# ... rest of configuration
volumes:
- ./data:/home/node/.n8n
networks:
- proxy
labels:
- "traefik.enable=true"
- "traefik.http.routers.n8n-team2.rule=Host(`team2.yourdomain.com`)"
- "traefik.http.routers.n8n-team2.entrypoints=https"
- "traefik.http.routers.n8n-team2.tls.certresolver=letsencrypt"
- "traefik.http.services.n8n-team2.loadbalancer.server.port=5678"
networks:
proxy:
external: true
Augmenter les ressources du serveur
Si vous avez besoin de plus de puissance, mettez à niveau votre serveur Hetzner :
- CX33 : 4 vCPU, 8 Go de RAM (8,99 €/mois hors TVA, avec une adresse IPv4 principale incluse, en octobre 2026)
- CX43 : 8 vCPU, 16 Go de RAM (16,49 €/mois hors TVA, avec une adresse IPv4 principale incluse)
Conclusion
Vous disposez maintenant d’une installation n8n fonctionnelle qui coûte une fraction des solutions hébergées tout en vous donnant un contrôle total. La configuration inclut le HTTPS automatique, la messagerie et une gestion robuste des services.
Principaux avantages de cette approche :
- Rentable : économisez des centaines d’euros par an par rapport à n8n Cloud
- Contrôle total : aucun quota d’exécutions ; les limites dépendent des ressources de votre serveur et de la Sustainable Use License de n8n
- Confidentialité : les données des flux de travail et de leurs exécutions restent sur votre serveur, à l’exception de celles que vos flux envoient à des services externes
- Personnalisable : modifiez et étendez selon vos besoins
Nous avons utilisé cette configuration en production. Les exemples pour n8n et Traefik fixent les versions des images ; pour une mise à jour, augmentez ces tags dans chaque docker-compose.yml avant d’exécuter les commandes de mise à jour. Pour les usages critiques pour l’entreprise, testez la restauration de vos sauvegardes et ajoutez une supervision.
À propos de tva
tva assure la gestion complète de l’infrastructure des systèmes de bases de données, des environnements cloud et des chaînes d’approvisionnement mondiales. Notre approche méthodique combine des protocoles de sécurité rigoureux avec l’optimisation des performances, tandis que nos services de conseil stratégique permettent une coordination précise des capacités numériques et des actifs physiques – tout en maintenant les normes les plus élevées d’excellence opérationnelle et de conformité dans tous nos engagements.
Visitez tva.sg pour plus d’informations sur nos services.
Analyses connexes
Pour aller plus loin
Auto-hébergement de Windmill sur Ubuntu : tutoriel complet de configuration Docker avec résolution des problèmes PostgreSQL
Hetzner Cloud fin 2026 : offres et tarifs pour auto-héberger n8n, Windmill, Twenty et Ollama
Guide complet de dépannage de n8n auto-hébergé 2025 : résoudre les problèmes de taille des données d’exécution et de webhooks avec Traefik