PaaS vs VPS di Indonesia: Rincian Biaya IDR yang Jujur

Foto oleh Jonny-mt via Wikimedia Commons (CC BY 3.0)
Dari sisi invoice, ya, dan selisihnya lebar: tier setara 2 vCPU dan 2 GB tercantum Rp 250,500 per bulan di Helipod melawan sekitar Rp 60,000 untuk VPS Jakarta yang saya jalankan. Tetapi invoice bukan keseluruhan biaya, karena harga VPS tidak mencakup patching OS, renewal TLS, backup yang diuji restore, monitoring, dan on-call. Di box saya sendiri semua itu berjumlah sekitar empat setengah jam per bulan plus dua atau tiga interupsi tak terjadwal per kuartal.
Untuk satu box production kecil yang saya kelola, sekitar empat setengah jam kerja terjadwal per bulan: kira-kira satu jam untuk patching dan reboot kernel, setengah jam memastikan renewal TLS, dua jam untuk backup dan restore drill, dan satu jam untuk stack monitoring. Di atas itu masih ada dua sampai tiga interupsi tak terjadwal per kuartal. Ini angka orang pertama dari satu mesin, bukan benchmark, dan milik Anda akan berbeda tergantung stack yang dijalankan.
Ketika tidak ada seorang pun di tim yang mau memiliki sebuah Linux host, ketika traffic naik-turun tajam sehingga butuh scaling horizontal, atau ketika Anda butuh beberapa environment dengan config dan secret terpisah. VPS yang tidak dirawat bukan VPS yang lebih murah, jadi kalau jam perawatannya toh tidak akan diluangkan, tier managed sedang membeli pekerjaan itu, bukan menagih biaya premium. Banyak environment juga mengalikan sisi VPS dari perbandingan ini.
Semuanya kecuali kapasitas. Invoice membeli CPU, RAM, disk, dan bandwidth; ia tidak membeli patching operating system dan reboot kernel, timer certbot beserta kegagalan senyapnya, backup yang harus Anda ambil sekaligus uji restore, monitoring dan alerting yang Anda pasang sendiri, atau orang yang menjawab alert jam tiga pagi di hari libur nasional. Itulah baris-baris yang dibiarkan kosong oleh perbandingan harga.
Bisa. Halaman harga Helipod mencantumkan QRIS dan bank transfer tanpa perlu credit card, dan menagih dalam rupiah, bukan dolar. Itu menghapus dua failure mode nyata bagi developer Indonesia: kartu ditolak saat renewal di provider luar, dan kejutan nilai tukar pada tagihan bulanan.

