Cara Install Uptime Kuma di Docker: Self-Hosted Uptime Monitoring

Cara Install Uptime Kuma di Docker: Self-Hosted Uptime Monitoring

Bitnesia Software Sep 1, 2026 3 EN

Website toko online yang tiba-tiba down jam 2 pagi sering kali baru ketahuan setelah User pertama komplain siang harinya karena gagal checkout. Kerugian reputasi dan transaksi sudah terjadi jauh sebelum ada yang sadar server bermasalah.

Kasus seperti ini bisa dicegah dengan sistem monitoring uptime yang berjalan otomatis 24 jam. Salah satu tool monitoring gratis dan open source paling populer saat ini adalah Uptime Kuma. Pada artikel ini, kita akan install Uptime Kuma di Docker langkah demi langkah, mulai dari instalasi dasar, konfigurasi monitor pertama, setup notifikasi, sampai mengamankannya dengan reverse proxy dan SSL.

1. Kenapa Monitoring Uptime Itu Penting

Sysadmin yang mengelola server produksi punya tanggung jawab besar: memastikan layanan tetap bisa diakses Visitor dan User kapan pun mereka butuh. Masalahnya, server dan aplikasi tidak selalu memberi tahu kalau mereka bermasalah. Service bisa crash, sertifikat SSL bisa kedaluwarsa, atau koneksi database bisa putus tanpa ada notifikasi apa pun ke tim.

Tanpa alat monitoring, Sysadmin baru tahu ada masalah setelah User atau Client melapor lewat email komplain. Pada titik ini, downtime sudah berlangsung entah berapa lama, dan kerugian reputasi maupun finansial sudah terjadi. Sistem monitoring uptime menutup celah ini dengan mengecek status layanan secara berkala dan langsung mengirim notifikasi begitu ada anomali.

2. Apa Itu Uptime Kuma

Uptime Kuma adalah tool monitoring open source berbasis self-hosted yang dikembangkan oleh Louis Lam. Berbeda dari layanan monitoring berbayar seperti UptimeRobot atau Pindomo yang datanya tersimpan di server pihak ketiga, Uptime Kuma di-deploy sendiri di server milik kita sehingga data pemantauan sepenuhnya berada di bawah kendali Sysadmin.

Beberapa fitur utama yang membuat Uptime Kuma banyak dipakai:

  • Multi-tipe monitor: mendukung pengecekan HTTP(s), TCP Port, Ping, DNS Record, hingga status container Docker.
  • Notifikasi multi-channel: terintegrasi dengan puluhan provider notifikasi seperti Telegram, Discord, dan email lewat SMTP.
  • Status page publik: halaman status yang bisa dibagikan ke Client atau User agar mereka bisa mengecek kondisi layanan sendiri.
  • Multi-user dan multi-language: cocok dipakai tim dengan beberapa admin dan sudah mendukung Bahasa Indonesia.

Kenapa instalasinya sebaiknya lewat Docker? Karena Uptime Kuma jadi berjalan dalam container yang terisolasi dari sistem operasi utama. Sysadmin tidak perlu install Node.js atau dependency lain secara manual di server, dan proses update maupun backup jadi jauh lebih sederhana dibanding instalasi manual.

3. Persiapan Sebelum Instalasi

Sebelum instalasi, pastikan hal-hal berikut sudah siap.

  1. Sistem operasi yang didukung: Linux (Debian, Ubuntu, Fedora, ArchLinux) atau Windows (10 x64 ke atas, Server 2012 R2 ke atas). Kebutuhan resource resmi tidak dipublikasikan, tapi 1 vCPU dan RAM 1 GB umumnya cukup untuk puluhan monitor ringan.
  2. Docker dan Docker Compose terinstall. Cek dengan:
    docker -v
    docker compose version
    Kalau belum ada, install lewat script resmi Docker (cocok untuk VPS baru; untuk server produksi lebih baik install lewat package manager distro seperti apt atau dnf):
    curl -fsSL https://get.docker.com -o get-docker.sh
    sudo sh get-docker.sh
    Lalu tambahkan user ke grup docker supaya perintah docker tidak perlu sudo:
    sudo usermod -aG docker $USER
    newgrp docker
  3. Akses SSH ke VPS, dengan user yang tergabung di grup docker.
  4. Filesystem yang mendukung POSIX file lock untuk menyimpan data. Uptime Kuma memakai SQLite yang butuh mekanisme ini untuk mencegah database corruption, jadi gunakan direktori lokal atau Docker volume biasa, bukan NFS.

4. Cara Install Uptime Kuma dengan Docker

Ada dua metode instalasi yang umum dipakai: docker run untuk uji coba cepat, dan Docker Compose untuk deployment yang lebih rapi dan mudah dikelola jangka panjang.

4.1 Instalasi Cepat dengan Docker Run

Metode ini cocok untuk mencoba Uptime Kuma dengan cepat. Jalankan perintah berikut di terminal VPS.

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

Berikut penjelasan tiap parameter:

  • -d: menjalankan container di background (detached mode).
  • --restart=always: container otomatis menyala lagi kalau Docker atau server di-restart.
  • -p 3001:3001: memetakan port 3001 di host ke port 3001 di dalam container, yaitu port default dashboard Uptime Kuma.
  • -v uptime-kuma:/app/data: menyimpan seluruh data (monitor, user, history) di Docker volume bernama uptime-kuma, dipetakan ke path /app/data di dalam container.
  • --name uptime-kuma: memberi nama container supaya mudah dikelola lewat perintah docker lain.
  • louislam/uptime-kuma:2: image resmi Uptime Kuma dengan tag versi 2, yaitu major version terbaru saat artikel ini ditulis.

Hindari tag latest karena sudah deprecated dan masih menunjuk ke versi 1. Gunakan tag spesifik: 2 (lengkap dengan MariaDB dan Chromium tertanam untuk Browser Engine) atau 2-slim (versi ramping tanpa keduanya).

Perintah di atas memakai --restart=always seperti contoh resmi README. Bedanya dengan unless-stopped yang dipakai compose.yaml di bagian 4.2: always tetap menyalakan ulang container walau sempat dihentikan manual lewat docker stop, sedangkan unless-stopped menghormati penghentian manual dan hanya restart otomatis saat container crash atau Docker daemon restart, pilihan yang lebih aman untuk operasional sehari-hari.

Kalau dashboard hanya perlu diakses dari server itu sendiri, misalnya karena nanti diarahkan lewat reverse proxy, batasi binding port ke localhost saja supaya tidak langsung terekspos ke internet:

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

4.2 Instalasi dengan Docker Compose (Direkomendasikan)

Untuk deployment produksi, Docker Compose lebih disarankan karena konfigurasi tersimpan dalam satu file yang mudah di-versioning dan diduplikasi ke server lain.

  1. Buat folder project, lalu masuk ke dalamnya:
    mkdir uptime-kuma && cd uptime-kuma
  2. Buat file compose.yaml (konfigurasi resmi dari repository Uptime Kuma; data disimpan di direktori lokal ./data):
    services:
      uptime-kuma:
        image: louislam/uptime-kuma:2
        restart: unless-stopped
        volumes:
          - ./data:/app/data
        ports:
          # <Host Port>:<Container Port>
          - "3001:3001"
    Atau unduh langsung filenya:
    curl -o compose.yaml https://raw.githubusercontent.com/louislam/uptime-kuma/master/compose.yaml
  3. Jalankan Uptime Kuma:
    docker compose up -d
  4. Cek statusnya:
    docker compose ps
    Kalau kolom STATUS menunjukkan Up, Uptime Kuma siap diakses lewat browser.

5. Mengakses Dashboard Uptime Kuma

  1. Buka browser, akses http://IP-VPS:3001 (sesuaikan dengan IP VPS). Pastikan port 3001 sudah dibuka di firewall/security group untuk jangka panjang, sebaiknya tidak dibiarkan terbuka langsung ke publik, arahkan lewat reverse proxy seperti di bagian 9.
  2. Pilih database. Sebelum akun admin dibuat, Uptime Kuma v2 menampilkan halaman pemilihan database: SQLite atau MariaDB (tertanam di image 2, atau eksternal). Pilih SQLite untuk panduan ini, paling sederhana dan selaras dengan volume data di bagian 4. Kalau memilih MariaDB eksternal, isi Hostname, Port (default 3306), Username, Password, dan Database Name. Pilihan ini tersimpan di db-config.json; hapus file itu untuk mengulang wizard.
  3. Buat akun admin: isi username dan password yang kuat, karena akun ini punya akses penuh ke seluruh konfigurasi monitor.
  4. Simpan kredensial baik-baik. Uptime Kuma tidak punya fitur reset password lewat email atau dashboard; kalau lupa, satu-satunya jalan adalah reset lewat command line di dalam container.

6. Konfigurasi Monitor Pertama

Setelah login, klik tombol Add New Monitor untuk mulai membuat pengecekan pertama. Uptime Kuma menyediakan beberapa Monitor Type, di antaranya:

  • HTTP(s): mengecek apakah website merespons dengan status code yang diharapkan, cocok untuk memantau pengalaman Visitor mengakses situs.
  • TCP Port: mengecek apakah port tertentu (misalnya port database atau SSH) masih terbuka dan menerima koneksi.
  • Ping: mengecek apakah host, misalnya VPS, masih merespons ICMP ping.
  • DNS: mengecek apakah record DNS domain masih resolve dengan benar.
  • Docker Container: mengecek status container Docker lain di server yang sama.

Contoh untuk memantau website:

  1. Pilih Monitor Type HTTP(s).
  2. Isi Friendly Name, misalnya "Website Utama".
  3. Masukkan URL lengkap situs yang dipantau.
  4. Atur Heartbeat Interval (jeda antar pengecekan). Uptime Kuma memperingatkan kalau interval di bawah 20 detik karena berisiko membebani server target dan memicu false positive; interval 60 detik dengan 2-3 kali retries sebelum status dianggap down sudah jadi titik tengah yang wajar.

Untuk memantau VPS itu sendiri, monitor tipe Ping ke IP server sudah cukup. Untuk memantau status container Docker lain di server yang sama, gunakan monitor tipe Docker Container, tipe ini butuh mount -v /var/run/docker.sock:/var/run/docker.sock saat menjalankan Uptime Kuma. Karena akses ke Docker socket setara kontrol penuh atas Docker daemon, jangan ekspos dashboard langsung ke internet kalau memakai setup ini.

7. Setup Notifikasi Downtime

Monitor tanpa notifikasi berarti dashboard harus dicek manual terus-menerus. Uptime Kuma punya provider notifikasi bawaan seperti Telegram, Discord, dan email, plus integrasi Apprise yang menjangkau 78+ layanan notifikasi pihak ketiga lain.

Untuk menambahkan notifikasi, buka menu Settings > Notifications, lalu klik Setup Notification. Dialog yang muncul punya struktur yang sama untuk semua provider:

  • Notification Type: dropdown berisi puluhan provider yang dikelompokkan per kategori, seperti Chat Platforms (Telegram, Discord, Slack, Teams), Email, Push Services (Pushover, ntfy, Bark), SMS Services, Incident Management (PagerDuty, Opsgenie), sampai kategori Universal untuk Webhook dan Apprise.
  • Friendly Name: nama unik untuk notifikasi ini, otomatis terisi sesuai provider yang dipilih tapi bisa diubah bebas.
  • Default enabled: kalau dicentang, notifikasi ini otomatis aktif untuk setiap monitor baru yang dibuat setelahnya.
  • Apply on all existing monitors: kalau dicentang, notifikasi ini langsung diterapkan ke semua monitor yang sudah ada, bukan cuma monitor baru.

Field spesifik yang muncul di bawah dropdown Notification Type berbeda-beda tergantung provider yang dipilih. Berikut detail konfigurasi tiga provider yang paling sering dipakai.

7.1 Notifikasi via Telegram

  • Bot Token: token yang didapat dari bot BotFather di Telegram setelah membuat bot baru lewat perintah /newbot.
  • Chat ID: ID tujuan pesan. Uptime Kuma menyediakan tombol Auto Get untuk mengambil Chat ID otomatis, tapi ini hanya berhasil kalau bot sudah pernah dikirimi pesan terlebih dahulu, karena Uptime Kuma mengambil ID dari riwayat pesan terakhir bot lewat endpoint getUpdates.
  • Message Thread ID (opsional): dipakai kalau notifikasi perlu diarahkan ke thread tertentu dalam grup Telegram.
  • Server URL: secara default memakai https://api.telegram.org, tapi bisa diganti kalau Sysadmin menjalankan Telegram Bot API server sendiri.
  • Message Format: pilihan Plain Text, HTML, atau MarkdownV2 untuk format pesan yang dikirim.
  • Send Silently dan Protect Content: opsi tambahan untuk mengirim pesan tanpa bunyi notifikasi, atau mencegah pesan di-forward/disalin oleh penerima.

7.2 Notifikasi via Discord

  • Discord Webhook URL: didapat dari pengaturan channel Discord tujuan, lewat menu Integrations > Webhooks.
  • Bot Display Name: nama yang tampil sebagai pengirim pesan di Discord, defaultnya memakai nama aplikasi.
  • Select message type: menentukan pesan dikirim ke channel biasa (Send to channel), dibuatkan forum post baru, atau dikirim ke thread yang sudah ada. Dua opsi terakhir memunculkan field tambahan untuk nama forum post atau ID thread.
  • Message Format: Normal (tampilan embed lengkap), Minimalist (teks polos ringkas), atau Custom (memakai Message Template sendiri).
  • Prefix Custom Message: teks tambahan di awal pesan, misalnya untuk mention role tertentu seperti @everyone.
  • Disable URL in Notification dan Suppress Notifications: masing-masing untuk menyembunyikan URL monitor di pesan, dan menekan push notification di sisi penerima.

Format Normal membuat notifikasi yang masuk ke Discord tampil sebagai embed berwarna merah dengan judul "Your service [nama monitor] went down" saat status down, dan berwarna hijau dengan judul "Your service [nama monitor] is up!" saat status kembali normal.

7.3 Notifikasi via Email SMTP

  • Hostname dan Port: alamat server SMTP yang dipakai untuk mengirim email, misalnya server SMTP dari penyedia email atau localhost kalau memakai mail transfer agent yang berjalan lokal di server yang sama.
  • Security: pilihan None atau TLS. Kalau memilih None, muncul opsi tambahan Disable STARTTLS untuk menonaktifkan upaya enkripsi opportunistic STARTTLS.
  • Ignore TLS Error: berguna kalau server SMTP memakai sertifikat self-signed yang belum tervalidasi certificate authority resmi.
  • Username dan Password: kredensial autentikasi ke server SMTP.
  • From Email dan To Email: alamat pengirim dan penerima, To Email bisa diisi lebih dari satu alamat dipisah koma. Field CC dan BCC tersedia sebagai opsional.
  • Custom Subject dan Custom Body: kalau dikosongkan, Uptime Kuma memakai subjek dan isi email default. Ada juga checkbox untuk mengaktifkan format HTML pada isi email kustom.

Untuk kebutuhan yang lebih lanjut, tersedia juga pengaturan Additional Headers (header email tambahan dalam format JSON) dan bagian DKIM Settings (domain, key selector, private key, hingga algoritma hash) bagi Sysadmin yang perlu menandatangani email secara DKIM supaya tidak masuk folder spam di sisi penerima.

Alur penyelesaiannya sama untuk semua provider: isi field yang diperlukan, klik Test untuk memastikan notifikasi terkirim, lalu klik Save. Kalau Apply on all existing monitors tidak dicentang, notifikasi masih bisa dihubungkan belakangan lewat halaman edit monitor.

8. Membuat Status Page Publik

Status page adalah halaman publik yang menampilkan kondisi layanan secara real-time, tanpa perlu User atau Client login ke dashboard admin, berguna saat insiden supaya tim support tidak kebanjiran pertanyaan yang sama.

  1. Buka menu Status Pages, lalu klik New Status Page.
  2. Beri nama dan slug URL untuk halaman tersebut.
  3. Drag monitor yang ingin ditampilkan ke dalam grup yang diinginkan, misalnya "Website" atau "API".
  4. Klik Save untuk mempublikasikan. Halaman bisa memakai domain custom atau subdomain bawaan Uptime Kuma.

9. Mengamankan Uptime Kuma dengan Reverse Proxy dan SSL

