Hello World ala Node.js
Buat yang fokus ngoding, jaman sekarang perlu belajar deploy. Untuk itu, dibutuhkan sebuah kelinci percobaan.
Sebagai sarana eksperimen untuk menyelami seluk-beluk deployment, saya mau contohkan sebuah server HTTP mungil dengan Node.js. Karakternya uniknya adalah:
1️⃣ Tidak ada dependensi (tambahan)
2️⃣ GET /index.html buat halaman utama
3️⃣ GET /health buat cek nyawa
4️⃣ CI sederhana tapi efektif
5️⃣ Pendek untuk dicerna sembari ngopi
Yuk kita simak bareng!
Yang pertama, tanpa dependensi samsek, atau bisa dikatakan hanya memanfaatkan standard library bawaan dari Node.js. Sebagai bonus, program mungil ini juga jalan dengan Bun maupun Deno.
Tidak perlu ada tahapan melakukan npm install. Begitu habis mencomot index.js, langsung jalankan seperti salah satu langkah ini:
node index.js
bun index.js
deno --unstable-detect-cjs --allow-net --allow-env index.jsMau coba? Langsung kloning aja: github.com/ariya/hello-nodejs.
Apa yang bisa ditembak? GET dan hanya bisa ke / atau /health.
Untuk yang pertama, cukup kembalikan pesan singkat buat cek dari browser.
Sementara itu /health biasa dikenal sebagai endpoint untuk health check. Misalnya ada proxy/load balancer, biar tahu apakah server kita masih lancar jaya atau udah ngadat aja (dan perlu direstart).
Untuk pengecekan "nyawa" ini sengaja tidak statik alias ada timestamp, salah satunya supaya nggak kena efek cache.
Bagaimana dengan CI (continuous integration) atau integrasi berkesinambungan?
Sudah diberikan contohnya juga, memanfaatkan fitur workflow dari GitHub Actions. Silakan disesuaikan kalau mau pakai Jenkins, GitLab CI, dan solusi lain.
Walaupun server ini masih sederhana banget, tidak ada salahnya langsung pasang CI. Sudah pernah saya bahas juga, Lima Faedah Utama Mempraktekkan Integrasi Berkesinambungan.
Perhatikan bahwa server kecil ini akan jalan di port 3000 secara default. Akan tetapi, nomor port tersebut bisa dikonfigurasi ulang, kalau ada env bernama PORT.
Ini lumayan penting karena banyak mekanisme deployment (yang melibatkan Docker) yang mengeset port tersebut secara dinamik, misalnya kalau ada beberapa layanan (service) yang jalan bareng di host yang sama.
Oh iya, Dockerfile juga tersedia, jadi langsung jalan sama Docker atau Podman (favorit saya).
Sekedar intermezzo dulu, belajar deploy itu perlu untuk menghindari budaya DevOps yang salah kaprah. Ini terjadi kalau sysadmin-nya diganti stempel DevOps, tapi sebenarnya kultur di tim tidak berubah. Pernah sudah saya sundul di sini, DevOps Hanya Bungkusan. Jangan sampai terjebak ya!
Catatan penutup. Konsep server sederhana ini juga bisa diterapkan ke bahasa/stack lain, kalaulah teman-teman lebih menggandrungi Python, Ruby, Java, dll.
Anjuran ini juga sudah saya himbaukan sebagai utas Threads.

