tva
← Insights

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

  1. Connectez-vous à la console Hetzner Cloud
  2. Créez un nouveau projet
  3. 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 :

  1. Activer l'authentification à deux facteurs
  2. Générer un mot de passe d'application
  3. 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 :

  1. Accédez à votre registraire de domaine/fournisseur DNS
  2. 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.