Status pages are important for maintaining a line of communication with your users in the event of a loss of services. We do this both via Twitter
and our status page
. Over the years we have maintained these status pages in one form or another. This varied from custom-generated output from a parsed Nagios status.dat file, to a Cachet
site, to (currently) StatusCake
Through all of these iterations we always had to host this somewhere, itself a single point of failure, usually a tiny VPS with a different provider. The last and current one, StatusCake, while a cloud provider, also required a self-maintained VPS due supporting only HTTP (not HTTPS) for our status sub-domains. Some of our domains use HTTP Strict Transport Security (HSTS)
, which enforces HTTPS on all sub-domains, so their solution wouldn't work out of the box. This meant we had to run a small VPS to handle TLS certificates. Therefore, we were still stuck with pointing the status page sub-domains at a single point of failure.
After years of operating this way, a recent discovery created an 'ah-ha!' moment: Github pages
. With a Github page, you can point a custom domain
or sub-domain to it. Earlier this year, Github added HTTPS support
for custom domains and sub-domains. The actual content of our status page VPS was just a couple static HTML files for frames, and a LetsEncrypt cron job, so this would work perfectly on a Github page.
Screenshot of Github repository settings
After following Github's directions on setting up a custom domain
, it just took some time until DNS propagated, Github recognized it, and offered the "Enforce HTTPS" option. Et voila! No more need for a VPS or single point of failure (assuming Github's pages infrastructure is resilient).
The best part about this is everything included is free. StatusCake offers a rather awesome public status page setup for free, and Github pages offer an excellent way to ensure HTTPS where StatusCake cannot, also for free.
You can see this in action on our status page Github organization
, or on our status pages directly: