How to Install and Configure Uptime Kuma on Ubuntu (Complete Self-Hosted Monitoring Guide)
Last Updated: July 11th, 2026
This comprehensive tutorial shows you how to install, configure, secure, and use Uptime Kuma on an Ubuntu server. Uptime Kuma is a fancy, self-hosted monitoring tool that lets you track the uptime of your websites, TCP ports, HTTP(S) endpoints, Docker containers, and ping targets in real-time, complete with responsive status pages and multi-channel notifications.
What Is Uptime Kuma?
Uptime Kuma is an open-source, beautifully designed self-hosted monitoring application written in Node.js. When critical web applications or services go offline, every minute of downtime costs you revenue and trust. Uptime Kuma continuously pings your infrastructure, records response times, displays performance charts, and alerts you instantly via Telegram, Discord, Slack, email, or Webhooks if something breaks. Self-hosting your monitoring stack ensures your status pages remain independent and under your absolute control.
Uptime Kuma Features
- Diverse Monitor Types: Supports HTTP(S), TCP, Ping, DNS Record, Docker container status, Push, Steam Game Server, and database queries.
- Gorgeous Status Pages: Create public-facing status pages with custom domains, grouped monitors, and clear incident history.
- Robust Notification System: Connects to over 90 notification services including Telegram, Discord, Pushover, Gotify, and generic Webhooks.
- Real-Time Updates: Uses reactive UI architecture to update status boards instantly without requiring manual page refreshes.
- Multi-User & Proxy Support: Built-in support for different administrative accounts and upstream HTTP proxies.
Requirements & Prerequisites
You will need an Ubuntu server (22.04, 24.04 LTS, or newer) with administrative sudo privileges, Docker and Docker Compose installed, a valid domain name, and an active TLS/SSL certificate (Let's Encrypt) for secure remote notification delivery and status page hosting.
Step 1: Install Docker and Docker Compose
Uptime Kuma runs reliably inside a lightweight Docker container. Log into your Ubuntu server and install Docker:
sudo apt update
sudo apt install -y docker.io docker-compose-v2
sudo systemctl start docker
sudo systemctl enable docker
Step 2: Create a Docker Compose Configuration for Uptime Kuma
Create a dedicated directory for your monitoring application and set up your deployment configuration file:
mkdir -p ~/uptime-kuma && cd ~/uptime-kuma
sudo nano docker-compose.yml
Paste the following production container configuration into the file:
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: always
volumes:
- uptime-kuma-data:/app/data
ports:
- 127.0.0.1:3001:3001
volumes:
uptime-kuma-data:
Save and close the file, then spin up your container in the background:
sudo docker compose up -d
Step 3: Configure an Nginx Reverse Proxy
Route public requests securely from your custom monitoring domain (e.g., status.example.com) to the local container port 3001, making sure to support persistent WebSocket connections for real-time heartbeat updates:
sudo apt install -y nginx
sudo nano /etc/nginx/conf.d/uptime-kuma.conf
Add the following server block configuration:
server {
listen 80;
server_name status.example.com;
location / {
proxy_pass http://127.0.0.1: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-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Test syntax and reload Nginx:
sudo nginx -t
sudo systemctl reload nginx
Step 4: Secure with Let’s Encrypt HTTPS
Obtain an official SSL/TLS certificate via Certbot:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx --agree-tos --redirect --email [email protected] -d status.example.com
Step 5: Initial Setup & Adding Monitors
Open your browser and navigate to https://status.example.com. On your first visit, you will be prompted to create your administrative username and password.
- Creating Your First Monitor: Click the **+ Add New Monitor** button on the dashboard. Choose a monitor type (e.g., *HTTP(s)* for a web application), assign a friendly display name, and input the target URL. Set your preferred heartbeat interval (e.g., every 60 seconds).
- Configuring Notifications: Go to **Settings > Notifications > Setup Notification**, select your preferred alert provider (such as Telegram or Discord), input your webhook tokens or chat IDs, and run a test notification to verify integration. Link the notification profile to your active monitor.
- Publishing a Status Page: Click **Status Pages > + New Status Page**, define a custom slug, add your active monitors to the board, customize branding elements, and publish the page for your users or team members to view live service availability.