Uptime Kuma is a free, self-hosted monitoring tool. It checks your websites, servers and services every minute or so, and alerts you by email, Slack, Discord, Microsoft Teams, Telegram or many other channels if something goes down. It can also publish a public status page for your customers.
This guide runs Uptime Kuma in Docker, with Caddy in front of it to provide a free HTTPS certificate automatically. It works on every operating system we offer: Ubuntu 22.04, 24.04 and 26.04, Debian 12 and 13, AlmaLinux 8, 9 and 10, and Rocky Linux 9 and 10.
Tip: run Uptime Kuma on a different server from the websites it monitors. If they share a server and that server goes down, your monitoring goes down with it, and you won't get an alert.
Before you start
- A VPS with at least 1 GB of RAM.
- A domain or subdomain with an A record pointing to your VPS IP address, for example
status.example.co.nz. - Nothing else using ports 80 or 443 on the server.
- SSH access as root or as a user with sudo rights. If you're logged in as root, you can leave
sudooff the commands.
Step 1: Install Docker
Skip this step if Docker is already installed (docker --version shows a version).
Ubuntu 22.04, 24.04, 26.04 and Debian 12, 13
sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
. /etc/os-release
sudo curl -fsSL https://download.docker.com/linux/$ID/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/$ID
Suites: ${UBUNTU_CODENAME:-$VERSION_CODENAME}
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
AlmaLinux 8, 9, 10 and Rocky Linux 9, 10 (this removes Podman, which conflicts with Docker):
sudo dnf remove -y podman runc
sudo dnf install -y dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
All systems: start Docker and check it works.
sudo systemctl enable --now docker
sudo docker run --rm hello-world
Step 2: Open the firewall
Ubuntu/Debian with UFW enabled:
sudo ufw allow 80/tcp
sudo ufw allow 443
AlmaLinux/Rocky with firewalld:
sudo firewall-cmd --permanent --add-service=http --add-service=https --add-port=443/udp
sudo firewall-cmd --reload
Step 3: Create the configuration files
sudo mkdir -p /opt/uptime-kuma
cd /opt/uptime-kuma
sudo nano compose.yaml
Paste in the following:
services:
uptime-kuma:
image: louislam/uptime-kuma:2
container_name: uptime-kuma
restart: unless-stopped
volumes:
- uptime-kuma-data:/app/data
caddy:
image: caddy:2
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
volumes:
uptime-kuma-data:
caddy_data:
caddy_config:
Press Ctrl+O and Enter to save, then Ctrl+X to exit. Next, create the Caddy configuration:
sudo nano Caddyfile
Paste in the following, replacing the domain with your own:
status.example.co.nz {
reverse_proxy uptime-kuma:3001
}
Save and exit.
Step 4: Start Uptime Kuma
sudo docker compose up -d
Caddy gets an SSL certificate for your domain automatically. This usually takes under a minute.
Step 5: Create your admin account
Open https://status.example.co.nz straight away and create your admin account. Until you do, anyone who finds the page could create it. If you're asked to choose a database, SQLite is fine for most setups.
Step 6: Add monitors and alerts
- Go to Settings → Notifications and set up how you want to be alerted, for example email (SMTP), Slack or Discord. Use Test to make sure it works.
- Click Add New Monitor. For a website, choose HTTP(s), enter the URL and pick a check interval. You can also monitor ports, ping, DNS records, SSL certificate expiry and keywords on a page.
- To share uptime with your customers, go to Status Pages and create a public status page.
No domain? Quick test with an IP address
If you just want to try Uptime Kuma first, you can skip Caddy and run it directly on port 3001. This connection isn't encrypted, so don't use it long term.
sudo docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:2
Then open http://YOUR_SERVER_IP:3001, and open port 3001/tcp in your firewall if needed. Docker manages its own firewall rules, so this port may be reachable from the internet even with UFW or firewalld enabled.
Keeping it up to date
cd /opt/uptime-kuma
sudo docker compose pull
sudo docker compose up -d
Your monitors and settings are kept in the uptime-kuma-data volume. You can also export a backup from Settings → Backup, where available.
Troubleshooting
- The site won't load over HTTPS: check the Caddy logs with
sudo docker logs caddy. The usual cause is DNS that doesn't point to this VPS yet, or ports 80 and 443 being blocked. - A port is already in use: another web server, such as Nginx or Apache, is using port 80 or 443. Stop it, or run Uptime Kuma on a separate VPS.
- Alerts aren't arriving: use the Test button on the notification. For email, check your SMTP details, and note that some providers need an app password.
Need help?
Our Cloud VPS plans are self-managed, so you're responsible for installing, securing and maintaining the software on your server. If something on our side isn't working, such as the network, or your VPS won't boot, open a support ticket. New to your VPS? Start with our Cloud VPS Getting Started Guide.







