Self-host Uptime Kuma on a managed VPS: monitor your services around the clock

To self-host Uptime Kuma on a managed VPS is to monitor your websites, APIs and servers from a machine of your own, which our teams keep up to date and watch day and night. Uptime Kuma is free software under the MIT licence. This guide follows its official documentation: installing with Docker Compose, HTTPS, the database, notifications, backups and updates.

Simon Vasconcelos Lee By Published on 4 November 20267 minute read

All guides

In short

  1. Uptime Kuma’s MIT licence lets you use it freely in business, for your own services and your clients’, as long as you keep its licence notice.
  2. Install it with Docker Compose: one image, port 3001 and a data folder on a local disk.
  3. Serve it over HTTPS behind a reverse proxy that lets WebSocket through, on its own domain or subdomain.
  4. Place it on a different server from the services it monitors: the alert then goes out even when those services go down.
  5. Back up the data folder with the container stopped, and update with docker compose pull.

What Uptime Kuma monitors

Uptime Kuma checks your services at regular intervals, as often as every 20 seconds, keeps the history of their responses and alerts you as soon as one stops responding. You use it from a web interface, available in several languages.

Place Uptime Kuma on a different server from the services it monitors. On a separate machine, it sees the outage from the outside and sends the alert while your services are down.

What the MIT licence allows

Uptime Kuma is published under the MIT licence. It allows you to use, copy, modify, merge, publish, distribute, sublicense and sell the software, on one condition: keep the copyright notice and the licence text in every copy.

You can therefore run Uptime Kuma in your company, monitor your clients’ services with it and open status pages for them, with no licence to buy.

Installing with Docker Compose

Uptime Kuma’s documentation starts with Docker Compose. On a server where Docker is installed, create a folder and fetch the official file:

Terminal
mkdir uptime-kuma
cd uptime-kuma
curl -o compose.yaml https://raw.githubusercontent.com/louislam/uptime-kuma/master/compose.yaml

The project’s file publishes port 3001 on all of the server’s addresses. Behind a reverse proxy, limit it to the local address, as the README suggests:

compose.yaml
services:
  uptime-kuma:
    image: louislam/uptime-kuma:2
    restart: unless-stopped
    volumes:
      - ./data:/app/data
    ports:
      - "127.0.0.1:3001:3001"
Terminal
docker compose up -d

On first launch, open the interface: a wizard has you choose the database, then create the administrator account. Turn on two-factor authentication at your first login.

The project gives no figures for memory or processor: the size depends on how many services you monitor and how often. On a Managed VPS, tell us how you will use it and we recommend the right size.

HTTPS and WebSocket: the reverse proxy

On a public network, the project calls for HTTPS. Uptime Kuma relies on WebSocket: the reverse proxy must pass the Upgrade and Connection headers. It is served at the root of a domain or subdomain, and its wiki rules out subfolders such as example.com/uptimekuma.

With Caddy

Caddy obtains and renews the certificate on its own, and passes WebSocket through with no extra setting:

Caddyfile
uptime.example.com {
    reverse_proxy 127.0.0.1:3001
}

With Nginx and Certbot

Nginx block
server {
    listen 80;
    server_name uptime.example.com;

    location / {
        proxy_pass         http://localhost:3001;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection "upgrade";
        proxy_set_header   Host $host;
    }
}

Certbot then installs the Let’s Encrypt certificate and the redirect to HTTPS, and renews the certificate on its own:

Terminal
sudo certbot --nginx -d uptime.example.com

When Uptime Kuma can only be reached through the proxy, open its settings, "Settings", "Reverse Proxy", "HTTP Headers", and set "Trust Proxy" to "Yes": the logs then show visitors’ real addresses.

SQLite or MariaDB

Since version 2, Uptime Kuma offers three databases, chosen in the first-launch wizard:

DatabaseSetupBackup
SQLiteNone: a single file, data/kuma.dbA copy of the data folder, with the container stopped
Embedded MariaDBNone: supplied by the 2 imageA copy of the data folder, with the container stopped
External MariaDBYour MariaDB server, and its credentialsA database export, in addition to the data folder

To set the choice in advance, without going through the wizard, add the variables UPTIME_KUMA_DB_TYPE, UPTIME_KUMA_DB_HOSTNAME, UPTIME_KUMA_DB_PORT, UPTIME_KUMA_DB_NAME, UPTIME_KUMA_DB_USERNAME and UPTIME_KUMA_DB_PASSWORD to the service in compose.yaml.

