The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →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.
Antihost offers Linux VPS plans with full root access, unlimited traffic on a 1 Gbps port and a 14-day free trial.
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.
Recommended Free Tools
- 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
- 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:
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.
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
- 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.
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.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchRank #3
- 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:3001when the container is loopback-bound. - Use HTTP/1.1 to the upstream and preserve the WebSocket upgrade request.
- Pass
UpgradeandConnectionheaders 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
- Confirm the DNS record resolves to the VPS address.
- Open the HTTPS hostname in a private browser window.
- Create or sign in to the administrator account.
- Open the browser developer tools and confirm the WebSocket connection remains established rather than failing immediately.
- 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:
- 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.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Fix the driver behind crashes, sound loss and screen glitches3Repair Windows errors before they cause bigger problemsRank #4
- 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.
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/dataon 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.
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
- 【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.
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.
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
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.




