TL;DR — While cloud-hosted automation services charge based on workflow runs, self-hosting n8n on a private Virtual Private Server (VPS) lets you run unlimited executions for a flat server cost (around ₹500/month). By deploying n8n using Docker Compose combined with a reverse proxy like Caddy, you can obtain automatic SSL certificates and secure your business data within your own server environment.
Why Self-Host n8n?
If you run automation pipelines with high transaction volumes (such as syncing dozens of CRM records, processing webhook payloads, or handling database batch jobs), SaaS fees quickly become cost-prohibitive.
[ SaaS Platform: 100,000 runs ] ──► Cost: ₹10,000+/month
[ Self-Hosted: 1,000,000+ runs ] ──► Cost: Flat ₹500/month (Server cost)
Additionally, self-hosting gives you full custody of your data. Customer names, phone numbers, and keys never leave your private VPS, which is essential for compliance.
Cost Comparison: SaaS vs. Self-Hosted
Note: All pricing figures below are checked as of 2026 and refer to standard cloud and hosting plans.
| Feature | n8n Cloud (Pro Plan) | Self-Hosted VPS (Hetzner / DigitalOcean) |
|---|---|---|
| Monthly Cost | ~₹4,000/month ($50 USD) | ~₹500/month ($6 USD) |
| Execution Limits | 10,000 executions | Unlimited (limited only by CPU/RAM) |
| Data Privacy | Shared cloud database | 100% private database control |
| Custom Libraries | Limited community nodes | Load any npm package or binary |
Step-by-Step Deployment Guide
Here is exactly how to deploy a production-ready, secure instance of n8n on an Ubuntu VPS.
1. Provision a VPS and Configure DNS
- Purchase a basic cloud server (e.g., 2GB RAM / 1 vCPU) from providers like Hetzner, DigitalOcean, or AWS Lightsail. Select Ubuntu 24.04 LTS as the operating system.
- In your domain registrar (e.g., GoDaddy or Namecheap), create a DNS A Record pointing a subdomain (e.g.,
n8n.yourcompany.com) directly to your VPS IP address.
2. Install Docker and Docker Compose
SSH into your VPS and install Docker:
# Update package database
sudo apt update && sudo apt upgrade -y
# Install Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# Install Docker Compose
sudo apt install docker-compose-plugin -y
3. Create the Configuration Directory
Create a dedicated directory to store n8n data and configuration files:
mkdir -p ~/n8n-docker/data
cd ~/n8n-docker
4. Write the Docker Compose File
Create a docker-compose.yml file to orchestrate the n8n container and Caddy (which handles reverse proxy and automatic SSL certificates):
version: '3.8'
services:
caddy:
image: caddy:latest
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
n8n:
image: n8nio/n8n:latest
restart: always
environment:
- N8N_HOST=n8n.yourcompany.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- NODE_ENV=production
- WEBHOOK_URL=https://n8n.yourcompany.com/
ports:
- "127.0.0.1:5678:5678"
volumes:
- ./data:/home/node/.n8n
volumes:
caddy_data:
caddy_config:
5. Write the Caddyfile
Create a Caddyfile in the same directory. This tells the Caddy server to route incoming traffic for your domain directly to the running n8n container and auto-generate Let’s Encrypt SSL certificates:
n8n.yourcompany.com {
reverse_proxy n8n:5678
}
6. Spin Up the Containers
Run the Docker Compose orchestration command:
sudo docker compose up -d
Caddy will automatically request an SSL certificate, and within a few seconds, you can navigate to https://n8n.yourcompany.com to create your admin account.
FAQ
Is 2GB RAM enough to run n8n?
Yes. A 2GB RAM VPS can easily handle 50,000+ basic execution cycles per month. If you are processing heavy payloads, reading large Excel sheets, or running resource-heavy JS scripts, you can scale the server to 4GB RAM without losing any data.
How do I update n8n to the latest version?
Updating is straightforward. Run these commands in your docker directory:
sudo docker compose pull
sudo docker compose up -d