Self-host Gatus
A developer-oriented health dashboard and status page driven entirely by a YAML file, checking endpoints over HTTP, ICMP, TCP and DNS and evaluating each result against conditions on status code, response time, body values or certificate expiry. There is no setup UI — the monitor list lives in your repo.
Key facts
Reach for Gatus when you want monitoring reviewed and deployed like code: one Go binary, one `config.yaml`, and endpoints checked over HTTP, ICMP, TCP and DNS against explicit conditions on status code, response time, a value in the body or certificate expiry. It is the lightest real uptime monitor in this category and the only one with no setup UI at all. If you would rather click “Add Monitor” and be done, Uptime Kuma is the friendlier pick; if you want dashboards and PageSpeed reports, Checkmate is.
What you need
- Any VPS with at least 256 MB of RAM
- A domain you control — most self-hosted setups need HTTPS in front of them
- Under an hour if you've used Docker before
Install
Run these commands on your server:
# Gatus — config.yaml is the entire configuration; write it before starting
cat > config.yaml <<'YAML'
endpoints:
- name: website
url: "https://example.com"
interval: 60s
conditions:
- "[STATUS] == 200"
- "[RESPONSE_TIME] < 300"
YAML
docker run -d --name gatus -p 8080:8080 \
--mount type=bind,source="$(pwd)"/config.yaml,target=/config/config.yaml \
ghcr.io/twin/gatus:stable
# → http://SERVER_IP:8080What you take on
Gatus is deliberately minimal, and two of those omissions bite in the first week:
An alternative to
Head-to-head
More in Monitoring
Common questions
Can I add endpoints to Gatus from the web UI?
No — the dashboard is read-only and every endpoint is declared in config.yaml. Point GATUS_CONFIG_PATH at a directory and it will merge all the YAML files inside it. That is the whole design: your monitoring lives in version control next to the services it watches.
Does Gatus keep history after a restart?
Not with the default configuration. Storage type defaults to memory, so results, uptime and past events are lost when the container restarts. Set the storage type to sqlite or postgres and give it a path before you rely on the numbers.
What can Gatus check?
HTTP, ICMP, TCP and DNS queries, each scored against a list of conditions — status code, response time, a value inside a JSON body, a pattern in the page, or how long a TLS certificate has left. Failing conditions can trigger alerts to Slack, Teams, PagerDuty, Discord, Twilio and many others.
Gatus or Uptime Kuma?
Gatus if you want the monitor list reviewed and deployed like code, and you are comfortable that persistence is opt-in. Uptime Kuma if you want to click Add Monitor and be done, with storage handled for you. They cover much the same protocols; the difference is where configuration lives.