Comment installer n8n sur mon VPS ?
Déployer n8n avec Docker Compose, stockage persistant et variables adaptées au domaine. La solution n8n préconfigurée est disponible sans supplément.
La solution n8n préconfigurée est disponible sans supplément. Sélectionnez-la dans la commande pour automatiser l’installation, ou utilisez ce guide pour une configuration manuelle sous Debian.
Procédure étape par étape
-
Choisir le mode de déploiement
Sélectionnez n8n préconfiguré pour une installation automatique, ou choisissez un VPS Linux avec assez de RAM pour une installation manuelle.
-
Installer Docker
Suivez le guide Docker et vérifiez docker compose version.
-
Créer le projet
Créez /opt/n8n, ajoutez le fichier Compose puis remplacez le domaine et le fuseau horaire.
-
Démarrer
Lancez docker compose up -d et contrôlez les logs avec docker compose logs -f n8n.
-
Ajouter HTTPS
Placez Caddy ou Nginx devant le port 5678 et n’exposez pas directement l’interface n8n en HTTP public.
compose.yaml
services:
n8n:
image: docker.n8n.io/n8nio/n8n:latest
restart: unless-stopped
ports:
- "127.0.0.1:5678:5678"
environment:
- N8N_HOST=n8n.example.com
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.example.com/
- GENERIC_TIMEZONE=Europe/Paris
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
Mettre à jour n8n
cd /opt/n8n
docker compose pull
docker compose up -d
docker image prune -f
Avant de commencer
n8n range ses workflows, ses identifiants chiffrés et sa clé de chiffrement dans /home/node/.n8n, monté ici sur le volume n8n_data. Sans ce volume, tout disparaît à la recréation du conteneur.
- Un VPS Linux avec au moins 2 Go de RAM, le minimum demandé par l’application n8n préconfigurée.
- Un domaine dont vous gérez le DNS, avec un enregistrement A vers l’IPv4 du VPS, pour obtenir HTTPS.
- Le port publié sur 127.0.0.1:5678 uniquement, comme dans le fichier Compose : seul le proxy inverse y accède.
L’installation préconfigurée en détail
L’application n8n préconfigurée part d’une Debian 12. Elle demande l’e-mail et le mot de passe du propriétaire n8n (8 caractères minimum), un domaine optionnel, le port (5678 par défaut) et le fuseau horaire (Europe/Paris par défaut). Si vous laissez le domaine vide, un sous-domaine gratuit en aclclouds.online est créé avec HTTPS automatique.
Le script installe Docker, lance un conteneur nommé n8n sur le volume n8n_data et configure Caddy dans /etc/caddy/Caddyfile. Le compte propriétaire est déjà créé : connectez-vous avec l’e-mail et le mot de passe saisis. Sur un VPS existant, cette application se choisit dans « Réinstallations », option « Application préconfigurée », ce qui efface le disque.
Vérifier que tout fonctionne
docker compose ps doit montrer le service n8n avec un statut Up, et curl -s http://127.0.0.1:5678/healthz doit répondre {"status":"ok"}. Dans les logs, la ligne Editor is now accessible via: confirme que l’éditeur est prêt.
Questions fréquentes
Pourquoi n8n affiche EACCES: permission denied, open '/home/node/.n8n/config' ?
Vous avez monté un dossier du VPS à la place du volume nommé, et ce dossier appartient à root. n8n tourne avec l’utilisateur node (UID 1000). Donnez-lui le dossier avec chown -R 1000:1000 /opt/n8n/data, ou revenez au volume n8n_data.
Que faire si le conteneur redémarre en boucle avec Exit code 137 ?
Le système a arrêté n8n faute de mémoire. Vérifiez avec free -h et dmesg | grep -i oom. Limitez les exécutions lourdes lancées en parallèle, arrêtez les autres conteneurs inutiles ou passez à une offre avec plus de RAM.
Pourquoi la connexion échoue avec un message sur le cookie sécurisé ?
n8n envoie par défaut un cookie réservé à HTTPS. Si vous ouvrez une adresse http:// dans le navigateur, n8n affiche Your n8n server is configured to use a secure cookie et refuse la connexion. Terminez la configuration HTTPS puis ouvrez le domaine avec https:// dans le navigateur. Réservez N8N_SECURE_COOKIE=false à un test local.
Comment changer le domaine plus tard ?
Créez l’enregistrement A du nouveau domaine, modifiez N8N_HOST et WEBHOOK_URL dans compose.yaml, puis le nom dans le Caddyfile. Appliquez avec docker compose up -d et systemctl reload caddy. Les applications externes doivent ensuite utiliser les nouvelles URL de webhook.