Filebrowser-mu tidak bisa dibuka. Nextcloud-mu tidak merespons. Entah sejak kapan — mungkin sejak tadi malam, mungkin sejak tiga jam lalu. Kamu baru tahu sekarang karena kebetulan mau buka file.
Ini bukan masalah besar kalau servermu cuma untuk coba-coba. Tapi kalau kamu sudah mulai bergantung pada layanan self-hosted untuk keperluan sehari-hari — cloud storage pribadi, password manager, atau apapun yang kamu jalankan di rumah — tidak tahu kapan sesuatu mulai bermasalah itu cukup menyebalkan. Masalahnya bukan tidak bisa dicegah, masalahnya adalah kamu tidak punya sistem yang memberitahu ketika ada yang tidak beres.
Uptime Kuma hadir untuk itu. Ini adalah tool monitoring open-source yang bisa kamu host sendiri — tampilannya bersih, modern, mirip Uptime Robot, tapi sepenuhnya berjalan di infrastrukturmu sendiri. Ia akan mengecek URL, port, atau layanan yang kamu daftarkan secara berkala, dan mengirim notifikasi ke Telegram, Discord, email, atau puluhan channel lainnya begitu ada yang tidak beres.
Panduan ini akan membawa kamu dari nol sampai Uptime Kuma berjalan dan bisa diakses dari mana saja melalui https://cek.diaraji.my.id — dengan HTTPS otomatis via Cloudflare Zero Trust, tanpa membuka satu pun port ke internet.
Prasyarat
Sebelum mulai, pastikan kamu punya server Linux yang sudah berjalan — bisa VPS, Raspberry Pi, atau netbook bekas yang sudah dibahas di artikel sebelumnya. Kamu juga butuh domain yang sudah terhubung ke Cloudflare. Sisanya akan diurus bersama di panduan ini.
Bagian 1: Pastikan Docker Sudah Terpasang
Uptime Kuma akan dijalankan lewat Docker, jadi langkah pertama adalah memastikan Docker sudah ada di server. Cek dengan perintah ini:
docker --version
docker compose version
Kalau kedua perintah itu mengembalikan nomor versi, berarti kamu sudah siap — lewati ke Bagian 2. Kalau tidak, ikuti langkah instalasi berikut.
sudo apt update && sudo apt upgrade -y
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
docker --version
docker compose version
Bagian 2: Deploy Uptime Kuma dengan Docker Compose
Buat folder kerja untuk Uptime Kuma. Semua data monitoring, konfigurasi, dan database akan tersimpan di sini — jadi kalau nanti containernya diperbarui atau dihapus, tidak ada data yang ikut hilang.
sudo mkdir -p /opt/uptime-kuma
cd /opt/uptime-kuma
Buat file docker-compose.yaml:
nano docker-compose.yaml
Isi dengan konfigurasi berikut:
version: '3.8'
services:
uptime-kuma:
image: louislam/uptime-kuma:1
restart: always
mem_limit: 256m
memswap_limit: 256m
ports:
- "3001:3001"
volumes:
- ./data:/app/data
environment:
- TZ=Asia/Jakarta
Simpan file (Ctrl+X → Y → Enter).
Satu hal yang perlu dipahami dari konfigurasi ini: ./data:/app/data bukan sekadar volume biasa. Folder data/ di direktori lokal inilah yang menyimpan seluruh database monitor, history, dan pengaturan Uptime Kuma. Artinya kamu bisa memperbarui container ke versi terbaru kapan saja tanpa khawatir kehilangan semua konfigurasi yang sudah dibangun. Semua aman di server kamu, bukan di dalam container.
mem_limit: 256m membatasi penggunaan RAM agar tidak rakus di server yang berbagi sumber daya dengan layanan lain. Untuk memantau puluhan hingga ratusan endpoint, 256 MB sudah lebih dari cukup.
Sekarang jalankan:
docker compose up -d
Cek statusnya:
docker compose ps
Kalau outputnya menunjukkan status (healthy), Uptime Kuma sudah berjalan di port 3001. Kamu bisa mengaksesnya secara lokal di http://localhost:3001 dari server. Tapi tentu saja tujuan kita lebih jauh dari itu.
Bagian 3: Akses dari Mana Saja via Cloudflare Zero Trust
Ini bagian yang membuat setup ini berbeda. Alih-alih membuka port ke internet langsung — yang berarti server kamu jadi target tembak siapa pun — kita menggunakan Cloudflare Tunnel.
Cara kerjanya terbalik dari biasanya. Server kamu yang membangun koneksi keluar ke Cloudflare, bukan Cloudflare yang masuk ke servermu. Hasilnya: tidak ada port yang perlu dibuka, tidak ada IP publik yang perlu dikonfigurasi, dan traffic sudah terlindungi DDoS protection Cloudflare secara gratis.
Kamu (Browser)
│
▼
Cloudflare Zero Trust Tunnel
│ (koneksi terenkripsi, tanpa buka port)
▼
Server kamu
│ localhost:3001
▼
Uptime Kuma (Docker Container)
Langkah 3.1 — Install cloudflared di Server
curl -L –output cloudflared.deb \
https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared.deb
Langkah 3.2 — Buat Tunnel di Dashboard Cloudflare
Buka one.dash.cloudflare.com, masuk ke menu Networks → Tunnels, lalu klik Create a tunnel. Pilih Cloudflared sebagai tipe konektor, beri nama tunnel — misalnya server-rumah — lalu klik Save tunnel.
Cloudflare akan menampilkan sebuah perintah instalasi dengan token unik milik tunnel kamu. Salin perintah itu dan jalankan di server:
Perintah ini mendaftarkan cloudflared sebagai service systemd, sehingga tunnel otomatis aktif kembali setiap kali server reboot. Pastikan statusnya berjalan:
sudo systemctl status cloudflared
Langkah 3.3 — Hubungkan Domain ke Uptime Kuma
Kembali ke dashboard Cloudflare. Setelah konektor menunjukkan status aktif (titik hijau), lanjut ke tab Public Hostname dan klik Add a public hostname.
Isi konfigurasinya seperti ini:
Subdomain: cek
Domain: diaraji.my.id
Type: HTTP
URL: localhost:3001
Klik Save hostname. Cloudflare otomatis membuat DNS record untuk cek.diaraji.my.id — tidak perlu konfigurasi DNS manual sama sekali.
Langkah 3.4 — Buka dan Verifikasi
Tunggu beberapa detik, lalu buka browser dan akses:
Uptime Kuma seharusnya sudah terbuka dengan HTTPS dan certificate valid dari Cloudflare. Selamat datang di halaman setup pertamamu.
Bagian 4: Setup Awal dan Tambahkan Monitor Pertamamu
Saat pertama kali membuka Uptime Kuma, kamu akan diminta membuat akun admin. Ini bukan akun Cloudflare atau akun apa pun — ini akun lokal yang tersimpan di database di servermu sendiri. Isi username dan password yang kuat, lalu klik Create.
Setelah login, dashboard kosong menunggumu. Klik Add New Monitor untuk menambahkan layanan pertama yang ingin dipantau. Pilihannya cukup lengkap: HTTP/HTTPS untuk memantau URL, TCP Port untuk mengecek port tertentu, Ping untuk server yang tidak punya web interface, DNS, sampai monitoring database.
Untuk sebagian besar kebutuhan, pilih HTTP(s), masukkan URL-nya, atur interval pengecekan (default 60 detik sudah cukup), lalu simpan. Uptime Kuma langsung mulai mengecek dari detik pertama.
Jangan lupa setup notifikasi — ini justru inti dari Uptime Kuma. Kalau tidak ada notifikasi, kamu tetap harus buka dashboard manual untuk tahu ada yang down, sama saja bohong.
Masuk ke Settings → Notifications → Add Contact. Pilih Discord sebagai tipe notifikasi.
Yang dibutuhkan cuma satu: Webhook URL dari server Discord kamu. Cara bikinnya: buka server Discord → pilih channel yang mau dipakai untuk notifikasi (bisa bikin channel baru khusus, misalnya #server-alert) → klik ikon roda gigi di sebelah nama channel → Integrations → Webhooks → New Webhook → Copy Webhook URL.
Paste URL itu ke kolom Discord Webhook URL di Uptime Kuma, beri nama notifikasinya, lalu klik Test. Kalau berhasil, pesan test akan langsung muncul di channel Discord-mu. Klik Save.
Setelah notifikasi tersimpan, setiap monitor yang kamu buat bisa dihubungkan ke notifikasi ini. Begitu ada layanan yang down — atau kembali online — Uptime Kuma langsung kirim pesan ke channel Discord-mu secara otomatis.
Perintah Sehari-hari
Untuk melihat log secara real-time, misalnya ketika ingin debug kenapa ada monitor yang bermasalah:
cd /opt/uptime-kuma
docker compose logs -f
Untuk memperbarui Uptime Kuma ke versi terbaru tanpa kehilangan data apapun:
docker compose pull
docker compose up -d
Data tetap aman karena semua tersimpan di folder ./data di luar container.
Keamanan Tambahan: Batasi Siapa yang Bisa Membuka Dashboard
Secara default, siapa pun yang tahu alamat cek.diaraji.my.id bisa membuka halaman login Uptime Kuma-mu. Ini aman selama kamu pakai password yang kuat, tapi kalau ingin lapisan keamanan ekstra, Cloudflare Access bisa dikonfigurasi sebagai “penjaga pintu” sebelum halaman login bahkan muncul.
Di dashboard Cloudflare Zero Trust, buka Access → Applications → Add an Application, pilih Self-hosted, arahkan ke cek.diaraji.my.id, lalu buat policy — misalnya hanya email tertentu yang diizinkan masuk. Siapa pun yang tidak ada di daftar policy itu akan mendapat halaman penolakan, bukan halaman login.
Penutup
Monitoring bukan kemewahan. Ini hal pertama yang seharusnya berjalan ketika kamu mulai self-hosting — bukan yang terakhir dipasang setelah ada insiden.
Dengan setup ini, kamu punya sistem yang diam-diam bekerja di latar belakang, mengecek setiap layanan yang kamu daftarkan setiap menit, dan akan langsung bersuara ketika ada yang tidak beres. Tidak ada dashboard yang perlu dibuka secara manual. Tidak ada tagihan bulanan tambahan. Tidak ada data monitoring yang dikirim ke layanan pihak ketiga.
Server jalan, Uptime Kuma jalan, Cloudflare Tunnel jalan — dan kamu bisa tidur tenang malam ini.
