Je hebt zes maanden lang gezien hoe je Zapier-rekening steeg.
Elke nieuwe workflow voegt een extra regel toe, en elke geslaagde actiestap telt als een taak. De maandelijkse factuur kost nu meer dan je projectmanagementtool.
Je gaat googelen naar alternatieven en komt uit bij n8n, een automatiseringsplatform dat je zelf kunt hosten op je eigen virtuele privéserver (VPS), voor de prijs van een kleine server.
Geen uitvoeringsquotum. Geen prijs per taak. Geen onverwachte rekeningen wanneer je automatiseringen een vlucht nemen.
En ja, we begeleiden je door het hele proces, commando voor commando, van een kale Ubuntu-server tot een draaiende instantie met HTTPS, back-ups en een geteste herstelprocedure.
Wat Is n8n En Waarom Hosten Mensen Het Zelf?
n8n is een platform voor workflowautomatisering waarmee je apps kunt verbinden, gegevens tussen diensten kunt verplaatsen en complexe automatiseringen kunt bouwen via een visuele editor. Zie het als de motor achter “wanneer X gebeurt, doe Y en Z”, alleen versleep je nodes en teken je verbindingen in plaats van code te schrijven.

Het project heeft de grens van 200.000 GitHub-sterren gepasseerd, en de officiële Docker-image heeft meer dan 100 miljoen pulls. Op heel wat servers draait n8n.
Het platform valt onder een Sustainable Use License, en het loont om die te begrijpen voordat je je vastlegt. Het is geen traditionele open source (n8n gebruikt die term zelf niet, omdat door OSI goedgekeurde licenties het gebruik niet mogen beperken), maar het is ook niet dichtgetimmerd. Je mag het vrij gebruiken voor je eigen interne bedrijfsdoeleinden. Je mag geen product, dienst of module verkopen waarvan de waarde volledig of grotendeels voortkomt uit n8n-functionaliteit.
“In de praktijk betekent dit dat elk gebruik is toegestaan, tenzij je een product, dienst of module verkoopt waarvan de waarde volledig of grotendeels voortkomt uit n8n-functionaliteit.” — licentie-FAQ van n8n
Mensen hosten n8n zelf omdat de economie omslaat zodra je voorbij het basisgebruik gaat. n8n Cloud begint bij €20/maand (jaarlijks gefactureerd) voor 2.500 uitvoeringen op het Starter-abonnement, en als je enig serieus volume draait, loop je snel tegen die limieten aan.
Op je eigen VPS? Geen uitvoeringsquotum, controle over de gegevens die je n8n-instantie opslaat, en geen licentie- of uitvoeringsrekening van n8n, al kosten je server, domein, back-upopslag en beheer nog steeds geld. De uitvoeringen zelf kosten niets extra; meer volume vraagt wel meer geheugen en opslag, maar dat is een kwestie van dimensionering (zie verderop), niet van facturering.
Wat Kun Je Automatiseren Met n8n?
De 400+ integraties van n8n bestrijken een breed scala, en door de community gebouwde nodes breiden de lijst verder uit. n8n is ook een van de vele zelfgehoste alternatieven voor SaaS-tools; dezelfde logica geldt voor alles van CRM tot projectmanagement.
Enkele veelvoorkomende toepassingen:
- CRM en lead-routing. Synchroniseer contacten tussen je CRM, e-mailplatform en Slack als er nieuwe leads binnenkomen.
- Webhook-geactiveerde workflows. Reageer in realtime op gebeurtenissen van betalingsverwerkers, formulierinzendingen of GitHub-commits.
- Automatisering van datapipelines. Haal gegevens op uit API’s, transformeer ze en zet ze volgens een schema in databases of spreadsheets.
- AI-agentketens. Verbind LLM’s met je interne tools om aangepaste AI-assistenten te bouwen die je gegevens kunnen doorzoeken, samenvatten en ernaar kunnen handelen.
(Bij die laatste beginnen je serverbronnen belangrijk te worden. Meer daarover in de sectie over specificaties.)
Wat Kost Het Zelf Hosten Van n8n?
Voor de zelfgehoste Community-editie betaal je bij toegestaan gebruik geen licentie- of uitvoeringskosten aan n8n. Je totale kosten omvatten de server plus eventuele kosten voor een domein, back-upopslag en beheertijd. Het kostenoverzicht 2026 van ExpressTech schat een kale VPS met Docker op $4–5 per maand, een VPS beheerd met Coolify op $5–8 en beheerde n8n-platforms met installatie in één klik op $3–7.
Dat zijn hostingschattingen van de externe partij ExpressTech. Een cijfer uit eigen huis: het abonnement dat we hieronder aanbevelen, DreamHost VPS Hosting Stack 4, kost bij maandelijkse facturering $8,99/maand voor de eerste 3 maanden en wordt daarna automatisch verlengd tegen $15,99/maand (stand augustus 2026), waarbij de volledige termijn plus belastingen bij het afrekenen in rekening wordt gebracht (actuele prijzen staan op de n8n VPS-pagina).
Vergelijk dat met de eigen gehoste en gelicentieerde abonnementen van n8n, zoals vermeld op de prijspagina van n8n. n8n hanteert prijzen in euro’s, en dit zijn de tarieven bij jaarlijkse facturering:
| Abonnement | Maandelijkse kosten | Uitvoeringslimiet |
| n8n Cloud Starter | €20/maand | 2.500 uitvoeringen |
| n8n Cloud Pro | €50/maand | 10.000 uitvoeringen |
| n8n Business (licentie voor zelf hosten) | €667/maand | 40.000 uitvoeringen |
| Zelfgehoste Community-editie op een VPS | Geen licentie- of uitvoeringskosten van n8n bij toegestaan gebruik; kosten voor VPS, domein, back-upopslag en beheer kunnen van toepassing zijn | Geen quotum |
Het verschil wordt groter wanneer je meeneemt hoe elk platform het gebruik telt. n8n rekent één uitvoering per workflowrun, “ongeacht de complexiteit”, en elk abonnement bevat onbeperkte stappen. Zapier telt daarentegen elke geslaagde actiestap als een taak.
Een workflow met vier actiestappen die 100 keer per dag draait, is dus 3.000 n8n-uitvoeringen per maand, maar ongeveer 12.000 Zapier-taken.
Echte cijfers bevestigen dit. De analyse van ExpressTech werkt een voorbeeld uit van vier workflows met in totaal ongeveer 7.000 uitvoeringen per maand: die belasting ontgroeit n8n Cloud Starter en vraagt om het Pro-niveau (daar vermeld voor $60/maand bij maandelijkse facturering), terwijl een zelfgehoste opstelling van $3–7/maand het zonder limieten draait, een verschil dat zij op $636–684 per jaar schatten.
De Verborgen Kosten Van Zelf Hosten
De besparingen in dollars zijn echt. Maar zelf hosten is niet in elk opzicht gratis.
Dit kost het je:
Jouw tijd. Hoeveel tijd onderhoud kost, hangt af van je workload en je ervaring met serverbeheer, maar jij bent verantwoordelijk voor updates, back-ups, monitoring en hersteltests. Zwaardere opstellingen met door AI aangedreven automatiseringen vragen meer.
Gedoe bij het instellen van OAuth. Het verbinden van diensten zoals Google Workspace of Microsoft 365 vereist het configureren van OAuth-inloggegevens. Trek per provider extra insteltijd uit en volg de documentatie van diens console. (Als je ooit naar een laadsymbool hebt gekeken terwijl een toestemmingsscherm besluit of het je app vertrouwt, ken je het gevoel.)
TLS die je moet vertrouwen, maar wel moet controleren. De Caddy-proxy in de onderstaande opstelling verkrijgt en vernieuwt automatisch een publiek vertrouwd certificaat, via een uitgever zoals Let’s Encrypt of ZeroSSL. Automatisch is niet hetzelfde als onbreekbaar: controleer na wijzigingen aan DNS of de proxy of het certificaat nog steeds wordt vernieuwd.
Inwerktijd als je nieuw bent met servers. De onderstaande handleiding gaat ervan uit dat je via SSH verbinding kunt maken met een server, een bestand kunt bewerken en commando’s kunt uitvoeren. Heb je dat nog nooit gedaan, trek dan naast de implementatie zelf ook leertijd uit.
Welke Serverspecificaties Heeft n8n Nodig?
n8n zelf is licht. Het dichtst bij een officiële dimensionering komen de voorbeeldwaarden in de OEM-implementatiedocumentatie van n8n, die n8n “uitsluitend ter illustratie” noemt en die gebaseerd zijn op n8n Cloud: een geheugenbereik van 320 MB tot 2 GB, een database op SSD-opslag van 512 MB tot 4 GB en ongeveer 100 MB geheugen voor een instantie in rust. Als voorzichtige starttoewijzing, en niet als officieel minimum van n8n, kun je uitgaan van 2 GB voor testen en 4 GB zodra je PostgreSQL en productieworkflows toevoegt. Monitor representatieve workflows en voeg geheugen toe als er aanhoudende druk ontstaat.
Houd er ook rekening mee dat n8n meestal eerder door geheugen dan door de CPU wordt beperkt. De eigen documentatie van n8n zegt het ronduit: het platform “is niet CPU-intensief”, en “meestal wegen de geheugenvereisten zwaarder dan de CPU-vereisten”. Wat het geheugengebruik opdrijft, zijn je workflows: datavolume, Code-nodes (die gegevens kopiëren voor en na de verwerking) en grote binaire bestanden.
Hier is onze snelle berekening op de achterkant van een bierviltje voor de benodigde marge:
Dimensioneer op basis van het aantal gelijktijdige uitvoeringen en het datavolume dat elke workflow verwerkt, en monitor daarna het geheugengebruik onder een representatieve workload. Code-nodes en grote binaire payloads kunnen de geheugenvereisten verhogen, dus houd marge over en schaal de VPS op wanneer monitoring aanhoudende druk laat zien.

