What you will build
- One Docker Compose stack under
/opt/stacks/monitoring. - Uptime Kuma on port
3001. - A static dashboard page on port
8089. - A documented backup path for monitoring data.
- A validation checklist you can rerun after updates.
Assumptions
This walkthrough assumes a Debian utility VM with Docker Compose already installed. If you need that base first, use the Docker Compose sample lesson.
Create the stack folder
sudo mkdir -p /opt/stacks/monitoring/dashboard
sudo chown -R $USER:$USER /opt/stacks/monitoring
cd /opt/stacks/monitoring
Docker Compose file
cat > compose.yml <<'EOF'
services:
uptime-kuma:
image: louislam/uptime-kuma:1
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- ./uptime-kuma:/app/data
lab-dashboard:
image: nginx:alpine
restart: unless-stopped
ports:
- "8089:80"
volumes:
- ./dashboard:/usr/share/nginx/html:ro
EOF
Simple dashboard page
cat > dashboard/index.html <<'EOF'
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Home Lab Status</title>
<style>
body{font-family:system-ui;margin:0;background:#f6f7f5;color:#151a17}
main{max-width:840px;margin:auto;padding:48px 20px}
.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
a{display:block;border:1px solid #d9dfda;border-radius:8px;background:#fff;padding:16px;color:#173b34;font-weight:800;text-decoration:none}
p{color:#65716a}
</style>
</head>
<body>
<main>
<h1>Home Lab Status</h1>
<p>Replace these links with your actual hostnames or IP addresses.</p>
<div class="grid">
<a href="http://YOUR-UTILITY-VM-IP:3001">Uptime Kuma</a>
<a href="https://YOUR-PROXMOX-HOST:8006">Proxmox</a>
<a href="http://YOUR-NAS-IP">NAS</a>
</div>
</main>
</body>
</html>
EOF
Start the stack
docker compose up -d
docker compose ps
curl -I http://localhost:3001
curl -I http://localhost:8089
Add Uptime Kuma checks
| Monitor | Type | Suggested name |
|---|---|---|
| Router gateway | Ping | router-gateway |
| Proxmox host | Ping or HTTPS | proxmox-host |
| NAS | Ping or HTTP | nas-main |
| Dashboard | HTTP | lab-dashboard |
| Public site | HTTPS | public-site |
Backup notes
Back up the stack folder, especially /opt/stacks/monitoring/uptime-kuma.
sudo tar -czf ~/monitoring-stack-backup-$(date +%F).tar.gz /opt/stacks/monitoring
Store the archive somewhere outside the utility VM. For a real lab, this should land on NAS storage or a Proxmox Backup Server-backed VM backup.
Validation checklist
docker compose psshows both services running.- Uptime Kuma loads from another device on the LAN.
- The dashboard page loads from another device on the LAN.
- At least three monitors are green.
- One safe failure test creates an alert or visible down state.
- A backup archive exists outside the VM.
Rollback
cd /opt/stacks/monitoring
docker compose down
This stops the stack without deleting data. Remove the folder only after confirming you no longer need the monitoring history.