Your online store just went down.
Support channels are flooding, and customer frustration is mounting on social media.
What’s your first move?
When things go wrong (and they inevitably do), clear and timely downtime communication is the key to maintaining user trust.
This is where a dedicated status page comes in.
Whether you’re looking to improve transparency, validate SLAs, or simply show your uptime status to customers, you’re in the right place. This guide will show you exactly how to create and set up a powerful status page for your business.
Let’s get started!
What is a Status Page and Why Do You Need One?
A status page is a dedicated web page that communicates the current operational status of your online services. It is a centralized hub for all incident and maintenance-related information. Instead of flooding your support channels with inquiries during an outage, you can direct users to a single page with all the necessary information that is updated in real time.
Benefits of Having a Status Page:
- Builds Trust: A status page allows you to proactively communicate downtime, which shows transparency and reassures your customers that you are on top of the situation.
- Reduces Support Load: It deflects a significant number of support tickets and calls during an incident, which frees up your team to focus on resolving the issue.
- Validates SLA Breaches: For businesses with Service Level Agreements (SLAs), a status page provides a clear and public record of uptime and incidents, making it easier to validate any breaches.
Tools to Get You Started
There are many excellent tools available that allow you to create a status page, many of which offer free tiers to get you started. Some popular options include:
- UptimeRobot: Known primarily for uptime monitoring, but also offers a simple and effective status page feature.
- BetterStack: Provides a beautifully designed, free status page that integrates with their monitoring and incident management tools.
- Cachet: A powerful, open-source, and self-hostable status page system that gives you complete control over your data and branding.
While hosted solutions are convenient, self-hosting with a tool like Cachet offers unparalleled customization and control.
If you value this flexibility, then it’s worth knowing that RunCloud makes managing and deploying web applications incredibly simple and efficient.
In this tutorial, we will walk you through setting up a status page using Cachet, an open-source solution packed with features to make managing your downtime less stressful.
Why Should You Use Cachet to Create Self-Hosted Status Pages?
Cachet is a feature-rich, open-source status page system built with Laravel. Here’s a quick rundown of its powerful features:
- Component Management: Allows you to define and manage individual components of your application (e.g., API, Website, CDN).
- Incident Reporting: Use it to clearly communicate incidents with status updates like Investigating, Identified, and Fixed.
- Scheduled Maintenance: Allows you to inform your users about upcoming maintenance windows proactively.
- Metrics and Graphs: Display key performance metrics (e.g., response time, error rates) directly on your status page.
- Multi-language Support: Cachet supports over 10 languages, which makes it accessible to a global audience.
- Subscriber Notifications: Allows users to subscribe via email to receive real-time updates on incidents and maintenance.

Step-by-Step: Installing Cachet with RunCloud
Let’s set up your Cachet status page using the RunCloud server management panel to help streamline the process significantly. RunCloud handles server configuration and makes application deployments much simpler.
Step 1: Create a Database and Web Application
First, you’ll need a dedicated database for Cachet. In your RunCloud dashboard, navigate to the Databases section and create a new database and a database user. Securely store these credentials, as you will need them shortly.
Next, create a new, empty Web Application in RunCloud. This will be the home for your Cachet installation.
Step 2: SSH and Clone the Repository
SSH into your server using your preferred method and navigate to your newly created application’s root folder. The path will look something like /home/YOUR_USERNAME/webapps/YOUR_APP_NAME
, and it is available in your RunCloud application dashboard.
You can navigate to this directory by running the following command:
cd <root path>

In this folder, first, we will remove the default index.html file by running the following command:
rm index.html
Now, clone the latest version 3 of the Cachet repository into the current directory:
git clone -b 3.x https://github.com/cachethq/cachet.git --depth 1 .
The .
at the end ensures the files are cloned directly into your application root, not a new subfolder.
Step 3: Install Dependencies
With the files in place, it’s time to install the required PHP dependencies using Composer.
A key advantage of RunCloud is its support for multiple, isolated PHP versions per application. To ensure you’re using the correct one, you may need to specify the absolute path to the PHP version you assigned to this app.
You can refer to the PHP Cheat Sheet in the RunCloud Docs to find the absolute path of your PHP binary.
Run the following commands:
# Example for PHP 8.3
/RunCloud/Packages/php83rc/bin/php /usr/sbin/composer install --no-dev -o
/RunCloud/Packages/php83rc/bin/php /usr/sbin/composer update cachethq/core

