Deploy n8n-production-stack (w/ worker & webhook)
Self-host Open-source workflow automation: 400+ integrations, AI agent
N8N Pro Stack [w/ Worker & Postgres]
Just deployed
/var/lib/postgresql/data
main
Just deployed
/data
worker
Just deployed
Redis
Just deployed
/data
webhook
Just deployed

Deploy and Host n8n-production-stack on Railway
Deploy a production-grade, self-hosted n8n instance on Railway in one click. This template provisions the full queue-mode architecture: a main instance (UI + API), a worker (workflow execution), a webhook processor (dedicated webhook handling), PostgreSQL for persistence, and Redis for the job queue — all pre-wired with private networking.
About Hosting n8n-production-stack
n8n is an open-source workflow automation platform that lets you connect 400+ apps, APIs, and services using a visual node editor — with the option to drop into JavaScript when you need it. Unlike SaaS tools, self-hosting n8n means your credentials and execution data never leave your infrastructure.
Key features:
- 400+ native integrations (Slack, GitHub, Postgres, OpenAI, Stripe, and more)
- Visual workflow builder with native code nodes (JavaScript/Python)
- AI agent support via LangChain integration
- Git-based version control for workflows
- Webhook triggers, cron schedules, and event-based execution
Architecture in this template:
Incoming webhook → Webhook Processor → Redis (Bull queue) → Worker executes
Scheduled trigger → Main instance → Redis (Bull queue) → Worker executes
The main instance never executes workflows itself — it only manages the UI and dispatches jobs. This prevents long-running workflows from blocking the editor or incoming webhooks.
Why Deploy n8n on Railway
- Private networking — Postgres, Redis, and all n8n services communicate over Railway's internal network; nothing is unnecessarily exposed
- Zero infrastructure config — no Nginx, no SSL certs, no Docker Compose files to maintain
- Horizontal scaling — add more worker replicas directly from the Railway dashboard
- Managed secrets —
N8N_ENCRYPTION_KEYis auto-generated and shared across services via Railway's variable references - One-click deploy — the entire 5-service stack is live in under two minutes
Common Use Cases
- AI agent pipelines — orchestrate LLM calls, RAG workflows, and tool-calling agents that run reliably at scale
- CRM and sales automation — sync leads between HubSpot, Notion, and Slack; trigger follow-up sequences based on deal stage
- DevOps event handling — respond to GitHub webhooks, run CI checks, post deploy summaries to Slack
- Data ETL pipelines — pull from APIs, transform with code nodes, and load into Postgres or a data warehouse on a schedule
Dependencies for n8n
- PostgreSQL — stores workflow definitions, credentials, and execution history
- Redis — powers the Bull job queue that coordinates work between the main instance, workers, and webhook processor
Environment Variables Reference
| Variable | Description | Required |
|---|---|---|
N8N_ENCRYPTION_KEY | Encrypts stored credentials. Must be identical across all three n8n services. Auto-generated on deploy. | ✅ |
N8N_EDITOR_BASE_URL | Public URL of the main instance UI | ✅ |
WEBHOOK_URL | Public URL of the webhook processor | ✅ |
DB_TYPE | Set to postgresdb | ✅ |
DB_POSTGRESDB_HOST | Postgres private hostname | ✅ |
EXECUTIONS_MODE | Set to queue to enable distributed execution | ✅ |
QUEUE_BULL_REDIS_HOST | Redis private hostname | ✅ |
EXECUTIONS_DATA_PRUNE | Auto-delete old execution logs | Recommended |
EXECUTIONS_DATA_PRUNE_MAX_COUNT | Max executions to retain (default: 100) | Recommended |
N8N_RUNNERS_ENABLED | Enables task runner isolation | Recommended |
NODE_OPTIONS | Set to --max_old_space_size=8192 for memory headroom | Recommended |
Deployment Dependencies
- Docker image:
n8nio/n8n(used for all three n8n services) - n8n queue mode docs
- n8n environment variables reference
Self-Hosting n8n Outside Railway
For a minimal local setup with Docker Compose:
# docker-compose.yml
services:
n8n:
image: n8nio/n8n
ports:
- "5678:5678"
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_USER=postgres
- DB_POSTGRESDB_PASSWORD=yourpassword
- DB_POSTGRESDB_DATABASE=n8n
- N8N_ENCRYPTION_KEY=your-32-char-secret
volumes:
- n8n_data:/home/node/.n8n
depends_on:
- postgres
postgres:
image: postgres:15
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: yourpassword
POSTGRES_DB: n8n
volumes:
- pg_data:/var/lib/postgresql/data
volumes:
n8n_data:
pg_data:
docker compose up -d
# Access n8n at http://localhost:5678
This runs a single-instance setup. For production queue mode (as deployed by this Railway template), you'd add Redis and run separate n8n worker and n8n webhook containers sharing the same DB and encryption key.
n8n vs Zapier vs Make
| n8n (self-hosted) | Zapier | Make | |
|---|---|---|---|
| Pricing | Free (infra cost only) | From $20/month | From $9/month |
| Data privacy | Full — your infra | SaaS | SaaS |
| Custom code | ✅ JS/Python nodes | ❌ | Limited |
| AI agents | ✅ Native LangChain | Limited | Limited |
| Execution limits | None (your hardware) | Task-based caps | Operation caps |
n8n is the go-to choice when you need code-level flexibility, data sovereignty, or are hitting Zapier's pricing ceiling at scale.
How Much Does n8n Cost?
n8n Community Edition is free and open-source (Apache 2.0 with a Commons Clause for SaaS use). You only pay for the infrastructure you run it on. On Railway, cost depends on resource usage — typically a few dollars per month for light workloads. n8n also offers a managed cloud plan starting at ~$20/month if you prefer zero ops, but self-hosting on Railway gives you the same architecture at a fraction of the cost.
Getting Started After Deploying n8n
Once Railway finishes deploying, open the public URL assigned to the main service. You'll be prompted to create an owner account on first visit — set your email and password here. After logging in, create your first workflow by clicking New Workflow, add a trigger node (e.g. Webhook or Schedule), and chain action nodes to it. To test webhook triggers, use the URL shown in the webhook service's Railway domain — that's the dedicated processor. Your workflows and credentials are encrypted and persisted in Postgres automatically.

FAQ
What all integrations does n8n supports? n8n ships with 400+ native integration nodes covering databases, CRMs, communication tools, cloud providers, AI models, and developer APIs. You can also build custom nodes or use the HTTP Request node for anything not natively supported.
Can n8n be self-hosted for data privacy?
Absolutely — that's one of the primary reasons teams choose it. All credentials are encrypted with your N8N_ENCRYPTION_KEY and stored in your own Postgres database. Nothing is transmitted to n8n's servers.
Why are there three separate n8n services in this template? Queue mode splits concerns: the main instance handles the UI and scheduling, workers execute workflows in parallel, and the webhook processor handles incoming HTTP triggers without being blocked by running workflows. This prevents any single bottleneck and allows independent scaling.
Can I scale workers horizontally? Yes. Workers are stateless — just increase the replica count for the worker service in Railway. All workers pull from the same Redis queue automatically.
What happens if a worker crashes mid-execution? The job is requeued by Bull and picked up by another available worker. The main instance and webhook processor remain unaffected.
Is the webhook processor the only service that needs a public domain? The main instance also needs a public domain for the editor UI. The worker runs with no public exposure — it only communicates with Redis and Postgres over private networking.
Template Content
