n8n is een van de populairste tools voor workflowautomatisering, en een van de grootste voordelen is dat je het zelf kunt hosten. Dat geeft je volledige controle over je gegevens, geen kosten per uitvoering en de vrijheid om interne systemen te verbinden.
Deze gids laat zien hoe je een productieklare zelfgehoste n8n-instantie kunt opzetten met Docker Compose: HTTPS, een PostgreSQL-database, correcte webhook-URL’s, back-ups en updates. Als je nog steeds een tool aan het kiezen bent, lees dan eerst mijn n8n vs Zapier vs Make vergelijking.
Wat je nodig hebt
- Een Linux VPS (bijvoorbeeld Ubuntu LTS) met minimaal 2 GB RAM voor kleine werklasten, meer voor zware of AI-werkstromen.
- Een domein of subdomein, bijvoorbeeld
n8n.example.com, dat naar het IP van de server wijst - Docker en de Docker Compose-plugin geïnstalleerd
- Basiscomfort met de opdrachtregel
Stap 1: Installeer Docker
Op Ubuntu, volg de officiële installatie-instructies van Docker voor Docker Engine en de Compose-plugin. Controleer vervolgens:
docker --version
docker compose version
Stap 2: Snelle testuitvoering (optioneel)
Om n8n binnen een minuut te zien draaien:
docker volume create n8n_data
docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
Open http://SERVER-IP:5678. Dit is prima voor testen, maar niet voor productie: geen HTTPS, SQLite-database en geen automatische herstarts.
Stap 3: Maak de projectmap aan
mkdir -p ~/n8n && cd ~/n8n
Stap 4: Maak het .env-bestand aan
DOMAIN=n8n.example.com
GENERIC_TIMEZONE=Europe/Amsterdam
POSTGRES_USER=n8n
POSTGRES_PASSWORD=change-this-strong-password
POSTGRES_DB=n8n
N8N_ENCRYPTION_KEY=change-this-long-random-string
Genereer een sterke versleuteling sleutel, bijvoorbeeld met openssl rand -hex 32.
Belangrijk: n8n gebruikt N8N_ENCRYPTION_KEY om opgeslagen inloggegevens te versleutelen. Als je het verliest, verlies je toegang tot elke opgeslagen inloggegevens. Bewaar het in je wachtwoordmanager.
Stap 5: Maak docker-compose.yml aan
services:
postgres:
image: postgres:16
restart: unless-stopped
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
volumes:
- db_data:/var/lib/postgresql/data
n8n:
image: docker.n8n.io/n8nio/n8n
restart: unless-stopped
ports:
- "127.0.0.1:5678:5678"
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- N8N_HOST=${DOMAIN}
- N8N_PROTOCOL=https
- N8N_PORT=5678
- WEBHOOK_URL=https://${DOMAIN}/
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- TZ=${GENERIC_TIMEZONE}
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
volumes:
- n8n_data:/home/node/.n8n
depends_on:
- postgres
volumes:
db_data:
n8n_data:
Een paar opmerkingen:
- Poort 5678 is alleen gebonden aan
127.0.0.1, dus n8n is alleen bereikbaar via de reverse proxy. WEBHOOK_URLzorgt ervoor dat webhook-URL’s die in n8n worden weergegeven, uw openbare HTTPS-domein gebruiken.- In productie, pin de n8n afbeelding op een specifieke versie-tag in plaats van
latest, zodat updates plaatsvinden wanneer jij dat kiest.
Stap 6: Voeg HTTPS toe met een reverse proxy
De eenvoudigste optie is Caddy, dat automatisch Let’s Encrypt-certificaten verkrijgt en vernieuwt. Installeer Caddy op de host en gebruik dit Caddyfile:
n8n.example.com {
reverse_proxy 127.0.0.1:5678
}
Nginx met Certbot of Traefik werkt net zo goed. Zorg ervoor dat WebSocket-verbindingen doorgelaten worden, de n8n-editor heeft ze nodig.
Stap 7: Start n8n
docker compose up -d
docker compose logs -f n8n
Open https://n8n.example.com en maak het eigenaaraccount aan.
Stap 8: Beveilig de server
- Sta alleen poorten 22, 80 en 443 toe in de firewall (bijvoorbeeld met
ufw) - Gebruik SSH-sleutels en schakel wachtwoordlogin uit
- Houd het besturingssysteem en Docker up-to-date
- Beperk wie accounts kan aanmaken in n8n en schakel tweefactorauthenticatie in waar beschikbaar
- Wees voorzichtig met knooppunten die code of opdrachten kunnen uitvoeren, vooral als meerdere mensen de instantie gebruiken.
Stap 9: Maak een back-up van n8n
Je moet twee dingen back-uppen: de database en de versleuteling sleutel (je .env bestand).
Database back-up:
docker compose exec -T postgres pg_dump -U n8n n8n | gzip > n8n-$(date +%F).sql.gz
Je kunt ook workflows en inloggegevens exporteren met de n8n CLI:
docker compose exec n8n n8n export:workflow --all --output=/home/node/.n8n/backup-workflows.json
Kopieer back-ups van de server. Een back-up op dezelfde server is geen back-up. Mijn server back-upgids legt een eenvoudige, betrouwbare opstelling uit.
Stap 10: Update n8n veilig
docker compose pull
docker compose up -d
Voor grote updates:
- Lees de release-opmerkingen van n8n voor breaking changes
- Maak een databaseback-up
- Test belangrijke workflows na de update
Schaalvergroting: wachtrijmodus
Voor hoge volumes ondersteunt n8n wachtrijmodus: de hoofdinstantie ontvangt triggers en webhooks, Redis houdt een wachtrij vast, en aparte werkcontainer voeren workflows uit. Begin eenvoudig, en ga over naar de wachtrijmodus wanneer uitvoeringen beginnen te wachten of de server constant druk is.
Probleemoplossing
Webhook-URL’s tonen localhost
Stel WEBHOOK_URL in op uw openbare HTTPS-URL en herstart.
“Verbinding verbroken” in de editor
Gewoonlijk geeft de reverse proxy geen WebSocket-verbindingen door. Controleer uw proxyconfiguratie.
Referenties kunnen niet worden ontsleuteld na het verplaatsen van servers
De N8N_ENCRYPTION_KEY op de nieuwe server is anders. Gebruik de originele sleutel.
Verkeerde tijden in schema’s
Stel GENERIC_TIMEZONE en TZ in op uw tijdzone.
Veelgestelde vragen
Is zelf-gehoste n8n gratis?
De software kan zelf gehost worden onder de licentie van n8n; sommige functies zijn gereserveerd voor betaalde plannen. Je betaalt voor je server en de tijd om deze te onderhouden. Controleer de huidige licentievoorwaarden van n8n voor jouw gebruiksgeval.
SQLite of PostgreSQL?
SQLite werkt voor testen en kleine opstellingen. PostgreSQL is robuuster voor productie, grotere uitvoeringsgeschiedenissen en wachtrijmodus.
Hoeveel server heb ik nodig?
Kleine instanties draaien op 2 GB RAM. Workflows die grote bestanden, veel items of AI-aanroepen verwerken, hebben meer nodig. Houd het geheugen in de gaten en schaal op wanneer nodig.
Wil je n8n goed instellen?
Ik stel zelf-gehoste n8n-instanties in en onderhoud deze, en bouw de workflows bovenop: opslag, CRM, e-mail, ERP en AI-integraties. Bekijk mijn marketingautomatiseringsdienst en servers en back-updienst, of vraag hulp aan.