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.).
Installation with Docker (recommended)
docker run -d \
--restart unless-stopped \
--name uptime-kuma \
-p 3001:3001 \
-v uptime-kuma-data:/app/data \
louislam/uptime-kuma:latestAccess 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 -dInstallation 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.targetsudo systemctl enable uptime-kuma
sudo systemctl start uptime-kumaSecure access via Nginx
sudo nano /etc/nginx/sites-available/uptime-kumaserver {
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.comAdd monitors
From the web dashboard → Add New Monitor:
| Type | Use |
|---|---|
| HTTP(s) | Monitor a website (status code) |
| TCP Port | Check if a port is open |
| Ping | Simple ICMP ping |
| DNS | DNS resolution |
| Push | Server sends heartbeat (for cron jobs) |
| Docker Container | Status of a Docker container |
| Game Server (Steam) | Gaming server status |
Example: monitor a website
- Type:
HTTP(s) - URL:
https://yoursite.com - Heartbeat Interval:
60seconds - Retries:
3
Example: monitor a port (e.g. MySQL)
- Type:
TCP Port - Hostname:
localhost - Port:
3306
Configure Telegram notifications
- Create a bot with @BotFather:
/newbot - Copy the bot token
- In Uptime Kuma → Settings → Notifications → Add Notification
- Type: Telegram
- 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
- In Discord server: Channel Settings → Integrations → Webhook → Create Webhook
- Copy the webhook URL
- In Uptime Kuma → Settings → Notifications → Add Notification
- Type: Discord, paste the webhook URL
Public status page
Uptime Kuma can generate a public status page (like statuspage.io):
- Status Pages → New Status Page
- Add the domain (e.g.
status.yoursite.com) - Select which monitors to show
- 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