How to Run Uptime Kuma on a VPS (Docker + Caddy, HTTPS)
Set up Uptime Kuma on your own VPS with Docker and Caddy in about ten minutes, with HTTPS and alerts to Telegram, email or Discord.
To run Uptime Kuma on a VPS, install Docker, start the official container bound to localhost, and put Caddy in front for automatic HTTPS. The whole setup takes about ten minutes. You end up with your own monitoring dashboard, a public status page and alerts that reach you on Telegram, Discord or email.
Why Uptime Kuma should live on its own VPS
A monitor is only useful if it keeps running when the thing it watches goes down. If Uptime Kuma sits on the same server as your website, an outage takes both offline and you hear nothing. Put it on a separate small server, ideally in a different location.
Kuma is light. It checks HTTP(S) endpoints, TCP ports, ping, DNS records and Docker containers on an interval you choose, and it stores everything in one data folder.
- Separate failure domain - a monitor on its own server still works when your main server is down.
- Different location - checking from another region shows problems that a local check would miss.
- Small footprint - a small plan is enough for a personal or team setup.
Rule of thumb: pick the smallest plan, and pick a location different from the servers you monitor.
How to do it on Neckrez
- Sign up - use an email (or Google/GitHub). No KYC, no ID, no phone, no card.
- Top up the balance in crypto - from $15. USDT on BEP20, TON, Polygon or Solana costs cents in fees; TRC20 costs a few dollars extra.
- Pick plan, location and OS - Quark (1 vCPU, 1 GB, $10/mo) is plenty for Uptime Kuma. Choose Ubuntu or Debian.
- Server ready in about a minute - you get full root and a dedicated IPv4.
- Billed hourly - the cost runs while the server exists, so destroy it whenever you no longer need it.
Uptime Kuma is not a 1-click app on Neckrez, so you install it by hand. Point a DNS A record such as status.example.com at the server IP, then log in over SSH and install Docker and Caddy:
apt update && apt install -y docker.io docker-compose-v2 caddy
systemctl enable --now dockerNow create the compose file and start Kuma. The port is bound to 127.0.0.1, so it is not reachable from the internet until Caddy exposes it:
mkdir -p /opt/kuma && cd /opt/kuma
cat > docker-compose.yml <<'EOF'
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: unless-stopped
ports:
- "127.0.0.1:3001:3001"
volumes:
- ./data:/app/data
EOF
docker compose up -dPut Caddy in front for HTTPS
Caddy gets and renews a certificate on its own, as long as your DNS record points at the server and ports 80 and 443 are open. Replace the domain with yours:
cat > /etc/caddy/Caddyfile <<'EOF'
status.example.com {
reverse_proxy 127.0.0.1:3001
}
EOF
systemctl reload caddyOpen https://status.example.com in your browser. Kuma asks you to create the admin account on first visit, so do it right away. Anyone who finds the URL first can claim the admin account.
One honest caveat: this setup has no firewall rules yet. If you want only SSH, HTTP and HTTPS reachable, add them with ufw before you walk away.
Add monitors and alerts that reach you
Start with the checks that match real failures. Add them from the dashboard with the Add New Monitor button.
- HTTP(S) monitor - checks your site URL and a keyword on the page, so a blank 200 page still counts as down.
- TCP port monitor - watches SSH, a database port or a game server port.
- Ping monitor - tells you the whole server is unreachable, not just one app.
- Certificate expiry - the HTTP monitor can warn you before a TLS certificate runs out.
Then open Settings, then Notifications, and add a channel. Kuma supports Telegram, Discord, email (SMTP), Slack, webhooks and many more. Use the test button, and attach the channel to every monitor. A status page under Status Pages lets you share uptime with your users on its own URL.
Rule of thumb: set the check interval to 60 seconds and require 2 or 3 retries before alerting, which cuts false alarms from one dropped packet.
Update and back up Uptime Kuma
Everything Kuma knows lives in /opt/kuma/data. Back that folder up, and updating is a pull and a restart:
cd /opt/kuma
docker compose pull
docker compose up -d
tar czf /root/kuma-data-$(date +%F).tar.gz dataOn Vultr, DigitalOcean and Hetzner servers you can also take an on-demand snapshot of the whole disk from your dashboard. Snapshots are kept for 7 days. Take one before a major version change.
FAQ
How much RAM does Uptime Kuma need? It runs comfortably on a 1 GB server for a modest number of monitors. Add more RAM if you track many hundreds of endpoints.
Can it monitor servers on other providers? Yes. Kuma only needs network access to the target, so it can watch any public host, port or URL, wherever it is hosted.
What happens if my balance runs out? The server disk is snapshotted and the server deleted. The snapshot is kept 7 days, so you can top up and restore it in one click. Keep a healthy balance, since your monitor is only useful while it runs.
Get started
Neckrez plans start from $10/month and are billed hourly, with no KYC and crypto-only payment. Deploy your monitoring server in about a minute, or read about bots and always-on workloads first.