Uptime Kuma Howsnip

How to Self-Host Uptime Kuma with Docker on Ubuntu for Free Server Monitoring

Server outages rarely happen at a convenient time. Without monitoring in place, you may not discover a website, API, or service failure until users start reporting problems. Uptime Kuma solves that issue by continuously checking your services and alerting you when something goes wrong.

In this tutorial, you’ll learn how to install Uptime Kuma, a free and open-source self-hosted monitoring platform, on an Ubuntu VPS using Docker. By the end, you’ll have a working monitoring dashboard, your first uptime monitor, and optional notifications to alert you when downtime occurs.

Prerequisites

Before getting started, make sure you have:

  • An Ubuntu 22.04 or Ubuntu 24.04 VPS
  • A user account with sudo privileges
  • At least 512 MB of available RAM
  • Internet access to download Docker and Uptime Kuma

Note: This guide uses Docker for installation because it offers a fast setup process and simplifies future upgrades.

Step 1: Install Docker

If Docker is not already installed on your server, use Docker’s official convenience script.

Run the following command:

curl -fsSL https://get.docker.com | sudo sh

This command downloads and installs the latest Docker packages for your system.

After the installation completes, verify that Docker is working correctly:

docker --version

Uptime Kuma Howsnip

You should see output similar to:

Docker version 29.2.1, build a5c7197

Fix Docker Permission Issues

If you receive a permission error while running Docker commands without sudo, add your user account to the Docker group:

sudo usermod -aG docker $USER

Log out and log back in before testing Docker again.

Step 2: Launch the Uptime Kuma Container

With Docker installed, deploy Uptime Kuma using a single command:

docker run -d --restart=unless-stopped \
-p 3001:3001 \
-v uptime-kuma:/app/data \
--name uptime-kuma \
louislam/uptime-kuma:1

Uptime Kuma Howsnip

Let’s break down what each option does:

  • -d Runs the container in the background (detached mode).
  • –restart=unless-stopped Automatically restarts the container after crashes or server reboots.
  • -p 3001:3001 Maps port 3001 on the server to port 3001 inside the container.
  • -v uptime-kuma:/app/data Creates a persistent Docker volume to store monitoring data and settings.
  • –name uptime-kuma Assigns a recognizable name to the container.
  • louislam/uptime-kuma:1 Pulls and runs the Uptime Kuma image.

The first execution will download the image and create the container automatically.

You may see output similar to:

Status: Downloaded newer image for louislam/uptime-kuma:1
37cc155cfa0a6c642568d27b1e388b27a091066d6d490d0d3c1ce2894e904360

The long string at the end is the container ID, indicating that the deployment was successful.

Important: The Docker volume (uptime-kuma) ensures your monitors, settings, and historical data remain available even if the container is recreated.

Step 3: Verify That Uptime Kuma Is Running

Check the container status using:

docker ps --filter name=uptime-kuma

A status of Up indicates that the container is running correctly.

Configure Firewall Access

If your server uses UFW (Uncomplicated Firewall), allow traffic on port 3001:

sudo ufw allow 3001

Security Note: Opening port 3001 is acceptable for testing, but for production environments it’s recommended to place Uptime Kuma behind a reverse proxy with HTTPS. We’ll cover that later in this tutorial.

Step 4: Create the Administrator Account

Open the following URL in your web browser:

http://YOUR_SERVER_IP:3001

Uptime Kuma Howsnip

When accessing Uptime Kuma for the first time, you’ll see the setup wizard.

  • Select your preferred language.
  • Create an administrator username.
  • Set a strong password.
  • Click Create.

After completing the setup, you’ll be redirected to the main dashboard.

Important: Use a strong unique password because this account controls access to your monitoring system.

Step 5: Add Your First Monitor

Now that Uptime Kuma is running, you can begin monitoring a website or API.

Click Add New Monitor.

Uptime Kuma Howsnip

