Why self-host your automation engine
No-code/low-code automation platforms like Zapier or Make charge per execution and impose quotas that quickly escalate. By self-hosting n8n or Node-RED on a VPS, you eliminate these limits: quota-free executions, data that never leaves your server, and full access to community nodes. n8n is oriented toward application integrations (CRM, databases, AI, webhooks) with a visual workflow logic close to Make. Node-RED, born at IBM, processes JSON messages through an event-driven flow system, perfect for connecting MQTT sensors, transforming payloads, or orchestrating hardware. Both run in containers and are managed from a browser.
What you gain with self-hosting
- Quota-free executions with no per-task billing, unlike SaaS automation platforms.
- Data and secrets (API tokens, credentials) stored exclusively on your VPS.
- Access to community nodes and integrations not available in capped cloud offerings.
- Ability to run custom code (JavaScript, Python) without sandbox restrictions.
- Direct integration with your internal services via the private Docker network.
- Full control over versions and updates, with no imposed pricing changes.
n8n vs Node-RED comparison
Scroll the table
| Criterion | n8n | Node-RED |
|---|---|---|
| Primary use case | SaaS API integration, business workflows | IoT, MQTT, real-time stream processing |
| Execution model | Triggered workflow (cron, webhook, trigger) | Event-driven message-oriented flows |
| Integration catalog | 400+ ready-to-use application nodes | Community node library via palette manager |
| Custom code | Built-in Code nodes (JS/Python) | Function nodes in JavaScript |
| Database | SQLite by default, PostgreSQL recommended | JSON files on disk |
| Recommended RAM | 1 to 2 GB | 512 MB to 1 GB |
| License | Sustainable Use License (fair-code) | Apache 2.0 |
| Learning curve | Accessible, non-developer friendly | Flow logic, more technical |
Prerequisites by tool
For n8n, plan a VPS with 2 vCPU and 2 GB of RAM, and use PostgreSQL rather than SQLite once you exceed a few active workflows: SQLite locks the database under concurrent load. Allow 5 GB of disk for the database and execution binaries. Node-RED is leaner: 1 vCPU and 1 GB of RAM are enough, as its flows are stored in simple JSON files. In both cases: Docker Compose v2, a dedicated subdomain (n8n.yourdomain.com or flows.yourdomain.com) and an HTTPS reverse proxy are mandatory, as these interfaces expose secrets and must never run over plain HTTP.
Deploy n8n (or Node-RED) on your VPS
Provision Docker and the network
On the VPS, create a dedicated Docker network:
docker network create automation. It will isolate n8n/Node-RED from the database and the reverse proxy.Start PostgreSQL for n8n
In the docker-compose file, add a
postgres:16service with a persistent volume and credentials as environment variables. For Node-RED, skip this step: adata:/datavolume is enough.Configure the application container
For n8n, use the
docker.n8n.io/n8nio/n8nimage withN8N_HOST,WEBHOOK_URL=https://n8n.yourdomain.com/andDB_TYPE=postgresdb. For Node-RED, thenodered/node-red:latestimage exposed on port1880is sufficient.Start and verify
Run
docker compose up -d. n8n listens on5678, Node-RED on1880. Check logs withdocker compose logs -fand confirm the database connection for n8n.Secure behind a reverse proxy
Route traffic via Caddy or Traefik with an automatic Let's Encrypt certificate. Enable authentication:
N8N_BASIC_AUTH_ACTIVE=truefor n8n, and theadminAuthdirective insettings.jsfor Node-RED. Without this, the editor is publicly accessible.Set up backups
Schedule a daily
pg_dumpfor the n8n database, or a simple snapshot of the/datavolume for Node-RED, deposited on external storage viacron.
For n8n in production, enable queue mode with Redis and separate worker containers: the main process only orchestrates while workers execute nodes in parallel. This absorbs webhook spikes without blocking the editor. On the Node-RED side, isolate Function nodes in a VM context with a restricted functionGlobalContext to prevent a poorly written flow from crashing the entire runtime.
n8n vs Node-RED: license and business model differences
The license difference is the first criterion to evaluate before any enterprise deployment. Node-RED is published under the Apache 2.0 license: you can use, modify, and integrate it into a commercial product without restriction or royalty. n8n uses the Sustainable Use License (also called fair-code): personal use and internal projects are free, but if you integrate n8n into a product or service you commercialize, or offer it to third parties as a managed service, a paid Enterprise license is required. In practice, for a team automating its own internal processes, n8n remains free. For an agency delivering n8n access as a service to clients, the line is crossed. Node-RED has no ambiguity: Apache 2.0 covers all uses, including commercial, without restrictive clauses. This license choice reflects each project's business model: n8n is a commercial company monetizing its cloud version and Enterprise licenses; Node-RED is an OpenJS Foundation project, with no commercial entity behind it, maintained by the community and IBM.
Server resources compared
Scroll the table
| Resource | n8n | Node-RED |
|---|---|---|
| Recommended vCPU | 2 vCPU (minimum viable: 1) | 1 vCPU (runs on Raspberry Pi) |
| Recommended RAM | 2 GB (1 GB possible for small usage) | 512 MB to 1 GB |
| Disk (application) | ~500 MB image + 2-5 GB PostgreSQL | ~300 MB image + a few MB JSON |
| Database | PostgreSQL (prod) or SQLite (dev) | JSON files on volume |
| Redis (optional) | Required for multi-worker queue mode | Not needed |
| Edge/embedded usage | Not suitable (too heavy) | Yes — Raspberry Pi, ESP32 via MQTT |
Use cases: n8n for SaaS integrations, Node-RED for IoT/edge
The positioning of each tool reflects its internal architecture. n8n shines on SaaS integrations: Slack ↔ Notion synchronization, sending Stripe data to a CRM, triggering GitHub workflows from a webhook, enriching leads via an AI API, or orchestrating data pipelines between Airtable and PostgreSQL. It embeds 400+ nodes with managed OAuth authentication, reusable sub-workflows, and a browsable execution history. Node-RED is designed for low-level stream processing and IoT: connecting to MQTT brokers to receive sensor data, transforming payloads to feed a time-series database like InfluxDB, home automation via Home Assistant, or routing hardware events in real time. Its flow logic (message in → processing → message out) directly mirrors the publish/subscribe model. Both tools can coexist: Node-RED collects and normalizes hardware data, n8n consumes it via webhook to trigger SaaS actions (support ticket, email alert, CRM update). This combination is common in connected industrial projects.
Migrating from Node-RED to n8n (or vice versa)
Export existing flows
In Node-RED, export flows via the hamburger menu → Export → Clipboard (JSON format). For n8n, use Settings → Export → Download all workflows. These exports are the only portable artifacts between the two tools.
Identify equivalent nodes
List the nodes in use and find their equivalent in the other tool. Node-RED MQTT nodes correspond to n8n MQTT nodes; HTTP Request nodes are present on both sides. Specialized nodes (InfluxDB, OPC-UA) don't always have a direct equivalent in n8n: you'll need an HTTP Request node or custom code.
Recreate manually on staging
There is no automatic converter between the two formats. Recreate workflows manually on an isolated staging environment. Start with the simplest flows to validate logic before tackling critical ones.
Validate webhooks and triggers
n8n webhooks use a
/webhook/<uuid>URL format different from Node-RED's (/endpoint). Update all systems calling these URLs. For MQTT triggers, verify that the client ID and topics are carried over identically.Switch traffic and monitor
Once validated on staging, switch source webhooks one by one to the new tool. Keep the old one active in parallel for a few days to compare execution volumes. Tear down the old environment only after confirming parity.
When to choose Node-RED over n8n
- Your project involves connected hardware: MQTT sensors, GPIO, industrial protocols (OPC-UA, Modbus) — Node-RED is built for that.
- You need a 100% open source license with no commercial use clause: Apache 2.0 has no restrictions.
- Your resources are constrained: Raspberry Pi, 512 MB VPS, or edge device — Node-RED runs where n8n cannot.
- Your stack already includes an MQTT broker (Mosquitto, EMQX) and a time-series database (InfluxDB): Node-RED integrates natively.
- Your team is technical and comfortable with the flow/message model: Node-RED has a steeper learning curve but is more flexible for low-level flows.
- You want to avoid dependency on a commercial entity: Node-RED is governed by the OpenJS Foundation, with no risk of license changes.
You can deploy both n8n and Node-RED on the same VPS using Docker Compose, assigning them different ports (5678 for n8n, 1880 for Node-RED) and isolating them on separate Docker networks. Create an automation-n8n network for n8n + PostgreSQL + Redis, and an automation-nodered network for Node-RED + Mosquitto. The reverse proxy (Caddy or Traefik) is the only contact point between the two subnets and the outside. This architecture lets you use Node-RED for IoT collection and n8n for SaaS actions on the same machine, without the two runtimes communicating directly — a Node-RED flow sends its data via HTTP webhook to n8n, maintaining loose coupling and simplifying future migration.