Anda bisa self host Next.js di VPS dengan image Docker yang memakai keluaran output: 'standalone', lalu menjalankan node server.js di belakang reverse proxy. Skema itu baru lebih hemat daripada platform managed bila beban traffic relatif prediktif.
Namun hemat di sini hanya masuk akal bila Anda memasukkan jam patching, backup, TLS, monitoring, serta desain cache multi-instance ke total biaya. Jangan bandingkan hanya harga VPS per bulan.
Tim produk di Indonesia sering mulai dari deploy otomatis di platform managed. Kemudian mereka mempertimbangkan VPS ketika tagihan usage naik atau data harus tinggal di region tertentu.
Tetapi pindah stack tanpa arsitektur production yang jelas justru menambah insiden. Container hidup sementara aplikasi mati di balik proxy, atau cache antar replika tidak selaras.
Highlight
Self-Host Next.js di VPS dengan Docker Standalone: Kapan Lebih Hemat daripada Platform Hosting?
- Standalone hanya mengemas file runtime; TLS, Nginx, health check, dan backup tetap tanggung jawab Anda.
- Dokumentasi resmi Next.js merekomendasikan reverse proxy (Nginx) agar validasi request tidak membebani proses Node.
- Lebih dari satu container berarti cache lokal terisolasi—butuh handler eksternal atau
use cache: remotebila konsistensi penting. - Health endpoint ringan membedakan liveness dan readiness; lulus probe tidak menggantikan uji checkout atau webhook.
- Streaming App Router butuh proxy yang tidak mem-buffer seluruh respons—header
X-Accel-Buffering: nopada rute terkait. - Perbandingan biaya: bandingkan total cost of ownership (engineer time + insiden) dengan tagihan platform, bukan harga VM saja.
Standalone, Docker, dan Arti Self Host Next.js di VPS

Self-hosting di sini berarti Anda mengontrol OS, runtime Node, proses deploy, dan lapisan di depan aplikasi. Jadi setelah next build dengan opsi standalone, folder .next/standalone berisi server dan dependensi minimal—tanpa membawa seluruh repositori dan node_modules development.
Docker membuat artefak itu portable: build di CI, lalu Anda promosikan image yang sama ke staging dan production dengan variabel lingkungan berbeda. VPS memberikan CPU/RAM tetap; Anda yang menentukan kapan scale vertical atau menambah replika di belakang load balancer.
Bila Anda masih memilih antara stack React full framework dan CMS tradisional, baca dulu perbandingan Next.js dan WordPress untuk website bisnis agar keputusan hosting mengikuti kebutuhan konten, bukan sebaliknya.
Ternyata standalone bukan paket production lengkap. Reverse proxy, TLS, rotasi secret, observability, dan cache antar instance tidak muncul otomatis dari satu baris konfigurasi build.
Arsitektur Production: Nginx, Container, dan Jaringan
Alur umum: internet → (opsional) CDN/WAF → Nginx → satu atau lebih container Next.js → database/API terkelola. Nginx menangani TLS termination, batas ukuran body, rate limiting, dan sometimes static file.
Tugas itu dokumentasi resmi Next.js sarankan offload dari proses Next.js agar CPU fokus ke rendering.
Pada VPS tunggal, Docker Compose sering cukup: service app, service nginx, volume untuk log dan sertifikat, network bridge internal. Meski Kubernetes belum wajib untuk banyak proyek internal, restart policy dan limit memori tetap penting.
Log rotation mencegah disk penuh. Sementara itu, jangan mengekspos port Node langsung ke publik kecuali untuk uji sementara.
Malformed request dan slowloris lebih aman bila proxy menahan laluannya. Jika Anda baru menata mesin virtual, artikel dedicated server vs VPS membantu menilai resource shared untuk SSR dan optimasi gambar.
Build Multi-Stage Docker dan File Statis
Selanjutnya, pola tiga tahap—deps, builder, runtime—memisahkan instal dependensi, kompilasi Next.js, dan image final yang hanya memuat standalone plus artefak statis.
Setelah build, banyak setup perlu menyalin .next/static dan folder public ke path yang server production baca. Cek ulang dokumentasi versi Next.js Anda sebelum mengunci Dockerfile.
Container runtime sebaiknya jalan sebagai user non-root bila image base mendukung, dengan permission volume yang disengaja. Pin versi image Node (hindari tag latest di production), lalu jadwalkan rebuild rutin untuk patch keamanan. Jangan masukkan rahasia ke layer image; pakai env runtime atau secret manager.
Health Check, Streaming, dan next/image

