DocsAplikasi
Environment variables
Env aplikasi, set variabel yang ditautkan, dan referensi ke kredensial managed database — semuanya diselesaikan saat container dibuat.
- Lapisan
- Set variabel tertaut + sumber secret + env aplikasi
- Diterapkan
- Saat container dibuat, bukan saat build
- Referensi
- ${{vars.KEY}} · ${{database.<slug>.url}}
Editor env
Tab Environment aplikasi (setelah Mount) punya editor Environment variables dengan dua mode:
| Mode | Untuk apa |
|---|---|
| Per baris | Satu key satu input; nilai disamarkan (input password) dengan toggle tampilkan. Cocok untuk mengubah satu nilai. |
| Teks | Textarea bebas — tempel isi .env apa adanya. Cocok untuk migrasi awal. |
Keduanya disimpan sebagai teks KEY=VALUE per baris. API tetap mengembalikan nilai asli — penyamaran hanya di UI.
PORT=3000
NODE_ENV=production
# baris komentar diabaikan
MESSAGE=nilai boleh mengandung spasi dan = di tengah
EMPTY=Tab ini punya tombol Simpan sendiri yang hanya menyimpan env, jadi menyimpan Pengaturan lain tidak pernah menimpanya. Viewer melihat env tanpa bisa mengubahnya.
Sumber secret (Infisical)
Alih-alih menyalin rahasia ke env, aplikasi bisa mengambilnya dari Infisical saat container dibuat.
- Koneksi: owner/admin menambahkannya di Integrasi → Secret manager (nama, URL opsional untuk instance self-hosted, Client ID, Client secret machine identity). Client secret disimpan terenkripsi dan tidak bisa dilihat lagi; tombol tes memeriksa koneksinya.
- Sumber secret di tab Environment: pilih koneksi, isi project ID, environment, dan path (default
/). Lihat key menampilkan nama key saja, tidak pernah nilainya. - Rujuk satu secret dengan
${{secret.KEY}}di env, atau nyalakan Sync semua secret ke container untuk meneruskan semuanya sebagai env. - Nilai diambil saat container dibuat (deploy, apply config, rollback), bukan saat build. Bila key sama, env aplikasi menang atas secret. Preview pull request tidak mewarisi sumber secret.
- Bila Infisical tidak terjangkau saat deploy, deployment gagal dan container lama tetap berjalan.
Bagaimana env digabung
- 01set variabelenvironment set yang ditautkan, berurutan (terendah)
- 02sumber secretInfisical, bila sync menyala, menimpanya
- 03env aplikasimenimpa key yang sama (tertinggi)
- 04resolve ${{…}}vars, secret & database di project yang sama
- 05containerhasil akhir masuk ke container
- Prioritas, dari terendah ke tertinggi: environment set variabel yang ditautkan sesuai urutannya (tautan belakangan menang atas yang sebelumnya) < sumber secret eksternal (Infisical, bila sync menyala) < env aplikasi itu sendiri. Bila key yang sama ada di beberapa lapisan, yang lebih tinggi menang.
- Penggabungan dan resolusi terjadi setiap kali container dibuat: deploy, rollback, atau recreate karena domain/mount berubah. Mengubah set variabel tidak mengubah container yang berjalan — berlaku pada deploy berikutnya aplikasi.
- Env tidak tersedia saat build. Untuk itu pakai Build args (non-rahasia).
Referensi
| Sintaks | Menghasilkan |
|---|---|
${{vars.KEY}} | Nilai gabungan KEY dari environment set variabel yang ditautkan ke aplikasi (tautan belakangan menang), satu tingkat. Lihat Variabel. |
${{secret.KEY}} | Satu secret dari sumber Infisical (lihat di atas). |
${{database.<slug>.url}} | URL koneksi internal managed database (host = nama container). |
${{database.<slug>.host}} | Nama container database, mis. aoox-db-app-db. |
${{database.<slug>.port}} | Port engine di dalam network (5432, 3306, 6379). |
${{database.<slug>.username}} | Username. |
${{database.<slug>.password}} | Password (disensor di log). |
${{database.<slug>.database}} | Nama database. |
${{database.<slug>.url:<nama>}} | Database lain di server yang sama (mis. yang dibuat lewat query CREATE DATABASE): host/user/password sama, hanya bagian nama database yang berbeda. |
Contoh lengkap
APP_ENV=production
SENTRY_DSN=https://abc@sentry.example.com/1NODE_ENV=${{vars.APP_ENV}}
SENTRY_DSN=${{vars.SENTRY_DSN}}
DATABASE_URL=${{database.app-db.url}}
REDIS_URL=${{database.cache.url}}
PORT=3000NODE_ENV=production
SENTRY_DSN=https://abc@sentry.example.com/1
DATABASE_URL=postgresql://app_db:s3cr3t@aoox-db-app-db:5432/app_db
REDIS_URL=redis://:s3cr3t@aoox-db-cache:6379
PORT=3000- Database hanya dicari di project yang sama — aplikasi tidak bisa membaca kredensial project lain. Slug adalah nama yang tampil di halaman database.
- Mengubah tautan sehingga
${{vars.KEY}}yang dirujuk env tidak ada lagi ditolak dengan pesan yang menyebut key-nya.${{project.KEY}}sudah diganti menjadi${{vars.KEY}}dan ditolak. - Referensi tak dikenal → 400 saat menyimpan Pengaturan; bila baru salah saat deploy (mis. database dihapus) → deployment
failed. - Memutar password database → berlaku di deploy/rollback berikutnya tanpa build ulang.
Rahasia & log
- Password database yang ter-resolve dan token Git otomatis disensor dari log deployment dan pesan error.
- Nilai env lain disensor hanya menurut aturan di Variabel rahasia (set variabel); jangan mengandalkan penyamaran dan jangan mencetak env ke stdout dari aplikasi.
- Env aplikasi disimpan sebagai teks di database aoox; akses ke halaman Pengaturan = akses ke nilainya. Nilai set variabel terenkripsi saat disimpan dan bisa dilindungi — lihat Variabel.
Set variabel
Variabel yang dipakai bersama oleh beberapa aplikasi (atau disimpan per tahap, seperti staging dan production) berada di set variabel: kelompok tingkat instance dengan environment, riwayat, bandingkan/promosi, dan tanda rahasianya sendiri. Di tab Environment, kartu Set variabel menautkan environment set ke aplikasi secara berurutan; env sendiri di atasnya selalu menang.
Stack compose
.aoox.env dan dipakai sebagai --env-file — sumber interpolasi ${VAR} di file compose, bukan otomatis masuk ke container. Teruskan lewat environment: di tiap service — lihat Stack compose.Jebakan umum
| Gejala | Penyebab & solusi |
|---|---|
| Env baru tidak terbaca aplikasi | Belum ada container baru — deploy atau rollback sekali lagi. |
| 400 saat menyimpan: referensi tidak dikenal | Slug database salah, atau database ada di project lain. |
NEXT_PUBLIC_* / nilai saat build kosong | Env tidak ada di tahap build. Pindahkan ke Build args (kalau bukan rahasia) atau baca saat runtime. |
| Nilai dengan tanda kutip ikut terbawa | Tulis tanpa kutip: KEY=nilai, bukan KEY="nilai". |
Langkah berikutnya
Ada yang keliru? Edit halaman ini di GitHub ↗