Hardware FixRecommendedDevice not working? Your driver may be the problemCheck updates for common hardware issues.Fix DriversOctober DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsWindows FixRecommendedWindows errors stealing your time? Find the fix fastScan stability, cleanup and performance issues.Fix Now×
Skip to content
World desk10 min

How to Self-Host Uptime Kuma on a VPS (Docker, HTTPS, and Alerts)

A practical guide to running Uptime Kuma on your own VPS, covering Docker Compose, persistent SQLite storage, reverse-proxy WebSockets, notifications, status pages, updates and troubleshooting.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The shortest supported VPS deployment is Docker Compose with the official louislam/uptime-kuma:2 image. Store /app/data on persistent local storage, expose port 3001 only to a reverse proxy when the dashboard is public, and configure WebSocket forwarding before adding monitors and notifications.

What you are building

Uptime Kuma is a self-hosted monitoring dashboard that checks websites, services, hosts and other endpoints from a server you control. A typical VPS installation has four layers:

As an Amazon Associate I earn from qualifying purchases.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Uptime Kuma running in Docker or directly under Node.js and PM2.
  • Persistent data at /app/data, including the SQLite database and configuration.
  • A network path to the dashboard, either direct on port 3001 or through an HTTPS reverse proxy.
  • Monitors and notification channels that turn failures into actionable alerts.

The official project feature list advertises checks as frequent as 20-second intervals, more than 90 notification services, multiple status pages, certificate information, proxy support and two-factor authentication. The README does not give a publication year for the 20-second or 90-plus figures, so treat them as current feature-list statements rather than a dated performance guarantee.

Prerequisites for a VPS installation

Server and network

  • A VPS running a major supported Linux distribution.
  • Administrative access for installing Docker or the Node.js toolchain.
  • A stable public IP address if the dashboard or monitored endpoints need Internet access.
  • DNS access if you will use a hostname such as status.example.com.

Decide whether the dashboard should be reachable directly on port 3001 or only through HTTPS. A reverse-proxy deployment is safer for a public service: the container listens on the VPS loopback interface, while the proxy handles the public 80/443 connections and TLS certificate.

#1 Best Overall
CanaKit Raspberry Pi 5 Starter Kit PRO - Turbine Black (128GB Edition) (8GB RAM)
  • Includes Raspberry Pi 5 with 2.4Ghz 64-bit quad-core CPU (8GB RAM)
  • Includes 128GB Micro SD Card pre-loaded with 64-bit Raspberry Pi OS, USB MicroSD Card Reader
  • CanaKit Turbine Black Case for the Raspberry Pi 5
  • CanaKit Low Noise Bearing System Fan
  • Mega Heat Sink - Black Anodized

Choosing Docker or a source install

Option Documented path Isolation and updates Persistence Reverse-proxy fit
Docker Compose Download the project’s Compose file, then run docker compose up -d. The application and its runtime are contained in the image; pull a newer image and recreate the service when updating. Map a Docker volume or local directory to /app/data. Bind host port 3001 to loopback when the proxy is the only public entry point.
Single Docker container Run the official louislam/uptime-kuma:2 image with docker run. Container lifecycle and restart policy are explicit in the command. Use the uptime-kuma volume or another persistent local mount. Use 127.0.0.1:3001:3001 for proxy-only access.
Node.js and PM2 Clone the repository, run npm run setup, then start server/server.js with PM2. Node.js, dependencies and PM2 are installed directly on the VPS, so you manage those components yourself. Keep the checked-out application data on local storage with reliable POSIX file locking. The proxy forwards to the PM2 process on its listening port.

Docker has the shorter documented path and keeps the runtime separate from the host. A source install can be useful when you already operate Node.js and PM2, but it exposes more host-level maintenance work.

Deploy with Docker Compose

1. Download the official Compose definition

Create a dedicated directory and download the project-maintained file:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
mkdir uptime-kuma
cd uptime-kuma
curl -o compose.yaml https://raw.githubusercontent.com/louislam/uptime-kuma/master/compose.yaml

The Compose file is provided by the Uptime Kuma project. Review the file before starting it so you know which image, volume and port mapping it declares.

2. Start the service

docker compose up -d

The official example publishes the application on port 3001. With that default mapping, the dashboard is available at http://your-ip:3001; the README also describes http://localhost:3001 when you connect from the VPS itself. Check container state with:

docker compose ps
docker compose logs --tail=100

Open the URL only after the container reports as running. If a host firewall is enabled, allow 3001 temporarily for initial setup or use the loopback-only design in the next section.

3. Keep the database persistent

Uptime Kuma stores its application data under /app/data. Map that path to a Docker volume or a local directory on the VPS. The storage must support POSIX file locking. The project warns that NFS is not supported for this SQLite data directory; file-locking failures can corrupt the database.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A named volume is the simplest Compose-compatible choice because Docker keeps it outside the container lifecycle. If you use a bind mount, choose a local filesystem on the VPS rather than an NFS share. Back up this volume or directory regularly, and stop the application before making a filesystem-level copy so SQLite is not being written during the snapshot.

