Back · Hosting
paas

Coolify

Open-source, self-hosted Heroku for n8n.

Difficulty
Monthly cost from: Free (self-hosted PaaS) + VPS cost
Best for: Devs who want a UI on top of their own VPS.

Coolify is an open-source, self-hostable Heroku/Vercel alternative. Install it once on any VPS, then deploy n8n as a one-click service with automatic HTTPS.

Pros

  • Beautiful UI over Docker
  • Automatic HTTPS via Traefik
  • One-click n8n service

Cons

  • Still need to manage the host VPS
  • Newer project, breaking changes possible

Prerequisites

  • A VPS to run Coolify itself (min 2GB RAM)
  • Docker installed (Coolify's installer handles this)
  • A domain (or subdomains) with DNS access

Step-by-step guide

  1. Step 1

    Install Coolify

    Run the official installer script on your VPS.

    curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash
  2. Step 2

    Add a resource → n8n service

    In the Coolify dashboard, choose 'Services' and select n8n from the one-click templates.

  3. Step 3

    Attach a domain

    Set the FQDN in Coolify's service settings; it provisions HTTPS via Traefik + Let's Encrypt automatically.

  4. Step 4

    Deploy & verify

    Click Deploy; Coolify wires env vars, Postgres, and volumes for you.

Scaling & queue mode

For higher throughput, switch to queue mode: set EXECUTIONS_MODE=queue, add a Redis instance, and run one or more separate `n8n worker` containers alongside the main process. The main instance handles the editor UI and webhooks while workers pull jobs from Redis. Scale worker replicas horizontally as load grows, and use a managed Postgres (with read replicas if needed) once execution volume is high.

Backup & upgrade

Coolify has a built-in backup scheduler for databases (S3-compatible destinations supported). Upgrade n8n from the service's 'Redeploy' button after bumping the image tag.

Security checklist

  • Always run behind HTTPS (Caddy/Traefik/Nginx + Let's Encrypt) — never expose port 5678 directly.
  • Set a strong, permanent N8N_ENCRYPTION_KEY and back it up (losing it breaks stored credentials).
  • Use Postgres, not the default SQLite, for anything beyond local testing.
  • Enable N8N_BASIC_AUTH or an SSO/proxy layer if the instance is reachable from the internet.
  • Restrict inbound firewall rules to 80/443 (and SSH from your IP only).
  • Keep the n8n image pinned and update on a schedule instead of always using :latest in production.

Cost breakdown

  • Coolify softwareFree & open-source
  • Underlying VPS~$6–20/mo

Troubleshooting & FAQ

+Can I use SQLite instead of Postgres?

n8n defaults to SQLite, which works for testing but isn't recommended for production: no concurrent writers, harder backups, and risk of corruption under load. Use Postgres for anything real.

+My webhooks return 404 / don't trigger — why?

WEBHOOK_URL must match the public HTTPS URL exactly (including trailing slash), and the workflow must be activated (not just saved) for production webhook URLs to work.

+How do I move from Coolify to another host later?

Export workflows/credentials with the n8n CLI (`n8n export:workflow --all` / `export:credentials --all`) or the REST API, restore the Postgres dump on the new host, then import.

+Do I lose data if the container restarts?

No, as long as n8n_data and the Postgres volume are mounted as named Docker volumes (not ephemeral container storage), your data persists across restarts and image updates.