Skip to main content
Uptime Kuma is a self-hosted monitoring tool that supports HTTP, TCP, DNS, ping, and other checks with a clean web UI and notification integrations. This guide deploys it with Docker, an Nginx reverse proxy, and a Let’s Encrypt SSL certificate.

Prerequisites

  • Docker and Docker Compose installed — see Install Docker
  • A domain or subdomain pointed to your server (e.g., status.example.com)
  • Ports 80 and 443 open in your firewall

Step 1: Deploy Uptime Kuma

Create a directory and Docker Compose file:
Start the container:
Uptime Kuma is now running on 127.0.0.1:3001. It is only accessible locally until we set up the reverse proxy.

Step 2: Install Nginx

Step 3: Configure Nginx Reverse Proxy

Replace status.example.com with your actual domain:
Enable the site and reload Nginx:

RHEL-Based Systems

RHEL, AlmaLinux, and Rocky do not use sites-available/sites-enabled by default. Place the configuration in /etc/nginx/conf.d/uptime-kuma.conf instead and skip the symlink step.

Step 4: Install SSL with Certbot

Obtain and install the certificate:
Certbot will automatically configure HTTPS and set up a redirect from HTTP to HTTPS. Verify automatic renewal is active:

Step 5: Access Uptime Kuma

Open https://status.example.com in your browser. On first visit, you will be prompted to create an admin account.

Updating

To update Uptime Kuma to the latest version:

Backup

Uptime Kuma stores all data in a SQLite database. To back up:

All-in-One Script

For convenience, here is the complete setup as a single script. Edit the DOMAIN variable before running:
install-uptime-kuma.sh
The --register-unsafely-without-email flag skips the email prompt for unattended installation. For production use, replace it with --email your@email.com to receive certificate expiration notices.