TutorialsAugust 4, 20265 min read

How to Self-Host Uptime Kuma for Monitoring

A gorgeous, self-hosted uptime monitor. Install Uptime Kuma with Docker and get instant alerts when a site or service goes down.

NBy Nxeon

Uptime Kuma is a self-hosted monitoring tool that watches your websites and services and alerts you the moment something breaks. It's the open-source answer to paid status monitors, with a clean dashboard and dozens of notification channels. This guide installs it with Docker in about five minutes. It also pairs neatly with a public status page for your services.

What Uptime Kuma can monitor

  • HTTP(S) endpoints — with status-code and keyword checks.
  • TCP ports, so you can watch a database or game server.
  • Ping, DNS records and even certificate expiry.
  • Push monitors for cron jobs ("tell me if this didn't run").

Prerequisites

  • A VPS with Docker installed — how to run Docker on a VPS has you covered.
  • Ideally a domain like status.example.com so you can reach the dashboard over HTTPS.

Deploy Uptime Kuma

mkdir -p ~/uptime-kuma && cd ~/uptime-kuma
services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    restart: unless-stopped
    volumes:
      - ./data:/app/data
    ports:
      - "3001:3001"
docker compose up -d

Open http://your-server-ip:3001, create the admin account, and you're in.

Deploying a new server with the Nxeon one-click deploy wizard
Deploying a new server with the Nxeon one-click deploy wizard

Put it behind HTTPS

Front the dashboard with Caddy so it's encrypted and on a tidy URL:

status.example.com {
    reverse_proxy 127.0.0.1:3001
}

Then restrict the firewall:

sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

Add your first monitor

Click Add New Monitor, choose HTTP(S), enter a URL, and set the check interval (60 seconds is a sensible default). Save, and Uptime Kuma starts probing immediately, drawing a response-time graph as it goes.

For a service with no public URL — say a database — use a TCP Port monitor pointing at its host and port instead.

Set up alerts

This is the whole point: you want to hear about downtime fast. Under Settings → Notifications, add a channel:

  • Discord/Slack/Telegram: paste a webhook URL — the quickest to set up.
  • Email (SMTP): enter your mail credentials.
  • Many more: Gotify, Pushover, ntfy and dozens of others.

Attach the notification to each monitor and send a test. Now a failed check pings your phone within a minute.

Monitor the monitor

One caveat: if the VPS running Uptime Kuma dies, it can't alert you about itself. For critical setups, run a second lightweight check from elsewhere, or add an external ping to this server. For deeper metrics like CPU and memory trends, pair it with Grafana and Prometheus.

Monitor types worth setting up

Uptime Kuma is more capable than a simple ping. Checks that catch real problems:

  • Keyword monitor: fetches a page and alerts if an expected word is missing — perfect for spotting a site that returns 200 but shows an error.
  • Certificate expiry: warns you days before an SSL certificate lapses, so a forgotten renewal never quietly takes a site down.
  • TCP port: watches a database, game server or mail port that has no web page.
  • Push monitor: flips the logic for cron jobs — your backup script pings a URL when it finishes, and Kuma alerts you if that ping *doesn't* arrive on time. It's the best way to learn that a scheduled job silently stopped running.

Maintenance windows and grouping

Before planned work, schedule a maintenance window so you aren't paged for downtime you caused. Group related monitors (by site or by server) to keep the dashboard readable as it grows. And set each monitor's *retries* and *heartbeat interval* thoughtfully — a couple of retries before alerting cuts down false alarms from brief network blips while still catching real outages within a minute or two.

Turn your monitors into a public status page

Everything you're monitoring can feed a shareable status page with a couple of clicks — a genuinely useful, professional touch for anything other people rely on. From your profile menu choose Status Pages → New Status Page, add the monitors you're happy to show publicly, group them sensibly, and publish. Visitors then see live status and uptime history without needing access to your dashboard. There's a full walkthrough in how to self-host a status page for your services.

One important design note that bears repeating: if the status page runs on the same server as the services it reports on, an outage can take the page down too. For anything critical, host the status page on a separate small VPS so it stays online precisely when you need it to deliver bad news. It's the one service that should never share fate with the rest of your stack.

FAQ

Is Uptime Kuma really free?

Yes, it's fully open source with every feature included — no paid tiers. You only pay for the VPS it runs on.

How often should I check a service?

Every 60 seconds is a good balance for most sites. Drop to 20–30 seconds for critical services, but avoid hammering endpoints you don't own.

Can Uptime Kuma show a public status page?

Yes — it has a built-in status page feature you can share with users. See self-host a status page for your services for the full setup.

Will it alert me if the whole server goes down?

Not about itself — a monitor can't report its own outage. Run a second external check for the box hosting Uptime Kuma.

Keep an eye on everything you run. Uptime Kuma sits comfortably on an affordable VPS — see the VPS plans to get started.

#uptime-kuma#monitoring#docker#self-hosting#alerts#seobatch

Deploy your first server in under a minute

Creating an account is free and takes no card details. You pay when you deploy — choose a billing term and pay from your wallet or by card at checkout.