n8nDockerCaddySelf-hosting
Déployer n8n en self-hosted avec Docker et Caddy (HTTPS automatique)
Stack minimale pour héberger n8n sur un VPS : Docker Compose, Caddy pour le HTTPS, PostgreSQL pour la persistance. Setup en moins d'1 heure.
· 10 min read
Pourquoi self-hoster ?
- Coût : ~5€/mois pour un VPS 2 vCPU / 4 Go RAM (Hetzner CPX11, OVH, Scaleway)
- Données chez vous : pas de limite de "tasks", pas d'audit externe des données
- Flexibilité : plugins communautaires, code JavaScript natif
Prérequis
- Un VPS Linux (Debian/Ubuntu)
- Un nom de domaine pointé vers l'IP du VPS (enregistrement A)
- Docker + Docker Compose installés
La stack : 3 services
services:
postgres:
image: postgres:16-alpine
environment:
POSTGRES_USER: n8n
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: n8n
volumes:
- postgres_data:/var/lib/postgresql/data
restart: unless-stopped
n8n:
image: n8nio/n8n:latest
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_USER: n8n
DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
N8N_HOST: n8n.votredomaine.fr
WEBHOOK_URL: https://n8n.votredomaine.fr/
N8N_PROTOCOL: https
volumes:
- n8n_data:/home/node/.n8n
depends_on:
- postgres
restart: unless-stopped
caddy:
image: caddy:2-alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
restart: unless-stopped
volumes:
postgres_data:
n8n_data:
caddy_data:Le Caddyfile
n8n.votredomaine.fr {
reverse_proxy n8n:5678
}C'est tout : Caddy gère Let's Encrypt automatiquement.
Démarrage
docker compose up -dAccès à https://n8n.votredomaine.fr. Le premier écran crée le compte owner.
Backups
Sauvegarde quotidienne de la base + du volume workflows :
# Dans un cron hebdomadaire
docker compose exec -T postgres pg_dump -U n8n n8n | gzip > backup-$(date +%F).sql.gzMonitoring
Ajouter Uptime Kuma (autre container) pour surveiller /healthz et recevoir une alerte en cas de panne.
Un souci sur votre stack ? [Un échange de 30 minutes peut débloquer la situation](/#contact).