n8n Cloud Starter is 20 euro per month for 5,000 workflow executions. A 6 euro DigitalOcean droplet self-hosting n8n gives you unlimited executions, full control over data, and the ability to add custom nodes. Total time to set up: 30 minutes. Total monthly cost: 6 euro for the VPS, 0 euro for n8n.
Why self-host
Three reasons. First, cost: 6 euro vs 20-50 euro per month depending on volume. Second, data: workflows often pass through customer data — keeping it on a server you control simplifies GDPR audits. Third, custom nodes: self-hosted n8n can run any community node or your own Python/JavaScript node without going through n8n's marketplace approval.
Trade-offs: you maintain it. OS updates, certificate renewals, backups. Budget 1 hour per month.
Step 1: Provision the VPS
DigitalOcean droplet, Ubuntu 24.04 LTS, smallest plan (1 vCPU, 1 GB RAM, 25 GB SSD) at 6 USD per month. Frankfurt or Amsterdam region for EU latency.
Create a non-root user with sudo, disable password SSH, copy your public key. Standard hardening. Five minutes.
Step 2: Install Docker
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
Verify with docker run hello-world.
Step 3: docker-compose.yml
Create ~/n8n/docker-compose.yml:
version: "3.7"
services:
n8n:
image: n8nio/n8n:latest
restart: always
environment:
- N8N_HOST=n8n.yourdomain.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.yourdomain.com/
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=changeme
volumes:
- n8n_data:/home/node/.n8n
depends_on:
- postgres
postgres:
image: postgres:16
restart: always
environment:
- POSTGRES_USER=n8n
- POSTGRES_PASSWORD=changeme
- POSTGRES_DB=n8n
volumes:
- pg_data:/var/lib/postgresql/data
caddy:
image: caddy:2
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
volumes:
n8n_data:
pg_data:
caddy_data:
Step 4: Caddyfile for HTTPS
~/n8n/Caddyfile:
n8n.yourdomain.com {
reverse_proxy n8n:5678
}
Caddy auto-provisions a Let's Encrypt cert on first request. Point your DNS A record to the droplet IP, wait for propagation (30 seconds to 5 minutes), then docker compose up -d.
Step 5: First workflow
Browse to https://n8n.yourdomain.com. Create an owner account. Build a workflow:
- Trigger: Webhook node, method POST, path /lead-capture
- Transform: Set node, map incoming JSON fields to {name, email, source}
- HTTP Request: POST to your CRM's API with the transformed payload
- Slack notification: Slack node, post to #new-leads channel
Activate. POST a test payload with curl:
curl -X POST https://n8n.yourdomain.com/webhook/lead-capture \
-H "Content-Type: application/json" \
-d '{"name":"Test","email":"[email protected]"}'
Slack message arrives in 2 seconds. Done.
Backups
Workflows live in the Postgres database. Back it up nightly to S3 or DO Spaces:
0 2 * * * docker exec n8n-postgres-1 pg_dump -U n8n n8n | gzip | aws s3 cp - s3://bucket/n8n-$(date +\%Y-\%m-\%d).sql.gz
Cost: under 1 USD per month on S3 Glacier IA.
Comparison
| Option | Setup | Monthly | Custom nodes? | Data residency |
|---|---|---|---|---|
| n8n Cloud Starter | 0 | 20 euro | Marketplace only | n8n's cloud |
| n8n Cloud Pro | 0 | 50 euro | Marketplace only | n8n's cloud |
| Self-hosted (this guide) | 30 min | 6 euro VPS | Any | Your droplet |
| Make.com Core | 0 | 9 euro | No (apps only) | Make's cloud |
| Zapier Pro | 0 | 49 euro | No | Zapier's cloud |
FAQ
Is the 1 GB RAM droplet enough?
For under 100 workflow executions per day, yes. Above that, upgrade to 2 GB (12 USD per month). Long-running workflows with large payloads OOM the small droplet.
How do I update n8n?
docker compose pull && docker compose up -d. Read the n8n release notes first — breaking changes happen occasionally between major versions.
Can I run n8n with SQLite instead of Postgres?
Yes, drop the postgres service and set DB_TYPE=sqlite. Fine for personal use; Postgres handles concurrent workflows better and survives crashes more cleanly.
What about high availability?
Single droplet is fine for most teams. For HA, run n8n behind a load balancer with a managed Postgres and use n8n's queue mode with Redis. Worth it above 10,000 executions per day.
Need help wiring n8n into your stack?
We set up n8n self-hosted for small ops teams. 1 week fixed price, including 5 production workflows.
Book a discovery call