$ aoox

DocsAplikasi

Environment variables

Env aplikasi, env bersama project, dan referensi ke kredensial managed database — semuanya diselesaikan saat container dibuat.

Dua lapis
Env project (bersama) + env aplikasi
Diterapkan
Saat container dibuat, bukan saat build
Referensi
${{project.KEY}} · ${{database.<slug>.url}}

Editor env

Tab Pengaturan aplikasi 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=

Bagaimana env digabung

  1. 01env projectKEY=VALUE bersama satu project
  2. 02env aplikasimenimpa key yang sama
  3. 03resolve ${{…}}project & database di project yang sama
  4. 04containerhasil akhir masuk ke container
  • Bila key yang sama ada di env project dan env aplikasi, nilai aplikasi menang.
  • Penggabungan dan resolusi terjadi setiap kali container dibuat: deploy, rollback, atau recreate karena domain/mount berubah.
  • Env tidak tersedia saat build. Untuk itu pakai Build args (non-rahasia).

Referensi

SintaksMenghasilkan
${{project.KEY}}Nilai KEY dari environment bersama project.
${{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

Env project (bersama)
APP_ENV=production
SENTRY_DSN=https://abc@sentry.example.com/1
Env aplikasi web
NODE_ENV=${{project.APP_ENV}}
SENTRY_DSN=${{project.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.
  • 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 tidak disensor — jangan mencetak env ke stdout dari aplikasi.
  • Env disimpan sebagai teks di database aoox; akses ke halaman Pengaturan = akses ke nilainya. Semua anggota bisa membuka semua project.

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 GitLab ↗