Nieuw met VPS-hosting? Begin met de beginnersgids voor VPS van DreamHost om de basis te begrijpen voordat je je server dimensioneert.
Welke VPS Moet Je Kiezen Voor Zelfgehoste n8n?
n8n publiceert geen vaste RAM-niveaus per workload. Dimensioneer op basis van het aantal gelijktijdige uitvoeringen en het datavolume, houd marge over voor Docker en PostgreSQL, monitor daarna representatieve workflows en schaal op wanneer de geheugendruk aanhoudt.
Zo zouden wij dat vertalen naar de abonnementen van DreamHost:
| Abonnement | Specificaties | Wanneer kiezen |
| DreamHost VPS Hosting Stack 4 | 4 GB RAM, 2 vCPU, 75 GB NVMe SSD | Een niet gebenchmarkte maar voorzichtige starttoewijzing van 4 GB voor een eerste n8n-server. |
| DreamHost VPS Hosting Stack 8 | 8 GB RAM, 2 vCPU, 150 GB NVMe SSD | De optie met 8 GB voor extra geheugenruimte wanneer monitoring aanhoudende druk laat zien, met twee keer zoveel RAM en opslag. |
| DreamHost VPS Hosting Stack 16 | 16 GB RAM, 4 vCPU, 250 GB NVMe SSD | De optie met 16 GB voor extra gelijktijdigheid, grotere datavolumes of het toevoegen van Redis-workers in queue-modus. |
Een paar specificaties die naast RAM aandacht verdienen: n8n noemt SSD-opslag een best practice voor databases. De geheugenbehoefte weegt meestal zwaarder dan de CPU-behoefte, maar de werkelijke bottleneck hangt af van het aantal gelijktijdige workflows, het datavolume en de nodes die je gebruikt. Onbeperkte bandbreedte is belangrijk als je workloads draait die veel webhooks gebruiken, met een constante stroom binnenkomende HTTP-verzoeken.
Kies een hostingomgeving waarin je Docker kunt draaien en de database, het netwerk, persistente opslag en de reverse proxy kunt configureren. Conventionele shared hosting biedt dat niveau van controle doorgaans niet.
De VPS Hosting-abonnementen van DreamHost voldoen aan alle essentiële punten (NVMe SSD-opslag, onbeperkte bandbreedte, volledige root-toegang en Docker-ondersteuning), en n8n staat in de bibliotheek met apps die je met één klik installeert, vooraf geïnstalleerd met PostgreSQL en automatische SSL, als je de onderstaande handmatige installatie liever overslaat.
Onze keuze voor een eerste n8n-server is Stack 4. Per augustus 2026 kost die bij maandelijkse facturering $8,99/maand voor de eerste 3 maanden en wordt hij automatisch verlengd tegen $15,99/maand, waarbij de volledige termijn plus belastingen bij het afrekenen in rekening wordt gebracht; de n8n VPS-pagina toont altijd de actuele tarieven. Die verlengingsprijs is het eerlijke bedrag om te vergelijken met de €20/maand van n8n Cloud Starter.
Oh, en één ding om in je achterhoofd te houden voor later: naarmate je gebruik groeit, ondersteunt n8n de queue-modus, een schaalarchitectuur die de hoofdinstantie (UI, triggers, webhooks) scheidt van de workflowuitvoering, met Redis als message broker en worker-instanties die de jobs uitvoeren. De documentatie van n8n noemt het de modus die “de beste schaalbaarheid biedt”.
Hoe Installeer Je n8n Op Een VPS?
Het implementeren van een zelfgehoste n8n-instantie kost 11 stappen: DNS, SSH-beveiliging, een firewall, Docker, secrets, een Compose-bestand voor de stack van drie containers (n8n, PostgreSQL en Caddy), de Caddyfile, starten en controleren, updates, back-ups en een hersteltest. Caddy is onze reverse proxy: de server die tussen het internet en je applicatie zit en TLS en routing afhandelt. We geven de commando’s voor de kernimplementatie en een handmatige back-up- en hersteltest.