Mengekspos port 3001 tanpa HTTPS berisiko: kredensial login bisa disadap Attacker lewat man-in-the-middle. Solusinya, taruh Uptime Kuma di belakang reverse proxy yang menangani SSL, misalnya Nginx atau Caddy.

  1. Arahkan domain/subdomain (A record) ke IP VPS. Catatan: Uptime Kuma tidak mendukung subdirectory seperti http://contoh-domain.com/uptimekuma, wajib pakai domain atau subdomain khusus.
  2. Konfigurasi reverse proxy, contoh dasar dengan Nginx:
    server {
        listen 80;
        server_name status.contoh-domain.com;
    
        location / {
            proxy_pass http://127.0.0.1:3001;
            proxy_http_version 1.1;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    }
    Header Upgrade/Connection dan proxy_http_version 1.1 wajib ada karena dashboard memakai WebSocket untuk update real-time; tanpa keduanya dashboard akan tampak "macet".
  3. Kalau port 3001 dibind ke localhost (bagian 4.1), aktifkan Trust Proxy di Settings > Reverse Proxy > HTTP HeadersYes, supaya Uptime Kuma membaca IP asli Visitor dari header X-Forwarded-For. Hanya aktifkan kalau dashboard benar-benar tidak bisa diakses langsung dari internet, karena kalau masih bisa, header ini bisa dipalsukan Attacker.
  4. Terbitkan sertifikat SSL lewat Let's Encrypt, manual dengan Certbot, atau otomatis lewat Nginx Proxy Manager/Caddy.

10. Update dan Backup Uptime Kuma

Uptime Kuma cukup aktif merilis update, jadi ada baiknya Sysadmin tahu cara memperbaruinya dengan aman tanpa kehilangan data monitor yang sudah dikonfigurasi.

Update lewat Docker Compose (kalau instalasi memakai metode 4.2):

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

Perintah pull mengunduh image versi terbaru, lalu up -d --force-recreate membuat ulang container dengan image baru tanpa menghapus volume data.

Update lewat docker run manual (kalau instalasi memakai metode 4.1):

docker pull louislam/uptime-kuma:2
docker stop uptime-kuma
docker rm uptime-kuma

Setelah container lama dihapus, jalankan lagi perintah docker run yang sama seperti di bagian 4.1. Karena volume uptime-kuma tidak ikut terhapus saat container dihapus, seluruh data monitor akan tetap utuh di container baru.

Backup data. Seluruh data Uptime Kuma tersimpan di /app/data, backup seluruh folder ini (bukan cuma file SQLite-nya), karena di dalamnya juga ada file konfigurasi dan sertifikat lain. Jalankan container sementara yang meminjam volume dari uptime-kuma, lalu arsipkan isinya ke direktori host:

docker run --rm --volumes-from uptime-kuma -v $(pwd):/backup alpine tar czf /backup/uptime-kuma-backup.tar.gz /app/data

Kalau instalasi memakai Docker Compose dengan bind mount ./data, cara paling sederhana justru langsung mengarsipkan foldernya lewat tar czf uptime-kuma-backup.tar.gz ./data tanpa perlu container tambahan.

Simpan file backup ini di tempat terpisah dari VPS utama, misalnya object storage atau server backup lain, supaya tetap aman kalau VPS utama bermasalah.

Troubleshooting umum:

  • Port sudah dipakai (port is already allocated): ganti pemetaan port host, misalnya 3002:3001, lalu akses dashboard lewat port baru tersebut.
  • Container langsung berhenti setelah start: cek log container dengan docker logs uptime-kuma untuk melihat pesan error detailnya.
  • Dashboard tidak update real-time di belakang reverse proxy: pastikan konfigurasi WebSocket (header Upgrade dan Connection) sudah benar seperti dijelaskan di bagian 9.

11. Kesimpulan

Uptime Kuma memberi Sysadmin cara memantau website dan VPS tanpa biaya langganan bulanan, sekaligus menjaga data monitoring tetap berada di server sendiri. Lewat Docker, proses instalasi, update, dan backup-nya jadi jauh lebih sederhana dibanding instalasi manual di sistem operasi.

Langkah selanjutnya yang bisa dicoba: tambahkan lebih banyak monitor untuk service kritis lain, atur grup notifikasi berdasarkan tingkat urgensi, dan bagikan status page ke tim atau Client supaya semua orang punya visibilitas yang sama soal kondisi layanan.

12. FAQ Seputar Uptime Kuma

Apakah Uptime Kuma Gratis Selamanya?

Ya. Uptime Kuma adalah proyek open source di bawah lisensi MIT, jadi bisa dipakai, dimodifikasi, dan di-deploy sendiri tanpa biaya lisensi apa pun. Biaya yang mungkin timbul hanyalah biaya VPS tempat Uptime Kuma di-hosting.

Berapa Banyak Website yang Bisa Dipantau Sekaligus?

Tidak ada batas jumlah monitor dari sisi aplikasi. Batasannya lebih ke kapasitas resource VPS, terutama kalau interval pengecekan diatur sangat singkat pada banyak monitor sekaligus.

Apa Beda Uptime Kuma dengan UptimeRobot?

UptimeRobot adalah layanan SaaS berbayar (dengan tier gratis terbatas) yang datanya dikelola pihak ketiga. Uptime Kuma sebaliknya bersifat self-hosted, sehingga Sysadmin punya kendali

Berhasil konfigurasi dalam hitungan menit? Kirimkan apresiasi Anda untuk riset dan waktu yang kami dedikasikan di sini.

Beri Apresiasi

Related Posts