$ aoox

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:

ModeUntuk apa
Per barisSatu key satu input; nilai disamarkan (input password) dengan toggle tampilkan. Cocok untuk mengubah satu nilai.
TeksTextarea 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.

Format yang diterima
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

  1. 01set variabelenvironment set yang ditautkan, berurutan (terendah)
  2. 02sumber secretInfisical, bila sync menyala, menimpanya
  3. 03env aplikasimenimpa key yang sama (tertinggi)
  4. 04resolve ${{…}}vars, secret & database di project yang sama
  5. 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

SintaksMenghasilkan
${{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

shared/production (environment set variabel yang ditautkan ke aplikasi)
APP_ENV=production
SENTRY_DSN=https://abc@sentry.example.com/1
Env aplikasi web
NODE_ENV=${{vars.APP_ENV}}
SENTRY_DSN=${{vars.SENTRY_DSN}}
DATABASE_URL=${{database.app-db.url}}
REDIS_URL=${{database.cache.url}}
PORT=3000
Hasil di container (ilustrasi)
NODE_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

Stack compose memakai mekanisme yang sama: env ter-resolve ditulis ke .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

GejalaPenyebab & solusi
Env baru tidak terbaca aplikasiBelum ada container baru — deploy atau rollback sekali lagi.
400 saat menyimpan: referensi tidak dikenalSlug database salah, atau database ada di project lain.
NEXT_PUBLIC_* / nilai saat build kosongEnv tidak ada di tahap build. Pindahkan ke Build args (kalau bukan rahasia) atau baca saat runtime.
Nilai dengan tanda kutip ikut terbawaTulis tanpa kutip: KEY=nilai, bukan KEY="nilai".

Langkah berikutnya

Ada yang keliru? Edit halaman ini di GitHub ↗