De commando’s zijn bedoeld voor Ubuntu 22.04 of nieuwer, maar vervang het voorbeelddomein, de geheime waarden, de volumenaam en de gedateerde bestandsnamen van back-ups waar aangegeven. De Docker Compose-documentatie van n8n behandelt hetzelfde met een Traefik-proxy, als je liever het eigen sjabloon van n8n volgt.
Wat Je Nodig Hebt Voordat Je Begint
- Een VPS met root-toegang die draait op Ubuntu 22.04 of nieuwer, met minstens 2 GB RAM (4 GB is onze voorzichtige aanbeveling voor productie)
- Een domeinnaam die je naar het IP-adres van je server kunt laten verwijzen (voor TLS en toegang tot de n8n-editor)
- Basiskennis van de terminal — je moet weten hoe je via SSH verbinding maakt met een server, een bestand bewerkt en commando’s uitvoert
Nog een voorwaarde die op geen enkele officiële lijst staat: maak een back-up van je N8N_ENCRYPTION_KEY op het moment dat je hem genereert. Daarom maak je de sleutel in stap 5 aan met openssl rand -hex 32 vóór de eerste start, in plaats van n8n er stilletjes zelf een te laten genereren. Deze sleutel versleutelt al je opgeslagen inloggegevens, inclusief elke API-sleutel, OAuth-token en elk databasewachtwoord dat je hebt gekoppeld. De eigen Docker-documentatie van n8n waarschuwt dat als de sleutel bij het opstarten niet gevonden wordt, n8n een nieuwe aanmaakt en bestaande inloggegevens niet meer ontsleuteld kunnen worden — wat betekent dat je elke integratie vanaf nul opnieuw opbouwt (en spijt krijgt van je levenskeuzes). Bewaar hem ergens veilig, apart van je databaseback-ups.
Als je provider je alleen een root-login heeft gegeven, maak dan eerst een implementatiegebruiker aan, via de console van de provider of een SSH-sessie als root, voordat je de lokale SSH-commando’s in stap 2 uitvoert:
adduser deploy
usermod -aG sudo deploy Alles hieronder draait als die gebruiker, met sudo waar nodig.
Stap 1: Laat Je Domein Naar De Server Verwijzen
Maak een DNS A-record aan voor een apart subdomein (n8n.example.com in deze hele gids) dat naar het IP-adres van je server verwijst, precies zoals de Docker Compose-gids van n8n beschrijft. Doe dit eerst: als DNS nog niet is doorgevoerd, kan Caddy geen certificaat verkrijgen en toont je browser mogelijk een beveiligingsfout in plaats van de n8n-editor.
Stap 2: Beveilig De SSH-Toegang
Genereer op je lokale computer een sleutelpaar (de OpenSSH-documentatie van Ubuntu raadt ed25519 aan) en kopieer het naar de server:
ssh-keygen -t ed25519
ssh-copy-id deploy@your_server_ip Controleer of je met de sleutel kunt inloggen. Schakel daarna op de server inloggen met wachtwoord en als root uit, en controleer wat sshd daadwerkelijk zal afdwingen:
sudo tee /etc/ssh/sshd_config.d/00-hardening.conf > /dev/null <<'EOF'
PasswordAuthentication no
PermitRootLogin no
EOF
sudo sshd -t
sudo sshd -T | grep -E '^(passwordauthentication|permitrootlogin) ' Het voorvoegsel 00- is bewust gekozen. Volgens de sshd_config-handleiding gebruikt OpenSSH voor elk sleutelwoord de eerste waarde die het leest, en images van cloudservers leveren vaak eerdere drop-ins mee in dezelfde map (cloud-init schrijft bijvoorbeeld zijn SSH-instellingen naar 50-cloud-init.conf). Noem je je bestand 99-hardening.conf, dan kan een van die snippets ongemerkt winnen. sshd -t controleert de configuratie op fouten; sshd -T toont de effectieve instellingen nadat alle bestanden zijn samengevoegd. Controleer of het laatste commando passwordauthentication no en permitrootlogin no weergeeft voordat je verdergaat. Herstart sshd daarna:
sudo systemctl restart ssh.service De documentatie van Ubuntu waarschuwt dat een foute sshd-configuratie op een externe server je kan buitensluiten. Houd je huidige sessie open en test een nieuwe login in een tweede terminal voordat je iets sluit.
Stap 3: Zet De Firewall Aan
Ubuntu levert UFW (Uncomplicated Firewall) standaard uitgeschakeld. Sta SSH toe voordat je hem inschakelt, zodat de firewall je eigen sessie niet kan afbreken:
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw --force enable
sudo ufw status Drie poorten, verder niets. Eén Docker-specifieke waarschuwing uit de eigen installatiedocumentatie van Docker: poorten die Docker op de host publiceert, omzeilen UFW-regels volledig. Daarom publiceert het Compose-bestand in stap 6 alleen hostpoorten voor Caddy: 80 en 443 zijn de enige containerpoorten die Compose publiceert (SSH op 22 staat ook open), en n8n en PostgreSQL krijgen helemaal geen gepubliceerde hostpoorten.
Stap 4: Installeer Docker En Docker Compose
Installeer Docker Engine vanuit de officiële apt-repository van Docker, niet met het gemaksscript get.docker.com, dat de documentatie van Docker alleen aanraadt voor testen en ontwikkeling. Eerst de vereisten en de ondertekeningssleutel van Docker:
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc Registreer vervolgens de repository zelf. Dit schrijft het repositorybestand uit de Ubuntu-installatiegids van Docker en vult je Ubuntu-release automatisch in:
sudo tee /etc/apt/sources.list.d/docker.sources > /dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF Installeer en controleer dan:
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker run hello-world Als hello-world zijn bevestigingsbericht toont, zijn Docker en de Compose-plugin klaar voor gebruik.
Stap 5: Maak De Projectmap En De Secrets Aan
Maak de projectmap aan en genereer daarna je versleutelingssleutel — laat n8n er bij de eerste start niet stilletjes zelf een verzinnen:
sudo mkdir -p /opt/n8n-compose
cd /opt/n8n-compose
openssl rand -hex 32 Kopieer de uitvoer nu meteen naar een veilige plek — buiten de server. Zet hem daarna, samen met een sterk databasewachtwoord, in een beveiligd .env-bestand naast je compose-bestand (Docker Compose leest het automatisch). Vervang beide placeholderwaarden door je eigen waarden:
sudo tee /opt/n8n-compose/.env > /dev/null <<'EOF'
POSTGRES_PASSWORD=choose_a_strong_password
N8N_ENCRYPTION_KEY=paste_the_64_character_key_you_just_generated
EOF
sudo chmod 600 /opt/n8n-compose/.env De chmod 600 is belangrijk: dit bestand bevat secrets, dus alleen de eigenaar (root) mag het kunnen lezen. In het compose-bestand past N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true hetzelfde idee toe binnen de container: volgens de referentie van beveiligingsvariabelen van n8n laat dit n8n proberen de rechten 0600 in te stellen op zijn eigen instellingenbestand.
Stap 6: Schrijf Het Docker Compose-Bestand
Maak /opt/n8n-compose/docker-compose.yml aan (bijvoorbeeld met sudo nano /opt/n8n-compose/docker-compose.yml) en plak het volgende erin, waarbij je in beide URL-regels n8n.example.com vervangt door je eigen domein en je tijdzone instelt:
services:
caddy:
image: caddy:2
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
n8n:
image: docker.n8n.io/n8nio/n8n:2.36.7
restart: unless-stopped
expose:
- "5678"
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- N8N_HOST=n8n.example.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- N8N_WEBHOOK_URL=https://n8n.example.com/
- N8N_PROXY_HOPS=1
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
- GENERIC_TIMEZONE=America/New_York
- TZ=America/New_York
- EXECUTIONS_DATA_MAX_AGE=168
depends_on:
postgres:
condition: service_healthy
volumes:
- n8n_data:/home/node/.n8n
postgres:
image: postgres:18
restart: unless-stopped
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=n8n
- PGDATA=/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U n8n -d n8n"]
interval: 5s
timeout: 5s
retries: 10
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
caddy_data:
caddy_config:
n8n_data:
postgres_data: Vijf details hierin bewijzen hun waarde:
- De image is vastgepind op een specifieke versie (2.36.7 is op het moment van schrijven de huidige stabiele release, volgens de installatiedocumentatie van n8n), zodat upgrades alleen plaatsvinden wanneer jij dat besluit.
- n8n publiceert geen hostpoort. Het is bereikbaar voor containers op het Compose-netwerk, waaronder Caddy, maar niet via een gepubliceerde hostpoort, zodat de editor alleen via de reverse proxy bereikbaar is, nooit rechtstreeks vanaf het internet.
- De healthcheck laat n8n wachten op PostgreSQL. Een kale
depends_onwacht alleen tot de container start, niet tot de database verbindingen accepteert. Het patrooncondition: service_healthykomt rechtstreeks uit het eigen voorbeeld-compose-bestand voor Postgres van n8n, dat ook PostgreSQL 18 implementeert. - Het paar
N8N_WEBHOOK_URL/N8N_PROXY_HOPSis belangrijk achter een proxy. n8n bouwt webhook-URL’s normaal op uit zijn protocol, host en poort, en volgens de documentatie van n8n werkt dat niet achter een reverse proxy. Daarom stel je de webhook-URL handmatig in, zodat n8n “de juiste webhook-URL’s bij externe diensten kan registreren”, zet jeN8N_PROXY_HOPSop 1 en zorg je ervoor dat de proxy de headers X-Forwarded-For, X-Forwarded-Host en X-Forwarded-Proto doorgeeft. (Dezelfde pagina vermeldt datN8N_WEBHOOK_URLde oudereWEBHOOK_URLvervangt, die vanaf n8n 2.35.0 verouderd is.) TZenGENERIC_TIMEZONEhebben verschillende taken. Volgens de Docker-documentatie van n8n stuurtGENERIC_TIMEZONEplanningsnodes zoals Schedule aan, terwijlTZde systeemtijdzone van de container instelt (wat commando’s zoalsdaterapporteren). Stel beide in op dezelfde waarde.
(Begin vanaf dag één met PostgreSQL. n8n gebruikt standaard SQLite, wat werkt voor testen, maar de hostingsjablonen van n8n raden PostgreSQL aan voor productie, en later migreren is pijnlijk op de manier van “had ik dit maar meteen goed gedaan”.)
Stap 7: Schrijf De Caddyfile
Maak /opt/n8n-compose/Caddyfile aan met je domein (vervang ook hier n8n.example.com):
n8n.example.com {
reverse_proxy n8n:5678
} Dat is de volledige reverse-proxyconfiguratie. Volgens de documentatie over automatische HTTPS van Caddy verkrijgt en vernieuwt Caddy automatisch een publiek vertrouwd certificaat, via een uitgever zoals Let’s Encrypt of ZeroSSL, en stuurt het HTTP door naar HTTPS, op voorwaarde dat je DNS A-record naar de server verwijst en de poorten 80 en 443 openstaan (stappen 1 en 3). Caddy is ook een van de reverse proxy’s in de officiële hostingvoorbeelden van n8n.
Stap 8: Starten En Controleren
cd /opt/n8n-compose
sudo docker compose up -d
sudo docker compose ps Wacht tot ps de postgres-container als healthy en n8n als actief toont, en controleer dan vanaf een willekeurige computer de voordeur:
curl -fsS -o /dev/null -w '%{http_code}' https://n8n.example.com/ Een 2xx-code (of een 3xx-redirect) betekent dat Caddy TLS heeft afgehandeld en n8n heeft geantwoord; stopt curl in plaats daarvan met een fout, kijk dan naar DNS, het certificaat of de containers (sudo docker compose logs caddy en sudo docker compose logs n8n zijn de eerste plekken om te controleren). Open https://n8n.example.com in een browser en maak je owner-account aan.
Stap 9: Update n8n Weloverwogen
n8n brengt bijna elke week een nieuwe minor-versie uit, en de update-instructies zeggen dat je vóór het upgraden de changelog met breaking changes moet bekijken. Als je er klaar voor bent: wijzig de versietag in docker-compose.yml en voer dan uit:
cd /opt/n8n-compose
sudo docker compose pull
sudo docker compose up -d Met een vastgepinde tag verandert een pull op zichzelf niets: je kiest elke upgrade zelf door de tag te wijzigen, en dat is precies het doel van vastpinnen. Maak een back-up (stap 10) vóór grote versie-updates.
Stap 10: Plan Back-ups In
Voor een bruikbaar herstel zijn drie dingen nodig: de PostgreSQL-database, het n8n_data-volume en het .env-bestand dat N8N_ENCRYPTION_KEY levert. De Docker-documentatie van n8n zegt expliciet dat zelfs wanneer je PostgreSQL gebruikt, de map /home/node/.n8n (ons n8n_data-volume) nog steeds essentiële gegevens bevat, waaronder het sleutelmateriaal voor de versleuteling. Maak van alle drie een back-up en bewaar docker-compose.yml en Caddyfile zodat je de stack kunt reconstrueren. Het onderstaande script regelt de database en het volume; het kopiëren van de configuratiebestanden naar buiten de host volgt direct daarna. Maak het script aan als bestand dat eigendom is van root:
sudo tee /opt/n8n-compose/backup.sh > /dev/null <<'EOF'
#!/bin/bash
set -euo pipefail
cd /opt/n8n-compose
STAMP=$(date +%Y-%m-%d)
mkdir -p /opt/n8n-backups
docker compose exec -T postgres pg_dump -U n8n -d n8n > "/opt/n8n-backups/n8n-db-${STAMP}.sql"
docker run --rm -v n8n-compose_n8n_data:/data -v /opt/n8n-backups:/backup alpine \
tar czf "/backup/n8n-data-${STAMP}.tar.gz" -C /data .
find /opt/n8n-backups -name 'n8n-db-*.sql' -mtime +30 -delete
find /opt/n8n-backups -name 'n8n-data-*.tar.gz' -mtime +30 -delete
EOF
sudo chmod 700 /opt/n8n-compose/backup.sh
sudo /opt/n8n-compose/backup.sh Opmerkingen bij het script: n8n-compose_n8n_data is de volumenaam die Compose aanmaakt voor een projectmap met de naam n8n-compose; controleer de jouwe met sudo docker volume ls en pas hem aan als die afwijkt. De twee find-regels bewaren back-ups 30 dagen; stel een andere bewaartermijn in die past bij je opslag- en herstelbehoeften.
Plan het in via de crontab van root. De cron van root mag uitsluitend een script uitvoeren dat eigendom is van root (chmod 700, met de .env op 600), nooit een bestand dat een andere gebruiker kan bewerken. Voer sudo crontab -e uit en voeg één regel toe voor een dagelijkse run om 3 uur ‘s nachts:
0 3 * * * /opt/n8n-compose/backup.sh Het script maakt volgens een schema een back-up van de PostgreSQL-database en het n8n_data-volume. Kopieer de .env (die je versleutelingssleutel bevat), het Compose-bestand en het Caddy-bestand nu en bij elke wijziging naar buiten de host. Maak op de server een tijdelijk beveiligd archief aan:
sudo tar -C /opt/n8n-compose -czf /home/deploy/n8n-config.tar.gz .env docker-compose.yml Caddyfile
sudo chown deploy:deploy /home/deploy/n8n-config.tar.gz
chmod 600 /home/deploy/n8n-config.tar.gz Haal daarna vanaf je lokale computer het configuratiearchief samen met de back-ups binnen, en verwijder de tijdelijke kopie op de server:
scp deploy@your_server_ip:/home/deploy/n8n-config.tar.gz .
scp -r deploy@your_server_ip:/opt/n8n-backups .
ssh deploy@your_server_ip 'rm /home/deploy/n8n-config.tar.gz' Een back-up die alleen bestaat op de server die hij beschermt, verdwijnt samen met die server.
Stap 11: Test Een Herstel Op Een Test-VPS
Dit is een back-up- en herstelprocedure waarmee je kunt controleren of je back-ups bruikbaar zijn. Test dit herstel op een nieuwe test-VPS — nooit op je productieserver. Richt een wegwerpserver in, herhaal daar stap 4 (Docker), en kopieer je projectbestanden (docker-compose.yml, Caddyfile, .env) en je meest recente gedateerde back-ups naar dezelfde paden.
Wissel eerst de hostnaam: zet een testhostnaam (bijvoorbeeld n8n-restore-test.example.com, met een A-record dat naar de test-VPS verwijst) in N8N_HOST, N8N_WEBHOOK_URL en de Caddyfile. Voer daarna het volgende uit, waarbij je de gedateerde bestandsnamen vervangt door je eigen:
cd /opt/n8n-compose
sudo docker compose create
sudo docker run --rm -v n8n-compose_n8n_data:/data -v /opt/n8n-backups:/backup alpine \
sh -c "cd /data && tar xzf /backup/n8n-data-2026-08-25.tar.gz"
sudo docker compose up -d --wait postgres
sudo docker compose exec -T postgres psql -U n8n -d n8n < /opt/n8n-backups/n8n-db-2026-08-25.sql
sudo docker compose run --rm n8n unpublish:workflow --all
sudo docker compose up -d De regel unpublish:workflow --all gebruikt de ingebouwde Server CLI van n8n om elke herstelde workflow te depubliceren voordat de instantie start, zodat herstelde schema’s en triggers vanaf de testmachine niet afgaan op je productiesystemen. Sluit af met dezelfde curl-controle als in stap 8, tegen de testhostnaam.
Wees eerlijk tegenover jezelf over wat een groen vinkje betekent: het bevestigt dat de database en het volume zijn hersteld en dat de stack netjes opstart. Het test je workflows niet via de editor, dus log in op de testinstantie en controleer steekproefsgewijs de workflows die je niet kwijt mag raken.
Hoe Houd Je Een Zelfgehoste n8n-Instantie Veilig?
Een zelfgehoste n8n-instantie is net zo veilig als de server waarop hij draait, en jij bent degene die die server beheert.
Beveiliging draait om zes dingen. Geen ervan is op zichzelf ingewikkeld, maar als je er een overslaat, ontstaat er een echt gat. De opstelling hierboven implementeert de eerste drie al.
- HTTPS via een reverse proxy. Open de n8n-editor nooit via gewone HTTP. De Caddy-configuratie in stap 7 verkrijgt en vernieuwt automatisch een publiek vertrouwd certificaat, via een uitgever zoals Let’s Encrypt of ZeroSSL, en stuurt HTTP door naar HTTPS.
- Firewall-lockdown. UFW staat alleen SSH (22), HTTP (80) en HTTPS (443) toe. Stel de standaardpoort 5678 van n8n nooit rechtstreeks bloot aan het internet. Het compose-bestand hierboven dwingt dit af door n8n geen gepubliceerde hostpoort te geven, zodat alleen containers op het Compose-netwerk het kunnen bereiken.
- Docker-netwerkisolatie. PostgreSQL en n8n communiceren via het interne Compose-netwerk. Je databasepoort wordt nooit op de host gepubliceerd en is dus nooit van buitenaf bereikbaar.
- Sterke authenticatie. Gebruik een sterk owner-wachtwoord en schakel tweefactorauthenticatie in; de beveiligingsgids van n8n noemt 2FA als een van de aanbevolen beschermingsmaatregelen voor zelfgehoste instanties.
- Regelmatige updates. Wijzig de versietag in je compose-bestand, en doe dan een pull en herstart (stap 9). Lees eerst de changelog, want updates van n8n kunnen breaking changes bevatten.
- Back-ups die je echt hebt teruggezet. Stappen 10 en 11 geven je het schema en de test. Een back-up die je nooit hebt getest, berust op hoop, niet op een plan.
Nog iets om op te letten dat niet strikt met beveiliging te maken heeft, maar wel een groot verschil maakt. n8n slaat standaard de invoer en uitvoer van elke uitvoering op in zijn database. Opschonen staat standaard aan: n8n verwijdert uitvoeringen die ouder zijn dan 336 uur (14 dagen), of zodra je de 10.000 opgeslagen uitvoeringen passeert. Een drukke instantie kan PostgreSQL in de tussentijd toch laten opzwellen.
Als je workflows veel data produceren, maak het dan strenger: stel EXECUTIONS_DATA_MAX_AGE=168 in om uitvoeringsgegevens ouder dan zeven dagen op te schonen (het compose-bestand hierboven doet dat al), of sla geslaagde runs helemaal niet op met EXECUTIONS_DATA_SAVE_ON_SUCCESS=none.
Wat Zijn De Afwegingen Tussen Zelf Hosten En n8n Cloud?
Zelf n8n hosten geeft je een instantie zonder uitvoeringsquotum en met controle over de gegevens die hij opslaat, voor de kosten van een kleine VPS plus je eigen beheer. n8n Cloud geeft je nul serveronderhoud, met uitvoeringslimieten per niveau. De keuze hangt af van of je je automatiseringsinfrastructuur zelf wilt bezitten of iemand anders wilt betalen om hem te draaien.
De n8n-documentatie zegt het zo: “n8n raadt zelf hosten aan voor ervaren gebruikers. Fouten kunnen leiden tot gegevensverlies, beveiligingsproblemen en downtime. Als je geen ervaring hebt met het beheren van servers, raadt n8n n8n Cloud aan.”
Zo verhouden de twee opties zich tot elkaar:
| Factor | Zelfgehost | n8n Cloud |
| Maandelijkse kosten | Je VPS-rekening plus eventuele kosten voor domein, back-upopslag en beheer (DreamHost Stack 4: $8,99/maand gedurende 3 maanden, daarna $15,99/maand, stand augustus 2026; schattingen van de externe partij ExpressTech voor 2026: $4–8/maand) | €20–50 (jaarlijks gefactureerd), per niveau |
| Uitvoeringen | Geen quotum; de capaciteit hangt af van de resources van je server | 2.500 (Starter) of 10.000 (Pro) |
| Installatie | De handleiding in 11 stappen hierboven | Minuten |
| Onderhoud | Updates, back-ups en monitoring liggen bij jou | Geregeld door n8n |
| Datalocatie | Jouw server | Infrastructuur van n8n |
| Updates | Handmatig (tag wijzigen, pull, herstart) | Automatisch |
| TLS | Caddy verkrijgt en vernieuwt certificaten automatisch (uitgever zoals Let’s Encrypt of ZeroSSL) | Wordt voor je geregeld |
| Schalen | Voeg RAM toe, of gebruik queue-modus met Redis-workers | Upgrade naar een hoger abonnementsniveau |
Er is ook een middenweg die de moeite waard is om te kennen. Beheerde platforms zoals PikaPods (ongeveer $3,80/maand) en Elestio (ongeveer $17/maand, volgens de vergelijking van ExpressTech) draaien zelfgehoste n8n zonder dat je zelf de server hoeft te beheren. Deze diensten kunnen het serverbeheer verminderen, maar controleer wel wie de updates, back-ups, monitoring en beveiliging van n8n afhandelt.
Maar hier is het grotere plaatje. Bij elk gehost abonnement is je uitvoeringscapaciteit een factureringsniveau, en het platform bepaalt de niveaus. Prijzen, quota en functies kunnen veranderen rond workflows die je al hebt gebouwd.
Met zelf hosten staan de instantie en de gegevens die hij opslaat op infrastructuur die jij beheert (verbonden diensten ontvangen nog steeds alles wat je workflows naar ze sturen). Volledige controle, volledige verantwoordelijkheid.
De Definitieve Beslissing Nemen
Zelf hosten is zinvol wanneer drie dingen samenvallen:
- Je draait zoveel automatiseringen dat uitvoeringslimieten in de cloud zouden knellen
- Je wilt je workflowgegevens op infrastructuur die je zelf beheert
- Jij (of iemand in je team) bent bereid verantwoordelijkheid te nemen voor updates, back-ups en monitoring
Anders is n8n Cloud een redelijke keuze. Betalen voor het Starter-abonnement om nooit aan Docker-logs te hoeven denken, is een eerlijke ruil, vooral voor een klein team dat gewoon wil dat zijn automatiseringen draaien.
Maar zodra je klaar bent om de drempel naar zelf hosten over te gaan, wordt de rekensom snel doorslaggevend. Een VPS met 4 GB is een praktisch, zij het niet gebenchmarkt, startpunt; de productiecapaciteit hangt af van gelijktijdigheid, datavolume en de nodes die je gebruikt, dus monitor de instantie en schaal op naarmate de vraag groeit. Begin klein, upgrade naarmate je workflows groeien en houd volledige controle over je stack.
Dat laatste is belangrijker dan het misschien lijkt. Je kunt altijd overstappen naar een grotere server. Het is veel moeilijker om jezelf los te maken van een SaaS-platform nadat het zijn prijzen heeft aangepast rond de workflows die je al hebt gebouwd.

