Bottom line: if you run any service at all — a website, a home-server, an n8n automation, an API — you should know the moment it goes down. Uptime Kuma is the free, self-hosted way to do it, and it runs happily on a cheap VPS with just 1 GB of RAM.
Why self-host Uptime Kuma instead of paying for a monitor
If you don't have a VPS yet, Vultr and DigitalOcean both run a 1 GB box comfortably. Affiliate disclosure: signups through these links may earn us a commission.
What you get
- HTTP(S), TCP, ping, and port monitors — with public status pages you can share
- Push, email, Slack, Telegram, Discord, webhook notifications
- SSL certificate expiry checks so you don't find out the hard way
- Unlimited monitors on the free tier
The one-command setup
With Docker Compose (see the uptime-kuma-stack repo for the full files), a single docker-compose.yml gets you running:
services:
uptime-kuma:
image: louislam/uptime-kuma:1
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- ./uptime-kuma-data:/app/data
Then docker compose up -d and open http://your-vps:3001. First run asks you to set the admin password.
Put it behind HTTPS (free, auto-renewing)
Uptime Kuma is not a full web server, so put a reverse proxy in front. Caddy handles TLS automatically:
status.yourdomain.com {
reverse_proxy uptime-kuma:3001
}
Caddy pulls a Let's Encrypt certificate on first request and renews it for you. The repo includes both files ready to run.
Hardware reality check
Uptime Kuma is light. On a 1 GB VPS it idles around 100–150 MB of RAM with a few dozen monitors. If you're also running n8n and a stack of automation tools, a 2 GB box gives you comfortable headroom. See our RAM sizing guide for the full workload table.
Back up the data
All monitor config and history live in ./uptime-kuma-data. Back up that folder (or use Uptime Kuma's built-in automatic backup to a remote endpoint) and you can restore the whole thing on a new box in minutes.