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:
| 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.
Format yang diterima
PORT=3000
NODE_ENV=production
# baris komentar diabaikan
MESSAGE=nilai boleh mengandung spasi dan = di tengah
EMPTY=Bagaimana env digabung
- 01env projectKEY=VALUE bersama satu project
- 02env aplikasimenimpa key yang sama
- 03resolve ${{…}}project & database di project yang sama
- 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
| Sintaks | Menghasilkan |
|---|---|
${{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/1Env aplikasi web
NODE_ENV=${{project.APP_ENV}}
SENTRY_DSN=${{project.SENTRY_DSN}}
DATABASE_URL=${{database.app-db.url}}
REDIS_URL=${{database.cache.url}}
PORT=3000Hasil 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
| 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 GitLab ↗