Software & Configuration

Uptime Kuma - Monitoring with Notifications

How to install Uptime Kuma to monitor websites and services with notifications on Telegram, Discord, email and more

Uptime Kuma is a self-hosted tool to monitor the availability of websites, TCP ports, ping and services. It offers a visual dashboard and notifications on over 90 channels (Telegram, Discord, email, Slack, etc.).


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

Access at http://SERVER_IP:3001 and create the admin account on first access.

With Docker Compose

# docker-compose.yml
services:
  uptime-kuma:
    image: louislam/uptime-kuma:latest
    container_name: uptime-kuma
    restart: unless-stopped
    ports:
      - "3001:3001"
    volumes:
      - uptime-kuma-data:/app/data

volumes:
  uptime-kuma-data:
docker compose up -d

Installation without Docker (Node.js)

# Install Node.js 18+
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo bash -
sudo apt install nodejs -y

# Install Uptime Kuma
cd /opt
sudo git clone https://github.com/louislam/uptime-kuma.git
cd uptime-kuma
sudo npm install --production

# Create systemd service
sudo nano /etc/systemd/system/uptime-kuma.service
[Unit]
Description=Uptime Kuma
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/opt/uptime-kuma
ExecStart=/usr/bin/node server/server.js
Restart=always

[Install]
WantedBy=multi-user.target
sudo systemctl enable uptime-kuma
sudo systemctl start uptime-kuma

Secure access via Nginx

sudo nano /etc/nginx/sites-available/uptime-kuma
server {
    listen 80;
    server_name status.yourdomain.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_cache_bypass $http_upgrade;
    }
}
sudo ln -s /etc/nginx/sites-available/uptime-kuma /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d status.yourdomain.com

Add monitors

From the web dashboard → Add New Monitor:

TypeUse
HTTP(s)Monitor a website (status code)
TCP PortCheck if a port is open
PingSimple ICMP ping
DNSDNS resolution
PushServer sends heartbeat (for cron jobs)
Docker ContainerStatus of a Docker container
Game Server (Steam)Gaming server status

Example: monitor a website

  • Type: HTTP(s)
  • URL: https://yoursite.com
  • Heartbeat Interval: 60 seconds
  • Retries: 3

Example: monitor a port (e.g. MySQL)

  • Type: TCP Port
  • Hostname: localhost
  • Port: 3306

Configure Telegram notifications

  1. Create a bot with @BotFather: /newbot
  2. Copy the bot token
  3. In Uptime Kuma → Settings → Notifications → Add Notification
  4. Type: Telegram
  5. Enter the Bot Token and Chat ID

To find the Chat ID: send a message to the bot and go to https://api.telegram.org/bot<TOKEN>/getUpdates


Discord notifications

  1. In Discord server: Channel Settings → Integrations → Webhook → Create Webhook
  2. Copy the webhook URL
  3. In Uptime Kuma → Settings → Notifications → Add Notification
  4. Type: Discord, paste the webhook URL

Public status page

Uptime Kuma can generate a public status page (like statuspage.io):

  1. Status Pages → New Status Page
  2. Add the domain (e.g. status.yoursite.com)
  3. Select which monitors to show
  4. Customize title and description

Update Uptime Kuma (Docker)

docker pull louislam/uptime-kuma:latest
docker stop uptime-kuma
docker rm uptime-kuma
# Re-run the docker run with the same configuration
docker run -d --restart unless-stopped --name uptime-kuma \
  -p 3001:3001 -v uptime-kuma-data:/app/data louislam/uptime-kuma:latest

On this page