Introduction
Uptime Kuma is the open-source alternative to UptimeRobot, Pingdom and StatusCake. It continuously monitors:
- HTTP/HTTPS (with SSL certificate validation)
- TCP/UDP open ports
- ICMP ping
- Databases (MySQL, PostgreSQL, MongoDB, Redis)
- DNS resolution
- Steam game servers
- Docker containers
All with 90+ notification channels and customizable public status pages.
Prerequisites
- Linux VPS with Docker installed
- Domain pointing to the VPS (optional but recommended)
- Port 3001 accessible
Step 1: Launch Uptime Kuma with Docker
Create the volume and container:
sudo docker volume create uptime-kuma
sudo docker run -d \
--name uptime-kuma \
--restart=always \
-p 3001:3001 \
-v uptime-kuma:/app/data \
louislam/uptime-kuma:latest
Check the container is running:
sudo docker ps | grep uptime-kuma
Step 2: First login
Open your browser:
http://YOUR_VPS_IP:3001
On first connection, create your admin account (username + password).
Step 3: Add an HTTP monitor
Click Add New Monitor.
Main fields:
- Monitor Type: HTTP(s)
- Friendly Name:
My Site - URL:
https://your-site.com - Heartbeat Interval: 60 seconds (default)
- Retries: 3 (number of attempts before triggering alert)
- Accepted Status Codes: 200-299
Click Save. Uptime Kuma immediately starts monitoring.
Step 4: Configure a Discord notification
Settings → Notifications → Setup Notification.
- Notification Type: Discord
- Friendly Name:
VeryCloud Alerts - Discord Webhook URL:
https://discord.com/api/webhooks/XXX/YYY - Click Test to verify
- Save
Go back to your monitor, Notifications tab, and check VeryCloud Alerts.
Step 5: Advanced monitors
TCP Port
Check that a Minecraft server responds:
- Monitor Type: TCP Port
- Hostname:
mc.your-domain.com - Port:
25565
ICMP Ping
- Monitor Type: Ping
- Hostname:
SERVER_IP
Expiring SSL certificate
On an HTTPS monitor, enable Notify when certificate expires and set the threshold (e.g. 14 days).
Database
- Monitor Type: MySQL/MariaDB
- Connection String:
mysql://user:password@host:3306/database
Step 6: Create a public status page
Status Pages → Add New Status Page.
- Slug:
verycloud→ URL accessible at/status/verycloud - Title:
VeryCloud Status - Description:
Real-time status of our services - Select monitors to display
- Customize colors, logo
The page is publicly accessible without authentication.
Step 7: Reverse proxy with SSL (recommended)
Configure Nginx Proxy Manager or vanilla Nginx to expose Uptime Kuma on https://status.your-domain.com.
Manual Nginx config:
sudo nano /etc/nginx/sites-available/uptime-kuma
server {
listen 80;
server_name status.your-domain.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-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Enable and get SSL:
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.your-domain.com
Step 8: Backup
Uptime Kuma stores everything in the Docker volume. To backup:
sudo docker stop uptime-kuma
sudo tar -czf uptime-kuma-backup-$(date +%F).tar.gz \
/var/lib/docker/volumes/uptime-kuma/_data
sudo docker start uptime-kuma
To automate, create a cron:
sudo crontab -e
0 3 * * * docker stop uptime-kuma && tar -czf /backup/uptime-kuma-$(date +\%F).tar.gz /var/lib/docker/volumes/uptime-kuma/_data && docker start uptime-kuma
Troubleshooting
Container won't start
sudo docker logs uptime-kuma --tail 50
Discord notifications don't work
Verify the webhook is valid (no typo) and test with curl:
curl -H "Content-Type: application/json" \
-d '{"content":"test"}' \
https://discord.com/api/webhooks/XXX/YYY
Update
sudo docker pull louislam/uptime-kuma:latest
sudo docker stop uptime-kuma
sudo docker rm uptime-kuma
# Re-run the docker run command from step 1
Useful commands
# Real-time logs
sudo docker logs -f uptime-kuma
# Restart
sudo docker restart uptime-kuma
# Update
sudo docker pull louislam/uptime-kuma:latest
sudo docker stop uptime-kuma && sudo docker rm uptime-kuma
# (then docker run from step 1)
# Stats
sudo docker stats uptime-kuma
Conclusion
Uptime Kuma gives you external supervision independent of your infrastructure. Combined with Netdata (internal monitoring), you cover all angles: if your VPS goes completely down, Uptime Kuma (hosted elsewhere or on another node) alerts you, while Netdata would no longer be able to communicate.
Resources
- Official site: https://uptime.kuma.pet
- GitHub: https://github.com/louislam/uptime-kuma
- Notifications list: https://github.com/louislam/uptime-kuma/tree/master/server/notification-providers

