Rank #2
CanaKit Raspberry Pi 4 4GB Starter PRO Kit - 4GB RAM
  • Includes Raspberry Pi 4 4GB Model B with 1.5GHz 64-bit quad-core CPU (4GB RAM)
  • Includes Pre-Loaded 32GB EVO+ Micro SD Card (Class 10), USB MicroSD Card Reader
  • CanaKit Premium High-Gloss Raspberry Pi 4 Case with Integrated Fan Mount, CanaKit Low Noise Bearing System Fan
  • CanaKit 3.5A USB-C Raspberry Pi 4 Power Supply (US Plug) with Noise Filter, Set of Heat Sinks, Display Cable - 6 foot (Supports up to 4K60p)
  • CanaKit USB-C PiSwitch (On/Off Power Switch for Raspberry Pi 4)

4. Restrict the host port when a proxy is required

If the dashboard will be public only through Nginx, Caddy or another reverse proxy, bind the container to loopback instead of every network interface. In a Compose file, change the published port to:

127.0.0.1:3001:3001

With this mapping, Internet clients cannot connect directly to port 3001; only processes on the VPS can reach it. The reverse proxy then forwards requests to http://127.0.0.1:3001.

Single-container Docker installation

If you do not need a Compose file, the project documents this equivalent command:

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
docker run -d --restart=always -p 3001:3001 
  -v uptime-kuma:/app/data 
  --name uptime-kuma louislam/uptime-kuma:2

For a proxy-only public entry point, use the loopback binding instead:

docker run -d --restart=always -p 127.0.0.1:3001:3001 
  -v uptime-kuma:/app/data 
  --name uptime-kuma louislam/uptime-kuma:2

The --restart=always policy brings the container back after a Docker daemon restart. Inspect it with:

docker ps
docker logs --tail=100 uptime-kuma

Do not remove the uptime-kuma volume when replacing the container. Deleting that volume deletes the stored monitors, users, notification settings and status-page configuration.

Put Uptime Kuma behind HTTPS and a reverse proxy

Why WebSocket forwarding matters

Uptime Kuma uses WebSockets for live application communication. The project wiki specifies that a reverse proxy must pass the HTTP Upgrade and Connection headers. Without them, the page may load while live updates, login transitions or other interactive functions fail or repeatedly reconnect.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
ELECROW CrowPi Case Kit for Raspberry Pi 5, 9-Inch Display
  • Not including the Raspberry Pi 5 (8GB), the Crowpi advanced version comes with the Raspberry Pi 5
  • ELECROW Black Case for the Raspberry Pi 5, CrowPi is equipped with a 9-inch HD touchscreen along with a camera; All the regular components used in DIY electronics are packed into the CrowPi development board, such as LCD, LED matrix, buzzer, light sensor, PIR sensor, ultrasonic sensor, IR sensor, etc
  • Raspberry Pi Sensors: The Crowpi raspberry pi 5 programming kit is jam-packed with lots of buttons such as 19 different sensors in a tidy easy to use package; You don't have to wait and wire things
  • Build Quality: Solid ABS shell and well made components in one place make it strong and convenient to travel
  • Programming Lessons: This raspberry pi 5 learning kit ships with step by step instructions and provides 21 lessons to take you through identifying components reading code and running it in the terminal

Proxy checklist

  • Terminate TLS at the proxy and use a DNS record that points to the VPS.
  • Forward the public hostname to http://127.0.0.1:3001 when the container is loopback-bound.
  • Use HTTP/1.1 to the upstream and preserve the WebSocket upgrade request.
  • Pass Upgrade and Connection headers exactly as required by your proxy’s syntax.
  • Allow long-lived connections and avoid an idle timeout that is shorter than the dashboard’s WebSocket session.
  • After enabling HTTPS, use the HTTPS hostname consistently for administration and status-page links.

Nginx-style upstream settings

The essential directives in an Nginx location are conceptually:

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_pass http://127.0.0.1:3001;

Place these inside the location that serves the Uptime Kuma hostname, alongside your normal TLS, host-header and forwarding-header settings. Nginx, Caddy and other proxies use different configuration formats, so apply the equivalent WebSocket settings from the proxy documentation you operate.

Verify the proxy before troubleshooting monitors

  1. Confirm the DNS record resolves to the VPS address.
  2. Open the HTTPS hostname in a private browser window.
  3. Create or sign in to the administrator account.
  4. Open the browser developer tools and confirm the WebSocket connection remains established rather than failing immediately.
  5. Check proxy and container logs together if the page loads but the interface does not update.

Complete the first-run setup