Liveness menjawab apakah proses masih merespons; readiness apakah aplikasi siap menerima traffic (koneksi database sudah OK).
Probe yang memanggil query berat setiap beberapa detik justru membebani DB. Endpoint ringan cukup untuk orchestrator, bukan bukti checkout atau webhook sehat.
App Router mendukung streaming saat self-host. Walau demikian, proxy yang mem-buffer seluruh body merusak manfaat Suspense.
Dokumentasi menunjukkan header X-Accel-Buffering: no pada rute yang Anda stream—not mematikan buffering global tanpa alasan.
Optimasi next/image berjalan di server Node saat memakai next start, tanpa layanan terpisah. Namun fitur itu tetap memakai CPU, RAM, dan ruang cache disk.
Akhirnya, pada VPS kecil lonjakan resize gambar bisa mendekati limit memori (Linux glibc). Nonaktifkan optimasi bawaan bila Anda sudah punya CDN gambar sendiri.
Cache Multi-Instance dan Deploy Rolling
Satu proses next start dengan disk persisten bisa memakai cache filesystem default. Begitu Anda menjalankan beberapa container di belakang Nginx upstream, setiap instance punya cache terisolasi.
ISR dan tag revalidasi di satu pod tidak otomatis tersinkron ke pod lain tanpa strategi bersama.
Kemudian, Next.js mendukung custom cacheHandler, handler untuk directive cache, dan opsi remote cache supaya Anda simpan data di storage bersama. Itu menambah biaya infra dan latency jaringan; Redis atau object store bukan default wajib untuk situs kecil satu replika.
Deploy rolling: naikkan container baru, tunggu health check, alihkan traffic, drain yang lama. Samakan build ID/deployment ID di semua instance agar client tidak meminta aset JavaScript dari versi yang sudah tidak ada.
Next.js memakai mekanisme deployment ID untuk mendeteksi skew versi.
Server Actions across instances membutuhkan kunci enkripsi yang sama (NEXT_SERVER_ACTIONS_ENCRYPTION_KEY saat build). Tanpa itu, request bisa gagal dengan error aksi server antar replika.
Total Biaya Self Host Next.js: VPS vs Platform Managed
Lantaran tagihan self-host mencakup VPS, backup, monitoring, bandwidth, CDN opsional, dan waktu engineer, angka bulanan jarang sekadar harga VM. Platform managed menggabungkan edge, preview environment, dan observability.
Anda menukar kontrol penuh dengan biaya usage yang naik saat traffic atau build minutes melonjak. Self-host cenderung masuk akal bila traffic stabil dan beberapa aplikasi Node berbagi satu VPS.
Managed lebih masuk akal bila tim kecil, spike tidak terduga, atau Anda butuh edge global tanpa membangun sendiri. VPS murah belum tentu cukup untuk SSR berat, Partial Prerendering, dan resize gambar bersamaan.
Sebelum migrasi, ukur RAM puncak dan waktu respons p95 di staging yang meniru production. Berikut prinsip serupa di stack lain: tutorial diagnosis LCP dengan Nginx, gzip, dan CDN relevan meski stack-nya WordPress.
Keamanan, Backup, dan Signal Lambat di VPS
Anda bertanggung jawab patch kernel, runtime Docker, image Node, dan paket sistem. Upload pengguna jangan hanya di filesystem container ephemeral—pakai volume atau object storage. Backup mencakup database, file user, dan konfigurasi Nginx—not image Docker sebagai satu-satunya cadangan kode; Git tetap sumber kebenaran aplikasi.
Log aplikasi, access log proxy, dan metric CPU/RAM/disk perlu retention policy. Error tracking terpisah dari health check HTTP. Cloudflare atau CDN di depan VPS tidak mengganti patching server asal.
Bila mesin terasa berat padahal spec terlihat cukup, pola diagnosis resource—CPU steal, I/O disk, swap—mirip keluhan hosting lain. Artikel diagnosis VPS lambat sebelum upgrade server berguna sebagai checklist infra, walau stack aplikasinya berbeda.
Kapan Migrasi Self Host Next.js Masuk Akal
Migrasi layak bila Anda sudah punya checklist production: proxy + TLS, health check, backup teruji, strategi cache untuk jumlah replika target, dan runbook deploy. Tanpa itu, standalone Docker hanya memindahkan kompleksitas dari platform ke tim Anda.
Untuk konteks merancang lapisan aplikasi dan data secara terpisah, panduan arsitektur sistem website mengingatkan bahwa hosting Node dan database managed sering independen.
Itu berguna saat memetakan dependensi sebelum cutover VPS. Verifikasi akhir sebelum cutover: uji streaming, invalidasi cache, deploy rolling tanpa error 404 aset, dan estimasi biaya tiga bulan pertama.
Bila angka operasional mendekati tagihan platform managed, tetap di platform bukan kekalahan. Itu alokasi waktu tim ke fitur produk, bukan ke pager infra.
/** @type {import('next').NextConfig} */
const nextConfig = {
output: 'standalone',
async headers() {
return [
{
source: '/:path*{/}?',
headers: [{ key: 'X-Accel-Buffering', value: 'no' }],
},
]
},
}
module.exports = nextConfig
Snippet di atas hanya contoh konfigurasi standalone plus header streaming; sesuaikan dengan rute yang benar-benar Anda stream dan kebijakan buffering Nginx Anda.