Self-Hosted n8n vs n8n Cloud: Which Should You Choose in 2026

Self-Hosted n8n vs n8n Cloud: Which Should You Choose in 2026

What You’ll Need

  • n8n Cloud account (free tier available)
  • Hetzner VPS, Contabo VPS, or DigitalOcean for self-hosted deployment
  • Docker and Docker Compose (for self-hosted)
  • Basic terminal familiarity
  • A workflow automation use case (CRM syncs, webhook handlers, API orchestration)

Table of Contents


The Core Difference

I’ve been running automation workflows for years now, and the self-hosted versus cloud decision feels bigger in 2026 than ever. Here’s the honest truth: there’s no universal winner. Your choice depends on whether you value control or convenience more—and how much operational overhead you’re willing to carry.

Self-hosted n8n runs entirely on your own infrastructure. You manage the server, backups, updates, SSL certificates, and scaling.

n8n Cloud runs on n8n’s infrastructure. You log in, build workflows, and n8n handles the rest.

The gap between these options has actually narrowed since 2024. Cloud has become more flexible, and self-hosted has become simpler. But the trade-offs are still real, and I want to walk you through them honestly.


Self-Hosted n8n: Full Control, Full Responsibility

I started self-hosting because I needed workflows that could run offline, required custom node integrations, and had compliance constraints. If any of those resonate with you, self-hosted might be your answer.

Setting Up Self-Hosted n8n

Let’s deploy this on a Hetzner VPS or Contabo VPS. I’ll use Docker Compose because it keeps dependencies isolated and makes updates painless.

First, spin up a VPS with at least 2GB RAM and Ubuntu 22.04. SSH in and run:

apt update
apt upgrade -y
apt install -y docker.io docker-compose curl wget
systemctl start docker
systemctl enable docker
usermod -aG docker $USER
newgrp docker

Now create your n8n directory and Docker Compose file:

mkdir -p ~/n8n-deployment
cd ~/n8n-deployment
nano docker-compose.yml

Paste this configuration:

version: '3.8'

services:
  postgres:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: n8n
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: your_secure_password_here
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n8n"]
      interval: 10s
      timeout: 5s
      retries: 5

  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    environment:
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_PASSWORD: your_secure_password_here
      DB_POSTGRESDB_DATABASE: n8n
      N8N_HOST: your_domain.com
      N8N_PORT: 5678
      N8N_PROTOCOL: https
      NODE_ENV: production
      WEBHOOK_URL: https://your_domain.com/
      GENERIC_TIMEZONE: UTC
    ports:
      - "5678:5678"
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      postgres:
        condition: service_healthy
    restart: unless-stopped

  nginx:
    image: nginx:alpine
    container_name: n8n_nginx
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./ssl:/etc/nginx/ssl:ro
      - ./certbot/conf:/etc/letsencrypt:ro
      - ./certbot/www:/var/www/certbot:ro
    depends_on:
      - n8n
    restart: unless-stopped

volumes:
  postgres_data:
  n8n_data:

Create your Nginx reverse proxy config:

nano nginx.conf

Add this:

events {
    worker_connections 1024;
}

http {
    upstream n8n {
        server n8n:5678;
    }

    server {
        listen 80;
        server_name your_domain.com;
        return 301 https://$server_name$request_uri;
    }

    server {
        listen 443 ssl http2;
        server_name your_domain.com;

        ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;

        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        client_max_body_size 50M;

        location / {
            proxy_pass http://n8n;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_read_timeout 3600s;
            proxy_send_timeout 3600s;
        }
    }
}

For SSL certificates, I’ll use Certbot with Let’s Encrypt:

apt install -y certbot python3-certbot-nginx
certbot certonly --standalone -d your_domain.com --email your_email@example.com --agree-tos --non-interactive

Update your domain DNS records to point to your VPS IP, then start the containers:

docker-compose up -d
docker-compose logs -f n8n

Once you see “n8n ready on port 5678,” you’re up. Visit https://your_domain.com, set your admin credentials, and you’re in.

💡 Fast-Track Your Project: Don’t want to configure this yourself? I build custom n8n pipelines and bots. Message me with code SYS3-HUGO.

Self-Hosted Wins

Offline workflows: Your automations don’t depend on external uptime.

