n8n est un moteur d'orchestration d'automatisations visuelles, alternative open source à Zapier ou Make. Chaque automatisation est un workflow composé de nodes qui s'enchaînent : déclencheur (webhook, cron, événement), transformations, appels HTTP, logique conditionnelle, sortie vers un autre service. Plus de 400 intégrations natives, du CRM au LLM en passant par les bases de données.
Pourquoi l'héberger chez Datacampus
- Souveraineté. Vos workflows manipulent souvent des données sensibles (CRM, facturation, API internes). Chez nous, tout reste en France, sur des serveurs que nous opérons directement.
- Pas de plafond d'exécutions. n8n Cloud facture au nombre d'exécutions de workflows. En self-hosted, la seule limite est celle de votre VPS.
- Coût fixe. Vous payez la machine, pas chaque run. Idéal quand un workflow tourne des milliers de fois par jour.
- Intégration à l'écosystème Datacampus. Nextcloud, Mailcow, Matomo, Keycloak, bases vectorielles, serveurs MCP : tout ce qu'on héberge peut devenir un node dans n8n, sans passer par Internet.
La suite de ce guide concerne le cas self-hosted : un VPS chez nous, où vous gardez la main sur l'installation.
Installation via Docker Compose
C'est la méthode recommandée par l'éditeur. Isolation propre, mise à jour triviale, persistance via volumes. On utilise PostgreSQL (pas SQLite) dès qu'on vise la production : concurrence d'écriture, robustesse, backups standard.
services:
postgres:
image: postgres:16
restart: unless-stopped
environment:
POSTGRES_USER: n8n
POSTGRES_PASSWORD: 'motDePasseFort'
POSTGRES_DB: n8n
volumes:
- ./pgdata:/var/lib/postgresql/data
n8n:
image: n8nio/n8n:latest
restart: unless-stopped
depends_on:
- postgres
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_DATABASE: n8n
DB_POSTGRESDB_USER: n8n
DB_POSTGRESDB_PASSWORD: 'motDePasseFort'
N8N_HOST: n8n.votredomaine.fr
N8N_PORT: 5678
N8N_PROTOCOL: https
WEBHOOK_URL: https://n8n.votredomaine.fr/
GENERIC_TIMEZONE: Europe/Paris
N8N_ENCRYPTION_KEY: 'cléAléatoireLongue64Caractères'
ports:
- "127.0.0.1:5678:5678"
volumes:
- ./n8n_data:/home/node/.n8n
Quelques points à retenir :
- Le port
5678est publié uniquement sur la loopback. Le reverse proxy système s'occupera de l'exposition. - Le volume
/home/node/.n8n/stocke la config locale et, le cas échéant, la base SQLite par défaut. On le persiste quand même, certains fichiers internes y vivent. WEBHOOK_URLdoit pointer sur l'URL publique finale, sinon les webhooks renvoient les mauvaises adresses aux services tiers.
Reverse proxy : Apache ou Nginx
n8n utilise WebSocket pour la communication temps réel entre l'éditeur et le moteur. Le reverse proxy doit donc gérer l'upgrade Connection: upgrade, sinon l'interface se fige.
Apache
<VirtualHost *:443>
ServerName n8n.votredomaine.fr
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/n8n.votredomaine.fr/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/n8n.votredomaine.fr/privkey.pem
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:5678/
ProxyPassReverse / http://127.0.0.1:5678/
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://127.0.0.1:5678/$1 [P,L]
</VirtualHost>
Modules requis : proxy, proxy_http, proxy_wstunnel, rewrite, ssl.
Nginx
server {
listen 443 ssl http2;
server_name n8n.votredomaine.fr;
ssl_certificate /etc/letsencrypt/live/n8n.votredomaine.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/n8n.votredomaine.fr/privkey.pem;
location / {
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 3600s;
}
}
TLS via Let's Encrypt : soit l'intégration Plesk (voir doc dédiée), soit certbot en manuel avec renouvellement automatique dans cron.
Sécuriser l'interface
L'éditeur n8n permet d'écrire et d'exécuter du code arbitraire (nodes Function, HTTP Request). Exposer l'interface sans authentification, c'est ouvrir un shell au premier visiteur. Plusieurs niveaux de protection, à empiler.
Auth basique intégrée
N8N_BASIC_AUTH_ACTIVE: "true"
N8N_BASIC_AUTH_USER: "admin"
N8N_BASIC_AUTH_PASSWORD: "motDePasseLongEtUnique"
Acceptable pour un usage personnel ou une petite équipe. Pour du multi-utilisateurs sérieux, passez à n8n avec User Management (inclus dans les versions récentes) ou SSO.
SSO via Keycloak
n8n supporte SAML et OAuth2. Keycloak, que nous hébergeons aussi, fait très bien le travail : un seul annuaire pour n8n, Nextcloud, GitLab et le reste. Intéressant dès qu'on dépasse trois utilisateurs.
Whitelist IP pour la partie admin
Limitez l'accès à l'éditeur depuis les IPs de votre équipe (VPN, bureau) via le reverse proxy ou un .htaccess :
<Location />
Require ip 82.65.12.34
Require ip 10.8.0.0/24
</Location>
Webhooks publics
Un workflow déclenché par webhook expose une URL publique du type https://n8n.votredomaine.fr/webhook/xxxx. Si vous avez whitelisté l'admin par IP, il faut exclure le chemin /webhook/ et /webhook-test/ de cette restriction, sinon vos services tiers ne pourront plus appeler n8n.
<Location /webhook/>
Require all granted
</Location>
<Location /webhook-test/>
Require all granted
</Location>
Pensez à authentifier les webhooks côté workflow (signature HMAC, token d'en-tête, IP source) pour ne pas accepter n'importe quelle requête.
Bases vectorielles, LLM et MCP
n8n dispose de nodes natifs pour Qdrant, pgvector, Ollama, OpenAI, Anthropic, Mistral, plus un node HTTP générique qui parle à n'importe quel endpoint. Chez Datacampus, vous pouvez câbler n8n à :
- Un serveur GPU AMD (Ryzen AI Max+ 395, 128 Go mémoire unifiée) pour faire tourner du Llama 3 70B, Mixtral ou Qwen en local via Ollama ou vLLM.
- Une base Qdrant ou pgvector hébergée à côté, sur le même réseau privé, pour du RAG.
- Des serveurs MCP sur mesure que nous construisons et opérons pour exposer vos systèmes internes à un agent IA.
L'écosystème AI de n8n est l'une des raisons pour lesquelles beaucoup de nos clients le choisissent plutôt qu'un équivalent historique.
Backup
Trois choses à sauvegarder. Oublier la troisième est la plus douloureuse.
Base PostgreSQL
# Dump quotidien, rotation 30 jours
docker compose exec -T postgres pg_dump -U n8n n8n | \
gzip > /backup/n8n-$(date +%F).sql.gz
find /backup -name 'n8n-*.sql.gz' -mtime +30 -delete
Export des workflows en JSON
docker compose exec n8n n8n export:workflow --all --output=/home/node/.n8n/export/
docker compose exec n8n n8n export:credentials --all --output=/home/node/.n8n/export/
Lisible, diff-able, versionnable dans Git. Très pratique pour auditer les changements entre deux dates.
Clé de chiffrement
Les credentials stockés en base sont chiffrés avec N8N_ENCRYPTION_KEY. Cette clé est générée automatiquement au premier démarrage si vous ne la fixez pas. Fixez-la explicitement dans votre Compose, et sauvegardez-la séparément.
Monitoring
n8n expose un endpoint /healthz qui renvoie 200 OK quand tout va bien. À utiliser dans votre supervision (Prometheus blackbox, Uptime Kuma, status page) pour détecter un crash ou un hang.
curl -sf https://n8n.votredomaine.fr/healthz || echo "KO"
Côté PostgreSQL, surveillez la taille des tables execution_entity et execution_data : elles gonflent vite si vous ne purgez pas l'historique. Variables utiles : EXECUTIONS_DATA_PRUNE=true, EXECUTIONS_DATA_MAX_AGE=168 (en heures).
Mise à jour
Pour un patch mineur, c'est trois lignes :
docker compose pull
docker compose up -d
docker image prune -f
Pour une montée de version majeure, ouvrez le changelog GitHub avant d'appuyer sur le bouton. Certaines versions modifient des nodes, déprécient des options ou changent le format d'un champ. Faites un dump Postgres juste avant, comme ça vous pouvez revenir en arrière si un workflow critique casse.
git checkout. C'est l'une des pratiques qui distinguent une équipe qui dort bien des autres.
Cas d'usage fréquents chez nos clients
- Synchronisation CRM / outil compta. Nouveau deal gagné dans Pipedrive, facture créée dans Dolibarr, notification Teams à l'équipe.
- Génération de rapports PDF. Requête SQL, mise en forme, envoi par email chaque lundi à 7 h.
- Orchestration d'appels LLM. Réception d'un email, classification via Claude ou un modèle local Ollama, routage vers le bon service.
- Notifications. Alertes Slack ou Teams sur événements métier, erreurs applicatives, seuils dépassés.
- ETL léger. Extraction d'une API SaaS, transformation, injection dans une base interne ou un data warehouse.
n8n n'a pas vocation à remplacer un vrai outil d'intégration d'entreprise pour des volumes énormes, mais pour tout ce qui ressemble à « je voudrais qu'un truc déclenche un autre truc », il est imbattable en rapport puissance/effort.