Deploy a beautiful, self-hosted status page to communicate service incidents and maintenance windows to your users.
Grab the automated bash script from GitHub to follow along with the video.
wget https://raw.githubusercontent.com/mhmdali94/Docker/main/monitoring/cachet/cachet-ubuntu.sh
chmod +x cachet-ubuntu.sh
sudo bash cachet-ubuntu.sh
The script installs Docker, pulls the Cachet and PostgreSQL images, and starts both containers. Cachet will be available on port 8000 with a PostgreSQL database backend for persistent storage of your components and incident history.
wget https://raw.githubusercontent.com/mhmdali94/Docker/main/monitoring/cachet/cachet-ubuntu.sh
chmod +x cachet-ubuntu.sh
sudo bash cachet-ubuntu.sh
Open your browser and navigate to Cachet. The first-run setup wizard will guide you through configuring your status page name, environment, and administrator account credentials.
http://<your-server-ip>:8000
In the Cachet dashboard, go to Components and add the services you want to track — such as API, Website, or Database. Set each component's current status: Operational, Performance Issues, Partial Outage, or Major Outage. Group related components together for better organisation.
When a service goes down, navigate to Incidents and create a new incident update. Set the status to Investigating, Identified, Watching, or Fixed as the situation evolves. Subscribers will receive email notifications for each update, keeping your users informed throughout the incident lifecycle.
| Port | Purpose |
|---|---|
| 8000 | Cachet Web UI |
| 5432 | PostgreSQL database (internal) |
Cachet is an open-source status page system for communicating the health of your services to customers and users. It allows you to list components, post incident updates, display uptime metrics, and let users subscribe to notifications — all from a clean self-hosted status page.
Self-hosting Cachet gives you full control over your status page without paying for Statuspage.io or Better Stack. You own the data, the domain, and the notification pipeline. It is ideal for SaaS products, APIs, and internal service dashboards.
Cachet runs on port 8000 inside the container. Map it to a standard port via a reverse proxy on port 443 with a custom domain like status.yourdomain.com. The public status page should be accessible to everyone while the admin area requires authentication.
Alternatives include Upptime (GitHub-based, static), Gatus (monitoring plus status page), Better Stack (cloud, polished), and Statuspage.io (Atlassian, enterprise). Choose Cachet for a mature self-hosted status page with a good admin UI.
Avoid Cachet if you need automatic monitoring that updates component status without manual intervention — consider Gatus or Uptime Kuma with a status page plugin. Cachet is primarily manually driven.
PrismaTechWork provides end-to-end infrastructure services — from initial deployment and security hardening to ongoing monitoring, automated backups, and dedicated support. Whether you need a single-server setup or a multi-site network, our team ensures your infrastructure is built right, secured properly, and maintained reliably.
Not natively — Cachet is primarily a status communication tool where admins manually update component statuses and post incidents. However, you can use its REST API to programmatically update statuses from an external monitoring system like Gatus, Uptime Kuma, or Nagios.
Yes. Visitors to the public status page can subscribe with their email address. They receive email notifications when an incident is created, updated, or resolved, and when component statuses change. You can also configure webhook notifications for programmatic integrations.
Log into the Cachet admin dashboard and go to Incidents, then click Add Incident. Specify the incident name, status, message, and which components are affected. The incident appears immediately on the public status page. You can post follow-up updates as the situation evolves.
Yes. Cachet supports metric points that you push via API. Create a metric in the dashboard (e.g., API Response Time), then post data points from your monitoring system. Cachet displays the metric as a graph on the public status page.
Yes. Create scheduled maintenance entries in the admin panel with a start and end time and affected components. Cachet displays the upcoming maintenance on the status page and notifies subscribers in advance so users are aware before the downtime begins.
Yes. Configure a reverse proxy (Nginx, Caddy, or Nginx Proxy Manager) to forward your custom domain like status.yourdomain.com to the Cachet container on port 8000. Set the APP_URL environment variable to your custom domain.
Cachet supports MySQL, PostgreSQL, and SQLite. For production use, MySQL or PostgreSQL is recommended for reliability. SQLite is suitable only for testing or very low-traffic instances.
Yes. Cachet has a full REST API. To update a component status, send a PUT request to /api/v1/components/{id} with a JSON body containing the new status value (1 for operational, 2 for degraded, 3 for partial outage, 4 for major outage). Include your API token in the Authorization header.