Ga naar hoofdinhoud
50% korting alle plannen, beperkte tijd. Vanaf $2.48/mo
10 min left
Developer-tools en DevOps

Uptime Kuma installeren op een VPS

C Door Chike 10 min leestijd
Uptime Kuma VPS setup title card: a server rack on a monitoring dashboard with green status icons for website, database, mail and security checks and one failed check in red

Uptime Kuma is een opensource, zelfgehoste monitor voor HTTP(S)-, TCP-, ping-, DNS-, WebSocket- en andere controles. Op een aparte VPS blijft hij controleren wanneer je productieserver uitvalt, in plaats van er samen mee te verdwijnen.

Deze Uptime Kuma-installatie op een VPS zet v2 op met Docker Compose, houdt poort 3001 op loopback, voegt HTTPS toe via Caddy, stuurt meldingen naar Telegram, Discord en Slack, en publiceert een statuspagina.

Vereisten en wat je nodig hebt

  • Een VPS met minimaal 1 vCPU, 1 GB RAM en 10 GB lokale SSD-opslag
  • Ubuntu 24.04 LTS of een andere actuele Ubuntu-release die Docker ondersteunt
  • Docker Engine en Docker Compose geïnstalleerd op de VPS
  • Een domein of subdomein dat via een A-record naar de VPS wijst (zoiets als status.example.com)
  • SSH-toegang en basisvaardigheid met de commandoregel

Als Docker nog niet is geïnstalleerd, volg dan de Ubuntu-installatiehandleiding van Docker. Die installeert Docker Engine en de Compose-plugin die we hieronder gebruiken.

Waarom de monitoring-VPS los moet staan van wat hij bewaakt

Production in Region A has failed and its website, API and database are down, while Uptime Kuma on a separate VPS in Region B stays online, keeps probing those services and routes alerts to Telegram, Discord and Slack. An external watchdog checks Uptime Kuma itself.

Productie en monitoring op dezelfde server delen hetzelfde storingsdomein. Valt die server weg, dan verdwijnen zowel de applicatie als het systeem dat de melding moet versturen.

Twee praktische opstellingen verbeteren dit:

  1. Dezelfde provider, andere locatie. Zet productie en monitoring op aparte hosts op verschillende locaties. Dat verkleint de kans op uitval door één server of één datacenter, maar beschermt niet tegen elk netwerk- of control-plane-incident bij de provider als geheel.
  2. Een volledig andere provider. De monitor elders hosten beschermt ook tegen incidenten die de hele provider raken. De keerzijde is nog een account, nog een factuur en nog een stuk beheer.

Eén enkele Uptime Kuma-instantie heeft nog steeds geen waakhond van buitenaf. Voeg één externe HTTP(S)-controle toe op de openbare statuspagina. Het gratis abonnement van UptimeRobot bevat momenteel 50 monitors met intervallen van vijf minuten. Daarmee wordt Uptime Kuma niet hoogbeschikbaar, maar je hoort het wel wanneer de monitor zelf wegvalt.

Dezelfde regel geldt voor openbare statuspagina's: wat je over de storing vertelt, mag niet in hetzelfde storingsdomein zitten als wat er stukgaat.

Bekijk Linux-plannen

Bouw op een Linux VPS met root-toegang, NVMe en AMD EPYC-kracht.

Bekijk Linux-plannen

De VPS dimensioneren

Uptime Kuma heeft geen betrouwbare formule van aantal monitors naar RAM, omdat de belasting afhangt van het type monitor, het interval, de retry-instellingen en hoelang je historie bewaart. Eenvoudige HTTP(S)-, TCP-, ping- en DNS-controles zijn lichter dan Browser Engine-controles, die Chromium draaien.

Voor een kleine set basiscontroles begin je met 1 vCPU, 1 GB RAM en lokale SSD-opslag. Houd het werkelijke verbruik in de gaten met docker stats uptime-kuma en de groei van de database met du -sh /opt/uptime-kuma/data. Voeg geheugen toe als het verbruik hoog blijft, de container een OOM kill meldt, of je Browser Engine-controles gaat gebruiken.

De volledige v2-image bevat Chromium en een ingebouwde MariaDB; de documentatie over de Docker-tags legt het verschil uit tussen de volledige en de slim-image.

Uptime Kuma uitrollen met Docker Compose