Step 4: Configure Your Environment
Copy the example environment file to create your own configuration file:
cp .env.example .env
Next, generate a unique application key for security:
# Again, using the RunCloud-specific PHP path
/RunCloud/Packages/php83rc/bin/php artisan key:generate
Step 5: Configure the Application in RunCloud
Head back to your RunCloud dashboard, select your Cachet web application, and navigate to its settings.
- Link the Database: In the Settings menu, find the Linked Database section. Select the database you created in Step 1 from the dropdown menu and save.

- Update Web Application Settings:
- Public Path: Set this to /public.
- Web Application Stack: For best performance, choose Native NGINX.
- Stack Mode: Select Production.
- Web Application Type: Set this to Laravel.
- Click Update to save the changes.

- Edit Environment Variables: Navigate to the Env Editor in the left-hand menu. This user-friendly interface is a fantastic RunCloud feature that prevents you from having to edit the .env file via the command line. Update the following database variables with the credentials you created earlier:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your_cachet_database_name
DB_USERNAME=your_cachet_database_user
DB_PASSWORD=your_database_password

- Remove Disabled PHP function: Cachet requires the highlight_file function to be enabled to work properly. Navigate to your application settings and remove this function from the disabled list, then hit save.

Step 6: Finalize Installation
Now, back in your SSH session, run the final commands to set up the database and application assets.
Publish Cachet’s assets:
/RunCloud/Packages/php83rc/bin/php artisan vendor:publish --tag=cachet
Run the database migrations to create the necessary tables:
/RunCloud/Packages/php83rc/bin/php artisan migrate

Step 7: Create Your Admin User
Create the first user account, which will have administrative access to the Cachet dashboard, by following the interactive prompts:
/RunCloud/Packages/php83rc/bin/php artisan cachet:make:user

Step 8: Set Up the Scheduler Cron Job
Cachet requires a background task to be run every minute to check metrics and handle schedules. RunCloud’s Cron Job manager makes this extremely easy.
- In your RunCloud dashboard, go to Cron Jobs and click Add New Job.
- Fill in the details as follows:
- Job Label: Cachet Cron
- User: Your server user (e.g., runcloud)
- Vendor Binary: Select the correct PHP version binary (e.g., /RunCloud/Packages/php83rc/bin/php)
- Command:
/home/YOUR_USERNAME/webapps/YOUR_APP_NAME/artisan schedule:run >> /dev/null 2>&1
- Run In: Every minute

Save the cron job, and you’re all set!
After Action Report
By now, you should have a fully functional, self-hosted status page. Go ahead and visit your domain to see it live, and log in at the /dashboard to begin customizing components, scheduling maintenance, and transparently communicating with your users.

Investing a small amount of time to set this up builds a more resilient and trustworthy relationship with your customers. While powerful open-source tools such as Cachet provide the features, platforms like RunCloud offer the seamless experience.
As you can see from the process above, RunCloud eliminates the complexity of server configuration, database linking, and cron job management, allowing you to deploy powerful applications with confidence and ease.
Ready to take control of your servers without the headache? Sign up for RunCloud today.
Frequently Asked Questions
Why not use a hosted service like Statuspage.io or BetterStack?
Hosted services are convenient, but you sacrifice control over your data, branding, and features. By self-hosting Cachet with RunCloud, you gain complete freedom to customize every aspect of your status page and avoid the recurring, often expensive subscription fees of third-party platforms.
Is it difficult to set up a self-hosted status page with Cachet?
While setting up any application directly on a server can be complex, a modern server panel like RunCloud makes it incredibly simple. RunCloud handles the server configuration, firewall, and database linking, providing a guided interface that turns a difficult command-line process into a few clicks. This gives you the power of a self-hosted solution without the traditional setup headaches.
Can I fully customize my Cachet status page on RunCloud?
Absolutely, and this is a key advantage of self-hosting. Because you have full control over the application files on your server managed by RunCloud, you can modify the code, apply custom themes, and integrate it deeply with your other systems. This level of customization is simply not possible with restrictive hosted solutions like UptimeRobot or Statuspage.io.
How much does a self-hosted status page on RunCloud cost?
A self-hosted solution is extremely cost-effective, as your only costs are the cloud server (from providers like DigitalOcean or Vultr) and your RunCloud subscription. This predictable, low monthly fee is often significantly cheaper than hosted status page services, which can charge high premiums based on the number of subscribers or components. With RunCloud, you get unlimited potential for a flat, reasonable price.
Do I need to be a Linux expert to manage my server with RunCloud?
Not at all. RunCloud is designed to empower users who want the power of a VPS without needing deep command-line expertise. It automates and simplifies critical server tasks like security updates, creating cron jobs, and managing databases through an intuitive graphical dashboard, giving you full control with none of the complexity.