Deploy Inngest (with protected dashboard)
Inngest self-hosted with nginx proxy to password-protect the dashboard
InngestPostgres
Just deployed
/var/lib/postgresql/data
InngestRedis
Just deployed
/data
inngest
Just deployed
inngest-nginx-basic-auth
Just deployed
Deploy and Host Inngest on Railway
Inngest is a durable execution platform that lets you write reliable background jobs, scheduled functions, and event-driven workflows in your existing codebase — with zero infrastructure to manage.
About Hosting Inngest
Self-hosting Inngest gives you full control over your execution environment and data. This template deploys Inngest alongside an nginx proxy that password-protects the Inngest dashboard, which would otherwise be not protected if public networking is used. All API traffic (event ingestion, function registration, run management) bypasses the password and is secured by Inngest's own event keys and signing keys, so your apps and SDKs continue to work normally.
Common Use Cases
- Running background jobs and scheduled tasks in a self-hosted environment
- Building event-driven workflows across multiple services
- Replacing ad-hoc queues and cron jobs with reliable durable functions
Dependencies for Inngest Hosting
- PostgreSQL — stores function run history and event data
- Redis — powers the queue and run state
Deployment Dependencies
Implementation Details
Once deployed, configure the Inngest SDK in your app with the following environment variables:
# Point the SDK at Inngest — use private networking if your app is on Railway
INNGEST_BASE_URL=http://${{inngest.RAILWAY_PRIVATE_DOMAIN}}:${{inngest.INNGEST_PORT}}
# Required by the Inngest SDK to verify requests
INNGEST_SIGNING_KEY=${{inngest.INNGEST_SIGNING_KEY}}
INNGEST_EVENT_KEY=${{inngest.INNGEST_EVENT_KEY}}
Setup
INNGEST_SERVE_ORIGIN
The URL of your app's Inngest serve endpoint — the route where you mount the Inngest handler (typically /api/inngest). Inngest calls this URL to trigger your functions.
If your app is deployed on Railway, use private networking to keep traffic internal and reduce costs:
http://${{your-app.RAILWAY_PRIVATE_DOMAIN}}:${{your-app.PORT}}/api/inngest
Alternatively, you can skip this variable and register your app manually through the Inngest dashboard after deploying — navigate to the Apps section and add your serve URL there.
DASHBOARD_USERNAME and DASHBOARD_PASSWORD
Auto-generated credentials for the Inngest dashboard. Find them in the inngest-nginx-basic-auth service variables and update them if desired before deploying.
Accessing Inngest from your app
Set INNGEST_BASE_URL in your app to point at Inngest. Use private networking wherever possible to reduce costs.
Private networking (recommended if your app is on Railway):
http://${{inngest.RAILWAY_PRIVATE_DOMAIN}}:${{inngest.INNGEST_PORT}}
e.g. http://inngest.railway.internal:8288
Public networking (for apps outside Railway):
https://inngest-nginx-basic-auth-template.up.railway.app
You can reference the event key and signing key directly from the Inngest service variables:
INNGEST_SIGNING_KEY=${{inngest.INNGEST_SIGNING_KEY}}
INNGEST_EVENT_KEY=${{inngest.INNGEST_EVENT_KEY}}
The dashboard is always available at your nginx public URL (e.g. https://inngest-nginx-basic-auth-template.up.railway.app) behind the username and password you configured.
Why Deploy Inngest on Railway?
Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it. By deploying Inngest on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.
Template Content
InngestPostgres
ghcr.io/railwayapp-templates/postgres-ssl:18InngestRedis
redis:8.2.1inngest
inngest/inngestinngest-nginx-basic-auth
shaezzy/inngest-nginx-basic-auth