Beheer je volledige stack. Apps, AI, databases en meer.
Houd al je inloggegevens en gesprekken op een server die jij beheert, met ingebouwde NVMe-snelheid en ongelimiteerde bandbreedte.
Bekijk VPS-hostingabonnementenVeelgestelde Vragen Over Het Zelf Hosten Van n8n
Is n8n echt gratis om zelf te hosten?
Je kunt de n8n-software gratis op je eigen server draaien onder de Sustainable Use License. Voor de zelfgehoste Community-editie (de standaardversie die n8n op GitHub publiceert) betaal je bij toegestaan gebruik, zoals interne bedrijfsautomatisering, geen licentie- of uitvoeringskosten aan n8n. Het “gratis” deel betreft de software; je betaalt nog steeds voor je server, plus eventuele kosten voor een domein, back-upopslag en beheertijd.
De licentie beperkt de verkoop van een product, dienst of module waarvan de waarde volledig of grotendeels voortkomt uit n8n-functionaliteit. Lees de licentie-FAQ van n8n als je van plan bent klanten functionaliteit aan te bieden die op n8n draait.
Wat zijn de minimale systeemvereisten voor n8n?
n8n publiceert voorbeeldwaarden voor de dimensionering in plaats van een hard minimum, en noemt die cijfers illustratief (ze komen uit de OEM-implementatiedocumentatie): ongeveer 100 MB geheugen in rust, een voorbeeldgeheugenbereik van 320 MB–2 GB en een database op SSD-opslag van 512 MB–4 GB. Als voorzichtige starttoewijzing, en niet als officieel minimum van n8n, kun je uitgaan van 2 GB voor testen en 4 GB zodra je PostgreSQL en productieworkflows toevoegt; houd daarna het geheugen in de gaten en voeg geheugen toe als er aanhoudende druk ontstaat.
Het DreamHost VPS Hosting Stack 4-abonnement biedt 4 GB RAM met NVMe SSD-opslag en volledige root-toegang voor het draaien van zelfgehoste applicaties zoals n8n. Bekijk de VPS Hosting-abonnementen voor details.
Gebruik PostgreSQL in plaats van SQLite voor productie, en kies bij voorkeur SSD-opslag, omdat n8n dat als best practice voor databases noemt.
Kan ik n8n lokaal draaien in plaats van op een VPS?
Ja — met één Docker-commando draai je n8n op je eigen computer, en het is een prima manier om workflows te testen voordat je je aan een server verbindt. Het addertje zit in webhooks: workflows die door externe diensten worden geactiveerd, hebben een instantie nodig die vanaf het internet bereikbaar is, en dat is een laptop achter een thuisrouter standaard niet. Port forwarding, VPN’s en tunnels kunnen dat omzeilen, elk met hun eigen installatie- en beveiligingsnadelen.
n8n biedt een tunnelservice om webhooks door te sturen naar een lokale instantie, maar de Docker-documentatie zegt onomwonden dat de tunnel “alleen bedoeld is voor lokale ontwikkeling en testen” en niet in productie gebruikt moet worden. Gebruik voor alles wat de klok rond draait een VPS.
Kan ik migreren van Zapier naar n8n?
Verwacht geen import met één klik. Houd er rekening mee dat je je workflows opnieuw opbouwt in de visuele editor van n8n in plaats van ze uit Zapier te importeren.
Het goede nieuws: n8n heeft 400+ integraties, maar controleer elke app, trigger en actie die je huidige workflows gebruiken voordat je de migratie plant. Eenvoudige workflows bouw je snel opnieuw op; complexe meerstapsreeksen duren langer.
Hoe update ik een zelfgehoste n8n-instantie?
Wijzig de versietag in je docker-compose.yml naar de gewenste release en voer dan docker compose pull uit, gevolgd door docker compose up -d. Met een vastgepinde tag zoals docker.n8n.io/n8nio/n8n:2.36.7 verandert een pull op zichzelf niets — je kiest elke upgrade zelf door de tag te wijzigen, en dat is precies het doel van vastpinnen. (Als je in plaats daarvan de tag latest gebruikt, volstaat een pull en herstart, maar wordt elke herstart een onverwachte upgrade.)
Maak een back-up van je PostgreSQL-database vóór grote versie-updates. Het back-upscript uit de handleiding hierboven regelt dat, of voer pg_dump rechtstreeks uit in de PostgreSQL-container.
Slordige updates maken dingen kapot, en n8n brengt bijna elke week een nieuwe minor-versie uit. De eigen update-instructies van n8n zeggen dat je vóór het upgraden de changelog met breaking changes moet bekijken, dus lees die voordat je een pull doet. De herstart zelf gaat snel; het lezen van de changelog is het deel dat je tijd verdient.
Is zelfgehoste n8n veilig genoeg voor bedrijfsgegevens?
Met zelf hosten bepaal je zelf waar n8n workflowdefinities, inloggegevens en uitvoeringsgegevens opslaat. Verbonden diensten ontvangen echter nog steeds alle gegevens die je workflows naar ze sturen, en het beveiligen van de server blijft jouw verantwoordelijkheid.
Volg de zespuntschecklist uit de beveiligingssectie hierboven: HTTPS, firewall, Docker-isolatie, sterke authenticatie met 2FA, regelmatige updates en geteste back-ups. Het n8n-team onderhoudt een beveiligingsgids die extra aandachtspunten voor productie behandelt, van beveiligingsaudits tot tweefactorauthenticatie.
