n8n Hosting on VPS
Self-hosted workflow automation. Run n8n on a VPS to wire up 400+ services and AI models with no per-execution fees and full data ownership.
Use cases
Replace Zapier and Make for high-volume flows
Wire AI models into existing business processes
Sync data across SaaS without ETL bills
Build internal API gateways
Schedule reports, monitoring, alerts
Power customer-facing automations
Recommended plans for n8n
Medium plan handles n8n + Postgres + Redis for moderate workflow volume.
- 40 CountriesFrom$10.19 / 1 month$9.68 with is*smart
- Xeon 2x2.20 GHz CPU
- 2 Gb RAM
- 30GB SSD Drive
- 3 Tb Bandwidth
- 40 CountriesFrom$21.24 / 1 month$20.18 with is*smart
- Xeon 3x2.20 GHz CPU
- 4 Gb RAM
- 40GB SSD Drive
- Unmetered Bandwidth
- 40 CountriesFrom$33.99 / 1 month$32.29 with is*smart
- Xeon 4x2.20 GHz CPU
- 8 Gb RAM
- 50GB SSD Drive
- Unmetered Bandwidth
n8n hosting options that scale without painful migrations
Hosting requirements changed? Skip unnecessary migration. Add RAM, extend the drive, increase backup frequency, or attach new IPs — all on the same n8n VPS. Upgrade via ticket or pre-configure before checkout.
Setup guide
Five steps. Public webhook URL working at the end.
Step 01 — Order your VPS
Medium plan handles n8n + Postgres + Redis for moderate workflow volume. Pick a region close to the services your workflows talk to most.
ssh root@your-server-ipStep 02 — Install Docker and Docker Compose
n8n runs cleanest as a Docker Compose stack – Postgres for state, Redis for queue, n8n itself, and Caddy for HTTPS termination.
curl -fsSL https://get.docker.com | shsystemctl enable --now dockerStep 03 — Configure the n8n stack
Create a docker-compose.yml with n8n, Postgres, and Redis. Set WEBHOOK_URL to your public HTTPS endpoint so external services can hit your flows.
services: n8n: image: n8nio/n8n environment: - WEBHOOK_URL=https://n8n.yourdomain.com - DB_TYPE=postgresdb - DB_POSTGRESDB_HOST=postgres depends_on: [postgres, redis]Step 04 — Set up HTTPS
Point a subdomain at your VPS IP. Caddy or Coolify reverse-proxy can handle Let's Encrypt automatically.
A n8n.yourdomain.com → your-server-ipStep 05 — Verify your first workflow
Open the n8n UI, create a Webhook → Set → Respond workflow, hit the webhook URL with curl. If you get the expected JSON back, the public endpoint, queue and DB are all wired correctly.
curl -X POST https://n8n.yourdomain.com/webhook-test/helloExpected output:
{"status":"ok"}Common issues
- Webhooks return 404 – n8n needs the public URL set via
WEBHOOK_URLenv var, not just listening on localhost. - Workflows lose state on restart – make sure Postgres is the configured DB, not the default SQLite, before you put it in production.