Foto oleh Jonny-mt via Wikimedia Commons (CC BY 3.0)
Ringkasan Utama
Membandingkan PaaS managed Indonesia dengan VPS Jakarta hanya dari invoice adalah perbandingan yang salah. Pada spesifikasi sama 2 vCPU dan 2 GB, tier Micro Helipod tercantum Rp 250,500 per bulan melawan sekitar Rp 60,000 untuk milik saya, tetapi invoice VPS tidak mencakup patching, renewal TLS, backup yang diuji, monitoring, dan on-call, sekitar empat jam per bulan.
Pada 28 Juli 2026 monitoring saya sendiri memberi tahu bahwa root disk di box yang melayani situs ini sudah melewati 85 persen. Perbaikannya hanya dua perintah prune yang tidak perlu saya cari lagi, dan justru itu bagian yang tidak nyaman: saya sudah menghafalnya. VPS itu biayanya sekitar enam puluh ribu rupiah per bulan. Platform managed yang terus saya bandingkan dengannya tercantum empat kali lebih mahal, dan sampai pagi itu saya masih memperlakukan dua angka tersebut sebagai keseluruhan perbandingan.
Tulisan ini menaruh angka rupiah yang nyata bersebelahan pada CPU dan RAM yang sama, tier IDR yang dipublikasikan Helipod melawan VPS Jakarta yang benar-benar saya administrasikan, lalu menambahkan kolom yang selalu dihilangkan dari perbandingan harga: pekerjaannya. Saya tidak mengubah jam-jam itu menjadi uang, karena nilai tukar antara rupiah dan hari Sabtu Anda adalah urusan Anda, bukan saya. Jam-jam itu dihitung sebagai jam per bulan dan interupsi per kuartal, dari satu box yang saya jalankan dan satu halaman harga yang saya baca.
Setiap perdebatan PaaS versus VPS yang saya baca berpegang pada invoice bulanan, dan invoice bulanan adalah satu-satunya angka di mana VPS tidak mungkin kalah. Tier Micro Helipod, 2 vCPU dengan RAM 2 GB dan storage 30 GB, tercantum Rp 250,500 per bulan, dan menunjukkan Rp 125,250 dengan promosi 50 persen pada hari saya membuka halaman harganya. Box saya sendiri 2 vCPU dan 2 GB dengan SSD 40 GB, di hardware Tencent region Jakarta, sekitar Rp 60,000. Selisihnya empat kali pada harga normal dan sekitar dua kali selama promosi berjalan.
Padahal invoice adalah tagihan untuk kapasitas, dan kapasitas justru separuh yang murah dari menjalankan software. Separuh yang mahal adalah rangkaian pekerjaan tetap yang menjaga kapasitas itu tetap melayani traffic: patching operating system, renewal certificate, mengambil backup dan membuktikan backup itu bisa direstore, memasang monitoring yang memberi tahu ketika ada yang rusak, dan menjawab alert ketika itu terjadi. Di sisi managed, semuanya sudah termasuk dalam Rp 250,500. Di sisi VPS, semuanya masuk ke dalam minggu Anda, dan itulah sebabnya kolom yang lebih murah adalah kolom yang barisnya hilang.
Inilah pasangan dengan spesifikasi yang disamakan. Kedua kolom 2 vCPU dan 2 GB; spesifikasi kiri berasal dari halaman harga Helipod sendiri dan yang kanan dari box yang saya jalankan. Dua baris pertama adalah perbandingan yang biasa orang buat. Tujuh baris di bawahnya adalah perbandingan yang sesungguhnya menentukan jawabannya.
| Yang Anda bandingkan | Tier PaaS managed, 2 vCPU / 2 GB | VPS Jakarta yang saya kelola |
|---|---|---|
| Spesifikasi yang disamakan | 2 vCPU, RAM 2 GB, storage 30 GB | 2 vCPU, RAM 2 GB, SSD 40 GB |
| Invoice bulanan | Rp 250,500 harga normal, Rp 125,250 dengan promosi 50 persen saat saya cek | Sekitar Rp 60,000, ditagih dalam rupiah, masih ada tier entry di bawahnya |
| Membawa satu release ke production | git push; build engine mendeteksi framework dan membuat Dockerfile sendiri | Dockerfile saya, registry saya, workflow Actions saya, step SSH saya |
| Certificate TLS | Custom domain plus SSL otomatis, disebut cukup satu klik | certbot dan vhost nginx yang saya tulis, plus timer renewal yang saya periksa sendiri |
| Menghadapi lonjakan traffic | HPA Kubernetes menyesuaikan replica terhadap target CPU, sudah termasuk paket | Resize box lalu reboot, atau diam saja dan melayani lonjakan dengan lambat |
| Akses shell | Tanpa SSH; terminal browser ke pod yang berjalan dan log stream langsung | Root penuh, yang sekaligus jadi alasan memilihnya dan alasan ia memakan jam |
| Monitoring dan alerting | Log pod dialirkan ke browser oleh platform | Prometheus, node-exporter, cAdvisor, Grafana, dan Uptime Kuma, saya pasang dan saya upgrade |
| Siapa yang reboot untuk patch kernel | Orang yang tidak akan pernah Anda temui | Anda, pada waktu yang Anda pilih atau waktu yang tidak Anda pilih |
| Kebersihan disk | Storage adalah satu baris dalam paket | Root 40 GB yang termakan sekitar 1.4 GB per release, di-prune manual |
Baca tabel itu dari atas ke bawah dan kolom harganya berbalik. Baris satu dan dua menguntungkan VPS dua sampai empat kali. Baris tiga sampai sembilan seluruhnya pekerjaan, dan tidak satu pun diberi harga di kolom kanan, dan itu bukan berarti gratis. Artinya hanya tagihannya datang dalam mata uang yang tidak dicatat pembukuan Anda.
Tiga hal di invoice itu layak disebut dengan tepat, karena justru itu yang sering dianggap sekadar kenyamanan. Build engine menghilangkan Dockerfile: Helipack mendeteksi framework, dengan Next.js, Laravel, Django, FastAPI, Rails, NestJS, dan Astro di antara yang tercantum, lalu membuat image-nya sendiri. SSL otomatis menghapus certbot sepenuhnya dari hidup Anda. Dan autoscaling di situ bukan kosakata marketing: itu Horizontal Pod Autoscaler Kubernetes, yang menyesuaikan jumlah replica sebuah workload mengikuti target CPU, hal yang berbeda dan lebih berguna daripada me-resize satu box.
# --- Managed PaaS: the entire deploy ---
git push origin main
# The build engine detects the framework and generates the Dockerfile itself.
# Custom domain and TLS are a setting, not a task.
# --- The same release, on a box I own: Actions -> GHCR -> SSH ---
docker build -t ghcr.io/OWNER/app:$GITHUB_SHA .
docker push ghcr.io/OWNER/app:$GITHUB_SHA
ssh deploy@my-vps 'cd /opt/app && docker compose pull && docker compose up -d'
# None of the following is in that script, on the invoice, or in anyone's
# estimate: the nginx vhost that terminates TLS, the certbot timer that
# renews it, the alert rule that notices when it did not, and the 1.4 GB
# image this release just left behind on a 40 GB root disk.Pertukaran dalam snippet itu nyata di kedua arah. Anda kehilangan shell: diagnosa berubah menjadi log stream langsung dan terminal browser ke dalam pod, yang sungguh cukup sampai detik Anda butuh strace pada proses yang macet, sebuah kernel module, atau menyalin 40 GB dari sebuah disk. Sebagai gantinya Anda dapat deploy yang tidak punya host di dalamnya, jadi tidak ada host untuk dilupakan.
Detail harga yang paling penting bagi pembaca Indonesia bukan angka rupiahnya, melainkan kanal pembayarannya: QRIS dan bank transfer, tanpa perlu credit card. Saya pernah melihat deploy tertahan karena kartu ditolak saat renewal di provider luar, dan membayar lewat kanal yang sudah dimiliki setiap orang Indonesia menghapus satu kelas outage yang sama sekali tidak berhubungan dengan engineering.
Ini hitungan jujur saya untuk satu box, dan saya ingin tegas soal jenis angkanya: ini estimasi orang pertama dari satu VPS yang saya kelola, bukan benchmark. Patching memakan sekitar satu jam per bulan, karena unattended-upgrades memasang paket sendiri tetapi kernel baru menganggur sampai saya reboot, dan saya reboot sambil menungguinya. TLS memakan sekitar setengah jam, hampir seluruhnya untuk memastikan bahwa timer yang tidak bisa saya lihat benar-benar jalan. Backup memakan sekitar dua jam, dan hampir semuanya untuk restore drill, bukan untuk dump-nya. Monitoring memakan sekitar satu jam, karena Prometheus, node-exporter, cAdvisor, Grafana, dan Uptime Kuma adalah lima service tambahan dengan upgrade sendiri dan cara mati masing-masing.
Totalnya sekitar empat setengah jam kerja terjadwal per bulan, ditambah dua sampai tiga interupsi tak terjadwal per kuartal, dan interupsi tidak pernah melihat kalender. Kalikan empat setengah dengan nilai satu jam Anda sendiri dan Anda punya jawabannya. Saya sengaja tidak melakukan perkalian itu, karena angka hasilnya bersifat pribadi dan hitungannya adalah satu-satunya bagian yang bisa saya serahkan.