Create and protect the administrator account

On the first visit, create the administrator account and keep authentication enabled. Do not expose an unauthenticated monitoring console to the public Internet. Enable Uptime Kuma’s two-factor authentication after confirming that you can recover access through your chosen account process.

Add a real monitor

Start with one endpoint you control so you can verify the complete path from check to alert. The project supports:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • HTTP and HTTPS monitors for web pages and APIs.
  • TCP checks for a host and port.
  • Keyword checks that look for expected text.
  • JSON-query checks for values in structured responses.
  • WebSocket checks.
  • Ping and DNS monitors.
  • Push monitors for applications that report their own heartbeat.
  • Steam game-server monitors.
  • Docker-container monitors.

Choose the monitor type that matches the failure you need to detect. An HTTP check proves that an HTTP response is available; it does not prove that every user workflow works. A ping check proves reachability at the network layer, not that a web application is healthy.

Configure notifications

Add a notification channel before you rely on the dashboard. The README lists SMTP email, Telegram, Discord, Gotify, Slack and Pushover among supported options, with more than 90 services in the project feature list. Send a test notification from the notification settings and verify that the message arrives at the intended recipients.

Use sensible alert delays and retry settings for unstable links. Immediate alerts are appropriate for critical services, while a short confirmation window can prevent a single transient packet loss from paging everyone.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
CanaKit Raspberry Pi 5 Desktop PC with SSD (Fully Assembled) (256 GB SSD)
  • Fully assembled for plug-and-play operation
  • Includes Raspberry Pi 5 with 8GB RAM
  • 256 GB PCIe Pi NVMe SSD (Pre-loaded with Pi 64-Bit OS)
  • M.2 HAT+
  • CanaKit Turbine Black Case for the Pi 5

Create a public status page selectively

Status pages can publish selected monitors without exposing the entire administration console. Add only monitors intended for public visibility, and avoid including internal hostnames, private services or sensitive error details. The project supports multiple status pages and mapping status pages to specific domains.

Understand the limits of monitoring from one VPS

A monitor running on the same VPS as the service it checks shares that server’s power, network path and sometimes its failure domain. If the VPS crashes, loses its route or is isolated from the Internet, the monitor may be unable to report that outage. This is an engineering limitation of colocating checker and target, not a special Uptime Kuma feature.

For important services, add a second monitoring location outside the VPS—another server, a different provider or an independent network. Keep Uptime Kuma on the VPS for centralized dashboards and notifications, but use the second location to distinguish an application failure from a VPS or path failure.

Operate and update the installation

Inspect health and logs

For Compose deployments, use docker compose ps to see whether the service is running and docker compose logs -f to follow startup or connection errors. For a single container, use docker ps and docker logs -f uptime-kuma. A restart loop usually indicates an invalid configuration, an unavailable mount or a host resource problem; read the first error in the logs before changing ports or deleting data.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Update Docker safely

Before an update, make a verified backup of the /app/data volume or directory. Then pull the image and recreate the service using your deployment method. Keep the same volume mapping and container name so the new image opens the existing database. After recreation, sign in, confirm that monitors and notification settings are present, and trigger a controlled recovery notification.

Protect the storage path

  • Keep /app/data on local storage with POSIX locking.
  • Do not place the SQLite directory on NFS.
  • Monitor free disk space on the VPS.
  • Back up before upgrades and before filesystem maintenance.
  • Test that a backup can be restored to a separate temporary instance.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Install without Docker

The project also documents a direct Linux installation. It requires a major supported Linux distribution, Node.js 20.4 or newer, Git and PM2 for background execution.

1. Clone and install

git clone https://github.com/louislam/uptime-kuma.git
cd uptime-kuma
npm run setup

The clone URL is the project’s documented repository address: https://github.com/louislam/uptime-kuma.git. Run the setup command from the repository directory so dependencies and application assets are prepared together.

