惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
Security Archives - TechRepublic
Security Archives - TechRepublic
Application and Cybersecurity Blog
Application and Cybersecurity Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
C
CERT Recently Published Vulnerability Notes
S
Security @ Cisco Blogs
S
Security Affairs
D
Darknet – Hacking Tools, Hacker News & Cyber Security
L
Lohrmann on Cybersecurity
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hacker News: Ask HN
Hacker News: Ask HN
Forbes - Security
Forbes - Security
H
Heimdal Security Blog
A
Arctic Wolf
NISL@THU
NISL@THU
P
Proofpoint News Feed
W
WeLiveSecurity
S
Schneier on Security
AI
AI
Schneier on Security
Schneier on Security
N
News and Events Feed by Topic
L
LINUX DO - 最新话题
Cisco Talos Blog
Cisco Talos Blog
AWS News Blog
AWS News Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Know Your Adversary
Know Your Adversary
Scott Helme
Scott Helme
V
Vulnerabilities – Threatpost
Cyberwarzone
Cyberwarzone
I
Intezer
S
Securelist
Help Net Security
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
量子位
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
小众软件
小众软件
Last Week in AI
Last Week in AI
Jina AI
Jina AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
WordPress大学
WordPress大学
罗磊的独立博客
月光博客
月光博客
雷峰网
雷峰网
A
About on SuperTechFans
The GitHub Blog
The GitHub Blog
T
The Blog of Author Tim Ferriss
MongoDB | Blog
MongoDB | Blog
大猫的无限游戏
大猫的无限游戏
博客园 - 司徒正美
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events

OneUptime Blog

How to Monitor Azure App Services (PaaS) with OpenTelemetry Your AI Workloads Are About to Blow Up Your Observability Bill The Great Observability Consolidation Is Here How to Write Custom Object Classes for Ceph How to Write Custom Ceph Manager Modules How to Write a ceph.conf Configuration File How to Use Rook-Ceph with OpenShift How to Use Rook-Ceph with Longhorn for Comparison How to Configure Volume Snapshot Class for RBD in Rook How to Configure VolumeReplicationClass Scheduling Intervals in Rook How to Set Up Volume Replication with Rook-Ceph How to Create Volume Group Snapshots with Rook CSI How to Visualize Ceph Network Performance in Grafana How to Enable Virtual Host-Style Bucket Access in Rook How to View Runtime Configuration via Admin Socket How to View Quota Settings and Update Stats in Ceph RGW How to View PG Scaling Recommendations with autoscale-status How to View PG Distribution via Admin Socket How to View Performance Metrics in the Ceph Dashboard How to View OSD Performance Counters in Ceph How to View Connection Status via Admin Socket How to View Ceph Cluster Summary Dashboard via CLI How to Version Control Rook-Ceph Configuration How to Version Control Ceph Infrastructure with Terraform How to Verify Kubernetes Node Requirements for Rook-Ceph Deployment How to Verify Health Before and After Rook Upgrades How to Verify Data Integrity with Deep Scrubbing How to Verify Complete Rook-Ceph Cleanup How to Verify Backup Integrity from Ceph Snapshots How to Use Rook-Ceph with Velero for Kubernetes Backup How to Integrate HashiCorp Vault with Rook-Ceph (Token Auth) How to Configure TLS for Vault Integration in Rook How to Integrate HashiCorp Vault with Rook-Ceph (Kubernetes Auth) How to Validate Ceph Cluster Configuration After Deployment How to Understand User Type and ID Notation (TYPE.ID) in Ceph How to Configure User Management in the Ceph Dashboard How to Use Rook-Ceph with Kubernetes Operators How to Use Rook-Ceph with Helm Chart Deployments How to Use the Swift API with Ceph RGW How to Use SQLite Databases Stored on Ceph How to Use s3cmd with Ceph RGW How to Use the S3 API with Ceph RGW How to Use Red Hat Ceph with RHEL Virtualization How to Use RBD with QEMU How to Use RBD with Nomad How to Use RBD with CloudStack How to Use RBD Snapshot Rollback How to Use rados bench for Object Storage Benchmarking How to Secure Rook-Ceph with Pod Security Admission How to Use pg-upmap for PG Mapping in Ceph How to Use Multipath Devices with Ceph OSDs How to Use MinIO Client (mc) with Ceph RGW How to Use fs swap for CephFS How to Use fio for Ceph Block Storage Benchmarking How to Use the CephFS Shell How to Use Ceph RGW for Media Asset Management How to Use Ceph RGW for Log Storage and Archival How to Use Ceph RGW for Data Lake Storage How to Use Ceph RGW for Backup Repository Storage How to Use the ceph-authtool Utility How to Use boto3 (Python) with Ceph RGW S3 How to Use AWS CLI with Ceph RGW S3 How to Use the Admin Ops API with Ceph RGW How to Configure Usage Log Key Transition in Ceph RGW How to Handle Rook-Ceph Upgrades in GitOps Pipelines How to Upgrade Rook-Ceph with Zero Downtime How to Create a Ceph Upgrade Runbook How to Upgrade the Rook Operator from v1.18 to v1.19 How to Upgrade the Rook Operator on Kubernetes How to Upgrade External Cluster Connections in Rook How to Upgrade the Ceph Version in Rook How to Upgrade from Ceph Reef to Squid How to Upgrade from Ceph Quincy to Reef How to Upgrade Ceph Clusters in Stretch Mode How to Update Kernel for CephFS Feature Compatibility How to Update Ceph Configuration on a Running Rook Cluster How to Create Unique Kubernetes Services per NFS Server in Rook How to Understand When Compression Helps vs Hurts in Ceph How to Understand User Types (Individual vs System) in Ceph How to Understand the undersized PG State in Ceph How to Understand the stale PG State in Ceph How to Understand the repair PG State in Ceph How to Understand the remapped PG State in Ceph How to Understand Red Hat Ceph Storage vs Upstream Ceph How to Understand Placement Groups in Ceph How to Understand PG Splitting in Ceph How to Understand the peering PG State in Ceph How to Understand OSD Recovery Process in Ceph How to Understand the OSD Map in Ceph How to Understand New Features in Each Ceph Release How to Understand Monitor Leadership in Ceph How to Understand MDS States in CephFS How to Understand Deprecated Features in Ceph Reef How to Understand the degraded PG State in Ceph How to Understand D3N in Ceph How to Understand the creating PG State in Ceph How to Understand the clean PG State in Ceph How to Understand CephX Authentication Protocol How to Understand CephX Authentication Flow How to Understand What Data Ceph Telemetry Collects
Self-Hosted Status Pages Compared: Cachet, Upptime, Gatus, cState, and OneUptime
Jamie Mallers · 2026-04-14 · via OneUptime Blog

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.

