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
- Self-Hosted n8n: Full Control, Full Responsibility
- n8n Cloud: Set It and Forget It
- Cost Breakdown: Where Your Money Goes
- Performance, Security, and Compliance
- Migration Paths and Lock-In
- Getting Started with Your Choice
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
| Item | Cost | Notes |
|---|---|---|
| VPS (2GB RAM) | $120–240 | Hetzner or Contabo, billed monthly |
| Domain | $10 | Via Namecheap, yearly renewal |
| SSL certificates | $0 | Let’s Encrypt is free |
| Total infrastructure | $130–250 | |
| Your time (2–3 hrs/month @ $50/hr) | $1,200–1,800 | Honestly 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
| Tier | Monthly | Annual | Workflows | Executions/mo |
|---|---|---|---|---|
| Free | $0 | $0 | 10 | 400 |
| Pro | $20 | $240 | 50 | 5,000 |
| Team | $90 | $1,080 | Unlimited | 50,000 |
| Enterprise | $490+ | $5,880+ | Unlimited | 1M+ |
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:
- Enable automatic Docker image updates (watchtower)
- Use a managed PostgreSQL database instead of containerized (RDS, DigitalOcean Managed DB)
- 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:
- Go to your workflow
- Click Menu → Download
- You get a
.jsonfile 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:
- Sign up at n8n Cloud
- Start with the free tier (400 executions/month)
- Build your first workflow (Slack → Email, or webhook → database)
- Upgrade to Pro ($20/month) if you hit the execution limit within a month
- Done. No infrastructure needed.
If you’re choosing self-hosted:
- Rent a VPS from Hetzner (recommended), Contabo, or DigitalOcean
- Register a domain on Namecheap
- Follow the Docker Compose setup I showed above
- Set SSL with Let’s Encrypt (included in my Nginx config)
- Access n8n, set your admin password, start building
- Set up monitoring (Uptime Robot or Grafana) to catch issues before they escalate
- 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