---
title: "Deploy Inngest (with protected dashboard)"
description: "Inngest self-hosted with nginx proxy to password-protect the dashboard"
category: "Starters"
url: https://railway.com/deploy/inngest-with-protected-dashboard
---

# Deploy Inngest (with protected dashboard)

Inngest self-hosted with nginx proxy to password-protect the dashboard

**[Deploy Inngest (with protected dashboard) on Railway](https://railway.com/template/inngest-with-protected-dashboard)**

- **Creator:** shaezzy's Projects
- **Category:** Starters
- **Total deploys:** 2

## Template content

### InngestPostgres https://devicons.railway.app/i/postgresql.svg

- **Image:** ghcr.io/railwayapp-templates/postgres-ssl:18

### InngestRedis https://cdn.sanity.io/images/sy1jschh/production/0ce0bfdcfbdbf69662b1116671f97c2dd788b655-157x157.svg

- **Image:** redis:8.2.1
- **Start command:** `/bin/sh -c "rm -rf $RAILWAY_VOLUME_MOUNT_PATH/lost+found/ && exec docker-entrypoint.sh redis-server --requirepass $REDIS_PASSWORD --save 60 1 --dir $RAILWAY_VOLUME_MOUNT_PATH"`

### inngest https://avatars.githubusercontent.com/u/78935958?s=200&v=4

- **Image:** inngest/inngest
- **Start command:** `/bin/sh -c "inngest start --port $INNGEST_PORT --event-key $INNGEST_EVENT_KEY --signing-key $INNGEST_SIGNING_KEY --postgres-uri $INNGEST_POSTGRES_URI --redis-uri $INNGEST_REDIS_URI ${INNGEST_SERVE_ORIGIN:+-u $INNGEST_SERVE_ORIGIN}"`

### inngest-nginx-basic-auth https://cdn.iconscout.com/icon/free/png-256/free-nginx-logo-icon-svg-download-png-3030173.png?f=webp

- **Source:** shaezzy/inngest-nginx-basic-auth
- **Public domain:** Yes

## Documentation

# Deploy and Host Inngest on Railway
[Inngest](https://www.inngest.com) 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
- [Inngest SDK environment variables](https://www.inngest.com/docs/sdk/environment-variables)
- [Inngest self-hosting docs](https://www.inngest.com/docs/self-hosting)
### Implementation Details
Once deployed, configure the Inngest SDK in your app with the following environment variables:
```sh
# 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](https://www.inngest.com/docs/sdk/environment-variables#inngest-serve-origin) — 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:
```sh
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.


## Similar templates

- [open-excalidraw](https://railway.com/deploy/open-excalidraw) — Self-hostable collaborative drawing built on Excalidraw
- [caring-vibrancy](https://railway.com/deploy/caring-vibrancy) — Deploy and Host caring-vibrancy with Railway
- [Appsmith](https://railway.com/deploy/appsmith-1) — Low-code platform for internal tools, dashboards, and admin panels.

Open this page in a browser: https://railway.com/deploy/inngest-with-protected-dashboard
