macrostack

Layer 3 · self-hosting reality check

What it actually takes to self-host Gatus

The docs say Not stated by the vendor. It is a single Go binary. The author's own Helm chart suggests a 32 Mi memory limit in a commented-out example.. In practice you want A small slice of a server you already run. The author's Helm example caps it at 32 Mi. Only add PostgreSQL's footprint if you pick Postgres storage over SQLite.. Here is the honest version — real requirements, real monthly cost, what you will be maintaining, and the one thing that catches people out.

Usually reached from Pingdom alternatives, where Gatus is one of the picks.

Wondering whether you need to at all? Is Pingdom free? — what the free tier actually allows, and where the wall is.

RAM — documented minimumNot stated by the vendor. It is a single Go binary. The author's own Helm chart suggests a 32 Mi memory limit in a commented-out example.
RAM — what it really needsA small slice of a server you already run. The author's Helm example caps it at 32 Mi. Only add PostgreSQL's footprint if you pick Postgres storage over SQLite.
CPUA fraction of a core. The Helm example requests 50m and limits it to 100m.
DiskTiny: a SQLite file. The Helm chart's default persistent volume is 200 Mi, and Gatus keeps a capped number of results per endpoint (100 by default).
Monthly cost$0 on a box you already run, or $6–7/mo for the smallest VPS. Ideally that box sits outside the infrastructure it watches.
Setup time15 minutes for the container, plus an hour to write the YAML for your endpoints and alerts.
How you install it`docker run` with ghcr.io/twin/gatus:stable and a config folder mounted at /config (or `go install`, or the Helm chart). Endpoints, conditions and alerts all live in config.yaml.
Ongoing maintenanceLow. There are a few releases a year (v5.34 in January, v5.35 in February, v5.36 in May, v5.37 in September 2026). Config edits reload automatically, but by default Gatus exits on an invalid edit, so check the log after every change.
Where it stops scalingLarge dashboards on one instance. The README offers write-through caching (`storage.caching`) with SQLite or Postgres specifically for big dashboards, and Postgres storage lets the history outlive the host.

The thing that catches people out

Out of the box, Gatus keeps everything in memory, and its README says that data will not survive a restart. On top of that, Gatus reloads its YAML automatically, and without file storage a config edit is effectively a restart. Every endpoint you add wipes the uptime history on your status page. The README's one-line Docker example mounts the single config file, and the same README warns that reloads may then not be detected. On day one, set `storage.type: sqlite` with a path on a mounted volume, and mount the config folder instead of the file.

When not to self-host Gatus

You want to add monitors by clicking in a web page rather than editing YAML; Uptime Kuma is built for that. Gatus also checks only from where it runs, so probing from several regions means running several instances and comparing their results yourself.

Every guide here carries this section. A site that only ever tells you to self-host is selling something — the useful answer is sometimes no.

Other Layer 3 self-hosting guides

Common questions

How much RAM does Gatus actually need?
A small slice of a server you already run. The author's Helm example caps it at 32 Mi. Only add PostgreSQL's footprint if you pick Postgres storage over SQLite. in practice. The documented minimum is Not stated by the vendor. It is a single Go binary. The author's own Helm chart suggests a 32 Mi memory limit in a commented-out example., which is the figure at which the process starts rather than the figure at which it works under real use. A fraction of a core. The Helm example requests 50m and limits it to 100m. alongside it.
What does self-hosting Gatus cost per month?
$0 on a box you already run, or $6–7/mo for the smallest VPS. Ideally that box sits outside the infrastructure it watches. This is commodity VPS pricing and excludes your time, which is the larger cost for most people — budget for low. There are a few releases a year (v5.34 in January, v5.35 in February, v5.36 in May, v5.37 in September 2026). Config edits reload automatically, but by default Gatus exits on an invalid edit, so check the log after every change.
How long does it take to set up Gatus?
15 minutes for the container, plus an hour to write the YAML for your endpoints and alerts., via `docker run` with ghcr.io/twin/gatus:stable and a config folder mounted at /config (or `go install`, or the Helm chart). Endpoints, conditions and alerts all live in config.yaml..
When should I NOT self-host Gatus?
You want to add monitors by clicking in a web page rather than editing YAML; Uptime Kuma is built for that. Gatus also checks only from where it runs, so probing from several regions means running several instances and comparing their results yourself.
What is the most common mistake when self-hosting Gatus?
Out of the box, Gatus keeps everything in memory, and its README says that data will not survive a restart. On top of that, Gatus reloads its YAML automatically, and without file storage a config edit is effectively a restart. Every endpoint you add wipes the uptime history on your status page. The README's one-line Docker example mounts the single config file, and the same README warns that reloads may then not be detected. On day one, set `storage.type: sqlite` with a path on a mounted volume, and mount the config folder instead of the file.
The Macrostack brief

New swaps, worth your inbox.

A short, occasional email when we add a high-intent alternative or ship a new head-to-head. No spam, no selling your address — unsubscribe in one click.