Déployer n8n sur Proxmox LXC — le guide de production
MASIA Antoine
Développeur Full-Stack, DevOps & CyberSécurité
Déployer n8n sur Proxmox LXC — le guide de production
Installation, réseau cassé, systemd mal configuré, SQLite qui gonfle : voici tout ce qu'on apprend en production que les docs officielles ne disent pas.
Le script community Proxmox installe n8n en deux minutes. Mais en production, trois problèmes reviennent systématiquement : le conteneur LXC perd le réseau au redémarrage, les webhooks ne pointent pas au bon endroit, et SQLite grossit sans fin jusqu'à saturer le disque. Ce guide couvre les corrections une fois pour toutes.
01 — Installation via VE-Helper
Pour cette installation, j'utilise un script provenant d'un site communautaire que je vous présenterai dans un prochain article — il regroupe des dizaines de scripts Proxmox prêts à l'emploi et ça mérite vraiment un tour complet. En attendant, retenez juste qu'il s'agit de VE-Helper, et que la commande est la suivante :
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/n8n.sh)"
Le script provisionne automatiquement : le binaire n8n, un service systemd, une base SQLite et le conteneur LXC Proxmox. Ça tourne. Jusqu'au premier redémarrage.
02 — Le conteneur n'a plus Internet après redémarrage
Le symptôme est immédiat au boot :
ping: connect: Network is unreachable
ENETUNREACH
La cause : le conteneur LXC n'a pas de route par défaut configurée de façon permanente. La gateway est absente.
Vérifier
ip route
Si vous ne voyez pas default via 192.168.1.254 dans la sortie, c'est confirmé.
Correctif temporaire (jusqu'au prochain reboot)
ip route add default via 192.168.1.254 dev eth0
⚠️ Cette commande ne survit pas au redémarrage du conteneur. Elle sert uniquement à rétablir la connexion immédiatement, le temps d'appliquer la correction permanente.
Correctif permanent
nano /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.1.202/24
gateway 192.168.1.254
iface eth0 inet6 auto
systemctl restart networking
03 — Configuration systemd : domaine et webhooks
Par défaut, n8n ne connaît pas son propre domaine public. Les webhooks échouent silencieusement. La solution passe par un fichier d'override systemd :
mkdir -p /etc/systemd/system/n8n.service.d
nano /etc/systemd/system/n8n.service.d/override.conf
[Service]
# Domaine public
Environment="N8N_HOST=n8n.domaine.fr"
Environment="N8N_PROTOCOL=https"
Environment="WEBHOOK_URL=https://n8n.domaine.fr/"
# Rétention des exécutions
Environment="EXECUTIONS_DATA_SAVE_ON_SUCCESS=none"
Environment="EXECUTIONS_DATA_SAVE_ON_ERROR=all"
Environment="EXECUTIONS_DATA_PRUNE=true"
Environment="EXECUTIONS_DATA_MAX_AGE=168"
Environment="EXECUTIONS_DATA_PRUNE_MAX_COUNT=5000"
ℹ️ Le
WEBHOOK_URLdoit impérativement se terminer par/et correspondre exactement au domaine exposé par votre reverse proxy (Nginx, Caddy, Traefik).
Appliquer la configuration :
systemctl daemon-reload
systemctl restart n8n
journalctl -u n8n -f
04 — SQLite : empêcher la saturation disque
Le comportement par défaut de n8n : stocker toutes les exécutions, pour toujours. En production, le fichier SQLite peut atteindre plusieurs gigaoctets en quelques semaines.
Les variables de l'override ci-dessus gèrent déjà ça, mais voici pourquoi chaque ligne compte :
| Variable | Valeur | Effet |
|---|---|---|
SAVE_ON_SUCCESS |
none |
Pas de stockage si succès — gain d'espace majeur |
SAVE_ON_ERROR |
all |
Conserve les erreurs pour debug |
PRUNE |
true |
Active le nettoyage automatique |
MAX_AGE |
168 |
Supprime après 7 jours (168h) |
PRUNE_MAX_COUNT |
5000 |
Plafonne le nombre d'entrées |
SQLite ou PostgreSQL ?
| Situation | SQLite | PostgreSQL |
|---|---|---|
| Développement / test | ✅ Parfait | — |
| Production légère | ✅ Suffisant | — |
| Production intensive | ❌ Déconseillé | ✅ Recommandé |
| Haute disponibilité | ❌ Non supporté | ✅ Natif |
05 — Checklist avant de passer en production
- Route réseau permanente dans
/etc/network/interfaces - Override systemd en place avec domaine, protocole et webhooks
-
EXECUTIONS_DATA_SAVE_ON_SUCCESS=noneactivé - Pruning automatique activé (
EXECUTIONS_DATA_PRUNE=true) - Disque > 30 Go alloué au conteneur LXC
- Reverse proxy configuré avec certificat TLS valide
- Snapshots Proxmox planifiés sur le conteneur
En résumé
Une installation n8n stable sur Proxmox repose sur trois choses :
- Réseau LXC configuré de façon permanente dans
interfaces - Systemd paramétré avec domaine, protocole et politique de rétention
- SQLite sous contrôle — ou PostgreSQL pour les charges importantes
Auteur
MASIA Antoine
Développeur Full-Stack, DevOps & CyberSécurité