Uptime Kuma is the most popular self-hosted monitoring tool — a beautiful, feature-rich alternative to Uptime Robot and Pingdom that runs on your own infrastructure. Deployed on a Hong Kong VPS, it monitors your websites, APIs, databases, and TCP services from an Asian vantage point, providing monitoring checks that reflect what your Asia-Pacific users actually experience rather than checks from US or European monitoring nodes.
Why Monitor from Hong Kong?
- Regional accuracy — a monitoring check from Hong Kong tests CN2 GIA routing to mainland China, Taiwan latency, and Asia-Pacific DNS resolution — the same path your users take
- No false positives from US nodes — US-based monitoring services check from North America; a site that’s fast in the US but slow in China shows as “up” even while Chinese users experience 500ms load times
- Self-hosted — your monitoring data, alert history, and status pages stay on your infrastructure without sharing uptime information with third-party SaaS
- Unlimited monitors — Uptime Robot’s free tier allows 50 monitors; Uptime Kuma on your VPS supports unlimited monitors
Step 1: Install Uptime Kuma via Docker
apt update && apt upgrade -y
apt install -y docker.io docker-compose-plugin nginx certbot python3-certbot-nginx
mkdir -p /opt/uptimekuma
cat > /opt/uptimekuma/docker-compose.yml << 'EOF'
version: '3.8'
services:
uptime-kuma:
image: louislam/uptime-kuma:latest
container_name: uptime-kuma
restart: always
ports:
- "127.0.0.1:3001:3001"
volumes:
- ./data:/app/data
EOF
cd /opt/uptimekuma && docker compose up -d
docker compose logs -f # Watch startupStep 2: Configure Nginx with SSL
cat > /etc/nginx/sites-available/uptime << 'EOF'
server {
listen 80;
server_name status.yourdomain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name status.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/status.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/status.yourdomain.com/privkey.pem;
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;
proxy_read_timeout 120s;
}
}
EOF
ln -s /etc/nginx/sites-available/uptime /etc/nginx/sites-enabled/
certbot --nginx -d status.yourdomain.com
nginx -t && systemctl reload nginxStep 3: Initial Setup
Visit https://status.yourdomain.com and create your admin account. Uptime Kuma redirects to the dashboard after login.
Step 4: Add Monitors
Click Add New Monitor for each service you want to track:
HTTPS Website Monitor
- Monitor Type: HTTP(s)
- Friendly Name: My Main Website
- URL:
https://yourdomain.com - Heartbeat Interval: 60 seconds
- Enable “Monitor TLS/SSL Certificate Expiry”
- Alert when cert expires in under 14 days
API Endpoint Monitor
- Monitor Type: HTTP(s) — Keyword
- URL:
https://api.yourdomain.com/health - Keyword:
{"status":"healthy"}— alerts if response doesn’t contain this - Heartbeat Interval: 30 seconds
Database TCP Monitor
- Monitor Type: TCP Port
- Hostname:
127.0.0.1(or your DB server IP) - Port:
5432(PostgreSQL) or3306(MySQL)
MQTT Broker Monitor
- Monitor Type: MQTT
- URL:
mqtt://127.0.0.1 - Port: 1883
- Topic:
uptime/ping
Docker Container Monitor
- Monitor Type: Docker Container
- Docker Container Name:
myapp - Alerts when container stops running
Step 5: Configure Notification Channels
In Settings → Notifications → Setup Notification:
Telegram (Recommended for Asia Teams)
- Create a Telegram bot via
@BotFather— get the bot token - Get your chat ID: message
@userinfobotin Telegram - In Uptime Kuma: Notification Type → Telegram, enter token and chat ID
- Test the notification — you should receive a Telegram message instantly
WeChat Work (企业微信) Webhook
- In WeChat Work: Group chat → Settings → Group Robot → Add Robot → Copy webhook URL
- In Uptime Kuma: Notification Type → Webhook
- URL: your WeChat Work webhook URL
- Body:
{"msgtype":"text","text":{"content":"{{msg}}"}}
Email via SMTP
- Notification Type: Email (SMTP)
- Host: your SMTP server, Port: 587
- Username/Password: SMTP credentials
- To Email: your alert recipient
Step 6: Create a Public Status Page
Uptime Kuma includes a public status page for communicating service health to customers:
- Status Page → New Status Page
- Set a slug:
status(accessible athttps://status.yourdomain.com/status/status) - Title: “Service Status” or your brand name
- Add monitors to the status page — choose which services to display publicly
- Enable “Show tags” to group services (Web, API, Database)
- Set custom domain:
status.yourdomain.com(optional — requires separate DNS)
Your status page shows real-time uptime history, current status, and incident history. Share the URL with customers so they can check service status independently during incidents.
Step 7: Maintenance Windows
Schedule maintenance windows to suppress false alerts during planned downtime:
Settings → Maintenance → Schedule Maintenance
- Title: “Weekly database maintenance”
- Strategy: Recurring (every Sunday 02:00–04:00 HKT)
- Apply to: select affected monitors
During the maintenance window, monitors continue checking but do not send notifications and mark the outage as planned on the status page.
Step 8: Monitor from Multiple Locations
For critical services, monitoring from a single Hong Kong VPS creates a blind spot — if the VPS itself has network issues, you get false alerts. Add secondary monitoring from a different location:
<code"># Install a lightweight secondary monitoring agent on a different VPS # (e.g., your US dedicated server or Singapore VPS) # Point it at the same Uptime Kuma instance via the API # Uptime Kuma supports push monitoring — your secondary agent # pushes heartbeats to HK Uptime Kuma: # In Uptime Kuma: Add Monitor → Type: Push # Copy the push URL: https://status.yourdomain.com/api/push/TOKEN # On secondary server — send heartbeat every 60 seconds # (install as a cron job): * * * * * curl -s "https://status.yourdomain.com/api/push/YOUR_TOKEN?status=up&msg=OK&ping=" > /dev/null
Automated Backups
<code">crontab -l | { cat; echo "0 3 * * * tar czf /opt/backups/uptimekuma_\$(date +\%Y\%m\%d).tar.gz /opt/uptimekuma/data/ && find /opt/backups/ -name 'uptimekuma_*' -mtime +14 -delete"; } | crontab -Conclusion
Uptime Kuma on a Hong Kong VPS provides monitoring from the Asia-Pacific vantage point that matters most for your users — checking response times over CN2 GIA routing to mainland China, testing DNS resolution from Hong Kong, and verifying TLS certificates with the same network path your customers use. Unlimited monitors, public status pages, and multi-channel notifications (Telegram, WeChat Work, email) make it a complete monitoring solution at the cost of a few MB of your existing VPS resources.
Start monitoring: Browse Server.HK Hong Kong VPS plans — Uptime Kuma runs comfortably alongside your other applications on any plan.