Soal 1Di antara 3 tahap deploy, tahap mana yang mengumpulkan app.js dan file yang diperlukan menjadi bentuk yang bisa dijalankan di server publik?
Deploy dan Environment Variable — dari Berjalan di Komputer Sendiri sampai Dipublikasikan
Artikel ini adalah bagian dari kursus Dasar-Dasar Teknologi Informasi, yang membangun dari nol pengetahuan TI praktis yang minimal kamu butuhkan untuk memprogram dan melakukan vibe coding.
Penyebab aplikasi yang berjalan di komputer kamu tetapi gagal setelah dipublikasikan ada di luar kode. Diagram memperlihatkan 3 tahap build, deploy, dan rilis, serta environment variable yang menukar nilai per lingkungan.
Artikel ini membahas deploy, yaitu langkah-langkah membawa aplikasi yang sudah berjalan di komputer kamu sampai dipublikasikan, dan environment variable yang menukar nilai sesuai tujuan publikasinya.
app.js yang sama berjalan di 2 tempat: komputer kamu dan server publik.
Kalau di komputer kamu berjalan tetapi di server publik tidak, penyebabnya ada di luar kode.
Perbedaan 2 tempat inilah alasan aplikasi berhenti bekerja setelah dipublikasikan.
Deploy terdiri atas 3 tahap: build, deploy, dan rilis
Pekerjaan menaruh aplikasi di server publik supaya siapa saja bisa memakainya adalah deploy, dan isinya terdiri atas 3 tahap: build, deploy, dan rilis.
Tahap pertama adalah build, yaitu pekerjaan mengumpulkan app.js dan file yang diperlukan menjadi bentuk yang bisa dijalankan di server publik, dan kumpulan file yang dihasilkan adalah hasil build (build output).
File pengaturan yang hanya dipakai di komputer kamu tidak masuk ke hasil build dan tetap tinggal di komputer kamu.
Yang sampai ke server publik hanya hasil build yang sudah dikumpulkan.
Mengembalikannya ke hasil build sebelumnya adalah rollback.
Kata deploy kadang merujuk hanya ke tahap tengah, kadang ke ketiga tahapnya sekaligus.
Ada juga sebutan CI/CD (Continuous Integration / Continuous Delivery, yaitu mekanisme yang menjalankan 3 tahap ini secara otomatis setiap kali kode dicatat), tetapi yang berubah hanya otomatisasinya dan tahapnya tetap sama.
Deploy adalah sebutan untuk 3 pekerjaan sekaligus
Deploy adalah melakukan 3 hal berturut-turut: mengumpulkan, mengirim, dan menerima.
Mengumpulkan adalah build, mengirim lalu menjalankan adalah deploy, dan menerima request di URL adalah rilis, sedangkan file pengaturan yang hanya dipakai di komputer kamu tidak termasuk yang dikumpulkan sehingga tidak sampai ke server publik.
Lingkungan pengembangan dan lingkungan produksi — kode sama, tetapi sekelilingnya berbeda
app.js yang berjalan di komputer kamu tidak berjalan di server publik bukan karena kodenya berubah.
Penyebabnya adalah lingkungan (environment, yaitu satu paket berisi komputer, OS, runtime, database, dan nilai pengaturan yang disiapkan untuk menjalankan app.js) yang berbeda.
Pada artikel "Apa Itu Lingkungan Pengembangan", lingkungan pengembangan berarti kombinasi peralatan, sedangkan di sini lingkungan pengembangan berarti tempat menjalankan peralatan itu.
- app.js yang dijalankan sama-sama satu file di kedua lingkungan
- node yang kamu pasang sendiri
- Database di dalam komputer yang sama
- Pengaturan yang menampilkan isi error di layar
- node yang terpasang di server
- Database di server yang berbeda
- Pengaturan yang tidak menampilkan error di layar tetapi mencatatnya di log
Di dalam bingkai luar ada 2 lingkungan, dan app.js yang dijalankan keduanya sama-sama satu file.
Yang sama hanya kodenya; URL yang dibuka, lokasi database, dan API key semuanya berbeda.
| Anggapan yang berlaku di komputer kamu | Di server publik | Yang terjadi setelah dipublikasikan |
|---|---|---|
| Terhubung ke localhost:5432 | Tidak ada database dengan nama itu | Error saat menyimpan |
| API key-nya untuk pengujian | Key pengujian tidak diterima | Ditolak layanan eksternal |
| Error ditampilkan di layar | Muncul apa adanya di layar pengguna | Isinya terlihat oleh orang lain |
| Isi app.js | app.js yang sama | Berjalan apa adanya |
Tiga baris teratas adalah anggapan yang hanya berlaku di komputer kamu.
Kalau setelah dipublikasikan aplikasinya tidak jalan, curigai sekelilingnya lebih dahulu daripada kodenya.
Kalau kamu masuk ke server publik lalu memperbaiki hasil build atau pengaturannya dengan tangan, deploy berikutnya akan menimpanya dan perbaikan itu hilang.
Yang diperbaiki adalah app.js di lingkungan pengembangan, dan setelah diperbaiki, deploy sekali lagi.
Yang sama hanya kodenya
Lingkungan adalah segala sesuatu yang disiapkan di sekeliling app.js supaya bisa berjalan.
Komputer kamu adalah lingkungan pengembangan dan server publik adalah lingkungan produksi, dan meski di kedua sisi ada hal dengan peran yang sama, isi tujuan koneksi maupun key-nya berbeda, jadi kalau setelah dipublikasikan tidak jalan, mulailah memeriksa dari sekelilingnya ini.
Environment variable menukar nilai per lingkungan tanpa mengubah kode
Mekanisme menaruh nilai di luar kode dan membuat kode hanya membaca namanya adalah environment variable, yaitu nilai yang diatur di luar program dan dibaca lewat namanya saat program dijalankan.
Yang ditulis di app.js hanya namanya, dan di komputer kamu nilainya ditulis di .env (file yang memuat daftar nama dan nilai environment variable).
- app.js — hanya nama DATABASE_URL yang ditulis
- .env — nilainya ditulis, DATABASE_URL=localhost:5432
- .env tidak masuk hasil build dan tidak dicatat di Git
- app.js — tiba dengan hanya namanya yang tertulis
- Mendaftarkan DATABASE_URL=db.example.com
- app.js yang berjalan membaca nilai ini lewat namanya
.env di komputer kamu hanya dibaca di dalam komputer tempat kamu menaruhnya.
Karena .env memuat API key, isinya tidak dicatat di Git, dan karena tidak masuk hasil build juga, .env tidak sampai ke lingkungan produksi.
Kalimat "atur environment variable produksi" pada panduan berarti mendaftarkan nama yang sama di sisi server publik.
| Tempat dijalankan | Sumber nilainya | Nilai DATABASE_URL | Hasil koneksi |
|---|---|---|---|
| Komputer kamu | .env di komputer kamu | localhost:5432 | Ke database di komputer kamu |
| Server publik, sudah didaftarkan | Pengaturan deploy | db.example.com | Ke database produksi |
| Server publik, lupa didaftarkan | Tidak ada di mana pun | Tetap kosong | Tidak bisa terhubung, berhenti dengan error |
Dengan app.js yang sama, nilai yang dibaca berubah menurut tempat aplikasinya dijalankan.
Nilainya dibaca saat aplikasi mulai dijalankan, jadi setelah mengubah nilai, jalankan ulang.
Yang berjalan di kotak kiri dan kanan adalah app.js yang sama.
Yang berbeda hanya nilai-nilai yang ditaruh di luarnya.
Nama di kode, nilai di sisi lingkungan
Environment variable adalah nilai yang ditaruh di luar kode dan dipanggil lewat namanya.
Di komputer kamu nilainya ditulis di file bernama .env, dan di server publik nama yang sama didaftarkan sebagai pengaturan di tempat itu, jadi kalau setelah dipublikasikan aplikasinya tidak jalan, hal pertama yang kamu lihat adalah apakah pendaftaran ini terlupa.
Informasi rahasia hanya ditaruh di environment variable, tidak di kode sumber dan hasil build
Di antara nilai yang ditaruh di environment variable, yang paling perlu diperhatikan adalah informasi rahasia (secret, yaitu string yang membuat orang lain bisa menyamar sebagai kamu kalau mereka mengetahuinya), dengan API key dan password sebagai contoh utamanya.
Environment variable yang dibaca frontend nilainya dituliskan ke dalam hasil build saat build berlangsung.
Nilai yang sudah dituliskan itu sampai apa adanya ke perangkat orang yang membuka URL-nya.
Informasi rahasia hanya ditaruh di environment variable produksi yang tidak masuk hasil build, dan didaftarkan lewat layar pengaturan deploy.
Nilai yang didaftarkan tidak masuk hasil build, melainkan diserahkan saat server publik menjalankan app.js.
Kalau lupa mendaftarkan, aplikasinya mulai berjalan dengan nama yang ada tetapi tanpa nilai.
Nilai yang didaftarkan hanya ada di sisi server publik, dan nilai yang sama tidak tersalin ke hasil build maupun ke .env di komputer kamu.
Setelah dipublikasikan, nilai itu sendiri hanya ada di 1 tempat.
- API_KEY berisi nilai untuk produksi
- Yang bisa membacanya hanya app.js yang berjalan dan orang yang bisa mengoperasikan server
- app.js hanya berisi nama API_KEY
- Nilainya sendiri tidak tertulis di sana
- Yang sampai hanya HTML dan JavaScript untuk layar
- Nilai informasi rahasia tidak ikut
Nilainya hanya ada di environment variable produksi, tidak di hasil build dan tidak di perangkat pengguna.
Cara melihat berapa banyak orang yang bisa membaca tempat penyimpanan itu dibahas di artikel "Hal yang Perlu Diwaspadai soal Keamanan".
Batasi tempat penyimpanan nilai ke 1 tempat saja
Informasi rahasia adalah string yang bisa dipakai orang lain kalau mereka mengetahuinya.
Kalau ditulis di kode, isinya ikut dikumpulkan saat build dan sampai ke perangkat pengguna, jadi jangan tulis nilainya, melainkan daftarkan sebagai pengaturan di server publik dan tulis hanya namanya di kode.
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2my-app berjalan di komputer kamu, tetapi setelah dipublikasikan berhenti dengan error. Penyebab mana yang benar menurut artikel ini?
Soal 3Tempat menaruh informasi rahasia seperti API key dan password database, mana yang sesuai dengan penjelasan artikel ini?