Keeping It Alive: Setting Up Uptime Kuma to Monitor My Self-Hosted Stack

Since moving most of my personal tools and services to a self-hosted setup, I needed a simple way to check if everything was still running — without relying on external services like Pingdom or UptimeRobot. Enter Uptime Kuma, a sleek, open-source monitoring dashboard I now run locally to keep an eye on my stack.
🛠 What Is Uptime Kuma and Why Use It?
Uptime Kuma is a lightweight, self-hosted monitoring tool — think of it like a free alternative to StatusCake or Better Uptime, but hosted on your own hardware. It tracks whether services are reachable, how fast they respond, and can alert you instantly when something goes down.
I run it in Docker on my main mini-PC (blackbox
), and check in via the local network or Tailscale when remote. It’s fast, simple, and works brilliantly for my use case.
🧱 How I Installed It (Docker Compose)
I installed Kuma using a dead-simple Docker Compose setup. Here’s the snippet I used:
services:
uptime-kuma:
image: louislam/uptime-kuma
container_name: uptime-kuma
restart: always
ports:
- "3001:3001"
volumes:
- ./uptime-kuma:/app/data
Once up, the web interface is available at http://localhost:3001
. From there, it’s just a matter of adding services to monitor.
🧩 What It Monitors (So Far)
Right now, Uptime Kuma watches several key services in my self-hosted stack:
- 🧠
Ghost
blog (private journal) - 🎬
Jellyfin
(media server) - 💬
Open WebUI
(for chatting with local LLMs) - 🤖
Ollama
(the LLM engine) - 📥
qBittorrent
(torrent box) - 📺
MeTube
(YouTube downloader) - 🔍
SearxNG
(privacy-respecting metasearch engine for LLM web queries)
Each service gets a custom URL and check interval. Kuma pings them regularly and updates the dashboard with uptime percentages and status indicators.
🔔 Email Notifications via Gmail
Setting up email alerts was straightforward. It can also be configured to use Telegram, Discord, and a host of other services. I used a Gmail address with 2FA enabled and generated an App Password just for Uptime Kuma.
SMTP Config:
- SMTP Server:
smtp.gmail.com
- Port:
465
(TLS) - Username: your Gmail address
- Password: your app password (not your actual account password)
- From Name:
Uptime Kuma
- To: your real address (or an alias)
Alert Template:
🚨 ALERT: {{NAME}} ({{HOSTNAME_OR_URL}}) is {{STATUS}}
This sends a quick heads-up to my inbox if anything goes offline (or comes back online).
🎞 Bonus: MeTube as a Downie Replacement
One of the services I added recently is MeTube, a self-hosted video downloader that wraps yt-dlp
in a web UI. It works incredibly well — like a free, local version of Downie or 4K Video Downloader.
Why I love it:
- Clean interface
- Supports full playlists
- Lets me download YouTube videos directly into my Jellyfin library
How I installed it (Docker Compose):
services:
metube:
image: alekseynemiro/metube
container_name: metube
restart: always
ports:
- "3002:8081"
volumes:
- ./downloads:/downloads
I pointed the download folder to a location Jellyfin scans — and that’s it. It just works.
✅ Final Thoughts
Uptime Kuma has become a key part of my self-hosted setup. It keeps me in the loop when something crashes (or I accidentally reboot something), and gives me a sense of control over the growing stack of tools running behind blackbox
.
