Automation

n8n Self-Hosted on a 6 Euro VPS: Installation, HTTPS, First Workflow

May 2026 · 12 min read

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:

  1. Trigger: Webhook node, method POST, path /lead-capture
  2. Transform: Set node, map incoming JSON fields to {name, email, source}
  3. HTTP Request: POST to your CRM's API with the transformed payload
  4. 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

Related Posts

n8n vs Make Comparison Zapier for Small Business
← All blog posts

6 euro per month, unlimited executions

Self-hosted n8n with Caddy HTTPS and Postgres backups. We set it up in a day.

Book a discovery call