Custom nodes: Build integrations for internal tools or legacy systems. Modify the n8n codebase if needed.

Data residency: All data stays on your server. Huge for GDPR, HIPAA, or SOC 2 compliance.

No execution limits: Run as many parallel workflows as your hardware can handle. No throttling, no surprise bills when usage spikes.

Unlimited storage: Store execution history forever. I have years of logs that help me debug production issues.

Cost at scale: If you’re running 100+ workflows daily, self-hosted becomes cheaper than cloud per-execution pricing.

Self-Hosted Costs

  • VPS: $10–20/month for 2GB RAM (Hetzner, Contabo, DigitalOcean)
  • Domain: ~$10/year via Namecheap
  • Time: Setup is 30 minutes. Maintenance (updates, backups, monitoring) is 2–3 hours monthly
  • Total: ~$130–240/year in infrastructure + your labor

Self-Hosted Responsibilities

You own:

  • Server monitoring and uptime (I use Uptime Robot, but that’s extra)
  • SSL certificate renewal (I automate this with certbot)
  • Database backups (you must do this; n8n doesn’t auto-backup your data)
  • Security patching (Docker images need updates)
  • Scaling if load increases

n8n Cloud: Set It and Forget It

I use n8n Cloud for clients, prototypes, and workflows that don’t need self-hosted’s features. The appeal is simple: I don’t think about infrastructure.

Getting Started with n8n Cloud

Sign up at n8n Cloud. The free tier includes:

  • Up to 10 active workflows
  • 400 executions/month
  • 30-day execution history
  • One user account
  • All node types and basic auth methods

Here’s what you get out of the box:

{
  "tier": "Free",
  "workflows": 10,
  "monthly_executions": 400,
  "execution_history_days": 30,
  "users": 1,
  "support": "Community",
  "uptime_sla": "No SLA",
  "backups": "Automatic (14 days)"
}

Paid plans start at $20/month (Professional) and scale to $490/month (Enterprise). Each tier includes:

  • More workflows and executions
  • Longer history retention
  • Multiple users and teams
  • Priority support
  • Custom domain for webhooks

n8n Cloud Strengths

Zero DevOps: I literally log in and build. Updates happen automatically. Zero downtime.

Multi-user teams: Invite colleagues, assign roles, collaborate on workflows.

Built-in monitoring: Execution logs, error alerts, performance dashboards.

Managed backups: n8n keeps 14 days of automatic backups. No manual work.

Webhook URLs out of the box: When you create a webhook trigger, n8n gives you a URL like https://n8n-instance.n8n.cloud/webhook/abc123. No custom domain setup needed.

Global CDN: Webhooks and API calls route through optimized infrastructure.

Compliance features: SSO, audit logs, IP whitelisting on higher tiers.

I also appreciate that n8n Cloud is great for building workflows that replace expensive SaaS—you can read my guide on 5 n8n workflows that replace $200/month in SaaS tools for practical examples.

n8n Cloud Trade-Offs

Execution limits: Free tier caps at 400/month. That’s ~13 per day. If your workflow triggers once per minute, you’ll hit this in hours.

Vendor lock-in: Exporting workflows is straightforward (JSON), but if n8n changes pricing or shuts down (unlikely, but theoretically), you’re dependent on them.

Data residency: Your data lives on n8n’s servers (AWS). Not ideal for GDPR-strict compliance.

No offline mode: If n8n Cloud is down, your webhooks won’t process.

Shared infrastructure: In theory, noisy neighbors could affect your performance (though n8n isolates resources well).


Cost Breakdown: Where Your Money Goes

Let me break down what you’ll actually spend over a year with each option.

Self-Hosted Annual Cost

ItemCostNotes
VPS (2GB RAM)$120–240Hetzner or Contabo, billed monthly
Domain$10Via Namecheap, yearly renewal
SSL certificates$0Let’s Encrypt is free
Total infrastructure$130–250
Your time (2–3 hrs/month @ $50/hr)$1,200–1,800Honestly the real cost
Grand total$1,330–2,050/year

You can trim labor if you automate updates with a script and use monitoring tools. But realistically, you’re trading cash for time.

n8n Cloud Annual Cost

TierMonthlyAnnualWorkflowsExecutions/mo
Free$0$010400
Pro$20$240505,000
Team$90$1,080Unlimited50,000
Enterprise$490+$5,880+Unlimited1M+

