$ aoox

DocsStack & database

Stack compose

Men-deploy file docker-compose dari repo sebagai satu stack multi-service, lengkap dengan domain per service.

Sumber
Repo Git (file compose) atau template
Berjalan sebagai
docker compose project aoox-<slug>
Status
idle → deploying → running | stopped | error

Aplikasi, stack compose, atau template?

Satu repo, satu proses, satu port?→ Aplikasi
Beberapa service saling terhubung (web + worker + queue) dengan docker-compose.yml?→ Stack compose
Ingin aplikasi siap pakai (WordPress, n8n, …) tanpa repo?→ Template

Stack compose menukar sebagian fitur aplikasi (health check, blue/green, rollback, metrik) dengan fleksibilitas menjalankan file compose apa adanya — termasuk build:, network, dan volume yang didefinisikan di dalamnya.

Membuat stack

  1. Halaman project → Stack compose baru

    FieldKeterangan
    NamaSlug unik; nama project compose = aoox-<slug> (grup sendiri di Docker Desktop).
    Git repository / Branch / Kredensial GitSama seperti aplikasi.
    File composePath relatif dari root repo, default docker-compose.yml. Path relatif di dalam file dihitung dari folder file ini.
    Environment variablesMendukung ${{project.KEY}} dan ${{database.<slug>.url}}.
  2. Klik Deploy

    1. 01helpercontainer docker:29-cli (compose + git) sekali-jalan
    2. 02clonegit clone --depth 1 ke volume checkout
    3. 03env.aoox.env ditulis dari env ter-resolve
    4. 04updocker compose config → up -d --build --remove-orphans

    Output helper mengalir ke panel Log aksi terakhir (menyegarkan tiap 3 detik selama deploying). Token Git dan password database disensor.

  3. Verifikasi

    Halaman stack menampilkan container yang dibuat compose beserta statusnya. Status stack running berarti up -d selesai tanpa error — bukan berarti tiap service sehat; cek log service lewat docker compose logs di terminal.

Env & interpolasi

Env stack ≠ env container
.aoox.env dipakai sebagai --env-file: nilainya menjadi sumber interpolasi ${VAR} di file compose, bukan otomatis masuk ke container. Teruskan eksplisit lewat environment: di service.
Env stack di aoox
DATABASE_URL=${{database.app-db.url}}
APP_SECRET=rahasia
docker-compose.yml
services:
  web:
    build: .
    environment:
      DATABASE_URL: ${DATABASE_URL}   # dari env stack
      APP_SECRET: ${APP_SECRET}
  worker:
    build: .
    command: node worker.js
    environment:
      DATABASE_URL: ${DATABASE_URL}
  • Managed database aoox bisa dijangkau dari stack karena service bergabung ke network aoox saat ada domain (lihat bawah); tanpa domain, tambahkan sendiri networks: [default, aoox] + deklarasi network eksternal.
Bergabung ke network aoox secara manual
services:
  web:
    networks: [default, aoox]
networks:
  aoox:
    external: true

Akses: domain atau IP & port

Kartu Akses di halaman stack punya dua jenis baris untuk tiap service yang ingin dijangkau dari luar:

JenisYang diisiHasil
DomainService, Port container, Host, toggle HTTPSLabel Traefik di file override; butuh reverse proxy.
IP & portService, Port container, Port hostBaris ports: di file override — stack bisa dibuka lewat http://<ip-server>:<port host> tanpa domain.
  • Bentrokan port dengan aplikasi, database, stack lain, atau container apa pun yang sedang berjalan ditolak saat menyimpan — bukan saat up, sehingga stack lama tidak terlanjur dibongkar.
  • Perubahan akses baru berlaku setelah deploy ulang; panel menampilkan pengingatnya.
  • Deploy dari template juga menerima port host langsung di dialog.