Notifications, email included

A monitor is only useful if the alert reaches you. Declare your channels in "Settings", "Notifications", send a test message from each, and set up two, for example a messaging app and email: if one goes down, the other takes over.

For email, Uptime Kuma connects to an SMTP server. On a Simafri VPS, sending goes through an authenticated relay on port 587: the address of a mail account you already have, or Simafri Suite.

Backups and updates

Since version 2, backing up the data folder is the only method the project supports. With SQLite or the embedded MariaDB, everything is in there. A SQLite database copied mid-write can end up corrupted: stop the container for the duration of the copy, knowing that the monitors stop with it.

Terminal, in the compose.yaml folder
docker compose stop
tar -czf uptime-kuma-$(date +%F).tar.gz data
docker compose start

Updating

The project’s wiki gives two commands, run from the compose.yaml folder. The data folder stays in place:

Terminal
docker compose pull
docker compose up -d --force-recreate

Read the release notes before each update: some carry security fixes, like 2.5.9 of October 31, 2026. A backup just beforehand gives you a simple way back.

Moving from version 1 to version 2 takes more care: back up the data folder with the container stopped, and let the migration run to completion, because an interrupted migration means restoring the backup. The project measured about 7 minutes for 20 monitors and 90 days of history, and much more on a modest machine or with more monitors.

Who does what on a Managed VPS

Self-hosting means running the server on top of the application. On a Managed VPS, our teams take the server in hand and proactively monitor your instance; Uptime Kuma remains your software, with its settings and its data.

TopicOur teamsYou
The serverSystem and security updates, server interventions includedThe time that suits your business
MonitoringServer watched 24/7, with intervention without waiting for your callThe monitors and alerts for your own services
Uptime KumaProactive monitoring: errors, slowdowns and disk space spotted, fix recommendedIts installation, updates and settings, which you apply, yourself or through your AI assistant
BackupsEvery night, encrypted and kept off the machine; restores includedThe restore request, when you need one
MigrationYour current server migrated, free of chargeThe time of the switchover

If you would rather have our teams work inside the application itself, that service is billed hourly or at a fixed price, with a quote given before the work begins.

Uptime Kuma, on a server run for you

With a Simafri Managed VPS, our teams keep your Uptime Kuma instance’s server up to date, monitor it day and night and step in without waiting for your call; they also proactively monitor your instance and recommend useful fixes, which you apply, yourself or through your AI assistant. Backups are encrypted every night and kept off the machine, restores are included, and migrating your current server is free.

Explore Managed VPS

Frequently asked questions

Is Uptime Kuma free for a business?

Yes. Uptime Kuma is under the MIT licence: you can use it in your company, monitor your clients’ services with it and open status pages for them, as long as you keep its licence notice. What remains is the cost of the server that runs it.

How do I install Uptime Kuma with Docker Compose?

Create a folder, fetch the project’s compose.yaml file, then run docker compose up -d. The interface answers on port 3001, where a wizard has you choose the database and create the administrator account.

Can I host Uptime Kuma on the same server as my website?

It works that way, but a machine failure would take down the website and its alert at the same time. Place Uptime Kuma on a different server from the services it monitors: it sees the outage from the outside and notifies you.

How do I set up a reverse proxy for Uptime Kuma?

Uptime Kuma relies on WebSocket: the proxy must pass the Upgrade and Connection headers, which Caddy does by itself. Serve it at the root of a domain or subdomain, then set Trust Proxy to Yes in its settings.

Which database should I choose for Uptime Kuma?

SQLite, the simplest, fits in a single file in the data folder. Version 2 also offers a MariaDB embedded in the 2 image, or your own MariaDB server. You choose in the first-launch wizard.

How do I reset the Uptime Kuma password?

From the compose.yaml folder, run docker compose exec uptime-kuma npm run reset-password, then follow the prompts. The remove-2fa script likewise removes two-factor authentication if you have lost access to it.

Does a Managed VPS cover Uptime Kuma?

A Managed VPS covers the server: system, security, monitoring and backups. Our teams also proactively monitor your instance and recommend useful fixes, which you apply. Work inside the application is billed hourly or at a fixed price.

Contact us