Easy Self Host Icon

Uptime Kuma: Self-Hosted Uptime Monitor

Video

Transcript

Hey everyone, welcome back to Easy Self Host.

In this video, we’re setting up Uptime Kuma — a self-hosted uptime monitor.

It watches your servers and services with HTTP, ping, DNS, Docker, and more.

And it alerts you when something goes down — via email, ntfy, Discord, Telegram, and more.

It even lets you publish a public status page so your users can see at a glance if everything’s running.

Now, let’s run Uptime Kuma on our home server with Docker Compose.

The Compose file is simple — it’s just one service.

We’ll use the v2 Uptime Kuma image.

The default image includes dependencies like Chromium, so it’s a bit large.

If you want a smaller image, you can use the slim variant.

For storage, create a Docker volume and mount it to the /app/data directory to persist your data.

For networking, attach the service to the proxy Docker network so it can reach your reverse proxy.

That’s it for the Docker Compose.

Next, let’s set up the reverse proxy for Uptime Kuma.

I’m using Caddy, so I’ll add a rule to route uptime.ezsh.app to the uptime-kuma service on port 3001.

Port 3001 is the default for the Uptime Kuma container.

Now, SSH into your server and navigate to the Docker Compose directory.

Run docker compose up -d to start the service.

Then restart the Caddy container to reload the proxy configuration.

Now go to uptime.ezsh.app to access our Uptime Kuma server.

On first launch, you’ll be asked to pick a database.

I’ll choose SQLite for the simplest setup.

If you prefer MySQL or MariaDB, you can use the embedded MySQL database in the container.

Or run an external Database in your Docker Compose stack and connect to it.

Next, create the first admin account with a username and password.

Now we’re in the Uptime Kuma dashboard.

There aren’t any monitors yet, so let’s add the first one.

For my first monitor, I’ll check easyselfhost.com using HTTP.

I’ll set the interval to 1 minute, with 2 retries.

We’ll cover notifications later, so skip that for now.

No proxy needed for my site.

In Advanced, I’ll enable the certificate-expiry notification so I’ll be alerted before the TLS cert expires.

Finally, add a tag to keep things organized.

And save!

Now Uptime Kuma is monitoring my website.

Let’s try a few more monitor types.

I also want to monitor whether my home server is up.

For that, I’ll use Ping.

I’ll enter the server’s IP address as the hostname.

And I’ll add a different tag to keep things organized.

Next, I’ll set up a DNS monitor for my AdGuard Home server.

I’ll have it resolve a domain using my AdGuard DNS address to confirm it’s running.

So far, these monitors are pull-based — Uptime Kuma reaches out to the target service.

For services that are hard to reach, or jobs that run on a schedule, we can use a Push monitor.

With Push, the service reports its own health back to Kuma.

When you add a Push monitor, Kuma gives you a unique URL.

You can call that URL from your app, or a script.

As an example, I’ll monitor a Redis service inside a Docker Compose stack.

This Redis service is not reachable from outside.

After creating the monitor, I’ll pause it while I set things up.

I’ll add a small health-check section that pings Redis, then calls the Push URL with success or failure.

Once that’s in place, I’ll resume the monitor and watch for heartbeats.

We’ve got a few monitors running, and we can see their status in the dashboard.

Now let’s set up notifications so we actually get alerted when something goes down.

Go to Settings → Notifications.

There are lots of options.

For Email, you’ll need an SMTP server.

If you have a domain, you can use Resend to get a free SMTP endpoint. (I covered this in my BlueSky video.)

I think the quickest way is using ntfy.

It’s an app that’s available on iOS or Android.

Open the app.

Let’s create a unique topic name and subscribe to that topic.

In Uptime Kuma, add an ntfy notification and paste the topic.

Click Test to make sure your phone receives it.

Then check Apply to all existing monitors and Save.

I personally use Telegram for alerts since I’m a telegram user.

In Telegram, open the @BotFather and create a new bot.

Copy the bot token, then send a message to your new bot.

Back in Uptime Kuma, paste the bot token, and use Get Chat ID to fill it in automatically.

Click Test and Save.

Let’s try a live test by taking a service down.

I’ll stop my Docmost container.

After a bit — depending on your interval and retry settings — it flips to DOWN and we’ll get a notification.

Bring the service back up.

The status returns to UP, and we’ll get a recovery notification too.

Uptime Kuma also supports public status pages.

If you have a website, this is great for letting your audience check service health at a glance.

To create one, go to Status Pages.

Click New Status Page, give it a name.

In the editor mode, add the monitors you want to display.

And there are a few more settings you can tweak.

Click Save.

Now anyone can view the page without logging in.

I’ve also set up a status page for my sites at status.easyselfhost.com

That’s all for this video.

If you found this helpful, consider subscribing for more self-hosting content.

You can find links to the configuration files I used in the description below.

Thank you for watching!

Resources