Sebelum memutuskan ke arah mana pun, periksa baris storage pada paket, bukan CPU-nya. Batasan yang benar-benar saya tabrak adalah root 40 GB, bukan RAM 2 GB, dan tier managed yang setara hanya membawa 30 GB, sepuluh lebih sedikit dari box yang jadi pesaingnya. Storage adalah tempat perbandingan CPU yang katanya setara diam-diam berhenti setara.
Dua pelajaran VPS yang mahal bagi saya keduanya kegagalan senyap, dan justru kategori itulah yang paling bisa dihapus platform managed. Yang pertama renewal certificate. Certbot memasang timer-nya sendiri lalu tidak pernah menyebut dirinya lagi, sehingga kondisi sehat dan kondisi rusak tampak sama dari luar selama berminggu-minggu. Sejak Certbot 4.0.0 sebuah certificate direnew ketika sisa masa berlakunya kurang dari sepertiga, sementara sebelumnya ambangnya tetap 30 hari, jadi pada certificate 90 hari default Let's Encrypt ada sekitar sebulan masa tenggang yang bisa habis tanpa ada apa pun di box yang mengeluh.
# Is the renewal timer alive? The certificate cannot tell you.
systemctl list-timers --all | grep -i certbot
# Safe to run any day: it hits Let's Encrypt's STAGING server, so it proves
# the whole plumbing (timer, plugin, webroot, reload hook) without spending
# a rate limit or touching the live certificate.
sudo certbot renew --dry-run
# Since Certbot 4.0.0 a certificate is due for renewal when less than 1/3 of
# its lifetime remains; before 4.0.0 the threshold was a fixed 30 days. On
# Let's Encrypt's default 90-day certificate that is about 30 days of grace.
#
# Wrong: a green padlock today, so the timer must have fired.
# Right: an external check that alerts on DAYS REMAINING, not on HTTP 200 --
# because HTTP 200 is exactly what you get for all 30 days of the grace.Yang kedua disk, dan ini yang sekarang selalu saya peringatkan ke setiap orang yang self-host. Pipeline deploy saya menarik image baru sekitar 1.4 GB per release dan tidak melakukan prune apa pun, di root 40 GB. Hitungannya tidak kenal ampun: dua puluh release berarti 28 GB image untuk satu container yang berjalan. Yang membuatnya lebih parah, perintah yang paling jelas justru tidak berguna, karena image prune biasa hanya menghapus image dangling dan semua image di box itu masih punya tag.
# Disk alert at 85% on a 40 GB root. First, where did it go:
docker system df
# Wrong: this frees almost nothing here. Plain image prune removes only
# DANGLING images, and every stale image on this box is still tagged with
# the release SHA that pushed it.
sudo docker image prune
# Right: -a removes every image with no container attached, and the build
# cache is a separate pool -- "docker system prune" leaves non-dangling
# cache alone, and never removes volumes at all without --volumes.
sudo docker image prune -af
sudo docker builder prune -f
# Outcome: 75% -> 57%, about 7.6 GB back. 3.4 GB of that was build cache and
# 4.3 GB was four stale images of my own app -- one per release that cleaned
# up after itself exactly as well as I had told it to, which was not at all.Jangan pernah menghitung backup yang belum pernah Anda restore. Menulis dump-nya lima belas menit scripting; merestore-nya ke box kosong dan memastikan aplikasi benar-benar hidup di atasnya butuh satu malam, dan hanya versi itu yang berarti. Restore drill adalah pos yang paling sering dilupakan dalam estimasi biaya VPS, dan satu-satunya yang ketiadaannya mengubah sore yang buruk menjadi bisnis yang hilang.
Tulisan ini bukan pembelaan untuk managed hosting. Ada workload yang jawabannya memang box yang Anda kelola sendiri, dan bentuknya punya satu kesamaan: yang dibutuhkan resource, bukan request.
Tim satu atau dua orang tanpa minat mengurus operations adalah kasus paling jelas, dan ini soal bandwidth, bukan soal skill. Empat setengah jam itu tidak sulit; ia hanya jam yang tidak akan pernah diluangkan, dan box yang tidak dirawat bukanlah box yang lebih murah. Kalau tidak ada seorang pun di tim yang mau memiliki sebuah Linux host, kelipatan harga managed itu adalah biaya pekerjaan yang dikerjakan orang yang memang mendaftar untuk itu.
Kasus kedua adalah traffic yang naik-turun tajam, karena replica horizontal terhadap target CPU merespons lonjakan dengan cara yang tidak akan pernah bisa dilakukan resize lalu reboot satu box. Kasus ketiga adalah environment: development, staging, dan production dengan config serta secret terpisah adalah satu hari kerja per environment di VPS dan hanya sebuah setting di platform, dan hal yang sama berlaku untuk role tim seperti owner, admin, dan viewer. Kalau Anda butuh tiga environment, tier managed itu sedang bersaing dengan tiga VPS dan tiga kali jam-jam di atas.

