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.
By Simon Vasconcelos Lee
Published on 4 November 20267 minute read
data folder on a local disk.data folder with the container stopped, and update with docker compose pull.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.
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.
Uptime Kuma’s documentation starts with Docker Compose. On a server where Docker is installed, create a folder and fetch the official file:
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:
services:
uptime-kuma:
image: louislam/uptime-kuma:2
restart: unless-stopped
volumes:
- ./data:/app/data
ports:
- "127.0.0.1:3001:3001"
docker compose up -d
127.0.0.1: by default, Docker publishes on all of the server’s addresses, ahead of the ufw firewall rules. Bound locally, Uptime Kuma can only be reached through the reverse proxy.data folder on a local disk: it holds the kuma.db database, uploaded files and screenshots. The project rules out NFS and other network file systems, because SQLite needs reliable file locks.2 tag follows Uptime Kuma version 2, and moving to a later major version remains your choice.2-slim image is lighter, about 185 MB to download against 620 MB: it leaves out Chromium and the embedded MariaDB that the 2 image carries. The 2 image is the one the project recommends, and a "Browser Engine" monitor then needs an external Chromium with 2-slim.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.
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.
Caddy obtains and renews the certificate on its own, and passes WebSocket through with no extra setting:
uptime.example.com {
reverse_proxy 127.0.0.1:3001
}
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:
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.
Since version 2, Uptime Kuma offers three databases, chosen in the first-launch wizard:
| Database | Setup | Backup |
|---|---|---|
| SQLite | None: a single file, data/kuma.db | A copy of the data folder, with the container stopped |
| Embedded MariaDB | None: supplied by the 2 image | A copy of the data folder, with the container stopped |
| External MariaDB | Your MariaDB server, and its credentials | A 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.
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.
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.
docker compose stop
tar -czf uptime-kuma-$(date +%F).tar.gz data
docker compose start
The project’s wiki gives two commands, run from the compose.yaml folder. The data folder stays in place:
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.
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.
| Topic | Our teams | You |
|---|---|---|
| The server | System and security updates, server interventions included | The time that suits your business |
| Monitoring | Server watched 24/7, with intervention without waiting for your call | The monitors and alerts for your own services |
| Uptime Kuma | Proactive monitoring: errors, slowdowns and disk space spotted, fix recommended | Its installation, updates and settings, which you apply, yourself or through your AI assistant |
| Backups | Every night, encrypted and kept off the machine; restores included | The restore request, when you need one |
| Migration | Your current server migrated, free of charge | The 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.
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.
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.
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.
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.
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.
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.
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.
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.
Simafri
Let's talk about your project
Tell us what you need in a few words: we will get back to you quickly.
Thank you! Your request has been sent. We'll get back to you shortly.
Prefer email? Write to us at support@simafri.com.