Hoe n8n zelf te hosten met Docker: Stapsgewijze handleiding (HTTPS, Back-ups, Updates)

Een praktische gids voor het draaien van n8n op je eigen server met Docker Compose, inclusief HTTPS, PostgreSQL, de encryptiesleutel, webhooks, back-ups en veilige updates.

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_URL zorgt 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:

  1. Lees de release-opmerkingen van n8n voor breaking changes
  2. Maak een databaseback-up
  3. 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.