Jadi katakan dengan jujur: tidak ada pemenang, yang ada titik silang, dan titik itu terletak pada ukuran tim serta selera mengurus operations, bukan pada harga mana pun. Di bawah kira-kira satu orang yang benar-benar menikmati menjalankan Linux, tier managed itu murah pada angka apa pun yang mampu Anda bayar. Di atasnya, dengan stack monitoring yang sudah Anda sukai dan runbook yang sudah Anda percayai, VPS jadi murah dalam dua mata uang sekaligus, karena jam yang Anda pakai adalah jam yang toh akan Anda pakai.
Yang saya lakukan dalam praktik: production untuk bisnis orang lain saya taruh di tempat beban operasionalnya jatuh ke orang yang menerimanya, dan barang-barang saya sendiri hidup di box itu. Itu bukan klaim bahwa box lebih baik. Itu klaim bahwa saya adalah orang yang menghafal dua perintah prune tadi, dan hafalan itu baru jadi aset selama masih dipakai.
Aturan yang saya bawa keluar dari ini: jangan pernah membandingkan tier PaaS dengan tier VPS hanya dari harga. Bandingkan invoice ditambah hitungan jam yang jujur, dan tulis hitungan jamnya sebelum Anda punya pendapat, karena setelah itu ia akan menyesuaikan diri. Kalau jamnya mendekati nol karena Anda menikmatinya, VPS memang beberapa kali lebih murah. Kalau itu jam yang sebenarnya tidak ingin Anda keluarkan, tier managed tidak pernah jadi biaya premium; ia adalah harga pekerjaan itu, yang dirinci.
Sumber dan bacaan lanjutan