# Review Helipod: Deploy Next.js di PaaS Indonesia

> Review Helipod berbasis dokumentasi dan hitungan: bagaimana Helipack membangun repository Next.js tanpa Dockerfile, berapa biaya sebenarnya dalam Rupiah lewat QRIS, dan workload yang tetap saya taruh di VPS sendiri.

URL: https://www.matthewswong.com/id/blog/helipod-paas-indonesia-nextjs-deploy/

- Author: Matthews Wong (https://www.matthewswong.com/id/about/)
- Published: 2026-09-01
- Updated: 2026-10-12
- Category: Cloud

> **Key takeaway:** Helipod adalah Platform-as-a-Service Indonesia yang membangun repository Next.js menjadi container tanpa Dockerfile, menagih dalam Rupiah lewat QRIS alih-alih kartu kredit internasional, dan memberi subdomain helipod.app gratis lengkap dengan SSL. Plan yang dipublikasikan mulai Rp 123.750 per bulan, dan batas per pod yang didokumentasikan adalah empat vCPU.

Yang menentukan pilihan hosting di Indonesia jarang soal fitur. Yang menentukan adalah apakah kamu bisa membayarnya. Developer yang cuma punya kartu debit BCA dan saldo GoPay tidak bisa mendaftar di sebagian besar platform yang membuat deploy Next.js terasa menyenangkan, karena platform itu meminta kartu kredit internasional dan menagih dalam Dollar. Helipod dibangun untuk menjawab pertanyaan itu dengan satu QR code.

Ini review berbasis dokumentasi dan hitungan, bukan laporan operasional enam bulan. Saya membaca halaman pricing Helipod, halaman fitur Helipack, dan panduan deploy mereka sendiri, mencocokkan angka-angka yang dipublikasikan satu sama lain, lalu memeriksa perilaku Next.js yang mereka jelaskan terhadap dokumentasi Next.js. Kalau sebuah klaim datang dari Helipod dan bukan dari saya, akan saya sebutkan.

## Apa itu Helipod di balik dashboard-nya

Helipod adalah control plane Kubernetes terkelola yang dibungkus sebuah deployment dashboard, dan artikel pengantar mereka sendiri menyebutnya persis seperti itu: aplikasimu berjalan di cluster yang dikonfigurasi dan dioperasikan tim Helipod. Ingress, TLS, health check, restart policy, dan image registry sudah diputuskan untukmu. Perusahaannya terdaftar di Jakarta, dan platform ini mencantumkan Indonesia, Singapura, Malaysia, Thailand, Filipina, Vietnam, dan India sebagai wilayah yang dilayani. Deploy pertama kurang lebih seperti ini:

1. Buat project, pilih GitHub atau GitLab, lalu tentukan repository dan branch-nya.
2. Helipack memindai repository, membaca package.json dan lock file, lalu menyebutkan framework yang ditemukannya.
3. Isi environment variables di tab Variables, atau tekan Deploy Now dan isi belakangan.
4. Helipod membangun image, push ke internal registry, dan merilisnya di balik sebuah health check.
5. Buka project canvas dan ambil URL-nya, yaitu nama project kamu di bawah helipod.app dengan SSL yang sudah valid.

Tidak ada satu pun command di daftar itu, dan di situlah seluruh nilai jualnya. Tapi perlu jujur soal apa yang sebenarnya hilang: bukan Docker, karena Docker tetap ada, melainkan bagian di mana kamu menulis Dockerfile, menjaga certbot tetap memperbarui sertifikat, dan mengingat server block nginx mana yang memegang port 3000.

## Helipack menulis Dockerfile yang tidak kamu tulis

Helipack adalah build engine internal Helipod dan bagian paling menarik dari platform ini. Ia mendeteksi framework dari package.json, composer.json, requirements.txt, go.mod, dan file config, menentukan package manager dari lock file — npm, yarn, pnpm, atau bun — lalu menghasilkan Dockerfile multi-stage. Untuk repository Next.js, ia menambal config Next.js kamu supaya memakai standalone output mode kalau kamu belum menyetelnya sendiri, baru kemudian build. Helipod mempublikasikan Dockerfile hasil generate-nya, dan itu tidak biasa dalam arti yang baik, jadi layak dibaca perlahan:

Dua baris di file itu lebih penting daripada sisanya. Build secret yang di-mount di /app/.env adalah cara Variables dari dashboard sampai ke next build tanpa tersimpan di image layer, dan itu cara yang benar. Lalu stage runner hanya membawa tiga hal: standalone output, folder static, dan public. Dokumentasi Next.js menjelaskan bentuk yang sama — standalone menghasilkan folder yang bisa jalan tanpa install node_modules, ditambah server.js minimal, dan menegaskan bahwa public serta folder static tidak ikut ter-copy otomatis karena CDN yang diharapkan menyajikannya. Helipack meng-copy keduanya untukmu.

Yang terdeteksi adalah Node.js, PHP, Python, dan Go: Next.js, Nuxt, Remix, Astro, Express, dan NestJS; Laravel dan Symfony; Django, FastAPI, dan Flask; Gin dan Echo. Rust, Ruby, dan Java tidak terdeteksi sama sekali, dan FAQ Helipod sendiri menyuruh kamu membawa Dockerfile sendiri untuk ketiganya. Itu jawaban yang jujur, tapi artinya janji zero config punya batas bahasa, dan sebaiknya kamu pastikan berada di sisi mana sebelum merencanakan migrasi.

## Variable build-time yang disembunyikan dashboard runtime

Ini jebakannya, dan ini bukan kesalahan Helipod. Sebuah deployment dashboard menampilkan environment variables seolah-olah semuanya setelan runtime: satu tab, satu kolom teks, tombol Save, tombol Restart. Next.js tidak memperlakukan semuanya begitu. Variable dengan prefix NEXT_PUBLIC_ di-inline ke dalam JavaScript bundle saat next build berjalan, jadi nilai yang diterima browser sudah dibekukan pada saat build dan tidak lagi hidup di environment.

> Dokumentasi Next.js menyebutnya terang-terangan: setelah di-build, aplikasimu tidak akan lagi merespons perubahan pada environment variable tersebut. Mengubah nilai NEXT_PUBLIC_ di tab Variables lalu restart pod tidak mengubah apa pun, karena nilai lamanya sudah ikut ter-compile ke bundle yang kamu sajikan. Yang kamu butuhkan adalah build baru, yang di Helipod berarti redeploy. Set semua variable build-time sebelum deploy pertama, dan perlakukan perubahannya sebagai perubahan kode.

Kegagalan yang berkaitan sudah didokumentasikan Helipod dan sebaiknya kamu tahu sebelum mengalaminya. Helipack menambal config kamu untuk menambahkan standalone output, dan pada file config yang terlalu kompleks untuk ditambal ia menyerah dengan error yang bilang standalone tidak ditemukan. Solusinya adalah menyetelnya sendiri lalu commit — dan itu memang yang akan saya lakukan sejak deploy pertama, karena build yang bergantung pada regex orang lain menulis ulang config saya adalah build yang tidak bisa saya reproduksi di local.

## helipack.json adalah escape hatch yang perlu dipelajari lebih dulu

Zero config itu default yang bagus dan plafon yang buruk. Escape hatch-nya satu file, helipack.json, di root repository, dan setiap key di dalamnya menimpa default Helipack. Ini hampir seluruh permukaan yang perlu kamu tahu untuk sebuah service Node:

Tiga key di antaranya punya sisi tajam. run.before itu gerbang, bukan saran: kalau command-nya keluar dengan exit code bukan nol, deployment dinyatakan gagal dan pod tidak pernah jalan, jadi langkah yang wajar saja gagal perlu ditambahi || true secara eksplisit. health.duration adalah masa tenggang sebelum health check dimulai dan default-nya 15 detik, yang tidak cukup untuk cold start yang menghangatkan cache atau memuat model — naikkan, atau pod kamu akan di-restart terus tanpa kamu sadari. Lalu build.dockerfile memungkinkan kamu menunjuk Dockerfile sendiri dan mematikan proses generate sepenuhnya, dan itulah jalan keluar kalau deteksi otomatisnya sudah tidak cukup. Kalau satu nilai disetel di lebih dari satu tempat, urutannya begini:

Variables yang disetel di dashboard, yang menang mutlak.

Blok env di helipack.json, yang ikut ter-commit ke repository dan karena itu tidak boleh menyimpan secret.

Default Helipack per framework, yang berlaku kalau tidak ada yang menimpanya.

Urutan itu berguna, bukan kebetulan. Kamu bisa commit default development yang wajar berdampingan dengan kode, lalu menimpa hanya nilai production di dashboard, tanpa file config kedua dan tanpa percabangan di dalam aplikasi.

*Perhatikan bahwa hanya band paling bawah yang berisi keputusan yang bisa salah. Semua di atasnya berjalan tanpa konfigurasi, jadi satu hal yang harus kamu pastikan sebelum menekan deploy adalah variable mana yang perlu dilihat oleh proses build itu sendiri.*

## Harga Rupiah, dan hitungan di belakang plan-nya

Harga dipublikasikan dalam Rupiah dan dihitung harian, dan plan-plan itu adalah tarif yang sama dijual dalam paket tiga puluh hari. Kolom yang paling penting justru yang terakhir, karena angka vCPU dan RAM sebuah plan adalah kuota bersama yang dibagi ke pod-pod kamu, sementara satu pod dibatasi empat vCPU, delapan GB RAM, dan tiga puluh GB storage — dengan ukuran container image ikut dihitung di dalam storage itu.

| Plan | Harga normal per bulan | vCPU / RAM bersama | Storage dan custom domain |
| --- | --- | --- | --- |
| Nano | Rp 123.750 | 1 vCPU / 1 GB | 15 GB, 2 domain |
| Micro | Rp 250.500 | 2 vCPU / 2 GB | 30 GB, 5 domain |
| Starter | Rp 672.000 | 5,5 vCPU / 5,5 GB | 80 GB, 10 domain |
| Pro | Rp 1.366.500 | 11 vCPU / 11 GB | 170 GB, 20 domain |
| Business | Rp 2.785.500 | 22 vCPU / 22 GB | 350 GB, 50 domain |

Tarif harian yang dipublikasikan di sebelah plan-plan itu adalah Rp 150 per 0,125 vCPU, Rp 200 per 128 MB RAM, Rp 75 per GB storage, dan Rp 100 per custom domain. Kalikan Nano — delapan unit CPU, delapan unit RAM, lima belas GB, dua domain — dan hasilnya Rp 4.125 per hari, yang tepat Rp 123.750 untuk tiga puluh hari. Hitungan yang sama juga jatuh persis pada angka publikasi Micro dan Starter. Jadi plan bukan diskon atas pay-as-you-go: plan adalah tiga puluh hari pay-as-you-go dengan tarif identik. Saat saya melihat, situsnya juga sedang memasang potongan setengah harga untuk paket satu bulan, dan itu promo, bukan harga normal — tabel di atas adalah harga normal.

Penagihannya berupa saldo prabayar, bukan invoice. Kamu top up dari panel billing lewat QRIS, transfer bank, virtual account, atau e-wallet langsung, mulai dari Rp 10.000, QR code-nya kedaluwarsa setelah sepuluh menit, dan saldonya dipotong setiap hari. QRIS adalah fakta yang membuat platform ini relevan: satu standar QR nasional yang diterima semua wallet dan bank di Indonesia berarti GoPay, OVO, Dana, atau ShopeePay sudah cukup, tanpa kartu dan tanpa kurs yang harus kamu jelaskan ke bagian keuangan. Konsekuensinya, top up jadi bagian dari urusan uptime. Tidak ada dokumen yang saya baca menjelaskan apa yang terjadi pada pod yang sedang jalan ketika saldo habis, jadi saya lebih memilih menyisakan buffer beberapa minggu dan satu reminder di kalender daripada mengetahuinya secara empiris.

## Yang tidak bisa saya konfirmasi, dan soal region

Ini bagian yang tidak akan diberitahu halaman vendor, jadi saya tulis di sini. Empat hal tentang Helipod masih belum jelas setelah saya membaca semua yang mereka publikasikan:

- Di mana pod kamu benar-benar berjalan. Halaman utamanya memasang bendera Indonesia dan perusahaannya ada di Jakarta, dan halaman pricing Helipod menawarkan produk VPS terpisah di Jakarta, Singapura, atau Jerman, tapi tidak menyebut region untuk container aplikasi. Tabel perbandingan Helipod sendiri di artikel pengantar mereka tanggal 28 April 2026 menandai server di Indonesia sebagai coming soon, dan artikel perbandingan mereka pada Mei 2026 menyebut aplikasi saat itu hanya berjalan di Jerman, dengan Indonesia dan Singapura masih menyusul. Jadi latency ke pengguna Indonesia adalah sesuatu yang harus diukur, bukan diasumsikan.
- Angka mana yang masih berlaku. Halaman pricing dan artikel-artikel marketing saling bertentangan: artikel pengantarnya masih memuat nama plan yang sudah tidak ada di halaman pricing, menyebut storage gratis padahal halaman pricing menagih Rp 75 per GB per hari, dan menulis batas enam vCPU per pod padahal halaman pricing menyebut empat. Anggap halaman pricing sebagai acuan dan blog-nya sebagai catatan sejarah.
- Sedalam apa dokumentasinya. Sitemap docs-nya memuat enam belas halaman. Isinya menjelaskan konsep, deployment, health check, dan production readiness dengan cukup baik, tapi tidak ada bagian reference — tidak ada daftar environment variable yang lengkap, tidak ada referensi command CLI, tidak ada halaman region. Materi teknis paling detail justru ada di blog marketing, dan itu tempat yang aneh untuk menyimpan sebuah schema.
- Bagaimana perilakunya di bawah beban. Helipod menyebut build project ukuran sedang selesai dalam tiga sampai lima menit dan HPA menaikkan jumlah pod berdasarkan CPU. Keduanya masuk akal, dan keduanya bukan hasil pengukuran saya, jadi keduanya tidak layak masuk ke rencana kapasitasmu sebagai angka.

> Sebelum menitipkan apa pun ke platform yang tidak memublikasikan region untuk container aplikasinya, deploy satu pod hello-world dan ukur dari jaringan yang benar-benar dipakai pengguna kamu. Time to first byte dari HP dengan data seluler di Surabaya adalah angka yang penting, dan tesnya cuma lima menit tapi umurnya lebih panjang daripada klaim marketing mana pun soal kedekatan lokasi.

## Workload yang tetap saya taruh di VPS sendiri

Batas yang jujur bukan soal kemampuan, tapi soal siapa yang memegang pager. Di platform terkelola, kamu menukar kemampuan memperbaiki sendiri dengan kenyamanan tidak perlu memperbaiki. Empat jenis workload yang tidak akan saya tukar seperti itu:

- Database yang harus kamu tuning. Helipod bisa menjalankan PostgreSQL, MySQL, MongoDB, atau Redis sebagai service, dan untuk side project itu sudah cukup. Tapi untuk apa pun yang menuntut kamu mengubah shared_buffers, menjadwalkan vacuum window, atau me-restore base backup di bawah tekanan waktu, kamu butuh akses ke host-nya.
- Apa pun yang butuh mesinnya sendiri. Sebuah container tidak punya systemd, tidak punya kernel module, tidak punya firewall milikmu, dan tidak punya crontab di host. Scheduled job memang tersedia sebagai tipe service, tapi workload yang mengasumsikan sebuah mesin memang butuh sebuah mesin.
- Pekerjaan yang berbentuk storage. Filesystem runtime-nya ephemeral secara default dan persistent volume harus diminta eksplisit, di dalam plafon storage per pod yang juga menghitung image. Apa pun yang tumbuh — upload pengguna, PDF hasil generate, cache media — sebaiknya duduk di object storage sebelum duduk di pod.
- Apa pun yang tidak boleh bergantung pada saldo prabayar. Sistem production yang dipakai klien tapi ketersediaannya terikat pada top up yang harus diingat seseorang adalah risiko yang kamu pilih atas nama klien, dan mereka berhak diberi tahu.

Untuk sisanya — front end Next.js, sebuah API, environment staging, preview per branch, tool internal yang tidak ada orang mau mengurusnya — pertukarannya menguntungkan, dan alasan untuk memakai VPS makin lemah setiap kali ada sertifikat yang harus diperbarui jam tiga pagi.

Aturan saya setelah membaca semuanya: Helipod adalah jawaban yang tepat ketika kendala utamanya adalah pembayaran atau perhatian, dan jawaban yang salah ketika kendalanya adalah kontrol. Penagihan QRIS dan Dockerfile yang tidak perlu kamu tulis menyelesaikan dua masalah nyata yang tidak diselesaikan platform mana pun yang menagih dalam Dollar bagi developer Indonesia. Pastikan variable build-time selesai sebelum deploy pertama, baca Dockerfile hasil generate Helipack supaya kamu tahu isi image kamu, dan ukur sendiri latency-nya alih-alih percaya pada bendera di landing page.

## Sumber dan bacaan lanjutan

- Harga Helipod — plan dalam Rupiah, tarif harian per resource, dan batas per pod
- Helipod — build engine Helipack, deteksi framework, dan Dockerfile hasil generate
- Helipod — deploy Next.js, Dockerfile hasil generate, dan catatan troubleshooting-nya
- Helipod — referensi lengkap konfigurasi helipack.json
- Dokumentasi Next.js — environment variables dan inlining saat build
- Blog Helipod — Helipod vs Render, termasuk lokasi server aplikasi Helipod saat itu, 13 Mei 2026

*Kolom paling kanan adalah batas jujur dari platform managed mana pun, dan sebaiknya diperiksa sebelum migrasi, bukan sesudahnya.*

## Source links

- https://helipod.io/en/pricing
- https://helipod.io/feature/helipack-engine
- https://helipod.io/blog/cara-deploy-nextjs-ke-helipod
- https://helipod.io/blog/helipack-json-konfigurasi
- https://nextjs.org/docs/app/guides/environment-variables
- https://helipod.io/blog/helipod-vs-render

## FAQ

### Apa itu Helipod, dan apa bedanya dengan menyewa VPS?

Helipod adalah Platform-as-a-Service Indonesia: cluster Kubernetes terkelola yang disajikan sebagai deployment dashboard, dijalankan perusahaan yang terdaftar di Jakarta. Di VPS kamu sendiri yang memasang nginx, menulis Dockerfile, dan memperbarui sertifikat, sementara Helipod mengambil keputusan itu untukmu dan memberi logs, metrics, serta terminal di browser alih-alih SSH. Kamu menukar kemampuan memperbaiki di level host dengan kenyamanan tidak perlu memperbaikinya.

### Bisakah saya deploy aplikasi Next.js ke Helipod tanpa menulis Dockerfile?

Bisa. Helipack, build engine milik Helipod, mendeteksi Next.js dari package.json, menentukan package manager dari lock file, menambal config kamu supaya memakai standalone output mode kalau belum disetel, lalu menghasilkan Dockerfile multi-stage dengan non-root user dan BuildKit build secrets. Helipod mempublikasikan Dockerfile hasil generate-nya, jadi kamu bisa membacanya sebelum mempercayainya. Rust, Ruby, dan Java tidak terdeteksi dan butuh Dockerfile buatanmu sendiri.

### Bisakah saya membayar Helipod dengan QRIS, bukan kartu kredit internasional?

Bisa, dan itu alasan utama platform ini ada. Helipod memakai saldo prabayar dalam Rupiah serta menerima QRIS, transfer bank, virtual account, dan e-wallet langsung, jadi GoPay, OVO, Dana, atau ShopeePay sudah cukup. Top up mulai dari Rp 10.000, QR code-nya kedaluwarsa setelah sepuluh menit, dan saldonya dipotong harian — sehingga top up jadi bagian dari menjaga layanan tetap hidup.

### Berapa biaya Helipod per bulan dalam Rupiah?

Harga normal yang dipublikasikan mulai Rp 123.750 per bulan untuk Nano, yaitu 1 vCPU, 1 GB RAM, 15 GB storage, dan dua custom domain, sampai Rp 2.785.500 untuk Business dengan 22 vCPU dan 22 GB. Plan itu sebenarnya tiga puluh hari tarif pay-as-you-go harian dengan harga identik, bukan diskon atasnya. Promo muncul di situsnya dari waktu ke waktu, jadi baca halaman pricing dan bukan artikel blog yang masih memuat angka lama.

### Kenapa mengubah variable NEXT_PUBLIC_ di Helipod tidak berpengaruh?

Karena Next.js meng-inline setiap variable NEXT_PUBLIC_ ke dalam JavaScript bundle saat next build berjalan, jadi nilai yang diterima browser sudah dibekukan pada saat build dan tidak dibaca dari environment. Dokumentasi Next.js menyatakan bahwa setelah di-build aplikasi tidak lagi merespons perubahan pada variable tersebut. Mengubah nilainya di tab Variables lalu restart pod tidak akan mengubah apa pun; kamu perlu redeploy supaya terjadi build baru.

---

- HTML version: https://www.matthewswong.com/id/blog/helipod-paas-indonesia-nextjs-deploy/
- English: https://www.matthewswong.com/en/blog/helipod-paas-indonesia-nextjs-deploy/
- Site index for agents: https://www.matthewswong.com/llms.txt
- Sitemap: https://www.matthewswong.com/sitemap.xml
- API description (OpenAPI): https://www.matthewswong.com/openapi.json
