Deploying n8n on Render with a Supabase backend gives you a generous free-tier playground for building automations and AI agents. This guide walks through the full setup: provisioning Supabase, configuring Render’s Docker-based web service, and wiring environment variables so your workflows survive restarts.
⚠️ Replace any placeholder credentials with your own secrets. Keep database passwords and encryption keys stored in a secure vault.
Prerequisites
- Render account (free tier is fine to start)
- Supabase account
- ~20 minutes
Step 1: Provision Supabase Postgres
- Create project. In the Supabase dashboard, click New Project, name it (e.g.,
n8n-database). - Choose region. Pick a region near your planned Render deployment to minimize latency. Sample region pairs:
- Render: Oregon, Ohio, Virginia, Frankfurt, Singapore
- Supabase: North California, North Virginia, Ohio, Ireland, London, Paris, Frankfurt, Zurich, Stockholm, Mumbai, Singapore, Tokyo, Seoul, Sydney, São Paulo
- Set database password. Generate a strong password; store it in a secure manager.
- Launch project. Accept default security settings for now and click Create new project.
- Grab connection details. Once the project initializes, click Connect near the
maindatabase:- Open Session pooler (Shared Pooler) → View parameters.
- Save the host, port, database, user, and pool mode. Note that Render.com services are IPv4-only, so you need to use the session pooler endpoint. Direct connections are IPv6-only unless you purchase an IPv4 support add-on.
Step 2: Create Render web service
- In Render, choose New ➜ Web Service.
- Select Existing Image and set Image URL to
docker.io/n8nio/n8n:latest. - Name the service (e.g.,
n8n-instance). This becomes the default subdomain:https://n8n-instance.onrender.com.- (Please note that the name you choose here will become the subdomain when you deploy, like https://n8n-instance.onrender.com. You can connect your own custom domain later if you'd like. However, please make sure to pick an easy to remember personal name.)
- Region: Match your Supabase region where possible.
- Instance Type: Start with the free instance to test. Be aware it sleeps on inactivity, so long-running automations may need a paid tier later.
Step 3: Wire environment variables
Scroll to Environment Variables and add each pair:
| Variable | Value |
|---|---|
DB_POOL_MODE | session |
DB_POSTGRESDB_DATABASE | Supabase database name (postgres by default) |
DB_POSTGRESDB_HOST | Supabase pooler host (e.g., xyz.pooler.supabase.com) |
DB_POSTGRESDB_PASSWORD | Supabase DB password you saved earlier |
DB_POSTGRESDB_PORT | 5432 |
DB_POSTGRESDB_USER | Supabase database user (e.g., postgres.xyz) |
DB_TYPE | postgresdb |
DB_POSTGRESDB_CONNECTION_TIMEOUT | 600 |
DB_POSTGRESDB_MAX_POOL_SIZE | 30 |
DB_POSTGRESDB_SSL | true |
GENERIC_TIMEZONE | e.g., America/New_York |
N8N_BLOCK_ENV_ACCESS_IN_NODE | false |
N8N_ENCRYPTION_KEY | Secure random password (click on "generate" and store safely) |
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS | true |
N8N_HOST | 0.0.0.0 |
N8N_PROTOCOL | https |
N8N_RUNNERS_ENABLED | true |
N8N_VERSION_NOTIFICATIONS_DISABLED | true (optional, to hide version update notifications) |
N8N_PORT | 5678 |
PORT | 5678 |
N8N_PROXY_HOPS | 1 |
WEBHOOK_URL | https://<your-service>.onrender.com (the name you gave your web service + onrender.com (e.g. https://n8n-instance.onrender.com)) |
Step 4: Add persistent storage
- In Advanced, create a disk:
- Mount Path:
/home/node/.n8n - Size: Start at 1 GB; you can resize later.
- Mount Path:
While n8n can run statelessly, persistent storage prevents you from having to reinstall community nodes after every single deploy. No persistent storage works for now too, no worries.
Important note on persistent storage
If you don't add persistent storage, every time you deploy, you'll need to reinstall all third-party community nodes. That's a lot of extra unnecessary work.
Render's pricing model is based on usage, not fixed plans. You only pay for the time your instance is running, bandwidth, and storage. If you shut down your instance, you don't pay anything.
Step 5: Deploy
- Double-check configuration and click Deploy Web Service.
- Watch build logs in the Logs tab until the service goes live.
- Visit the public URL (
https://<your_chosen_service_name>.onrender.com). Complete the initial admin setup with a valid email and receive the free community license activation code.
Step 6: Tune Supabase
- In Supabase Project Settings ➜ Database ➜ Pool Size, raise the limit from 15 to 30 to match Render’s pool configuration.
- Enable Row Level Security for the tables you create later (Table Editor ➜ Enable RLS).
Step 7: Confirm persistence
- Build a sample workflow in n8n.
- Restart the Render service from the dashboard.
- Reopen n8n and verify your workflow still exists proof that Supabase + disk storage (optional) are working.
Billing notes
Render bills per-second usage, bandwidth, and storage. If you shut down the instance, compute charges stop. Upgrade only when you need 24/7 uptime or higher performance.
Wrap-up
You now have a free-tier friendly n8n instance running on Render with Supabase handling persistence. Extend this setup by adding n8n runners, custom domains, or integration secrets.
When you’re ready to scale, upgrade Render’s plan and Supabase’s compute tier without re-architecting the stack.
Final Thoughts
This is a great way to get started with self-hosting n8n. But if you want a better, more cost-effective option, you can host n8n on your own paid server (vps).
It’s definitely more complicated to set up, but it saves you money in the long run. If you're comfortable with some extra effort, self-hosting on your own infrastructure is the smarter choice.