---
title: "Deploy SigNoz"
description: "Observability tool for your app's traces, metrics and logs"
category: "Observability"
url: https://railway.com/deploy/signoz-1
---

# Deploy SigNoz

Observability tool for your app's traces, metrics and logs

**[Deploy SigNoz on Railway](https://railway.com/template/signoz-1)**

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

## Template content

### clickhouse https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/clickhouse.svg

- **Source:** https://github.com/gridalpha/signoz-railway
- **Health check:** /ping

### Postgres https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/postgresql.svg

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

### clickhouse-keeper https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/clickhouse.svg

- **Source:** https://github.com/gridalpha/signoz-railway
- **Health check:** /ready

### schema-migrator https://raw.githubusercontent.com/cncf/artwork/main/projects/opentelemetry/icon/color/opentelemetry-icon-color.svg

- **Source:** https://github.com/gridalpha/signoz-railway

### signoz https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/signoz.svg

- **Source:** https://github.com/gridalpha/signoz-railway
- **Health check:** /api/v1/health
- **Public domain:** Yes

### otel-collector https://raw.githubusercontent.com/cncf/artwork/main/projects/opentelemetry/icon/color/opentelemetry-icon-color.svg

- **Source:** https://github.com/gridalpha/signoz-railway
- **Health check:** /
- **Public domain:** Yes

## Documentation

# Deploy and Host SigNoz on Railway

SigNoz is an open-source, OpenTelemetry-native observability platform that keeps traces, metrics and logs in one place instead of three. Teams run it as a self-hosted alternative to Datadog and New Relic: APM, distributed tracing, log search, dashboards and alerting, all queried out of a ClickHouse column store that stays fast on high-cardinality data. Because it speaks OpenTelemetry natively, any language SDK you already run can point at it without a proprietary agent.

Deploy SigNoz on Railway and you get the full production topology, not a single container: the SigNoz app (UI, query API and OpAMP server), an OpenTelemetry Collector receiving OTLP over gRPC and HTTP, a one-shot schema migrator for the ClickHouse tables, ClickHouse as the telemetry store, a ClickHouse Keeper node, and a managed Postgres for users, dashboards and alert rules. Your apps send telemetry to the collector, it writes into ClickHouse, and the UI reads back from it. Self-host SigNoz on Railway without wiring six containers together by hand.

![Diagram of the six SigNoz services deployed on Railway](https://res.cloudinary.com/rroe4rtk/image/upload/v1787427639/signoz-architecture.png)

## Getting Started with SigNoz on Railway

Set `SIGNOZ_USER_ROOT_EMAIL` and `SIGNOZ_USER_ROOT_PASSWORD` when you deploy — the app creates that admin on first boot and reconciles it on every restart, so the instance is never left with an open signup page. The password needs 12+ characters with an uppercase letter, a lowercase letter, a digit and a symbol, or the service refuses to start. Open the SigNoz service's public URL, sign in, and you land on a home screen reporting whether ingestion is active.

Next, point an application at the collector. Its public domain accepts OTLP over HTTP on `/v1/traces`, `/v1/logs` and `/v1/metrics`, behind basic auth using `OTLP_USERNAME` and `OTLP_PASSWORD`; add a Railway TCP proxy on port 4317 for OTLP over gRPC. Apps in the same project can skip the public hop and use the collector's private hostname on port 4318. Once spans arrive, the **Services** page lists each application with P99 latency, error rate and throughput, and clicking one opens its APM view. To confirm the deployment end to end, send a handful of spans and check they appear in both **Services** and the **Traces** explorer.

![SigNoz service list showing P99 latency and error rate](https://res.cloudinary.com/rroe4rtk/image/upload/v1787427641/signoz-services-overview.png)

![SigNoz APM view with latency percentiles and Apdex charts](https://res.cloudinary.com/rroe4rtk/image/upload/v1787427643/signoz-checkout-api-latency.png)

![SigNoz trace explorer listing spans across three services](https://res.cloudinary.com/rroe4rtk/image/upload/v1787427647/signoz-traces-explorer.png)

![SigNoz log explorer filtered by severity and environment](https://res.cloudinary.com/rroe4rtk/image/upload/v1787427650/signoz-logs-explorer.png)

## About Hosting SigNoz

SigNoz answers a question most teams hit around their second production incident: why does understanding one request mean opening three tools? It stores traces, metrics and logs in the same ClickHouse database, so a slow endpoint on a dashboard leads to the spans behind it and the logs those spans emitted. Teams self-host it to keep telemetry on their own infrastructure and avoid per-host billing.

- OpenTelemetry-native ingestion — no proprietary agent, no vendor SDK
- APM with latency percentiles, error rates, Apdex and database breakdowns
- Distributed tracing with flamegraphs, trace funnels and span search
- Log management with severity filtering, live tail and parsing pipelines
- Dashboards and alerting to Slack, PagerDuty, webhooks or email

The Railway architecture splits the work the way SigNoz's own installer does. **SigNoz** serves the UI and query API and pushes log-parsing pipelines to the collector over OpAMP. The **OTel Collector** is the only ingest path; it batches spans, derives span metrics and writes to ClickHouse. The **Schema Migrator** runs once per deploy to create and upgrade ClickHouse tables. **ClickHouse** stores the telemetry, with **ClickHouse Keeper** coordinating its distributed DDL, and **Postgres** holds accounts, dashboards and alert rules.

## Why Deploy SigNoz on Railway

Railway runs the whole stack as one project rather than a hand-assembled compose file.

- Six services provisioned and wired together in one click
- Persistent volumes for ClickHouse, Keeper and the app
- Private networking between the collector, ClickHouse and app
- A public HTTPS domain for the UI plus an authenticated ingest endpoint
- Vertical scaling as telemetry grows, with no per-host licence

## Common Use Cases

- **Application performance monitoring** — track P99 latency, error rate and throughput per service, then drill into the traces behind a regression
- **Debugging production incidents** — correlate a failing request's trace with the logs its spans emitted
- **Centralised log management** — ship logs from every service into one searchable store with severity and attribute filters
- **Cost-controlled observability** — replace per-host APM billing with infrastructure you size yourself

## Dependencies for SigNoz

- `signoz/signoz:latest` — API server, query service and web UI ([GitHub](https://github.com/SigNoz/signoz))
- `signoz/signoz-otel-collector:latest` — OTLP ingest and the schema migrator
- `clickhouse/clickhouse-server:25.12.5` — telemetry store for traces, metrics, logs
- `clickhouse/clickhouse-keeper:25.12.5` — coordination for distributed DDL
- Railway managed Postgres — metastore for users, dashboards, alert rules

### Environment Variables Reference

| Variable | Service | Purpose |
|---|---|---|
| `SIGNOZ_USER_ROOT_EMAIL` / `_PASSWORD` | SigNoz | Admin account created on first boot |
| `SIGNOZ_TOKENIZER_JWT_SECRET` | SigNoz | Signs session tokens; keep it stable |
| `SIGNOZ_SQLSTORE_POSTGRES_DSN` | SigNoz | Metastore connection string |
| `SIGNOZ_GLOBAL_EXTERNAL__URL` | SigNoz | Public URL used in alert links |
| `OTLP_USERNAME` / `OTLP_PASSWORD` | OTel Collector | Basic auth on both OTLP listeners |
| `CLICKHOUSE_PASSWORD` | all | Shared ClickHouse credential |

Note the double underscore: SigNoz maps `_` to a nesting level and `__` to a literal underscore, so `SIGNOZ_GLOBAL_EXTERNAL_URL` silently sets nothing.

### Deployment Dependencies

- [SigNoz docs](https://signoz.io/docs/) and [SigNoz on GitHub](https://github.com/SigNoz/signoz)
- [OpenTelemetry spec](https://opentelemetry.io/docs/) and [ClickHouse docs](https://clickhouse.com/docs/)

## Hardware Requirements for Self-Hosting SigNoz

| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 2 vCPU | 4–8 vCPU |
| RAM | 4 GB total | 8–16 GB, most of it ClickHouse |
| Storage | 5 GB ClickHouse volume | 20 GB+, sized to retention |
| Runtime | Linux containers | Linux containers |

ClickHouse is the component that grows: storage tracks ingest volume times retention, and query latency depends far more on its memory than on the app service.

## Self-Hosting SigNoz

Upstream installs SigNoz through Foundry, a CLI that generates deployment manifests from a `casting.yaml`:

```
curl -fsSL https://signoz.io/foundry.sh | bash
foundryctl forge
foundryctl cast
```

That brings up ClickHouse, a Keeper node, Postgres, the collector and the app. Point any OpenTelemetry SDK at the collector with the standard exporter variables:

```
OTEL_EXPORTER_OTLP_ENDPOINT=https://your-collector-domain
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
OTEL_EXPORTER_OTLP_HEADERS=Authorization=Basic 
OTEL_RESOURCE_ATTRIBUTES=service.name=checkout-api,deployment.environment=production
```

On Railway the same variables apply, with the collector's public domain as the endpoint.

## How Much Does SigNoz Cost to Self-Host?

SigNoz is open source and the self-hosted edition is free — no licence fee, seat count or per-host charge. You pay only for the infrastructure it runs on, which on Railway means the compute and volume usage of six services. That is why teams move: managed APM vendors bill per host or per ingested gigabyte, and at 100 GB of logs a day the gap is routinely an order of magnitude. A paid SigNoz Cloud exists if you would rather not operate it.

## FAQ

**What is SigNoz?**
SigNoz is an open-source observability platform that collects traces, metrics and logs through OpenTelemetry and stores them in ClickHouse, giving you APM, tracing, log search, dashboards and alerting in one UI.

**What does this Railway template deploy?**
Six services: the SigNoz app, an OpenTelemetry collector, a ClickHouse schema migrator, ClickHouse, ClickHouse Keeper and a managed Postgres metastore, with volumes and private networking configured.

**Why does SigNoz need both ClickHouse and Postgres?**
ClickHouse is the telemetry store — every span, metric point and log line — and its column layout is what makes high-cardinality queries fast. Postgres holds the small relational data: accounts, dashboards and alert rules.

**How do I send traces to self-hosted SigNoz from my application?**
Set `OTEL_EXPORTER_OTLP_ENDPOINT` to the collector's domain, `OTEL_EXPORTER_OTLP_PROTOCOL` to `http/protobuf` and an `Authorization: Basic` header from `OTLP_USERNAME` and `OTLP_PASSWORD`.

**Is the OTLP ingest endpoint open to the internet?**
It is reachable publicly but not anonymous: both listeners sit behind HTTP basic auth and an unauthenticated request is rejected with 401. Rotate it by changing `OTLP_PASSWORD` on the collector.

**Can I run more than one replica of the SigNoz app?**
No. It runs metastore migrations and the alert ruler in-process without leader election, so keep it at one replica and scale vertically. Retention is set per signal in the UI and enforced by ClickHouse TTLs — size that volume to ingest rate times retention.


## Similar templates

- [Pyroscope profiling](https://railway.com/deploy/pyroscope-profiling) — Protected continuous profiling with durable Pyroscope storage.
- [SigOnly](https://railway.com/deploy/sigonly) — Deploy SigNoz with a working demo app & config in one click
- [Unwrapped Spotify Music Stats](https://railway.com/deploy/wide-bold) — Unwrapped Spotify Music Stats, Estatísticas de músicas disponíveis

Open this page in a browser: https://railway.com/deploy/signoz-1