Real-world example: If you run 30 workflows with an average of 500 executions/month per workflow (15,000 total/month), you need the Team tier at $1,080/year.

The Math

  • Light automation (< 5,000 executions/month): n8n Cloud wins. Pay $240–480/year and sleep.
  • Medium load (5,000–50,000/month): They’re roughly equal. Self-hosted saves ~$800/year but costs you time.
  • Heavy automation (> 50,000/month): Self-hosted becomes dramatically cheaper. A $200/month VPS can handle millions of executions annually.

I also factor in hidden costs:

  • Self-hosted monitoring: Uptime Robot ($10/month) or Grafana ($0 self-hosted)
  • Backups: An S3 bucket ($1–5/month) for off-server storage
  • Email alerts: Built into most monitoring, no extra cost
  • Team collaboration: If you hire help, self-hosted becomes more complex (user management, RBAC)

n8n Cloud includes all of this. You pay the premium for peace of mind.


Performance, Security, and Compliance

This is where self-hosted shines—and where cloud gets strategic.

Latency and Speed

Self-hosted: Workflows run on your hardware. If you’re in Europe and your server is in Europe, latency is rock-bottom. No intermediary hops.

n8n Cloud: Webhooks route through n8n’s global infrastructure (AWS regions). You’ll see 50–200ms added latency depending on your location. For most use cases (CRM syncs, once-per-hour triggers), this doesn’t matter. For sub-second webhook processing, self-hosted wins.

I tested both on the same workflow (Slack message → HTTP request → database insert):

Self-hosted (Hetzner, Frankfurt): 45ms average
n8n Cloud (AWS US-East): 180ms average
n8n Cloud (AWS EU-Central): 95ms average

For real-time integrations, self-hosted is noticeably faster.

Security: Database and Credentials

Self-hosted: Your encrypted credentials (API keys, passwords, tokens) are stored in your PostgreSQL database, which lives on your server. Only your VPS has access. You control encryption, backups, and access logs.

n8n Cloud: Credentials are encrypted and stored in n8n’s database. n8n uses industry-standard AES-256 encryption. Realistically, they’re as secure as your credentials in any SaaS tool. But you’re trusting n8n’s infrastructure.

For sensitive workflows—handling payment data, internal API keys, or production database credentials—self-hosted gives you explicit control. You can audit the database directly:

-- Self-hosted: Check credential encryption
SELECT id, name, type, credentials FROM db_credentials WHERE user_id = 'your_id';

With n8n Cloud, you can’t do this. You have to trust their audit logs.

Compliance: GDPR, HIPAA, SOC 2

GDPR: If you process EU customer data, data residency matters.

  • Self-hosted: Host your VPS in the EU. Your data never leaves Europe. Compliant.
  • n8n Cloud: Data may be processed in the US (AWS). You’d need a Data Processing Agreement (DPA) with n8n and possible additional safeguards.

HIPAA (healthcare):

  • Self-hosted: You can implement HIPAA-compliant infrastructure. n8n Cloud doesn’t offer HIPAA BAAs on free/Pro tiers.
  • n8n Cloud: Enterprise tier offers HIPAA support with a Business Associate Agreement.

SOC 2:

  • Self-hosted: You’re responsible for SOC 2 compliance of your infrastructure. n8n itself is open-source and auditable.
  • n8n Cloud: n8n maintains SOC 2 Type II. You inherit some compliance, but your VPS/infrastructure is on you.

My take: If compliance is a hard requirement (regulated industry, customer data), self-host on a compliant VPS or don’t use n8n for that workflow. If it’s nice-to-have, n8n Cloud’s Enterprise tier is reasonable.

Uptime and Reliability

Self-hosted: Your uptime depends on your VPS provider and your operational discipline.

  • Hetzner SLA: 99.9% (= ~8.7 hours/month downtime)
  • Contabo SLA: 99.9%
  • DigitalOcean SLA: 99.99% (higher tier)

n8n Cloud: 99.9% on Pro tier, 99.95% on Team/Enterprise.

Real talk: I’ve had self-hosted n8n down 2–3 times per year due to my own maintenance (database corruption, failed updates). n8n Cloud would’ve been more reliable. But most outages were my fault, not the provider’s.

