2026-09-25

How to Self-Host Uptime Kuma on a Raspberry Pi 5 to Monitor All Your Homelab Services

Uptime Kuma is a lightweight, self-hosted monitoring tool that tracks HTTP, TCP, DNS, ping, and other checks for every service in your homelab — and a Raspberry Pi 5 runs it effortlessly. This guide covers the full setup from bare metal to working dashboard, grounded in real numbers from my own Pi 5 build.

My Actual Hardware

Here's exactly what I'm running, with real measurements:

I'm using an M.2 NVMe case for the Pi (similar to the Argon ONE V3 M.2 NVMe Case). The Fanxiang S501Q is a budget NVMe; if you prefer a more established option, the Samsung 970 EVO Plus 250GB NVMe is reportedly a solid choice, though I haven't benchmarked it myself. Power comes from a CanaKit USB-C Power Supply for Pi 5, which delivers the full 5.1V/5A the Pi 5 wants.

Prerequisites

You need a Raspberry Pi 5 running a 64-bit OS, booting from NVMe (or at minimum a decent SD card — but NVMe is strongly recommended for database durability). SSH access, a static IP or DHCP reservation on your LAN, and Docker installed.

Install Docker

If you haven't already:

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker

Verify with docker run hello-world.

Deploy Uptime Kuma with Docker Compose

Create a directory and compose file:

mkdir -p ~/uptime-kuma && cd ~/uptime-kuma
nano docker-compose.yml

Paste this:

version: "3"
services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    restart: unless-stopped
    ports:
      - "3001:3001"
    volumes:
      - ./data:/app/data
    environment:
      - TZ=America/New_York  # adjust to your timezone

Start it:

docker compose up -d

Wait about 15 seconds, then open http://<your-pi-ip>:3001 in a browser. You'll see the first-run setup screen asking you to create an admin account.

Resource Usage on My Pi 5

After running Uptime Kuma for several days with 22 monitors (a mix of HTTP, TCP, ping, and Docker checks polling every 60 seconds):

This is about as lightweight as monitoring gets. The Pi 5 can comfortably run Uptime Kuma alongside a dozen other containers.

Configuring Monitors

HTTP(S) Checks

Click Add New Monitor, choose HTTP(s), enter the URL (e.g., https://nextcloud.local), set the interval (60 seconds is sensible for most homelab services), and save. Uptime Kuma will flag anything that doesn't return a 2xx status.

TCP Port Checks

For services without an HTTP endpoint — a Postgres database on port 5432, an MQTT broker on 1883 — use TCP Port monitors. Enter the hostname and port.

Ping Checks

Good for switches, APs, and other infrastructure that only needs to be "alive." Choose Ping, enter the IP.

Docker Container Checks

Uptime Kuma can monitor Docker containers directly via the Docker socket. Add this volume to your compose file:

    volumes:
      - ./data:/app/data
      - /var/run/docker.sock:/var/run/docker.sock:ro

Restart the container, then go to Settings → Docker Hosts, add the local socket, and you can create monitors that check whether a specific container is running.

Notifications

Uptime Kuma supports 90+ notification types. The most practical for a homelab:

Set up at least one notification method before you forget. Monitoring without alerting is just a pretty graph.

Securing Access

Uptime Kuma's built-in auth is fine for LAN use. If you want to access your dashboard remotely:

If you'd rather run your monitoring on a VPS instead of (or in addition to) your Pi — useful for monitoring your home internet connection itself from outside — a small instance on Hetzner Cloud or DigitalOcean is enough. Uptime Kuma needs virtually nothing.

Backups

The entire Uptime Kuma state lives in ./data/kuma.db (SQLite). Back it up:

# Stop briefly for a clean copy, or use sqlite3 .backup
sqlite3 ./data/kuma.db ".backup ./data/kuma-backup.db"

Automate this with a cron job. For off-site copies, Backblaze B2 B2 is cheap and works well with rclone. If you ever need to clone your NVMe for a full system backup, an external enclosure like M.2 NVMe SSD Enclosure – USB-C 10Gbps with Magnetic Closure makes the process painless — plug it into the Pi's USB 3.0 port and dd or use rpi-clone.

Maintenance

Uptime Kuma updates frequently. To pull the latest image:

cd ~/uptime-kuma
docker compose pull
docker compose up -d

Check the release notes before upgrading — breaking changes are rare but possible.

If you're running the Pi headless (as most people do for a monitoring box), keep a Tri-Fold Bluetooth Keyboard – Wireless Foldable for Headless Servers nearby for emergency console access when SSH isn't cooperating.

Who Should NOT Do This

Verdict

Uptime Kuma on a Pi 5 with NVMe boot is a near-perfect homelab

🛠️ From the bench shop

Gear from our own store that fits this build — shipped tracked, UK support.

The Homelab Agent Kit — 9 AI Agents, 13-Chapter Build Guide, Python£29.00View →
M.2 NVMe SSD Enclosure – USB-C 10Gbps with Magnetic Closure£36.99View →
M.2 SSD Enclosure – NVMe & SATA USB External Aluminium Case£26.99View →

Free: Raspberry Pi Server Hardening Checklist

Eighteen checks for locking down a Raspberry Pi server — keys-only SSH, mesh VPN instead of port forwarding, scoped firewall rules, and the grep that catches an API key before you push it.

No spam, unsubscribe in one click. I never share or sell your address.

← all articles

Some links are affiliate links — if you buy through them I may earn a small commission at no extra cost to you. Benchmarks are run on my own hardware. · Shop · Contact