DocsAplikasi
Project
Project adalah wadah untuk aplikasi, stack compose, dan managed database yang saling terkait, lengkap dengan environment bersama.
- Isi
- Aplikasi · Stack compose · Managed database
- Berbagi
- Environment bersama + referensi database
- Akses
- Daftar anggota + peran per project
Apa yang dikelompokkan project
toko/ ← project (env bersama: APP_ENV, SENTRY_DSN)
├── shop aplikasi Next.js, domain shop.example.com
├── worker aplikasi antrean, tanpa domain
├── app-db database PostgreSQL 16
├── cache database Redis 7
└── monitoring stack docker-compose (grafana + loki)| Yang dibagi dalam satu project | Yang tidak |
|---|---|
Environment bersama (${{project.KEY}}), referensi ${{database.<slug>…}} ke database di project yang sama, nama repository image <project>/<app> di registry. | Network Docker — semua container berada di network aoox yang sama, lintas project. Isolasi ada di lapisan akses (daftar anggota), bukan jaringan. |
Satu project atau banyak?
- Satu project per produk/lingkungan:
toko,toko-staging— env bersama dan database terpisah rapi. - Aplikasi yang berbagi database harus satu project agar bisa merujuknya lewat referensi.
- Slug database bersifat global (unik lintas project) — beri nama spesifik, mis.
toko-db, bukandb.
Membuat project
Menu Projects → Project baru
Field Keterangan Nama Mis. my-app. Versi slug-nya menjadi bagian nama image di registry (<registry>/<project>/<app>:<tag>); mengganti nama project setelah ada deployment membuat image berikutnya memakai repository baru — yang lama tetap ada.Deskripsi Opsional, tampil di daftar project. Environment bersama Boleh diisi nanti di tab Pengaturan. Halaman detail project
Tiga section — Aplikasi, Stack compose, Database — masing-masing dengan tombol tambah (Aplikasi baru, Stack compose baru / Dari template, Database baru) dan status ringkas tiap item. Tab Pengaturan untuk nama, deskripsi, env bersama, dan hapus project.
Environment bersama
Editor di tab Pengaturan project, format KEY=VALUE per baris (komentar # diabaikan). Nilainya tidak otomatis masuk ke container — aplikasi/stack merujuknya secara eksplisit:
APP_ENV=production
SENTRY_DSN=https://abc@sentry.example.com/1
SMTP_HOST=smtp.example.comNODE_ENV=${{project.APP_ENV}}
SENTRY_DSN=${{project.SENTRY_DSN}}
DATABASE_URL=${{database.app-db.url}}- Key yang sama di env aplikasi menang atas env project.
- Perubahan env project baru berlaku di container yang dibuat ulang setelahnya — deploy/rollback tiap aplikasi yang merujuknya (tidak otomatis).
- Cocok untuk: DSN Sentry, host SMTP, feature flag lingkungan. Kurang cocok untuk: rahasia per aplikasi (taruh di env aplikasi).
- Detail sintaks dan urutan penggabungan di Environment variables.
Anggota project
Tab Anggota di halaman project menentukan siapa yang melihat dan boleh mengubah project ini. Tambahkan dengan email akun yang sudah ada, lalu pilih perannya:
| Peran project | Boleh |
|---|---|
| admin | Semua yang bisa developer + kelola anggota dan hapus project. |
| developer | Aplikasi, database, stack, domain, mount, jobs, backup. |
| viewer | Baca saja — status, log, metrik, daftar backup. |
- Pembuat project otomatis menjadi admin project; owner dan admin instance melihat semua project tanpa ditambahkan.
- Member instance lain hanya melihat project tempat ia ditambahkan — project lain menjawab 404. Detail di Pengguna & peran.
Export & import project
Tombol Ekspor konfigurasi (JSON) di halaman project mengunduh definisi portabel: aplikasi, database, stack compose beserta domain, mount, jobs, dan jadwal backup. Referensi ke hal di luar project (server, registry, kredensial Git, tujuan S3) dibawa berdasarkan nama.
| Pilihan | Isi |
|---|---|
| Tanpa rahasia | Default. Password database dan secret tidak disertakan. |
| Dengan password database | Hanya owner instance. File berisi kredensial — perlakukan seperti file rahasia. |
Impor di instance lain
Projects → Impor project: pilih file, beri nama baru atau pakai nama dari file.
Periksa peringatan
Slug dipakai ulang bila masih bebas; port host atau domain yang bentrok dan referensi yang tidak ditemukan dilaporkan sebagai Perlu diperiksa — bukan gagal. Database di-provision di latar; jobs dan jadwal backup langsung didaftarkan.
Di Dashboard
Dashboard menampilkan ringkasan: jumlah project yang punya sesuatu yang running (aplikasi, database, atau stack) dan daftar project terbaru dengan tautan Lihat semua.
Kepemilikan & akses
- Project mencatat pembuatnya, dan ia selalu menjadi admin project. Siapa lagi yang melihatnya ditentukan daftar anggota di atas — lihat Pengguna & peran.
- Pengguna yang masih memiliki project tidak bisa dihapus dari tim — hapus project-nya dulu (kepemilikan belum bisa dipindahkan dari UI).
- Semua perubahan project tercatat di audit log.
Menghapus project
Hapus isinya dulu dari dashboard
Aplikasi (hapus), stack compose (Hapus =
down --volumes), database (hapus + purge volume bila memang tidak dibutuhkan). Unduh backup yang masih diperlukan.Baru hapus project
Tab Pengaturan project → hapus. Backup yang sudah diunduh tidak terpengaruh.
Bila terlanjur, bersihkan yatim dari terminal:
docker ps -a --filter label=com.docker.compose.project=aoox
docker rm -f aoox-app-<slug> aoox-db-<slug>
docker volume rm aoox_app_<slug>_<nama> aoox_db_<slug>Jebakan umum
| Gejala | Penyebab & solusi |
|---|---|
| Referensi ${{database.x.url}} 400 padahal database ada | Database di project lain. Referensi hanya dalam project yang sama. |
| Env project diubah, aplikasi tidak berubah | Container belum dibuat ulang. Deploy/rollback aplikasi yang merujuknya. |
| Tidak bisa menghapus anggota tim | Ia masih memiliki project. Hapus project itu, atau biarkan akunnya. |
| Project tidak terlihat oleh rekan | Ia belum ditambahkan sebagai anggota project (member instance hanya melihat project yang ditugaskan). |
| Impor: banyak peringatan referensi | Server/registry/kredensial dengan nama itu belum ada di instance tujuan. Buat dulu, lalu sesuaikan aplikasi. |
| Container masih jalan setelah project dihapus | Sesuai perilaku saat ini — hapus manual lewat terminal (lihat atas). |
Langkah berikutnya
Ada yang keliru? Edit halaman ini di GitLab ↗