



























If you're reading this, you've probably decided you want to run your own status page rather than paying a SaaS provider. Good instinct - status pages are critical infrastructure, and depending on a third party for your availability communication introduces an ironic single point of failure (just ask anyone who was on Atlassian Statuspage during the 21-day System Metrics outage in February 2026).
But which self-hosted tool should you pick? There are more options than you'd expect, and they range from static site generators to full observability platforms. This guide compares the most actively maintained options honestly - including where each one falls short.
Before diving into specific tools, here's what actually matters when you're running your own:
status.yourcompany.com with your own look?GitHub: cachethq/cachet
Stack: PHP / Laravel / MySQL or PostgreSQL
License: BSD-3-Clause
Cachet was the original open-source status page and the one most people find first when searching. It has a clean UI, metric tracking, and a solid API for programmatic incident management.
Strengths:
Weaknesses:
Best for: Teams that want a traditional status page with API integration and already run PHP infrastructure.
GitHub: upptime/upptime
Stack: GitHub Actions + GitHub Pages (static)
License: MIT
Upptime takes a radically different approach: it runs entirely on GitHub infrastructure. Monitoring happens via GitHub Actions cron jobs, incidents are GitHub Issues, and the status page is deployed to GitHub Pages. Zero servers required.
Strengths:
Weaknesses:
Best for: Small teams, open-source projects, or personal projects that want monitoring and a status page with zero operational overhead.
GitHub: TwiN/gatus
Stack: Go binary / Docker
License: Apache-2.0
Gatus is primarily a monitoring tool with a built-in status page. It's lightweight, fast, and configured entirely via YAML. If you want something that "just works" in a single container, Gatus is hard to beat.
Strengths:
Weaknesses:
Best for: DevOps teams that want lightweight, automated status monitoring with a clean dashboard. Works well as an internal health check display.
GitHub: cstate/cstate
Stack: Hugo (Go-based static site generator)
License: MIT
cState generates a static status page using Hugo. Incidents are Markdown files, and the page is built and deployed wherever you host static sites - Netlify, Vercel, GitHub Pages, or your own Nginx.
Strengths:
Weaknesses:
Best for: Teams that want maximum resilience and full design control, and are comfortable with Git-based workflows for incident updates.
GitHub: oneuptime/oneuptime
Stack: TypeScript / Node.js / PostgreSQL / Docker / Kubernetes
License: Apache-2.0 (fully open source - not open-core)
Full disclosure: this is our project. We're including it because a comparison wouldn't be complete without it, but we'll be honest about the trade-offs.
OneUptime is a full observability platform that includes status pages as one component alongside monitoring, incident management, on-call scheduling, logs, metrics, traces, and alerting.
Strengths:
Weaknesses:
Best for: Teams that want to consolidate monitoring, incident management, on-call, and status pages into a single self-hosted platform.
| Feature | Cachet | Upptime | Gatus | cState | OneUptime |
|---|---|---|---|---|---|
| Built-in monitoring | No | Yes (GitHub Actions) | Yes | No | Yes |
| Incident management | Yes (API) | Via GitHub Issues | No | Via Markdown/Git | Yes (full workflow) |
| Scheduled maintenance | Yes | No | No | Yes (manual) | Yes (automated) |
| Subscriber notifications | Yes | No | No | No | Yes (email, SMS, webhook) |
| Private/auth status pages | No | No | No | No | Yes (SSO, per-user) |
| On-call scheduling | No | No | No | No | Yes |
| Custom domain | Yes | Yes | Limited | Yes | Yes |
| Branding/theming | Moderate | Limited | Minimal | Full (Hugo) | Full |
| API | Yes | GitHub API | No | No | Yes |
| Minimum resources | 512MB | 0 (GitHub-hosted) | 64MB | 0 (static) | 4GB |
| Deploy complexity | Medium | Low | Low | Low | Medium-High |
| License | BSD-3 | MIT | Apache-2.0 | MIT | Apache-2.0 |
You want zero infrastructure:
Use Upptime if you're okay with GitHub dependency, or cState on a CDN if you want more control. Both are static and nearly indestructible.
You want automated health checks with a status display:
Gatus is the right choice. It's the best "lightweight monitoring with a status page" tool available. Pair it with PagerDuty or Slack for alerting.
You want a traditional status page with an API:
Cachet is the closest to Atlassian StatusPage in terms of mental model. Check the project health before committing - activity has been inconsistent.
You want monitoring, incidents, on-call, AND a status page:
OneUptime is designed for this. If you're already running Kubernetes, deploying it is straightforward. If you're trying to consolidate tools rather than add another single-purpose one, it makes sense.
You want a status page for an open-source project:
Upptime is probably the best fit. GitHub-native, transparent, and free.
Here's the counterintuitive thing about self-hosted status pages: your status page infrastructure can itself go down during the incident it's supposed to communicate about. If your status page runs in the same cluster as your application, a cluster-wide failure takes both down.
Mitigations:
Whatever tool you choose, think about this failure mode. A status page that's down when you need it most is worse than no status page at all.
There's no single best self-hosted status page - it depends on what you're trying to solve. If you need a simple display, the lightweight options (Gatus, cState, Upptime) are great. If you need the full incident management lifecycle, you'll want something with more structure (Cachet, OneUptime).
The good news is that all of these are open source, so you can try them without spending anything except time. Start with the one that matches your current team size and infrastructure, and migrate later if your needs grow.
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。