What to Look For in a Self-Hosted Status Page

Before diving into specific tools, here's what actually matters when you're running your own:

  • Maintenance burden: How much work is it to keep running? A status page that goes down during an incident defeats the entire purpose.
  • Incident management: Can you create, update, and resolve incidents through the tool itself, or is it just a display layer?
  • Monitoring integration: Does it detect outages automatically, or do you have to manually flip switches?
  • Subscriber notifications: Can users subscribe to updates via email, SMS, or webhook?
  • Custom domains and branding: Can you put it on status.yourcompany.com with your own look?
  • Authentication for private pages: Not every status page is public. Internal teams need private ones too.

The Contenders

Cachet (PHP)

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:

  • Mature project with a well-designed interface
  • API-driven - easy to integrate with CI/CD pipelines
  • Component groups and metric graphs
  • Subscriber notifications built in
  • Multilingual support

Weaknesses:

  • Maintenance concerns: Cachet went through a long period of inactivity. The v3 rewrite has been in progress for years. Depending on when you read this, check the commit history carefully.
  • Requires PHP hosting (Laravel), which adds operational overhead if your stack is containers or Node.js
  • No built-in monitoring - it's purely a display layer. You need external tools to detect outages and push updates via the API.
  • No on-call or alerting features

Best for: Teams that want a traditional status page with API integration and already run PHP infrastructure.

Upptime (Static Site)

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:

  • Zero infrastructure to maintain - runs on GitHub's free tier
  • Monitoring is built in (HTTP, TCP, DNS checks via Actions)
  • Incident history is just GitHub Issues, making it highly transparent
  • Response time graphs generated from monitoring data
  • Custom domains via GitHub Pages

Weaknesses:

  • Tied to GitHub - if GitHub has issues, your status page and monitoring are both down (GitHub Actions has a track record of reliability issues during platform incidents)
  • Limited notification options - relies on GitHub's notification system
  • No real incident management workflow - creating an incident means opening a GitHub Issue
  • Can't handle private status pages
  • Customization is limited to what GitHub Pages and their template system support
  • Monitoring granularity is limited by GitHub Actions cron (minimum 5-minute intervals)

