{"id":949,"date":"2026-08-22T22:42:49","date_gmt":"2026-08-22T22:42:49","guid":{"rendered":"https:\/\/virtualserversvps.com\/blog\/?p=949"},"modified":"2026-08-22T22:42:49","modified_gmt":"2026-08-22T22:42:49","slug":"uptime-kuma-vps-monitoring-status-page","status":"publish","type":"post","link":"https:\/\/virtualserversvps.com\/blog\/uptime-kuma-vps-monitoring-status-page\/","title":{"rendered":"Uptime Kuma on a VPS: Self-Hosted Uptime Monitoring, Alerts, and a Status Page for Under 100 MB of RAM"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">External uptime monitors charge per check and store your site&#8217;s availability data on someone else&#8217;s server. Uptime Kuma is the self-hosted alternative: it runs on your own VPS, supports unlimited monitors, pushes alerts to Telegram, Discord, email, or ntfy, and ships with a public status page. Its entire footprint is under 100&nbsp;MB of RAM, which means it coexists happily with a web server on the smallest VPS plan. Here is how to set it up properly, wire the notifications, and avoid alert fatigue.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What you get, and what it costs<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Resource<\/th><th>Footprint<\/th><\/tr><\/thead><tbody><tr><td>RAM<\/td><td>60\u201390 MB (Docker container)<\/td><\/tr><tr><td>Disk<\/td><td>~150\u2013250 MB (app + SQLite database)<\/td><\/tr><tr><td>CPU<\/td><td>Negligible; one check every 60 s per monitor<\/td><\/tr><tr><td>Monitors<\/td><td>Unlimited (practical limit: thousands)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Compare that with per-check pricing from hosted services: the monitoring stack costs you a slice of a VPS you are probably already renting, and the data stays yours.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Install with Docker<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The official container is the smoothest path. Bind it to localhost only \u2014 you will put TLS in front of it in the next step, and the admin UI should never be reachable over plain HTTP:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p \/opt\/uptime-kuma\/data\ndocker run -d --name uptime-kuma \\\n  -p 127.0.0.1:3001:3001 \\\n  -v \/opt\/uptime-kuma\/data:\/app\/data \\\n  --restart=always \\\n  louislam\/uptime-kuma:1<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Prefer not to run Docker on your <a href=\"https:\/\/virtualserversvps.com\/\">production VPS<\/a>? Uptime Kuma also runs directly with Node.js (<code>npm install<\/code> then <code>node server\/server.js<\/code>), or inside a separate container on a dedicated monitoring box.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Put it behind HTTPS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Front the localhost port with a reverse proxy that terminates TLS, exactly like you would for any internal service. A Caddy or nginx vhost for <code>status.example.com<\/code> with automatic certificates takes five minutes and keeps the admin panel off the wire. Once that is up, create your admin account and set a strong password \u2014 Uptime Kuma holds credentials for your notification channels, so treat it like a production service.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Monitor types that matter<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>HTTP(s) with keyword<\/strong> \u2014 checks a URL and optionally asserts a string in the response; catches &#8220;200 but broken&#8221; failures, not just &#8220;down&#8221;.<\/li><li><strong>TCP port check<\/strong> \u2014 verifies that a port accepts connections; useful for SSH, databases, and mail servers.<\/li><li><strong>Ping<\/strong> \u2014 coarse reachability for hosts without an agent.<\/li><li><strong>DNS<\/strong> \u2014 confirms your nameservers answer with the expected record.<\/li><li><strong>Push (heartbeat)<\/strong> \u2014 your server or a cron job pings the endpoint on schedule; silence means failure. Ideal for jobs behind NAT, like a nightly backup.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Group monitors per service (web, database, backups) so a single incident page tells the whole story at a glance.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Wire notifications without alert fatigue<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Uptime Kuma supports Telegram, Discord, email, ntfy, Slack, and dozens more out of the box. The settings that keep alerts useful: check every 60&nbsp;s, retry twice before declaring an incident, resend the notification at most every 5&nbsp;minutes, and cap it at a few messages per incident. Use the maintenance mode during deploys so scheduled restarts do not page you at midnight.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">An example monitor set for a typical VPS<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To make it concrete, here is the monitor set a typical single-VPS web setup should start with:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>HTTP keyword<\/strong> on <code>https:\/\/your-site\/<\/code>, asserting a string from your homepage \u2014 catches both downtime and broken responses.<\/li><li><strong>TCP port 22<\/strong> \u2014 confirms SSH stays reachable for recovery.<\/li><li><strong>TCP port 443<\/strong> \u2014 separate from the HTTP check, so a closed port and a broken app layer are distinguishable.<\/li><li><strong>DNS<\/strong> on your domain \u2014 verifies resolution still points where it should.<\/li><li><strong>Push monitor<\/strong> pinged by the nightly backup cron \u2014 a missed ping means the backup failed silently.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">That is five monitors covering the failure modes that actually take a small VPS down, with the alert load of a single incident page.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Build the status page<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The built-in status page gives you a public, embeddable view with per-service groups, uptime percentages, and incident history \u2014 the kind of transparency SaaS teams pay for. Be honest about one limitation: if the status page runs on the same VPS as the service it reports on, both go down together. For small setups that is usually acceptable; for a production service, run a second Uptime Kuma instance on a different provider and point the status page at that one. If you are choosing the second provider, <a href=\"https:\/\/virtualserversvps.com\/#providers\">compare providers on our VPS comparison table<\/a> for a cheap box in a different region.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Keep the monitoring data safe<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Everything \u2014 monitors, credentials, history \u2014 lives in a SQLite database inside the volume. Back up <code>\/opt\/uptime-kuma\/data<\/code> with your regular backup pipeline, and migrating to a new VPS is as simple as restoring the volume and starting the container. It is a small file, so even daily backups are trivial.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A monitoring box that costs 90&nbsp;MB of RAM is the cheapest insurance your <a href=\"https:\/\/virtualserversvps.com\/\">VPS-hosted applications<\/a> can buy \u2014 and because it is self-hosted, the only person who sees your availability data is you.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If your application runs on managed cloud hosting, a separate monitoring VPS keeps an independent eye on it. And if you are still choosing where to host the application itself, <a href=\"https:\/\/cloudways.com\/en\/?id=2010927&amp;data1=virtualserversvps\" rel=\"noreferrer noopener sponsored\" target=\"_blank\">Cloudways&#8217; managed plans<\/a> take the sysadmin load off while your Uptime Kuma box watches from outside.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>External uptime monitors charge per check and store your site&#8217;s availability data on someone else&#8217;s server. Uptime Kuma is the self-hosted alternative: it runs on your own VPS, supports unlimited&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":0,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-949","post","type-post","status-publish","format-standard","hentry","category-vps-guides-tutorials"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.1 (Yoast SEO v26.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Uptime Kuma on a VPS: Self-Hosted Uptime Monitoring, Alerts, and a Status Page for Under 100 MB of RAM - Virtual Servers VPS Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/virtualserversvps.com\/blog\/uptime-kuma-vps-monitoring-status-page\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Uptime Kuma on a VPS: Self-Hosted Uptime Monitoring, Alerts, and a Status Page for Under 100 MB of RAM\" \/>\n<meta property=\"og:description\" content=\"Uptime Kuma on a VPS: Self-Hosted Uptime Monitoring, Alerts, and a Status Page for Under 100 MB of RAM\" \/>\n<meta property=\"og:url\" content=\"https:\/\/virtualserversvps.com\/blog\/uptime-kuma-vps-monitoring-status-page\/\" \/>\n<meta property=\"og:site_name\" content=\"Virtual Servers VPS Blog\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-22T22:42:49+00:00\" \/>\n<meta name=\"author\" content=\"Virtual-Servers-Vps-Editor\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Virtual-Servers-Vps-Editor\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/uptime-kuma-vps-monitoring-status-page\/\",\"url\":\"https:\/\/virtualserversvps.com\/blog\/uptime-kuma-vps-monitoring-status-page\/\",\"name\":\"Uptime Kuma on a VPS: Self-Hosted Uptime Monitoring, Alerts, and a Status Page for Under 100 MB of RAM - Virtual Servers VPS Blog\",\"isPartOf\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#website\"},\"datePublished\":\"2026-08-22T22:42:49+00:00\",\"author\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0\"},\"breadcrumb\":{\"@id\":\"https:\/\/virtualserversvps.com\/blog\/uptime-kuma-vps-monitoring-status-page\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/virtualserversvps.com\/blog\/uptime-kuma-vps-monitoring-status-page\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/uptime-kuma-vps-monitoring-status-page\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/virtualserversvps.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Uptime Kuma on a VPS: Self-Hosted Uptime Monitoring, Alerts, and a Status Page for Under 100 MB of RAM\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#website\",\"url\":\"https:\/\/virtualserversvps.com\/blog\/\",\"name\":\"Virtual Servers VPS Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/virtualserversvps.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0\",\"name\":\"Virtual-Servers-Vps-Editor\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g\",\"caption\":\"Virtual-Servers-Vps-Editor\"},\"sameAs\":[\"https:\/\/virtualserversvps.com\/blog\"],\"url\":\"https:\/\/virtualserversvps.com\/blog\/author\/virtualserversvps\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Uptime Kuma on a VPS: Self-Hosted Uptime Monitoring, Alerts, and a Status Page for Under 100 MB of RAM - Virtual Servers VPS Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/virtualserversvps.com\/blog\/uptime-kuma-vps-monitoring-status-page\/","og_locale":"en_US","og_type":"article","og_title":"Uptime Kuma on a VPS: Self-Hosted Uptime Monitoring, Alerts, and a Status Page for Under 100 MB of RAM","og_description":"Uptime Kuma on a VPS: Self-Hosted Uptime Monitoring, Alerts, and a Status Page for Under 100 MB of RAM","og_url":"https:\/\/virtualserversvps.com\/blog\/uptime-kuma-vps-monitoring-status-page\/","og_site_name":"Virtual Servers VPS Blog","article_published_time":"2026-08-22T22:42:49+00:00","author":"Virtual-Servers-Vps-Editor","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Virtual-Servers-Vps-Editor","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/virtualserversvps.com\/blog\/uptime-kuma-vps-monitoring-status-page\/","url":"https:\/\/virtualserversvps.com\/blog\/uptime-kuma-vps-monitoring-status-page\/","name":"Uptime Kuma on a VPS: Self-Hosted Uptime Monitoring, Alerts, and a Status Page for Under 100 MB of RAM - Virtual Servers VPS Blog","isPartOf":{"@id":"https:\/\/virtualserversvps.com\/blog\/#website"},"datePublished":"2026-08-22T22:42:49+00:00","author":{"@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0"},"breadcrumb":{"@id":"https:\/\/virtualserversvps.com\/blog\/uptime-kuma-vps-monitoring-status-page\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/virtualserversvps.com\/blog\/uptime-kuma-vps-monitoring-status-page\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/virtualserversvps.com\/blog\/uptime-kuma-vps-monitoring-status-page\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/virtualserversvps.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Uptime Kuma on a VPS: Self-Hosted Uptime Monitoring, Alerts, and a Status Page for Under 100 MB of RAM"}]},{"@type":"WebSite","@id":"https:\/\/virtualserversvps.com\/blog\/#website","url":"https:\/\/virtualserversvps.com\/blog\/","name":"Virtual Servers VPS Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/virtualserversvps.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/82a299a8284a66ff49f97c74684724a0","name":"Virtual-Servers-Vps-Editor","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/virtualserversvps.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d820b15f1cd028e97610d9adf536df7be5cb6423869967037d468d5355fa003f?s=96&d=mm&r=g","caption":"Virtual-Servers-Vps-Editor"},"sameAs":["https:\/\/virtualserversvps.com\/blog"],"url":"https:\/\/virtualserversvps.com\/blog\/author\/virtualserversvps\/"}]}},"_links":{"self":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/949","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/comments?post=949"}],"version-history":[{"count":1,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/949\/revisions"}],"predecessor-version":[{"id":950,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/posts\/949\/revisions\/950"}],"wp:attachment":[{"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/media?parent=949"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/categories?post=949"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/virtualserversvps.com\/blog\/wp-json\/wp\/v2\/tags?post=949"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}