Sla dit bestand op als docker-compose.yml in /opt/uptime-kuma/:

services:
  uptime-kuma:
    image: louislam/uptime-kuma:2
    container_name: uptime-kuma
    restart: unless-stopped
    ports:
      # Bind to localhost only. The reverse proxy will expose it on 443.
      - "127.0.0.1:3001:3001"
    volumes:
      - ./data:/app/data

Drie regels verdienen aandacht:

  • image: louislam/uptime-kuma:2 zet de hoofdversie vast. De tag :2 volgt de stabiele 2.x-lijn. Gebruik geen :latest.
  • 127.0.0.1:3001:3001 bindt de container alleen aan localhost. Het publieke internet mag poort 3001 nooit rechtstreeks bereiken. De reverse proxy houdt het TLS-certificaat en de publieke hostnaam.
  • Het data-volume bevat de database, de monitorconfiguratie en de historie. Houd het op lokale opslag, want de installatiedocumentatie van Uptime Kuma waarschuwt dat bestandssystemen zonder betrouwbare POSIX-locking, waaronder veel NFS-opstellingen, SQLite kunnen beschadigen. Stop de stack voordat je een kopie op bestandssysteemniveau maakt.

Start hem op en controleer:

sudo install -d -o "$USER" -g "$USER" /opt/uptime-kuma
cd /opt/uptime-kuma
# Paste the docker-compose.yml file above.
sudo docker compose up -d
sudo docker compose ps

Verwachte uitvoer van docker compose ps:

NAME          IMAGE                       STATUS                   PORTS
uptime-kuma   louislam/uptime-kuma:2      Up (healthy)             127.0.0.1:3001->3001/tcp

Open poort 3001 niet naar het internet om het dashboard voor het eerst te bereiken, ook niet even. Gebruik een SSH-tunnel:

ssh -L 3001:127.0.0.1:3001 [email protected]

Open http://localhost:3001 in je browser, maak het beheerdersaccount aan, kies een sterk wachtwoord en sluit de tunnel. Vanaf nu bereikt het dashboard je via HTTPS door je reverse proxy.

Heb je geen behoefte aan handmatige Compose, dan bieden we ook Uptime Kuma als één-klik-app aan. De huidige app-pagina vermeldt v1 en komt dus niet overeen met de v2-opzet in deze handleiding. Neem de handmatige Compose-route als je specifiek v2 nodig hebt.

Reverse proxy en TLS

Public traffic reaches Caddy on the host or an Nginx Proxy Manager container over HTTPS on port 443. Caddy forwards to Uptime Kuma on 127.0.0.1:3001 while the NPM container uses a shared Docker network instead. Public access to port 3001 is blocked, and first-time setup runs through an SSH tunnel to localhost:3001.

Zet Uptime Kuma niet rechtstreeks open. Plaats er een reverse proxy voor, voor TLS, nette URL-afhandeling en één publiek toegangspunt. Twee routes.

Caddy. Is Caddy nog niet geïnstalleerd, volg dan de officiële Ubuntu-pakketstappen. Draait Caddy als hostservice, dan proxyt het Caddyfile hieronder naar Uptime Kuma op loopback en regelt het uitgeven en vernieuwen van het certificaat automatisch.

Pro-tip: draait er op de monitoring-VPS alleen Uptime Kuma, gebruik dan Caddy. Het Caddyfile is drie regels, en Caddy regelt het uitgeven en vernieuwen van het certificaat vanzelf. Geen Certbot en geen aparte vernieuwingstimer waar je om 4 uur 's nachts naar moet omkijken.

Sla dit op als /etc/caddy/Caddyfile:

status.example.com {
    reverse_proxy 127.0.0.1:3001
}

Herlaad Caddy:

sudo systemctl reload caddy

Controleer:

curl -I https://status.example.com

Je hoort een geslaagd 2xx- of 3xx-antwoord te krijgen met een geldig certificaat. Mislukt de verbinding, controleer dan of het A- of AAAA-record van het domein naar deze VPS wijst, of poort 80 en 443 bereikbaar zijn en of Caddy zich aan beide kan binden. Dit hoort bij de vereisten voor automatische HTTPS van Caddy.