Complete the following fields:

  • Monitor Type
    • Choose: HTTP(s)
    • This option is ideal for websites and web APIs.
  • Friendly Name
    • Enter an easily recognizable label.
    • Example:Lineserve Website
  • URL
    • Enter the full URL you want to monitor.
    • Example: https://www.lineserve.net
  • Heartbeat Interval
    • The default value is: 60 seconds

This means Uptime Kuma will perform a health check every minute.

Once configured, click Save.

Uptime Kuma immediately performs its first check. If the website responds successfully, the monitor status will turn green and display a successful response notification.

Step 6: Understand the Monitoring Dashboard

The dashboard provides a quick overview of service health and performance.

Uptime Kuma Howsnip

Key metrics include:

a) Service Status

Displays whether the monitored endpoint is currently:

  • Up
  • Down

You’ll also see a heartbeat timeline showing recent monitoring checks.

b) Response Time

Response time is measured in milliseconds and helps identify performance issues before a complete outage occurs.

For example: 202 ms

A steadily increasing response time may indicate server resource issues, network congestion, or application performance problems.

c) Uptime Percentage

Uptime Kuma calculates service availability over time, including:

  • 24-hour uptime
  • 30-day uptime

These statistics make it easy to track reliability.

d) SSL Certificate Expiration

For HTTPS-enabled websites, Uptime Kuma monitors SSL certificate validity and displays the remaining days until expiration.

This feature helps prevent unexpected certificate-related outages.

Step 7: Configure Downtime Notifications

Monitoring is most useful when alerts are delivered automatically.

To enable notifications:

  • Open Settings.
  • Select Notifications.
  • Click Setup Notification.
  • Choose your preferred notification provider.

Uptime Kuma supports numerous notification channels, including:

  • Telegram
  • Slack
  • Discord
  • Email (SMTP)
  • Webhooks
  • Many additional integrations

After creating the notification method, edit your monitor and attach the notification channel. Once configured, you’ll receive alerts whenever the monitored service goes offline or recovers.

Step 8: Secure Uptime Kuma with a Domain and HTTPS

Accessing Uptime Kuma using an IP address and open port is fine during testing, but a custom domain and SSL certificate provide better security and usability.

A common setup uses:

  • A subdomain such as status.yourdomain.com
  • Nginx as a reverse proxy
  • Let’s Encrypt SSL certificates

Example Nginx configuration:

server {
listen 80;
server_name status.yourdomain.com;

location / {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

The following directives allow WebSocket connections to function correctly:

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection ‘upgrade’;

Uptime Kuma relies on WebSockets for real-time dashboard updates. Without these headers, parts of the interface may fail to load properly.

Enable HTTPS with Let’s Encrypt

After enabling the Nginx site, obtain a free SSL certificate using Certbot:

sudo certbot --nginx -d status.yourdomain.com

Once HTTPS is working, close direct public access to port 3001 and route all traffic through Nginx.

Keeping Uptime Kuma Updated

Updating Uptime Kuma is straightforward because the application data is stored in a persistent Docker volume.

a) Pull the Latest Image

docker pull louislam/uptime-kuma:1

This downloads the latest image tagged with the major version.

b) Stop the Existing Container

docker stop uptime-kuma

Stops the currently running container.

c) Remove the Old Container

docker rm uptime-kuma

Removes the container while keeping the stored data intact.

d) Recreate the Container

Run the same deployment command used earlier:

docker run -d --restart=unless-stopped \
-p 3001:3001 \
-v uptime-kuma:/app/data \
--name uptime-kuma \
louislam/uptime-kuma:1

Because all data is stored inside the uptime-kuma volume, your monitors, uptime history, notifications, and settings remain unchanged.

Conclusion

Uptime Kuma provides a powerful and cost-effective way to monitor websites, APIs, and services without relying on third-party monitoring platforms.

With Docker, you can deploy it in just a few minutes, create monitors, configure notifications, and track uptime from a clean web dashboard. For production use, place it behind Nginx with HTTPS and keep the Docker image updated regularly to maintain both security and reliability.