Best for: Small teams, open-source projects, or personal projects that want monitoring and a status page with zero operational overhead.

Gatus (Go)

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:

  • Single binary, minimal resource usage - runs happily on a Raspberry Pi
  • Monitoring is first-class: HTTP, TCP, DNS, ICMP, SSH, and even GraphQL checks
  • Alerting integrations: Slack, PagerDuty, Discord, Telegram, email, and more
  • Conditional alerting (alert only if X consecutive failures)
  • YAML-based configuration is version-controllable
  • Built-in badge generation for README files

Weaknesses:

  • No incident management - it monitors and displays status, but there's no way to manually create incidents, post updates, or manage scheduled maintenance
  • No subscriber notifications (email/SMS to end users)
  • The status page UI is functional but basic - limited branding options
  • No API for programmatic incident creation
  • No private/authenticated status pages
  • Configuration changes require restarting the service (no hot reload for most settings)

Best for: DevOps teams that want lightweight, automated status monitoring with a clean dashboard. Works well as an internal health check display.

cState (Static Site Generator)

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:

  • Blazing fast - it's a static site, so it loads instantly and handles any traffic spike
  • Full design customization via Hugo templates
  • Incidents are Markdown files in a Git repo - full version history
  • Extremely resilient - a static page hosted on a CDN is about as reliable as it gets
  • RSS feed for status updates
  • Multi-language support

Weaknesses:

  • No monitoring whatsoever - purely a manual display page
  • Creating incidents means committing Markdown files to a Git repo, which isn't exactly fast during a 3 AM outage
  • No subscriber notifications
  • No API
  • No private status pages
  • Requires familiarity with Hugo and Git
  • The project has lower activity - check the repo for recent commits

Best for: Teams that want maximum resilience and full design control, and are comfortable with Git-based workflows for incident updates.

OneUptime (Full Platform)

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:

  • All-in-one: monitoring detects the outage, incident management tracks it, status page communicates it, and on-call routing alerts the right person - in one platform
  • Public and private status pages with SSO authentication
  • Subscriber notifications (email, SMS, webhook, RSS, Atom)
  • Scheduled maintenance management with automatic status page updates
  • Custom domains and full branding
  • Workflows and automation for incident response
  • OpenTelemetry-native for logs, metrics, and traces
  • Active development with frequent releases

Weaknesses:

  • Heavier to self-host than single-purpose tools - it runs PostgreSQL, Redis, and multiple services. Kubernetes is recommended for production deployments, though Docker Compose works for smaller setups.
  • If you only need a status page and nothing else, it's overkill
  • Resource requirements are higher (minimum 4GB RAM for a comfortable deployment)
  • The learning curve is steeper since there are more features to configure
  • SaaS version has usage-based pricing (charges by GB ingested for telemetry). Self-hosted is free.

Best for: Teams that want to consolidate monitoring, incident management, on-call, and status pages into a single self-hosted platform.

Feature Comparison Table

FeatureCachetUpptimeGatuscStateOneUptime
Built-in monitoringNoYes (GitHub Actions)YesNoYes
Incident managementYes (API)Via GitHub IssuesNoVia Markdown/GitYes (full workflow)
Scheduled maintenanceYesNoNoYes (manual)Yes (automated)
Subscriber notificationsYesNoNoNoYes (email, SMS, webhook)
Private/auth status pagesNoNoNoNoYes (SSO, per-user)
On-call schedulingNoNoNoNoYes
Custom domainYesYesLimitedYesYes
Branding/themingModerateLimitedMinimalFull (Hugo)Full
APIYesGitHub APINoNoYes
Minimum resources512MB0 (GitHub-hosted)64MB0 (static)4GB
Deploy complexityMediumLowLowLowMedium-High
LicenseBSD-3MITApache-2.0MITApache-2.0

How to Choose

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.

A Note on Reliability

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:

  • Static pages on a CDN (cState, Upptime) are naturally resilient to this
  • Separate infrastructure: run your status page on a different provider than your main application
  • DNS-level failover: some teams point their status domain to a static fallback if the primary page becomes unreachable
  • Multiple zones: OneUptime supports deploying across regions for exactly this reason

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.

Conclusion

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.