Guide d'Installation de n8n sur Debian
Published on November 10, 2025 at 10:38 AM

Guide complet d'installation de n8n sur VPS Debian. Ce tutoriel détaillé couvre l'installation de Node.js, la configuration de n8n avec systemd, la mise en place d'un reverse proxy Nginx, la sécurisation avec SSL/TLS via Let's Encrypt, et l'utilisation de PostgreSQL pour la production. Inclut également la configuration de sauvegardes automatiques, l'optimisation des performances, la surveillance avec journalctl, et des mesures de sécurité avancées comme Fail2ban.
# Guide d'Installation de n8n sur VPS Debian
## Introduction
n8n est une plateforme d'automatisation de workflow open-source qui vous permet de connecter différents services et applications. Ce guide vous accompagne dans l'installation complète de n8n sur un VPS Debian avec une configuration sécurisée et professionnelle.
## Prérequis
Avant de commencer l'installation, assurez-vous que votre VPS dispose de :
- Debian 11 (Bullseye) ou Debian 12 (Bookworm)
- Au moins 2 Go de RAM (4 Go recommandés)
- 20 Go d'espace disque disponible
- Accès root ou sudo
- Un nom de domaine pointant vers votre VPS (recommandé pour HTTPS)
- Connexion Internet stable
## Étape 1 : Mise à Jour du Système
Connectez-vous à votre VPS via SSH et mettez à jour le système :
```bash
sudo apt update && sudo apt upgrade -y
```
Redémarrez le serveur si nécessaire :
```bash
sudo reboot
```
## Étape 2 : Installation de Node.js
n8n nécessite Node.js version 18.x ou supérieure.
### Installation via NodeSource
1. Installez les dépendances nécessaires :
```bash
sudo apt install -y curl wget gnupg2 ca-certificates lsb-release
```
2. Ajoutez le dépôt NodeSource pour Node.js 20.x :
```bash
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
```
3. Installez Node.js :
```bash
sudo apt install -y nodejs
```
4. Vérifiez l'installation :
```bash
node --version
npm --version
```
Vous devriez voir Node.js v20.x et npm 10.x ou supérieur.
## Étape 3 : Installation de n8n avec npm
### Installation globale
Installez n8n globalement avec npm :
```bash
sudo npm install -g n8n
```
### Vérification de l'installation
Vérifiez que n8n est installé correctement :
```bash
n8n --version
```
## Étape 4 : Configuration de l'Utilisateur Système
Pour des raisons de sécurité, créez un utilisateur dédié pour n8n :
```bash
sudo useradd -m -s /bin/bash n8n
```
Créez les répertoires nécessaires :
```bash
sudo mkdir -p /home/n8n/.n8n
sudo chown -R n8n:n8n /home/n8n
```
## Étape 5 : Configuration de n8n
Créez un fichier de configuration d'environnement :
```bash
sudo nano /home/n8n/.n8n/config
```
Ajoutez les variables d'environnement suivantes :
```bash
# Configuration de base
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=VotreMotDePasseSecurise
# Configuration du domaine
N8N_HOST=votre-domaine.com
N8N_PORT=5678
N8N_PROTOCOL=https
# Configuration de l'éditeur
N8N_EDITOR_BASE_URL=https://votre-domaine.com/
# Configuration Webhook
WEBHOOK_URL=https://votre-domaine.com/
# Fuseau horaire
GENERIC_TIMEZONE=Europe/Paris
# Chemin des données
N8N_USER_FOLDER=/home/n8n/.n8n
```
Ajustez les valeurs selon vos besoins. Pour un environnement de test local, vous pouvez utiliser :
```bash
N8N_HOST=0.0.0.0
N8N_PORT=5678
N8N_PROTOCOL=http
```
## Étape 6 : Création du Service Systemd
Créez un service systemd pour gérer n8n automatiquement :
```bash
sudo nano /etc/systemd/system/n8n.service
```
Ajoutez le contenu suivant :
```ini
[Unit]
Description=n8n - Workflow Automation
After=network.target
[Service]
Type=simple
User=n8n
EnvironmentFile=/home/n8n/.n8n/config
ExecStart=/usr/bin/n8n start
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
```
Rechargez systemd et activez le service :
```bash
sudo systemctl daemon-reload
sudo systemctl enable n8n
sudo systemctl start n8n
```
Vérifiez que le service fonctionne :
```bash
sudo systemctl status n8n
```
## Étape 7 : Installation et Configuration de Nginx
Nginx servira de reverse proxy pour n8n.
### Installation de Nginx
```bash
sudo apt install -y nginx
```
### Configuration du Virtual Host
Créez un fichier de configuration pour n8n :
```bash
sudo nano /etc/nginx/sites-available/n8n
```
Ajoutez la configuration suivante :
```nginx
server {
listen 80;
server_name votre-domaine.com;
location / {
proxy_pass http://localhost:5678;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
# Headers de sécurité
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;
# Timeouts pour les webhooks
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
}
}
```
Activez le site :
```bash
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
```
Testez la configuration :
```bash
sudo nginx -t
```
Rechargez Nginx :
```bash
sudo systemctl reload nginx
```
## Étape 8 : Installation de Certbot pour HTTPS
Sécurisez votre installation avec un certificat SSL gratuit de Let's Encrypt.
### Installation de Certbot
```bash
sudo apt install -y certbot python3-certbot-nginx
```
### Obtention du Certificat SSL
```bash
sudo certbot --nginx -d votre-domaine.com
```
Suivez les instructions à l'écran. Certbot configurera automatiquement Nginx pour utiliser HTTPS.
### Renouvellement Automatique
Testez le renouvellement automatique :
```bash
sudo certbot renew --dry-run
```
Le renouvellement automatique est configuré par défaut via un timer systemd.
## Étape 9 : Configuration du Pare-feu
Si vous utilisez UFW (Uncomplicated Firewall) :
```bash
sudo apt install -y ufw
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
```
Vérifiez le statut :
```bash
sudo ufw status
```
## Étape 10 : Accès à n8n
Vous pouvez maintenant accéder à n8n via votre navigateur :
```
https://votre-domaine.com
```
Connectez-vous avec les identifiants configurés dans le fichier de configuration (N8N_BASIC_AUTH_USER et N8N_BASIC_AUTH_PASSWORD).
## Étape 11 : Configuration Avancée
### Utilisation de PostgreSQL (Recommandé pour Production)
Par défaut, n8n utilise SQLite. Pour une meilleure performance en production, utilisez PostgreSQL.
1. Installez PostgreSQL :
```bash
sudo apt install -y postgresql postgresql-contrib
```
2. Créez une base de données et un utilisateur :
```bash
sudo -u postgres psql
```
Dans le shell PostgreSQL :
```sql
CREATE DATABASE n8n;
CREATE USER n8n_user WITH PASSWORD 'mot_de_passe_securise';
GRANT ALL PRIVILEGES ON DATABASE n8n TO n8n_user;
\q
```
3. Ajoutez la configuration de la base de données dans `/home/n8n/.n8n/config` :
```bash
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=localhost
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=n8n
DB_POSTGRESDB_USER=n8n_user
DB_POSTGRESDB_PASSWORD=mot_de_passe_securise
```
4. Redémarrez n8n :
```bash
sudo systemctl restart n8n
```
### Configuration de l'Encryption
Pour sécuriser les credentials stockés, définissez une clé d'encryption :
```bash
N8N_ENCRYPTION_KEY=$(openssl rand -base64 32)
echo "N8N_ENCRYPTION_KEY=$N8N_ENCRYPTION_KEY" | sudo tee -a /home/n8n/.n8n/config
```
### Configuration des Emails (SMTP)
Pour recevoir des notifications par email, ajoutez dans `/home/n8n/.n8n/config` :
```bash
N8N_EMAIL_MODE=smtp
N8N_SMTP_HOST=smtp.gmail.com
N8N_SMTP_PORT=587
[email protected]
N8N_SMTP_PASS=votre-mot-de-passe-app
[email protected]
N8N_SMTP_SSL=false
```
## Étape 12 : Sauvegarde et Restauration
### Sauvegarde Automatique
Créez un script de sauvegarde :
```bash
sudo nano /usr/local/bin/backup-n8n.sh
```
Ajoutez le contenu suivant :
```bash
#!/bin/bash
BACKUP_DIR="/backup/n8n"
DATE=$(date +%Y%m%d_%H%M%S)
N8N_DIR="/home/n8n/.n8n"
mkdir -p $BACKUP_DIR
# Sauvegarde des données n8n
tar -czf $BACKUP_DIR/n8n_backup_$DATE.tar.gz $N8N_DIR
# Si PostgreSQL est utilisé
if [ -n "$DB_POSTGRESDB_DATABASE" ]; then
sudo -u postgres pg_dump n8n > $BACKUP_DIR/n8n_db_$DATE.sql
gzip $BACKUP_DIR/n8n_db_$DATE.sql
fi
# Garder seulement les 7 dernières sauvegardes
find $BACKUP_DIR -name "n8n_backup_*.tar.gz" -mtime +7 -delete
find $BACKUP_DIR -name "n8n_db_*.sql.gz" -mtime +7 -delete
echo "Sauvegarde terminée: $DATE"
```
Rendez le script exécutable :
```bash
sudo chmod +x /usr/local/bin/backup-n8n.sh
```
Ajoutez une tâche cron pour une sauvegarde quotidienne :
```bash
sudo crontab -e
```
Ajoutez la ligne suivante (sauvegarde quotidienne à 2h du matin) :
```
0 2 * * * /usr/local/bin/backup-n8n.sh
```
### Restauration
Pour restaurer une sauvegarde :
```bash
sudo systemctl stop n8n
sudo tar -xzf /backup/n8n/n8n_backup_YYYYMMDD_HHMMSS.tar.gz -C /
sudo chown -R n8n:n8n /home/n8n/.n8n
# Si PostgreSQL
gunzip /backup/n8n/n8n_db_YYYYMMDD_HHMMSS.sql.gz
sudo -u postgres psql n8n < /backup/n8n/n8n_db_YYYYMMDD_HHMMSS.sql
sudo systemctl start n8n
```
## Étape 13 : Mise à Jour de n8n
Pour mettre à jour n8n vers la dernière version :
```bash
sudo systemctl stop n8n
sudo npm update -g n8n
sudo systemctl start n8n
```
Vérifiez la nouvelle version :
```bash
n8n --version
```
## Étape 14 : Surveillance et Logs
### Visualiser les logs en temps réel
```bash
sudo journalctl -u n8n -f
```
### Voir les logs récents
```bash
sudo journalctl -u n8n -n 100 --no-pager
```
### Logs spécifiques par date
```bash
sudo journalctl -u n8n --since "2024-01-01" --until "2024-01-02"
```
## Dépannage
### n8n ne démarre pas
Vérifiez les logs :
```bash
sudo journalctl -u n8n -n 50
```
Vérifiez que le port n'est pas déjà utilisé :
```bash
sudo netstat -tulpn | grep 5678
```
### Problèmes de connexion
Vérifiez que Nginx fonctionne :
```bash
sudo systemctl status nginx
```
Testez la configuration Nginx :
```bash
sudo nginx -t
```
### Erreurs de permissions
Vérifiez les permissions du répertoire n8n :
```bash
sudo chown -R n8n:n8n /home/n8n/.n8n
```
### Problèmes de mémoire
Si n8n manque de mémoire, ajoutez cette ligne dans `/etc/systemd/system/n8n.service` :
```ini
Environment="NODE_OPTIONS=--max-old-space-size=2048"
```
Puis rechargez :
```bash
sudo systemctl daemon-reload
sudo systemctl restart n8n
```
## Commandes Utiles
### Gérer le service n8n
```bash
# Démarrer n8n
sudo systemctl start n8n
# Arrêter n8n
sudo systemctl stop n8n
# Redémarrer n8n
sudo systemctl restart n8n
# Voir le statut
sudo systemctl status n8n
# Activer au démarrage
sudo systemctl enable n8n
# Désactiver au démarrage
sudo systemctl disable n8n
```
### Gérer Nginx
```bash
# Redémarrer Nginx
sudo systemctl restart nginx
# Recharger la configuration
sudo systemctl reload nginx
# Tester la configuration
sudo nginx -t
```
## Sécurité Supplémentaire
### Fail2ban pour n8n
Installez Fail2ban pour protéger contre les tentatives de connexion :
```bash
sudo apt install -y fail2ban
```
Créez un filtre pour n8n :
```bash
sudo nano /etc/fail2ban/filter.d/n8n.conf
```
Ajoutez :
```ini
[Definition]
failregex = ^ .* "POST .*" 401
ignoreregex =
```
Créez une jail :
```bash
sudo nano /etc/fail2ban/jail.d/n8n.conf
```
Ajoutez :
```ini
[n8n]
enabled = true
port = http,https
filter = n8n
logpath = /var/log/nginx/access.log
maxretry = 5
bantime = 3600
```
Redémarrez Fail2ban :
```bash
sudo systemctl restart fail2ban
```
### Limitation des connexions avec Nginx
Ajoutez dans votre configuration Nginx :
```nginx
limit_req_zone $binary_remote_addr zone=n8n_limit:10m rate=10r/s;
server {
# ... configuration existante ...
location / {
limit_req zone=n8n_limit burst=20;
# ... reste de la configuration ...
}
}
```
## Optimisation des Performances
### Augmenter les limites de fichiers
Ajoutez dans `/etc/systemd/system/n8n.service` :
```ini
LimitNOFILE=65536
```
### Configuration Node.js optimisée
Ajoutez dans `/home/n8n/.n8n/config` :
```bash
N8N_CONCURRENCY_PRODUCTION_LIMIT=10
EXECUTIONS_DATA_PRUNE=true
EXECUTIONS_DATA_MAX_AGE=168
```
## Ressources Supplémentaires
- Documentation officielle n8n : https://docs.n8n.io/
- Forum communautaire : https://community.n8n.io/
- GitHub n8n : https://github.com/n8n-io/n8n
- Templates de workflows : https://n8n.io/workflows/
## Conclusion
Votre instance n8n est maintenant installée et configurée de manière sécurisée sur votre VPS Debian. N'oubliez pas de :
- Faire des sauvegardes régulières
- Maintenir le système à jour
- Surveiller les logs
- Adapter les paramètres selon vos besoins
Bon automatisation !