Nginx Proxy Manager. Draait NPM rechtstreeks op de host, voeg dan een Proxy Host toe voor status.example.com, stuur die door naar 127.0.0.1 op poort 3001, vraag een Let's Encrypt-certificaat aan en zet Websockets Support aan. Draait NPM in Docker, dan wijst 127.0.0.1 terug naar de NPM-container zelf. Verbind NPM en Uptime Kuma dan met hetzelfde Docker-netwerk en stuur de proxy host door naar uptime-kuma op poort 3001.

Meldingen routeren: Telegram, Discord, Slack

Uptime Kuma kan hetzelfde monitorgebeurtenis naar meerdere meldingskanalen sturen. Stel elke provider één keer in en koppel daarna één of meer kanalen aan een monitor, afhankelijk van wie de melding nodig heeft.

Meldingen stel je globaal in bij Instellingen > Meldingen, waarna je ze aan afzonderlijke monitors toewijst. Elke monitor kan één of meerdere kanalen aansturen. Dezelfde melding kan naar Telegram voor de dienstdoende engineer, naar Slack voor het team en naar e-mail voor het auditlogboek, allemaal vanuit één gebeurtenis.

Telegram

  1. Stuur in Telegram een bericht naar @BotFather en voer /newbot uit. Kies een naam en een gebruikersnaam. BotFather antwoordt met een bot-token. Bewaar dat.
  2. Stuur je nieuwe bot een willekeurig bericht. Ga daarna in een browser naar https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates. Zoek het veld chat.id, dat is je chat-ID.
  3. In Uptime Kuma: Instellingen > Meldingen > Melding instellen > Telegram. Plak het bot-token en de chat-ID. Klik op Toets. Controleer of de bot de testmelding verstuurt.
  4. Komt het testbericht niet aan, controleer dan of het bot-token en de chat-ID kloppen en of de firewall van de VPS uitgaand HTTPS naar api.telegram.org toestaat.

Discord

  1. Open de Discord-server waar je de meldingen wilt. Klik met rechts op het doelkanaal en dan Kanaal bewerken > Integraties > Webhooks > Nieuwe webhook. Geef hem een naam (bijvoorbeeld "Uptime Kuma"), kies het kanaal en kopieer de webhook-URL.
  2. In Uptime Kuma: Instellingen > Meldingen > Melding instellen > Discord. Plak de webhook-URL. Desgewenst stel je ook de gebruikersnaam en avatar in.
  3. Klik Toets. Controleer of de webhook de testmelding in het kanaal plaatst.

Slack

  1. Maak in Slack een Incoming Webhook voor het kanaal waar je de meldingen wilt. Slack geeft een webhook-URL terug in de vorm https://hooks.slack.com/services/T.../B.../....
  2. In Uptime Kuma: Instellingen > Meldingen > Melding instellen > Slack. Plak de webhook-URL. Desgewenst stel je ook het pictogram en het vervangende kanaal in.
  3. Klik Toets.

Zodra elke test slaagt, bewerk je elke monitor en kies je de meldingskanalen die hij moet gebruiken. Stel Max Retries (maximaal aantal pogingen) en Retry Interval (interval tussen pogingen) zo in dat één korte storing niet meteen een melding veroorzaakt.

De ingebouwde statuspagina (en wanneer je eroverheen groeit)

Uptime Kuma heeft openbare statuspagina's met eigen slugs, gegroepeerde monitors, eigen domeinen, incidentberichten en geplande onderhoudsmeldingen. Je kunt vanuit één instantie ook meerdere statuspagina's publiceren, voor verschillende diensten of doelgroepen.

De grotere beperking zit in de communicatie met klanten. Bezoekers kunnen zich momenteel niet per e-mail op updates abonneren rechtstreeks vanaf een statuspagina, en die openbare pagina blijft deel van dezelfde Uptime Kuma-applicatie als het beheerdersdashboard. Zelfaanmelding door bezoekers staat nog steeds open als een openstaand functieverzoek.

Heb je klantabonnementen nodig of een statussysteem los van het monitoringdashboard, dan is Kener een alternatief. Ons artikel over de zelfgehoste monitoringstack legt uit hoe je de twee tools kunt combineren.

Veelvoorkomende problemen

Meldingen mislukken stilletjes wanneer de firewall van de VPS uitgaand HTTPS blokkeert. Symptoom: de Test-knop werkt bij sommige kanalen wel en bij andere niet. Oplossing: controleer of uitgaande HTTPS-verbindingen zijn toegestaan en of curl -I https://api.telegram.org vanaf de VPS lukt.

