---
title: "Deploy OpenStatus (Auto Setup)"
description: "Status pages and uptime monitoring with 4 probes, no post-deploy setup"
category: "Observability"
url: https://railway.com/deploy/openstatus-auto-setup
---

# Deploy OpenStatus (Auto Setup)

Status pages and uptime monitoring with 4 probes, no post-deploy setup

**[Deploy OpenStatus (Auto Setup) on Railway](https://railway.com/template/openstatus-auto-setup)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/openstatus-auto-setup/manifest.json

- **Creator:** Auromations
- **Category:** Observability
- **Total deploys:** 1

## Template content

### tinybird-local https://www.tinybird.co/favicon.ico

- **Image:** ghcr.io/hmseeb/openstatus-railway-tinybird-local:3fa4995-r3

### workflows https://www.openstatus.dev/icon.png

- **Image:** ghcr.io/openstatushq/openstatus-workflows:3fa4995
- **Health check:** /ping

### status-page https://www.openstatus.dev/icon.png

- **Image:** ghcr.io/openstatushq/openstatus-status-page:3fa4995
- **Health check:** /api/health
- **Public domain:** Yes

### probe-eu-west https://www.openstatus.dev/icon.png

- **Image:** ghcr.io/openstatushq/private-location@sha256:652cfab28d16766174fd7881c285e0a7e1ca295dbcb0f81b53c33d0c3e773674

### tinybird-deploy https://www.openstatus.dev/icon.png

- **Image:** ghcr.io/hmseeb/openstatus-railway-tinybird-deploy:3fa4995-r3

### dashboard https://www.openstatus.dev/icon.png

- **Image:** ghcr.io/hmseeb/openstatus-railway-dashboard:3fa4995-r3
- **Health check:** /login
- **Public domain:** Yes

### cron https://www.openstatus.dev/icon.png

- **Image:** ghcr.io/hmseeb/openstatus-railway-cron:3fa4995-r3

### db-migrate https://www.openstatus.dev/icon.png

- **Image:** ghcr.io/openstatushq/openstatus-db-migrate:3fa4995

### probe-us-west https://www.openstatus.dev/icon.png

- **Image:** ghcr.io/openstatushq/private-location@sha256:652cfab28d16766174fd7881c285e0a7e1ca295dbcb0f81b53c33d0c3e773674

### server https://www.openstatus.dev/icon.png

- **Image:** ghcr.io/openstatushq/openstatus-server:3fa4995
- **Health check:** /ping
- **Public domain:** Yes

### probe-asia https://www.openstatus.dev/icon.png

- **Image:** ghcr.io/openstatushq/private-location@sha256:652cfab28d16766174fd7881c285e0a7e1ca295dbcb0f81b53c33d0c3e773674

### private-location https://www.openstatus.dev/icon.png

- **Image:** ghcr.io/openstatushq/openstatus-private-location:3fa4995
- **Health check:** /health
- **Public domain:** Yes

### probe https://www.openstatus.dev/icon.png

- **Image:** ghcr.io/openstatushq/private-location@sha256:652cfab28d16766174fd7881c285e0a7e1ca295dbcb0f81b53c33d0c3e773674

### libsql https://cdn.simpleicons.org/turso

- **Image:** ghcr.io/tursodatabase/libsql-server@sha256:6dd3eb276d9d3604e4a48ac4a999a2e267814732d57d7e94c04ba71482333a67

## Documentation

# Deploy and Host OpenStatus on Railway

OpenStatus is an open-source status page and uptime monitoring platform. It runs HTTP, TCP and DNS checks from probes you control, records response times and uptime, alerts your team over email, Slack, Discord, PagerDuty and more, and publishes status pages with incidents, maintenance windows and subscriber updates.

## About Hosting OpenStatus

This template runs the whole OpenStatus stack inside one Railway project, with no outside accounts: the dashboard, the public status page, the API server, the workflows worker, a libSQL database, a Tinybird Local analytics engine, the ingest server, four monitoring probes, and two one-shot jobs that load the database and analytics schemas.

There is nothing to run after the deploy. A small cron service unlocks every feature on your workspace, registers the four probes as private locations, and attaches each new monitor to all of them, within a minute of you creating it. You never need the Railway CLI or a shell.

Every image is pinned to one tested OpenStatus build, so a redeploy never pulls a surprise upgrade.

## Common Use Cases

- A public status page for your product, with incidents, maintenance notices and email subscribers
- Uptime and latency checks on your own APIs and websites from up to four regions, alerting on Slack, Discord, PagerDuty or email
- Monitoring services on your Railway private network that public monitoring vendors cannot reach
- Keeping monitoring data on infrastructure you control

## Dependencies for OpenStatus Hosting

- libSQL server for application data, on a Railway volume
- Tinybird Local (ClickHouse) for check results, on a Railway volume
- The OpenStatus container images from GitHub Container Registry

### Deployment Dependencies

- [OpenStatus repository](https://github.com/openstatusHQ/openstatus)
- [OpenStatus self-hosting guide](https://docs.openstatus.dev/guides/self-hosting-openstatus/)
- [Tinybird Local](https://www.tinybird.co/docs/forward/install-tinybird/local)
- [Template source, images and tests](https://github.com/hmseeb/openstatus-railway)

### Implementation Details

**First login (about 5 minutes after deploy)**

1. Wait until `db-migrate` and `tinybird-deploy` show Completed and the other services are green. Tinybird Local takes the longest.
2. Open the `dashboard` service's URL and go to `/login`. Enter your email and request a magic link.
3. The link is not emailed. Open the `dashboard` service's **Deploy Logs**, find the line starting with `>>> Magic Link:`, and open that URL.
4. Create your workspace. Within a minute it is unlocked and the probes `railway-us-east`, `railway-us-west`, `railway-eu-west` and `railway-asia` appear under Settings, Private Locations.

Only people who can read your Railway logs can log in, which is what keeps the instance yours. If you add a real Resend key (below), anyone who knows the URL can request a link by email, but only the first workspace (yours) gets probes and features, so their monitors never run.


**Monitors**

The onboarding screen's first check runs once from inside your project and shows a single Railway row with real status and latency (the 27-region wording is upstream's copy; self-hosted checks only run from your own probes). Your probes then pick the monitor up within about 10 minutes.

Create further monitors as usual. Any monitor with no private location selected is attached to all four probes automatically. If you pick specific probes, your choice is kept. OpenStatus's own cloud regions do not exist self-hosted, so only the private locations run checks. The shortest check interval is 1 minute.

**Spread the probes across regions**

All four probes start in your project's default region. Railway templates cannot set a region per service yet, so move three of them once in each service's Settings, Deploy, Regions: `probe-us-west` to US West, `probe-eu-west` to EU West, `probe-asia` to Southeast Asia. The probe names are labels: `railway-us-east` stays wherever your project's default region is. Delete any probe you do not want; nothing else depends on it.

**Status pages**

On Railway a status page is served on a hostname, not a path. After creating a page, map the `status-page` service's domain (or a custom domain you add to that service) to it from the `cron` service's shell:

```
os-admin page-domain <page-slug> <hostname>
```

The dashboard's custom-domain form talks to Vercel and does not work self-hosted. Icon uploads need Vercel Blob; use `os-admin page-icon <page-slug> <image-url>` instead.

**Optional settings**

Add these on the `dashboard` service at any time:

- `RESEND_API_KEY`: a real [Resend](https://resend.com) key sends login links, alerts and subscriber emails. The other services read it from the dashboard.
- `AUTH_GITHUB_ID`, `AUTH_GITHUB_SECRET` or `AUTH_GOOGLE_ID`, `AUTH_GOOGLE_SECRET`: social login. Callback URL `https://<dashboard-domain>/api/auth/callback/github` (or `/google`).
- `AUTH_OIDC_ISSUER`, `AUTH_OIDC_ID`, `AUTH_OIDC_SECRET`: any OIDC provider.

After adding a custom domain to the dashboard, update its `AUTH_URL` and `NEXT_PUBLIC_URL`.

**Sizing**

Tinybird Local uses about 1 GB of memory at rest; the whole stack idles around 2 GB. Hobby plan or higher.

**Troubleshooting**

- Login page loads but no magic link line appears: request the link again after `db-migrate` shows Completed.
- A monitor shows no data: check that it has at least one `railway-*` private location, and that the probe services are running.
- Never give `libsql` or `tinybird-local` a public domain. They have no authentication beyond the private network.

**Toolbox**

The `cron` service ships `os-admin`: `workspaces`, `users`, `probes`, `pages`, `setup <workspace-id>` (unlock another workspace on purpose), `page-domain`, `page-icon`, `sql "<statement>"`.

## Why Deploy OpenStatus 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 OpenStatus 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

- [Rootprint](https://railway.com/deploy/rootprint-1) — Open-source logs and traces with full-text search on object-storage.
- [VPS Fleet Watch Hub with Beszel](https://railway.com/deploy/vps-fleet-watch-hub-with-beszel) — A persistent Beszel hub for external VPS agents and fleet alerts.
- [Pyroscope profiling](https://railway.com/deploy/pyroscope-profiling) — Protected continuous profiling with durable Pyroscope storage.

Open this page in a browser: https://railway.com/deploy/openstatus-auto-setup