To maximize self-hosted uptime, I recommend:

  1. Enable automatic Docker image updates (watchtower)
  2. Use a managed PostgreSQL database instead of containerized (RDS, DigitalOcean Managed DB)
  3. Set up monitoring with Uptime Robot or Grafana
# Add this to docker-compose.yml for auto-updates
watchtower:
  image: containrrr/watchtower
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
  command: --interval 86400 --cleanup
  restart: unless-stopped

Migration Paths and Lock-In

The biggest fear with any platform: what if I need to switch?

Exporting from n8n Cloud

This is surprisingly simple. n8n exports workflows as JSON:

  1. Go to your workflow
  2. Click MenuDownload
  3. You get a .json file containing the entire workflow definition
{
  "name": "Sync Slack to CRM",
  "nodes": [
    {
      "name": "Slack Trigger",
      "type": "n8n-nodes-base.slack",
      "position": [250, 300],
      "parameters": {
        "events": ["message"],
        "channel": "C123456"
      }
    }
  ],
  "connections": {}
}

You can import this into a self-hosted n8n instance without modification. Zero vendor lock-in at the workflow level.

BUT: Your credentials are not exported. You’ll need to re-add API keys, OAuth tokens, and database passwords manually. For a workflow with 10 credentials, that’s 15 minutes of re-entry.

Switching from Self-Hosted to Cloud

Export from self-hosted, import to Cloud. Same deal—workflows transfer cleanly, credentials don’t.

I’ve migrated 3 workflows from self-hosted to Cloud when clients wanted to reduce DevOps overhead. Takes about an hour per workflow (including credential re-setup and testing).

Lock-In Reality Check

n8n itself isn’t lock-in: The workflow definition is portable. You could rewrite these in Zapier, Make, or custom code.

The real lock-in: Integration-specific knowledge. You’ve built 20 workflows using n8n’s Slack node, Google Sheets node, etc. If you switch to Make or Zapier, you’re rebuilding those workflows, not just exporting them.

My honest assessment: n8n has minimal technical lock-in but moderate operational lock-in. You’re not locked into n8n’s infrastructure, but you’re locked into n8n’s workflow patterns.

If you’re concerned about lock-in, self-hosted is slightly safer because you own the code. But realistically, for modern SaaS, you’re always dependent on something—a cloud provider, a framework, a language.


Getting Started with Your Choice

Time to actually deploy. Here’s your checklist:

If you’re choosing n8n Cloud:

  1. Sign up at n8n Cloud
  2. Start with the free tier (400 executions/month)
  3. Build your first workflow (Slack → Email, or webhook → database)
  4. Upgrade to Pro ($20/month) if you hit the execution limit within a month
  5. Done. No infrastructure needed.

If you’re choosing self-hosted:

  1. Rent a VPS from Hetzner (recommended), Contabo, or DigitalOcean
  2. Register a domain on Namecheap
  3. Follow the Docker Compose setup I showed above
  4. Set SSL with Let’s Encrypt (included in my Nginx config)
  5. Access n8n, set your admin password, start building
  6. Set up monitoring (Uptime Robot or Grafana) to catch issues before they escalate
  7. Schedule monthly backup checks

If you’re still on the fence:

Ask yourself:

  • Do I have < 5,000 executions/month? → Cloud
  • Do I need data residency, custom nodes, or offline workflows? → Self-hosted
  • Am I building for a client or internal use? → Self-hosted (more control), or Cloud (less support burden)
  • Is compliance a requirement? → Check the tier; likely self-hosted is safer

Outsource Your Automation

Don’t have time? I build production n8n workflows, WhatsApp bots, and fully automated YouTube Shorts pipelines. Hire me on Fiverr, mention SYS3-HUGO for priority. Or DM at chasebot.online.

Both paths work. The real win is picking the one that matches your constraints and shipping. Spend your energy on the workflow itself—extracting data, building integrations, automating the boring—not on the infrastructure. That’s the whole point of n8n.

Want to automate this yourself?

Start with n8n Cloud (free tier available) or self-host on a Hetzner VPS for full control.

Want this engine running on your own VPS?

This blog publishes itself — daily, unattended, on free API tiers. The full engine, Hugo theme, and setup guide are available as System 3.

Get System 3
system online