De browser toont "ERR_TOO_MANY_REDIRECTS" na het inschakelen van de proxy. Kijk of er dubbele HTTP-naar-HTTPS-redirects zitten in Caddy, Nginx Proxy Manager of een CDN ervoor. Uptime Kuma moet HTTP op poort 3001 blijven serveren terwijl de publieke reverse proxy TLS afhandelt. Zet je vertrouwde proxy-headers aan, dan is het huidige pad Instellingen > Reverse Proxy > HTTP-headers > Trust Proxy.

De container start om de paar minuten opnieuw op. Kijk of de container is gestopt wegens geheugentekort en houd daarna het actuele verbruik in de gaten met docker stats uptime-kuma. Is de container door OOM gekilld of blijft het geheugen tegen de VPS-limiet aan zitten, voeg dan RAM toe, schrap zware controles of vergroot hun intervallen.

De statuspagina werkt op localhost maar niet via de publieke hostnaam. Controleer of de reverse proxy het rootpad onveranderd doorstuurt, de Host-header behoudt en WebSockets ondersteunt. Uptime Kuma ondersteunt geen installatie onder een submap, gebruik dus een eigen domein of subdomein in plaats van een pad als example.com/uptime-kuma.

Tot slot

Uptime Kuma op een aparte VPS geeft je controle over de controles, de routering van meldingen en de openbare statuspagina, maar updates, back-ups, OS-patches en de externe waakhond voor de monitor zijn dan ook van jou. Kies een VPS op een andere locatie dan productie, rol v2 uit met Docker Compose of gebruik de één-klik-app nadat je de vermelde versie hebt gecontroleerd, zet Caddy ervoor en sluit de kanalen aan die je team echt volgt.

Veelgestelde vragen

Hoeveel RAM heeft Uptime Kuma nodig?

Uptime Kuma heeft geen betrouwbare formule van aantal monitors naar RAM, omdat het verbruik afhangt van het type monitor, het controle-interval, de retry-instellingen, de bewaartermijn van de historie en het gebruik van de Browser Engine. Voor een kleine set basiscontroles begin je met 1 GB RAM en houd je het werkelijke verbruik in de gaten met docker stats uptime-kuma. Voeg geheugen toe als het verbruik tegen de limiet blijft aanzitten of de container door OOM wordt gekilld.

Moet ik Uptime Kuma op dezelfde server als mijn app draaien?

Nee. Delen het monitoringhulpmiddel en de applicatie één server, dan gaan ze bij uitval tegelijk offline en verlies je de meldingen precies wanneer je ze het hardst nodig hebt. Draai Uptime Kuma op een aparte VPS, het liefst in een ander datacenter.

Kan Uptime Kuma meldingen naar Telegram, Discord en Slack sturen?

Ja. Telegram, Discord en Slack zijn ingebouwde meldingsdiensten, naast e-mail, generieke webhooks, PagerDuty, ntfy, Mattermost en nog veel meer. Telegram werkt met een bot-token en chat-ID, Discord en Slack met webhook-URL's. Je kunt meerdere meldingskanalen aan dezelfde monitor koppelen.

Wat is het verschil tussen Uptime Kuma en UptimeRobot?

Uptime Kuma host je zelf, dus jij beheert de server, updates, back-ups en de routering van meldingen. Het ondersteunt controle-intervallen tot 20 seconden. UptimeRobot is gehoste SaaS, en het huidige gratis abonnement bevat 50 monitors met controles om de vijf minuten. Kies Uptime Kuma als je controle wilt, of UptimeRobot als je de monitoringserver niet wilt beheren.

Heeft Uptime Kuma een openbare statuspagina?

Ja. Je kiest welke monitors zichtbaar zijn, groepeert ze, publiceert meerdere statuspagina's, koppelt er eigen domeinen aan en plant onderhoudsberichten in. Zelfaanmelding van bezoekers per e-mail zit er niet in, dus gebruik een apart klantgericht statuspagina-hulpmiddel wanneer klanten zich op updates moeten kunnen abonneren.

Delen

Meer van de blog

Blijf lezen.

Klaar om uit te rollen? Vanaf $2,48/mnd.

Onafhankelijke cloud, sinds 2008. AMD EPYC, NVMe, 40 Gbps. 14 dagen niet-goed-geld-terug.