You can't fix what you don't know is broken. Uptime Kuma gives you real-time monitoring for every service in your homelab — with a beautiful dashboard, instant alerts, and a 5-minute setup.
Why Self-Host Your Monitoring?
Commercial monitoring services like UptimeRobot or Pingdom work fine — until you hit their free tier limits or need to monitor internal services. If you're running a homelab with Plex, Nextcloud, Pi-hole, or any self-hosted apps, you need monitoring that can reach inside your network.
Uptime Kuma is the answer. It's lightweight, open-source, and designed specifically for homelab enthusiasts. Unlike enterprise tools that require a PhD to configure, Uptime Kuma is refreshingly simple.
What You'll Build
- A self-hosted monitoring dashboard accessible from anywhere
- HTTP(s), TCP, ping, and keyword monitoring for unlimited services
- Instant notifications via Telegram, Discord, email, or 20+ other channels
- Beautiful status pages you can share with users
- Response time graphs and uptime history
Prerequisites
- A VPS or server with Docker installed (1GB RAM minimum, 2GB recommended)
- Docker and Docker Compose plugin installed
- A domain name (optional, for HTTPS)
- 10 minutes of your time
Step 1: Create the Docker Compose File
Create a directory for Uptime Kuma and a docker-compose.yml file:
mkdir -p ~/uptime-kuma && cd ~/uptime-kuma
cat > docker-compose.yml << 'EOF'
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: always
ports:
- "3001:3001"
volumes:
- ./data:/app/data
environment:
- TZ=UTC
EOF
Step 2: Start Uptime Kuma
docker compose up -d
That's it. Uptime Kuma is now running on port 3001.
Step 3: Initial Setup
- Open
http://your-server-ip:3001in your browser - Create your admin account (username + password)
- You'll land on the dashboard — empty, ready for your first monitor
Step 4: Add Your First Monitor
Click "Add New Monitor" and configure:
- Monitor Type: HTTP(s) for web services, Ping for servers, TCP for databases
- Friendly Name: "My Nextcloud" or "Plex Server"
- URL: The service URL (e.g.,
https://nextcloud.mydomain.com) - Interval: 60 seconds (default) or as low as 20 seconds for critical services
Click "Save" — Uptime Kuma starts checking immediately.
Step 5: Set Up Notifications
This is where Uptime Kuma shines. Click Settings → Notifications → Add Notification:
- Telegram: Create a bot via @BotFather, get the token and chat ID
- Discord: Create a webhook in your server settings
- Email: Use SMTP or a service like Mailgun
- Pushover/Pushbullet: For mobile push notifications
Test the notification, then assign it to your monitors. You'll get alerted within seconds of a service going down.
Step 6: Create a Status Page (Optional)
Want to show service status to users or teammates? Go to Status Pages → New Status Page:
- Give it a name and custom domain
- Select which monitors to display
- Share the public URL
Perfect for teams, homelab dashboards, or showing off your uptime to friends.
Verification
Confirm everything is working:
- Visit your dashboard — you should see green "Up" badges for all monitors
- Stop a test service:
docker stop <container_name> - Within 60 seconds, Uptime Kuma should show red "Down" and send a notification
- Restart the service — confirm the "Up" notification arrives
Next Steps
- Reverse proxy: Put Uptime Kuma behind Traefik or Nginx Proxy Manager for HTTPS
- Monitor Docker containers: Use the Docker socket proxy for container health checks
- Backup: The
./datadirectory contains everything — back it up regularly - Pair with Grafana: Export metrics to Prometheus for long-term trending
Related Guides
- Self-Host Prometheus + Grafana: Complete Monitoring Stack
- Self-Host Traefik: The Ultimate Reverse Proxy
- Self-Host Portainer: Manage All Your Docker Containers
Uptime Kuma is the monitoring tool every homelab needs but doesn't know it yet. Set it up once, and you'll wonder how you ever managed without it.