$ aoox

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

Contoh project toko
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 projectYang 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, bukan db.

Membuat project

  1. Menu Projects → Project baru

    FieldKeterangan
    NamaMis. 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.
    DeskripsiOpsional, tampil di daftar project.
    Environment bersamaBoleh diisi nanti di tab Pengaturan.
  2. 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:

Env project
APP_ENV=production
SENTRY_DSN=https://abc@sentry.example.com/1
SMTP_HOST=smtp.example.com
Env aplikasi shop
NODE_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 projectBoleh
adminSemua yang bisa developer + kelola anggota dan hapus project.
developerAplikasi, database, stack, domain, mount, jobs, backup.
viewerBaca 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.

PilihanIsi
Tanpa rahasiaDefault. Password database dan secret tidak disertakan.
Dengan password databaseHanya owner instance. File berisi kredensial — perlakukan seperti file rahasia.
  1. Impor di instance lain

    Projects → Impor project: pilih file, beri nama baru atau pakai nama dari file.

  2. 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.

Export/import memindahkan konfigurasi, bukan data. Untuk isi database dan volume, pakai backup & restore; untuk memindahkan seluruh panel, pakai backup instance.

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

Baca sebelum menghapus
Menghapus project menghapus catatan aplikasi, stack compose, database, dan backup-nya di aoox (cascade) — tetapi container dan volume Docker-nya tidak dihentikan/dihapus. Mereka jadi yatim: tetap berjalan, memakai disk, tanpa bisa dikelola dari dashboard.
  1. 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.

  2. 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

GejalaPenyebab & solusi
Referensi ${{database.x.url}} 400 padahal database adaDatabase di project lain. Referensi hanya dalam project yang sama.
Env project diubah, aplikasi tidak berubahContainer belum dibuat ulang. Deploy/rollback aplikasi yang merujuknya.
Tidak bisa menghapus anggota timIa masih memiliki project. Hapus project itu, atau biarkan akunnya.
Project tidak terlihat oleh rekanIa belum ditambahkan sebagai anggota project (member instance hanya melihat project yang ditugaskan).
Impor: banyak peringatan referensiServer/registry/kredensial dengan nama itu belum ada di instance tujuan. Buat dulu, lalu sesuaikan aplikasi.
Container masih jalan setelah project dihapusSesuai perilaku saat ini — hapus manual lewat terminal (lihat atas).
Belum tersedia
Pindah kepemilikan project; menghentikan/menghapus container otomatis saat project dihapus; env project terenkripsi terpisah; impor yang membawa data (bukan hanya konfigurasi).

Langkah berikutnya

Ada yang keliru? Edit halaman ini di GitLab ↗