Uptime Kuma is an open-source monitoring tool that checks whether your services are reachable, then alerts you when something goes down. It supports HTTP(s), TCP ports, ping, DNS, and several other check types, with a clean web dashboard for managing everything.
Self-hosting it instead of using a paid service has a few clear advantages:curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.shVerify the installation:
docker --version
mkdir uptime-kuma cd uptime-kuma curl -o compose.yaml https://raw.githubusercontent.com/louislam/uptime-kuma/master/compose.yaml docker compose up -dThis pulls the compose file directly from the official repository and starts Uptime Kuma with a Docker-managed named volume for persistent data.
docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:2This maps port 3001 on the VPS to the container and stores all monitoring data in a named volume called
uptime-kuma, managed by Docker, so it survives container restarts or updates.
http://your-vps-ip:3001
On first visit, you'll be asked to choose a database: embedded MariaDB, an external MariaDB/MySQL server, or SQLite. For most single-server VPS setups, SQLite is the simplest choice since it requires no separate database server. Embedded MariaDB is bundled into the full Docker image if you prefer a more robust database without managing an external one. External MariaDB/MySQL is best if you already run a database server or want to separate the database from the monitoring container.
After choosing a database, you'll be asked to create an admin username and password. This account is what you'll use to log in and manage monitors going forward.
From the dashboard, click Add New Monitor and choose a monitor type:
Set the check interval (default is 60 seconds), give the monitor a friendly name, and save. Uptime Kuma will immediately start checking and logging the status.
Uptime Kuma includes a built-in public status page feature, useful if you want to share service status with clients or users without giving them dashboard access.
Go to Status Pages from the dashboard, create a new page, add the monitors you want visible, and publish. The page is accessible at a URL served directly by your Uptime Kuma instance.
Check that your VPS firewall (UFW, iptables, or your provider's network firewall) allows inbound traffic on port 3001, or on port 443 if you've set up a reverse proxy.
Monitoring data resets after container restartThis usually means the volume wasn't mounted correctly. Confirm the -v uptime-kuma:/app/data flag was included in the docker run command, and check it with docker volume ls to confirm the volume exists.
Double-check the credentials entered for the notification channel (bot token, webhook URL, etc.), and confirm the notification is actually attached to the monitor, not just saved in settings.
Yes, it's fully open-source and free to self-host, with no monitor limits or paid tiers.
Can it monitor multiple servers from one instance?Yes, a single Uptime Kuma instance can monitor any number of external hosts, websites, or services, not just the VPS it's installed on.
How is this different from UptimeRobot or Pingdom?Those are paid SaaS monitoring tools with free tiers that cap the number of monitors and check frequency. Uptime Kuma runs on your own VPS, so there are no such limits, at the cost of having to maintain the server yourself.
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh mkdir uptime-kuma docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:2Then visit
http://your-vps-ip:3001 to finish setup in the dashboard.