Domain per service

  1. Kartu Domain di halaman stack

    Pilih Service, Port di dalam container, Hostname, dan toggle HTTPS.

  2. Deploy ulang

    Saat deploy aoox menulis override docker-compose.aoox.yml di samping file compose, berisi label Traefik (router <slug>-<service>-<port>) dan network aoox + default, lalu menjalankan -f compose -f override.

  • Perubahan domain baru berlaku setelah deploy ulang.
  • Stop/start memakai override yang sudah ada di volume, jadi konsisten dengan stack yang berjalan.
  • Tanpa domain, tidak ada override — file compose dijalankan apa adanya.

Operasi

AksiYang dijalankanCatatan
Deployup -d --build --remove-orphansClone ulang branch, build image bila ada build:.
StopstopContainer berhenti, volume tetap.
StartstartTanpa clone/build.
Hapusdown --volumes --remove-orphans + hapus volume checkoutData volume stack ikut hilang.

Riwayat, webhook & metrik

Tiap kali runner compose berjalan — Deploy, Stop, Start, Hapus, atau via webhook — ditulis sebagai satu baris riwayat (aksi, pemicu, log, commit). Stack adalah N container, jadi ini riwayat aksi, bukan riwayat image/rollback seperti Deployment aplikasi.

  • Auto-deploy dari push: aktifkan Webhook di tab Deploy untuk dapat URL berisi token. Kontrak sama seperti webhook aplikasi — tanda tangan GitHub/GitLab opsional, dan push yang tidak relevan tetap dibalas 200 supaya provider tidak mematikan hook-nya. Stack dari template tidak punya repo, jadi push diterima tapi diabaikan.
  • Metrik & notifikasi container mati kini aktif — container stack dikenali lewat nama project compose (aoox-<slug>), bukan label komponen aoox. Notifikasi diam selama sebuah run berlangsung, karenaup -d --build mematikan lalu menghidupkan ulang setiap container.
  • Batas sumber daya tetap tidak diatur dari UI — pakai deploy.resources di file compose.

Perilaku & batasan

  • build: didukung penuh — CLI compose memakai BuildKit (berbeda dari aplikasi Nixpacks).
  • Tidak ada rollback atau health check/blue-green per stack — Deploy selalu up -d --build ulang, bukan swap image seperti aplikasi.
  • Tidak ada mount dari UI untuk stack — atur volume di file compose.
  • Jobs tersedia di tab Jobs stack: pilih Service, lalu exec di container service itu atau container terpisah dari image-nya — lihat Scheduled jobs.
  • Database di dalam stack tidak ikut fitur backup aoox — untuk data penting, pakai managed database.
  • File compose dari repo boleh minta privileged / mount host — perlakukan repo seperti kode yang dijalankan di host.
  • Gagal deploy mengirim notifikasi deployment gagal.

Jebakan umum

GejalaPenyebab & solusi
Service tidak melihat envEnv stack hanya untuk interpolasi. Tambahkan environment: di service.
Bind mount ./file gagal: not a directorySudah ditangani (checkout di mountpoint volume). Bila tetap gagal, path relatif dihitung dari folder file compose, bukan root repo.
Service tidak saling menemukan setelah menambah domainOverride sudah menyertakan network default. Bila file compose kamu mendeklarasikan networks: sendiri di service, sertakan default.
Tidak bisa konek ke managed databaseService tidak di network aoox. Tambahkan domain (otomatis) atau networks eksternal manual.
Domain 404Belum deploy ulang setelah menambah domain, atau port service salah.
Port host ditolak saat menyimpanPort sudah dipakai aplikasi, database, stack lain, atau container yang sedang berjalan. Pilih port lain.
Push tidak memicu deployStack dari template tidak punya repo — push selalu diabaikan. Untuk stack dari repo, cek URL webhook dan tanda tangan provider.

Template

Stack dari katalog (source: template) memakai runner yang sama, tapi isi compose disimpan di aoox dan bisa diedit dari UI tanpa repo — lihat Template one-click.

Langkah berikutnya

Ada yang keliru? Edit halaman ini di GitLab ↗