---
title: "Deploy Umami v3 Privacy-First Web Analytics"
description: "Cookie-free Google Analytics alternative with Postgres and a secure login."
category: "Analytics"
url: https://railway.com/deploy/umami-v3-privacy-first-web-analytics
---

# Deploy Umami v3 Privacy-First Web Analytics

Cookie-free Google Analytics alternative with Postgres and a secure login.

**[Deploy Umami v3 Privacy-First Web Analytics on Railway](https://railway.com/template/umami-v3-privacy-first-web-analytics)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/umami-v3-privacy-first-web-analytics/manifest.json

- **Creator:** Templates
- **Category:** Analytics
- **Total deploys:** 2

## Template content

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

- **Source:** baranberkay96/umami-railway
- **Health check:** /api/heartbeat
- **Public domain:** Yes

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

- **Image:** ghcr.io/railwayapp-templates/postgres-ssl:18.6@sha256:4fc833b43d2aaf6ecc9b18615f5533602b723a32d0e2efe2dae8ca0f7217c863

## Documentation

# Deploy and Host Umami with Railway

Umami is an open-source, privacy-focused alternative to Google Analytics: page views, visitors, referrers, events, funnels and more, without cookies or personal data. This community template runs Umami v3.5.0 with Postgres, and replaces the public default login (admin/umami) with a generated password before the dashboard goes online.

## About Hosting Umami

Umami needs one Node.js service and a PostgreSQL database. Its database migration creates an administrator with the well-known password `umami`, so a fresh public instance can be taken over by anyone who logs in first. This template sets your own generated password on that account during boot, before the server listens, and checks it on every deploy. The Umami version is pinned by tag and digest, Umami waits for Postgres on a cold start instead of crash-looping, migrations retry while the database finishes starting, and telemetry is off. Measured on Railway: about 0.1-0.3 GB of RAM for Umami and under 0.1 GB for Postgres, so it runs on every plan, Free included.

## Common Use Cases

- Privacy-friendly, cookie-free analytics for websites, blogs and documentation
- Product and marketing analytics: custom events, funnels, retention, UTM campaigns
- Analytics for several sites and teams from one self-hosted dashboard
- Replacing Google Analytics where consent banners or data residency matter
- Sharing public dashboards with clients

## Dependencies for Umami Hosting

- Umami v3.5.0 (`ghcr.io/umami-software/umami`, official image)
- PostgreSQL 18 (Railway's `postgres-ssl` image)

### Deployment Dependencies

- Umami source and releases: https://github.com/umami-software/umami
- Documentation: https://umami.is/docs
- Environment variables: https://umami.is/docs/environment-variables
- Tracker configuration: https://umami.is/docs/tracker-configuration

### Implementation Details

| Service | Role | Public |
|---|---|---|
| Umami | Dashboard, API and the `/script.js` tracker plus `/api/send` collection endpoint | **yes** |
| Postgres | Websites, users, sessions and events; private only, with a volume | no |

**First login**

1. Wait until the Umami service is healthy. The first deploy builds a thin image on top of Umami's official one and runs the database migrations, which takes a few minutes.
2. Open the Umami service → Variables and copy `UMAMI_ADMIN_PASSWORD` (generated, 24 characters).
3. Open the Umami service's public domain and sign in as `admin` with that password. The default password `umami` does not work.

**Adding a website.** In Umami go to Settings → Websites → Add website, then copy the tracking code into the head section of your site. It loads `https://{your-umami-domain}/script.js` and sends page views to `/api/send`.

**Admin password.** `UMAMI_ADMIN_PASSWORD` is applied once, while the account still has the seeded default password. After that, change your password in Umami's settings as usual; redeploys keep it. Forgot it? Set a new `UMAMI_ADMIN_PASSWORD`, set `UMAMI_ADMIN_PASSWORD_SYNC=true` and redeploy; the variable is then applied on every deploy until you set it back to `false`. Invalid values never break the deploy: a password shorter than 8 characters keeps the stored one, and on a fresh install locks the admin login until you set a valid one (the deploy log says so).

**Keep `APP_SECRET`.** It signs login tokens and is part of the anonymous visitor hash. Changing it logs everyone out and counts returning visitors as new.

**Custom domain.** Add it in the Umami service's Settings → Networking and use it in your tracking code. A custom domain on your own site's domain (for example `stats.{your-domain}`) is also less likely to be blocked by ad blockers.

**Resources and plans.** Measured on Railway (Umami 3.5.0, 2026-11-14): Umami uses about 0.1-0.16 GB of RAM at idle and up to about 0.3 GB while serving the dashboard and collecting events; Postgres uses about 0.06-0.1 GB. Under a 0.5 GB limit (the Free plan's per-service cap) login, website setup and event collection all worked. That is roughly $2-4 a month at Railway's usage prices for a small site, so every plan works: Free, Trial, Hobby and Pro. Database size grows with traffic; Free and Trial volumes are small, so busy sites belong on Hobby or Pro.

**Scaling.** One Umami replica handles a lot of traffic, since each page view is one small insert. For more throughput raise the service's CPU and memory or add replicas (the service has no volume). For very large sites Umami also supports ClickHouse and Redis; they are not part of this template.

**Upgrading Umami.** The version is pinned in `services/umami/Dockerfile` (tag and digest). When this template is updated, Railway shows an update for the Umami service. To pick a version yourself, eject the service to your own GitHub repo and change the `FROM` line to another release of `ghcr.io/umami-software/umami`. Migrations run automatically on boot; back up Postgres before major upgrades.

**License.** Umami is MIT-licensed. This is a community template, not affiliated with Umami Software.

### Why Deploy Umami on Railway?

Railway runs Umami and its Postgres database in one project with a private network, HTTPS domains, logs and usage-based pricing. This template gives you a locked-down, cookie-free analytics dashboard in a few minutes, at a low monthly cost, with no default credentials left behind.


## Similar templates

- [Plausible WordPress](https://railway.com/deploy/deploy-plausible-for-wordpress-sites) — Cookie-free WordPress stats from your own Plausible
- [Typesense Multilingual](https://railway.com/deploy/deploy-typesense-multilingual-search) — Locale-aware multilingual search with Typesense
- [Formbricks](https://railway.com/deploy/formbricks-surveys) — Surveys, NPS and in-app feedback on your own Postgres, Hub and Cube

Open this page in a browser: https://railway.com/deploy/umami-v3-privacy-first-web-analytics