Best Value
RasTech Raspberry Pi 5 8GB Kit with Active Cooler and Pi5 Case
  • 【What you Get】You will get 1*Pi 5 8GB Single Board,1*RasTech Case,1*Active Cooler,1*Screwdriver,1*Installation instructions,12-month free warranty, lifetime service, 24-hour prompt and friendly response.
  • 【More Connectors】There are two USB 3.0 ports(5Gbps simultaneously) and two USB 2.0 ports, which triple total bandwidth ,support any combination of up to two cameras or displays. Peak SD card performance is doubled through support for the SDR104 high-speed mode. It provides a smooth desktop experience for you. Offer Gigabit Ethernet and a PCIe interface, along with dual-band Wi-Fi and Bluetooth 5.0/BLE wireless capability. The RasTech Pi 5 Kit use the new 27W 5.1V 5A USB-C power connector.
  • 【 Support Dual 4Kp60 Display 】Each of the two microHDMI sockets can control a 4K display at 60 Hertz, now support HDR, offering super HD video for media streaming projects. RPi 5 is the first RPi model that comes with a PCI Express port (PCIe 2.0 x1 with 500 MB/s) to attach SSDs (requires separate M.2 HAT).
  • 【 Excellent Chips And Applications】Pi 5 is a full-size Pi computer using silicon built in-house at Pi. The RP1 “southbridge” provides the bulk of the I/O capabilities for Pi 5. Pi 5 is more friendly and convenient in the development of Internet of Things, Web development, machine identification, automatic control and other electronic equipment applications and network.
  • 【 Faster CPU, Better GPU 】 Pi 5 features a Broadcom BCM2712 64-bit quad-core Arm Cortex-A76 processor running at 2.4GHz, it delivers a 2–3× increase in CPU performance relative to RaspberryPi 4. The 800MHz VideoCore VII GPU is compatible to OpenGL ES 3.1 and Vulkan 1.2, substantial uplift in graphics performance. Pi 5 Offers lightning-fast CPU speed, a PCI Express interface, a Real Time Clock (RTC) and a power button and runs significantly cooler than Pi 4.

2. Test in the foreground

node server/server.js

Use the foreground process to confirm that the application starts and listens correctly before introducing a process manager. Stop it with the normal terminal interrupt when the check is complete.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

3. Run it under PM2

pm2 start server/server.js --name uptime-kuma
pm2 startup && pm2 save

PM2 keeps the Node.js process running after logout and can restore it after a reboot. Preserve the repository and its data on local storage with the same file-locking requirements as the Docker deployment.

Troubleshoot the common failure modes

The browser cannot connect on port 3001

  • Check that the container or PM2 process is running.
  • Confirm the host is listening on the expected address and port.
  • Review VPS firewall rules and cloud security-group rules.
  • If you intentionally used a loopback binding, connect through the reverse-proxy hostname rather than the VPS public IP and port 3001.

The page loads but live updates fail

Check the reverse proxy first. The upstream must use HTTP/1.1 and pass both Upgrade and Connection headers. Also inspect proxy idle timeouts and the browser’s WebSocket error details.

Data disappears after a restart

The container was likely started without a persistent mount, or the mount path changed between runs. Verify that the host volume is still attached to /app/data. Do not create a new empty container and assume the old database is gone until you inspect existing Docker volumes and backups.

The database reports locking or corruption errors

Move the data directory off NFS or another filesystem that does not provide reliable POSIX file locking. Stop Uptime Kuma, restore the most recent known-good backup, and restart with the corrected local-storage mapping.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Notifications never arrive

  • Use the notification provider’s test action.
  • Check credentials, recipient identifiers and provider-side rate limits.
  • Review Uptime Kuma logs for connection or authentication errors.
  • Trigger a controlled monitor failure and recovery rather than waiting for a production outage.

Recommended deployment decision

Use Docker Compose when you want the shortest supported setup, a contained runtime and straightforward volume management. Use the single-container command for a minimal host with one service and no Compose workflow. Choose the Node.js and PM2 method when your operational standards already center on source checkouts, Node.js version management and PM2.

Whichever method you select, the durable design is the same: persistent local storage, a protected administrator account, WebSocket-aware HTTPS proxying, tested notifications and an independent monitoring location for outages that take down the VPS itself.

Quick Recap

Bestseller No. 1
CanaKit Raspberry Pi 5 Starter Kit PRO - Turbine Black (128GB Edition) (8GB RAM)
CanaKit Raspberry Pi 5 Starter Kit PRO - Turbine Black (128GB Edition) (8GB RAM)
Includes Raspberry Pi 5 with 2.4Ghz 64-bit quad-core CPU (8GB RAM); CanaKit Turbine Black Case for the Raspberry Pi 5
$259.95
Bestseller No. 2
CanaKit Raspberry Pi 4 4GB Starter PRO Kit - 4GB RAM
CanaKit Raspberry Pi 4 4GB Starter PRO Kit - 4GB RAM
Includes Raspberry Pi 4 4GB Model B with 1.5GHz 64-bit quad-core CPU (4GB RAM); Includes Pre-Loaded 32GB EVO+ Micro SD Card (Class 10), USB MicroSD Card Reader
$159.99
Bestseller No. 4
CanaKit Raspberry Pi 5 Desktop PC with SSD (Fully Assembled) (256 GB SSD)
CanaKit Raspberry Pi 5 Desktop PC with SSD (Fully Assembled) (256 GB SSD)
Fully assembled for plug-and-play operation; Includes Raspberry Pi 5 with 8GB RAM; 256 GB PCIe Pi NVMe SSD (Pre-loaded with Pi 64-Bit OS)
$339.97

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Crashes, No Sound, or Screen Glitches?Free driver scan
Windows Errors? Fix Them Before They SpreadFree repair scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.