Auto-hébergement de n8n sur Hetzner Cloud : tutoriel complet de configuration Docker
L'automatisation des workflows 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 moins de 5 €/mois, vous offrant des workflows illimités 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
- Certificats SSL automatiques via Let's Encrypt
- Intégration email pour les comptes utilisateurs
- Démarrage automatique après les redémarrages du serveur
- Configuration prête pour la production pour un usage professionnel
Coût mensuel : 4,51 € (serveur CX11) + coûts 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 : CX11 (1 vCPU, 4 Go de RAM, 20 Go de disque)
- 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: your-email@example.com # 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:latest
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 (optionnel 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
- RELAY_USERNAME=your-email@gmail.com # Change this
- RELAY_PASSWORD=your-app-password # Change this
- MAIL_DOMAIN=yourdomain.com # Change this
ports:
- "25:25"
networks:
proxy:
external: true
Remarque : 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 :
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:latest
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=
- N8N_SMTP_SENDER=noreply@yourdomain.com # Change this!
# Important fixes for proxy setup
- N8N_TRUST_PROXY_HEADER=true
- 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 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 à votre registraire de domaine/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 (peut prendre jusqu'à 24 heures, généralement beaucoup 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 avec une icône de cadenas vert (HTTPS fonctionnel).
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
L'email 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 :
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 ajoutez-le au 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écomposition des coûts
Coûts mensuels :
- Serveur Hetzner CX11 : 4,51 €
- Domaine (annuel, variable) : ~10-15 €/an
- Total : ~5-6 €/mois
Comparaison avec n8n Cloud :
- n8n Starter : 20 $/mois
- n8n Pro : 50 $/mois
- Économies : 180-540 $/an
Évolutivité de 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:latest
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 :
- CX21 : 2 vCPU, 8 Go de RAM (8,46 €/mois)
- CX31 : 2 vCPU, 16 Go de RAM (16,07 €/mois)
Conclusion
Vous disposez maintenant d'une installation n8n prête pour la production 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 fonctionnalité email et une gestion robuste des services.
Principaux avantages de cette approche :
- Rentable : économisez des centaines de dollars par an
- Contrôle total : aucune limite d'utilisation ou restriction
- Confidentialité : vos données restent sur votre infrastructure
- Personnalisable : modifiez et étendez selon vos besoins
Cette configuration a été testée dans des environnements de production et offre une fiabilité de niveau entreprise à une fraction du coût.
À 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 – maintenant les plus hauts standards d'excellence opérationnelle et de conformité dans tous nos engagements.
Visitez tva.sg pour plus d'informations sur nos services.