Variabel lingkungan dan konfigurasi
Beberapa nilai tidak bisa ditulis langsung ke dalam kodemu: kunci rahasia, kata sandi , alamat sebuah layanan. Dan beberapa perlu berubah tergantung di mana aplikasi itu berjalan. Kode yang kamu uji di laptopmu (lingkungan dev) seharusnya berbicara dengan database uji coba; aplikasi langsung yang disentuh penggunamu (lingkungan prod, atau produksi) harus berbicara dengan database yang sesungguhnya — menggunakan kode yang sama persis.
Jawabannya adalah variabel lingkungan (environment variables, sering disebut "env vars"): nilai bernama yang berada di luar kode dan disediakan untuknya saat dijalankan. Kodenya berkata "berikan aku DATABASE_URL," dan lingkungannya yang memutuskan mana yang diberikan.
# A config file (e.g. .env) — values live here, not in the code
DATABASE_URL=postgres://localhost/myapp_dev
STRIPE_SECRET_KEY=sk_test_51H... # dev = a test key
SEND_REAL_EMAILS=false # don't email real users while testing
Dua aturan ini akan menyelamatkanmu dari rasa sakit yang nyata:
- Rahasia tidak pernah masuk ke dalam kode. Apa pun di dalam kodemu bisa berakhir menjadi publik (apalagi di repositori bersama), dan kunci pembayaran atau kata sandi database yang bocor adalah keadaan darurat yang sungguhan. Rahasia adalah tempatnya di variabel lingkungan, dijauhkan dari kontrol versi.
- Dev dan prod itu berbeda. Intinya adalah kode yang sama berperilaku benar di keduanya, karena lingkungan — bukan kode — yang memutuskan database dan kunci mana yang dipakai.
Kode yang sama, dua rumah — variabel lingkungan itulah yang membedakannya:
SAME CODE
/ \
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ DEV │ │ PROD │
│ your laptop │ │ hosting (cloud)│
│ test database │ │ real database │
│ test API key │ │ live API key │
│ fake emails │ │ real emails │
└─────────────────┘ └─────────────────┘
only you see it your users see it