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?
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
Halaman project → Stack compose baru
Field Keterangan Nama Slug unik; nama project compose = aoox-<slug> (grup sendiri di Docker Desktop). Git repository / Branch / Kredensial Git Sama seperti aplikasi. File compose Path relatif dari root repo, default docker-compose.yml. Path relatif di dalam file dihitung dari folder file ini.Environment variables Mendukung ${{project.KEY}}dan${{database.<slug>.url}}.Klik Deploy
- 01helpercontainer docker:29-cli (compose + git) sekali-jalan
- 02clonegit clone --depth 1 ke volume checkout
- 03env.aoox.env ditulis dari env ter-resolve
- 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.Verifikasi
Halaman stack menampilkan container yang dibuat compose beserta statusnya. Status stack
runningberartiup -dselesai tanpa error — bukan berarti tiap service sehat; cek log service lewatdocker compose logsdi terminal.
Env & interpolasi
.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.DATABASE_URL=${{database.app-db.url}}
APP_SECRET=rahasiaservices:
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
aooxsaat ada domain (lihat bawah); tanpa domain, tambahkan sendirinetworks: [default, aoox]+ deklarasi network eksternal.
services:
web:
networks: [default, aoox]
networks:
aoox:
external: trueAkses: domain atau IP & port
Kartu Akses di halaman stack punya dua jenis baris untuk tiap service yang ingin dijangkau dari luar:
| Jenis | Yang diisi | Hasil |
|---|---|---|
| Domain | Service, Port container, Host, toggle HTTPS | Label Traefik di file override; butuh reverse proxy. |
| IP & port | Service, Port container, Port host | Baris 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
Kartu Domain di halaman stack
Pilih Service, Port di dalam container, Hostname, dan toggle HTTPS.
Deploy ulang
Saat deploy aoox menulis override
docker-compose.aoox.ymldi samping file compose, berisi label Traefik (router<slug>-<service>-<port>) dan networkaoox+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
| Aksi | Yang dijalankan | Catatan |
|---|---|---|
| Deploy | up -d --build --remove-orphans | Clone ulang branch, build image bila ada build:. |
| Stop | stop | Container berhenti, volume tetap. |
| Start | start | Tanpa clone/build. |
| Hapus | down --volumes --remove-orphans + hapus volume checkout | Data 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 --buildmematikan lalu menghidupkan ulang setiap container. - Batas sumber daya tetap tidak diatur dari UI — pakai
deploy.resourcesdi 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 --buildulang, 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
| Gejala | Penyebab & solusi |
|---|---|
| Service tidak melihat env | Env stack hanya untuk interpolasi. Tambahkan environment: di service. |
| Bind mount ./file gagal: not a directory | Sudah ditangani (checkout di mountpoint volume). Bila tetap gagal, path relatif dihitung dari folder file compose, bukan root repo. |
| Service tidak saling menemukan setelah menambah domain | Override sudah menyertakan network default. Bila file compose kamu mendeklarasikan networks: sendiri di service, sertakan default. |
| Tidak bisa konek ke managed database | Service tidak di network aoox. Tambahkan domain (otomatis) atau networks eksternal manual. |
| Domain 404 | Belum deploy ulang setelah menambah domain, atau port service salah. |
| Port host ditolak saat menyimpan | Port sudah dipakai aplikasi, database, stack lain, atau container yang sedang berjalan. Pilih port lain. |
| Push tidak memicu deploy | Stack 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 ↗