J'ai installé ma première instance n8n sur un vieux Dell qui servait d'archives. Malheureusement, j'ai oublié de fermer le port 5678. Un jour, un client a reçu un email de n8n en japonais disant qu'un étranger essayait de se connecter à 3 h du matin. Depuis, ma première étape est toujours le firewall. Ce guide suit le processus propre que j'applique chez mes clients, en 30 minutes.
Ce qu'il vous faut
Un VPS chez OVHcloud ou Scaleway, tournant Debian 12 ou Ubuntu 22.04 :
- 2 vCPU
- 4 Go de RAM
- 20 Go de SSD
Comptez 30 € par mois maximum. Prenez l'option de backup natif du VPS : n8n ne remplace pas la sauvegarde de votre propre instance.
Étape 1 : installer Docker et Docker Compose
sudo apt update
sudo apt install -y docker.io docker-compose
sudo systemctl enable docker
sudo systemctl start docker
Étape 2 : le fichier docker-compose.yml
Le fichier que j'utilise en production. La ligne 15 est la différence entre une instance sécurisée et une instance publique.
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
restart: always
ports:
- "127.0.0.1:5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=votre_mot_de_passe_fort
- WEBHOOK_URL=https://n8n.votredomaine.fr/
volumes:
- ~/.n8n:/home/node/.n8n
Notez 127.0.0.1:5678:5678 : n8n n'est accessible que depuis la machine. C'est Nginx qui fait face au monde en HTTPS.
Étape 3 : sécuriser proprement
UFW d'abord. J'ouvre seulement trois ports, pas un de plus :
sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Nginx + Let's Encrypt ensuite :
sudo apt install -y nginx certbot python3-certbot-nginx
sudo certbot --nginx -d n8n.votredomaine.fr
Je génère ensuite un Nginx reverse proxy vers le port 5678 local. L'authentification basique d'Nginx en plus de celle de n8n n'est pas superflue : deux couches valent mieux qu'une quand le serveur est exposé.
Étape 4 : sauvegarder l'instance
Un backup quotidien de l'instance n8n. Le mien exporte les workflows et tar l'ensemble du dossier :
#!/bin/bash
docker exec n8n_n8n_1 n8n export:workflow --all --output=/backup/workflows.json
tar czf /backup/n8n-$(date +%Y%m%d).tar.gz ~/.n8n
Placez-le dans un cron à 3 h du matin. Et planifiez un test de restauration trimestriel : une instance n8n qui perd son historique de scénarios, c'est un client qui recommence de zéro.
Étape 5 : mettre à jour sans casser
La commande que je fais tourner une fois par mois :
cd /chemin/vers/n8n
docker-compose pull
docker-compose up -d
Vérifiez le changelog avant de monter une version majeure. n8n bouge vite. Une mise à jour mineure les navigateurs sans risque ; une majeure (comme n8n 3.0) peut casser des nœuds.
Ce que je vous déconseille franchement
Installer ça un vendredi soir sans vérifier le lendemain. Une instance n8n non surveillée casse en silence : un webhook expiré, un scénario qui tourne en boucle sur un volume de data, des erreurs dans les logs que personne ne lit. Le self-hosted est souverain, mais c'est votre responsabilité.
Si vous n'avez pas quelqu'un qui veut bien surveiller ça, n'installez pas n8n en autonome : demandez l'aide qu'il faut (notre offre n8n Entreprise fait exactement ça depuis Lille) ou le même service chez un prestataire qui teste régulièrement.

