Why Uptime Kuma Belongs in Every Self-Hosted Stack
Running your own services – a home server, a VPS, a private cloud setup – means flying without a net unless you build one yourself. Uptime Kuma is that net: a self-hosted monitoring dashboard that tracks whether your services are actually responding, and alerts you the moment they stop.

Getting Uptime Kuma Running
Uptime Kuma is a Node.js application, but the cleanest way to deploy it is with Docker. If you already have Docker and Docker Compose installed on your server, you are two minutes away from a working instance. The official image is maintained at louislam/uptime-kuma on Docker Hub, and it is actively updated with new features and security patches. No external database is required – Uptime Kuma uses SQLite by default, which keeps the setup minimal and the backup process simple.
Create a directory for the project, then drop in a docker-compose.yml file. A minimal working configuration looks like this:
- image: louislam/uptime-kuma:1
- container_name: uptime-kuma
- ports: “3001:3001”
- volumes: ./data:/app/data
- restart: unless-stopped
Run docker compose up -d and the container starts in detached mode. Within seconds, the web interface is accessible at http://your-server-ip:3001. On first load, Uptime Kuma prompts you to create an admin username and password. Do not skip this step and do not reuse a weak password – this dashboard will have visibility into every service you run, and leaving it open or under-protected is a genuine risk if your server is internet-facing.
If you want to expose the dashboard publicly through a domain name rather than a raw IP and port, place it behind a reverse proxy. Nginx Proxy Manager, Caddy, and Traefik all work cleanly with Uptime Kuma. Caddy in particular handles automatic TLS certificate provisioning with minimal configuration – you point it at port 3001 and it takes care of HTTPS. This is worth doing even on a home network if you access the dashboard remotely, because sending your admin credentials over plain HTTP is exactly the kind of habit that causes problems later.
Configuring Monitors and Notifications
Once you are logged in, the interface is straightforward enough that documentation is barely necessary. The left sidebar shows all your monitors, and the large “Add New Monitor” button in the top right opens a configuration panel. Uptime Kuma supports a wide range of monitor types, and choosing the right one for each service makes a real difference in the quality of your alerting.
For standard web services, the HTTP(s) monitor type is the right choice. You supply the URL, set a check interval (60 seconds is a reasonable default), and optionally configure keyword matching – this lets you confirm not just that the server responded, but that it returned a specific string, which catches cases where a service returns a 200 status code but is actually showing an error page. For databases, game servers, or anything listening on a raw TCP port, use the TCP Port monitor type instead. DNS monitoring is available separately for tracking name resolution, and there is even a Docker Container monitor type that connects directly to your Docker socket and watches container state without going through the network at all.
Notifications are where Uptime Kuma earns its place in a serious homelab or production setup. The platform supports a long list of notification channels: email via SMTP, Telegram, Discord, Slack, Gotify, Ntfy, PagerDuty, and more than two dozen others. To configure one, go to Settings > Notifications, click “Setup Notification,” choose your provider, and fill in the required credentials. Telegram is a popular choice for self-hosters because it is free, works on every platform, and delivers messages near-instantly. Creating a Telegram bot takes about three minutes through BotFather, and all you need afterward is the bot token and your chat ID.

After saving a notification profile, you assign it to individual monitors during setup or in the monitor’s edit panel. One notification channel can serve multiple monitors, and one monitor can trigger multiple channels – useful if you want routine alerts to go to Telegram while critical services also page you through a louder channel. Each monitor also has configurable retry logic: you can require that a service fail two or three consecutive checks before an alert fires, which eliminates false positives from brief network blips. The Heartbeat Interval and Retries settings live in the monitor’s “Advanced” section and are worth tuning based on how sensitive each service needs to be.
Status pages are a feature many users overlook during initial setup. Uptime Kuma lets you create public-facing status pages that display the health of selected monitors, with customizable titles, descriptions, and domain names. If you run any services that other people depend on – a shared Nextcloud instance, a Jellyfin server for family members, a multiplayer game server – a status page lets them check current status without messaging you directly. The status page builder is under the main menu, and publishing one requires only selecting which monitors to include and optionally mapping a custom domain.
Maintaining Your Monitoring Setup
Uptime Kuma stores all configuration and historical data in a single SQLite file inside the /app/data volume. Backing it up is as simple as copying that directory on a schedule – a daily cron job that copies the data folder to a remote location covers you against both server failure and accidental configuration loss. If you are already running a self-hosted bookmarking tool like Karakeep or other Docker-based services, folding Uptime Kuma’s data directory into your existing backup routine takes less than a minute of additional configuration.

Updating Uptime Kuma through Docker is a pull-and-restart operation: docker compose pull followed by docker compose up -d. The data volume persists across container replacements, so your monitors, notification settings, and history survive the update intact. One thing to watch: if you are running Uptime Kuma behind a reverse proxy and you update both at the same time, restart the proxy after the Uptime Kuma container is back up to avoid a brief window where the proxy serves a stale connection. Uptime Kuma monitors itself by default on its own dashboard – which means the one scenario it cannot catch on its own is a full server outage. For that, a second lightweight monitoring instance on a separate machine or a free external check through a service like BetterUptime or Freshping fills the gap. Whether that redundancy matters depends entirely on what you are running and who relies on it.





