DocsStack & database
Template one-click
Katalog aplikasi siap pakai yang dijalankan sebagai stack compose dalam beberapa klik.
- Katalog
- 15 template, dibundel di dalam aoox
- Hasil
- Stack compose (source: template)
- Rahasia
- Password/secret di-generate otomatis
Katalog
| Template | Versi | Untuk apa | Harus diisi | Service (port) |
|---|---|---|---|---|
wordpress | 6.8 | CMS/blog + MySQL | — | wordpress :80 |
ghost | 5 | Platform publishing | URL publik | ghost :2368 |
n8n | 1.x | Automasi workflow | Host publik; protokol & zona waktu punya default | n8n :5678 |
uptime-kuma | 1 | Monitoring uptime | — | uptime-kuma :3001 |
rustfs | 1.0 | Object storage S3 (Apache-2.0) — bisa jadi tujuan backup | — (access key dan secret key dibuat otomatis); untuk tujuan backup beri domain pada service apa pun | Console :9001 · API S3 :9000 |
gitea | 1.24 | Git hosting ringan | URL publik | gitea :3000 |
vaultwarden | 1.37 | Password manager (kompatibel Bitwarden) | URL publik (HTTPS) | vaultwarden :80 |
umami | 2.20 | Analitik web ramah privasi + PostgreSQL | — | umami :3000 |
grafana | 13.0 | Dashboard metrik & log | URL publik | grafana :3000 |
metabase | 0.63 | Business intelligence + PostgreSQL | URL publik | metabase :3000 |
directus | 12.4 | Headless CMS / API data + PostgreSQL | URL publik, email admin | directus :8055 |
mattermost | 11.11 | Chat tim + PostgreSQL | URL publik | mattermost :8065 |
nextcloud | 32 | File & kolaborasi + PostgreSQL, Redis, cron | Domain | nextcloud :80 |
odoo | 19.0 | ERP / bisnis all-in-one (Community) + PostgreSQL | — (master password di-generate) | odoo :8069 |
excalidraw | latest (dikunci digest) | Whiteboard / diagram sketsa tangan kolaboratif (open source, MIT) | — | excalidraw :80 |
Katalog ditulis di dalam kode aoox — tidak diambil dari internet saat runtime, jadi tetap jalan offline dan isinya tidak bisa diganti pihak lain. Semua password, secret, dan key di-generate otomatis (alfanumerik) bila dikosongkan.
Catatan per template
Template yang memakai database membawa PostgreSQL sendiri di dalam stack (bukan managed database), dengan volume bernama untuk data dan health check agar aplikasi baru start setelah database siap. Versi image dipin ke tag tertentu, bukan latest. Lisensi tiap proyek berbeda; cek di situs proyeknya sebelum dipakai untuk keperluan komersial.
| Template | Isi stack & hal yang perlu diketahui |
|---|---|
| vaultwarden | Satu container, data di SQLite. Web vault butuh HTTPS (kecuali localhost) — isi URL publik dengan https://…. Token /admin di-generate; matikan pendaftaran (SIGNUPS_ALLOWED=false) setelah akun dibuat. |
| umami | Umami + PostgreSQL. Login awal bawaan Umami admin / umami — ganti segera. |
| grafana | Satu container (SQLite bawaan). Username dan password admin ada di env stack. |
| metabase | Metabase + PostgreSQL untuk data aplikasinya (bukan data yang kamu analisis). Berbasis Java, jadi start pertama beberapa menit dan memakai RAM cukup besar. Kunci enkripsi kredensial di-generate; jangan diganti setelah dipakai. |
| directus | Directus + PostgreSQL. Akun admin pertama dibuat dari email yang kamu isi dan password di env stack; KEY dan SECRET di-generate. |
| mattermost | Mattermost Team Edition + PostgreSQL. Akun pertama dibuat lewat web dan otomatis jadi admin sistem. |
| nextcloud | Nextcloud (Apache) + PostgreSQL + Redis (cache dan file locking) + container cron untuk tugas latar. Isi domain tanpa https://. Protokol publik default https; http hanya untuk uji lokal. Install pertama lebih lama dan paling berat di antara template. |
| odoo | Odoo Community 19.0 (LGPLv3; tanpa modul Enterprise, yang proprietary) + PostgreSQL 16. Buka situsnya: halaman awal meminta Master Password, nama database, email, dan password admin. Master password dibuat otomatis; lihat di halaman stack, tab Pengaturan, bagian environment, Tampilkan nilai (variabel MASTER_PASSWORD). Berjalan satu proses tanpa worker (workers = 0), cukup untuk pemakaian kecil; banyak worker dengan jalur websocket terpisah belum disiapkan. proxy_mode menyala agar skema https dan pengalihan benar di belakang Traefik. Daftar database tetap terbuka supaya database pertama bisa dibuat lewat web; master password melindungi pembuatan, penyalinan, backup, dan penghapusan database. Setelah database dibuat, amankan /web/database/manager: edit compose stack (tab Pengaturan), tambahkan list_db = False dan dbfilter = ^nama_db$ pada bagian konfigurasi Odoo, lalu deploy ulang. Image memakai tag bertanggal (19.0-20260926) agar tidak bergeser tiap malam; untuk pembaruan keamanan, ganti tag-nya dan deploy ulang. Data ada di volume odoo_data (filestore) dan database. |
| excalidraw | Excalidraw (MIT), whiteboard untuk sketsa dan diagram bergaya tulisan tangan. Satu container klien statis di port 80, tanpa database dan tanpa isian. Gambar tersimpan di browser (local storage) dan bisa diekspor ke PNG, SVG, atau berkas. Kolaborasi live tidak termasuk: butuh server kolaborasi terpisah yang tidak disiapkan template ini. Image resminya tidak punya tag versi (hanya latest yang bergulir), jadi dikunci pada digest image; untuk memperbarui, ganti digest di file compose stack secara manual. |
Men-deploy template
Menu Templates → pilih template
Atau dari halaman project klik Dari template agar project sudah terpilih. Ada kotak pencarian untuk katalog.
Isi dialog deploy
Bagian Keterangan Project & Nama Nama jadi slug stack; project compose = aoox-<slug>. Hostname per service + HTTPS Satu baris per service yang bisa diekspos (mis. RustFS punya dua: Console dan API). Kosongkan bila tidak ingin domain. Port host per service Alternatif tanpa domain: stack langsung bisa dibuka lewat <ip-server>:<port>. Bentrokan port ditolak saat menyimpan — lihat Akses stack.Variabel Field dengan label dan hint dari template. Yang bertanda wajib harus diisi (mis. URL publik untuk Ghost/Gitea/Grafana, Host publik untuk n8n). Sisanya: kosong = default / di-generate. URL publik harus sama dengan domainGhost, Gitea, n8n, Grafana, Metabase, Directus, Mattermost, Vaultwarden, dan Nextcloud memakai URL/host publik untuk membangun tautan dan webhook-nya sendiri. Isi persis sesuai hostname yang kamu pasang, termasuk skema (https://blog.example.com) — kalau berbeda, halaman admin/tautan akan salah arah.Deploy
Kamu diarahkan ke halaman stack compose yang baru. Deploy berjalan di latar (pull image bisa beberapa menit); pantau Log aksi terakhir sampai status
running.Verifikasi
Buka hostname yang dipasang. Untuk kredensial admin awal (mis. access key dan secret key RustFS, DB password) lihat env stack di tab Pengaturan — nilai yang di-generate tersimpan di sana.
Contoh: WordPress dengan domain
Project : toko
Nama : blog
Service : wordpress → blog.example.com [HTTPS ✓]
Variabel : DB_PASSWORD (kosong → di-generate)
DB_ROOT_PASSWORD (kosong → di-generate)Setelah running, buka https://blog.example.com dan selesaikan wizard WordPress. Database MySQL ada di dalam stack (bukan managed database) — backup-nya jadi tanggung jawab plugin/skrip kamu, atau pindahkan ke managed database dengan mengedit compose.
Setelah deploy
- File compose tersimpan di aoox dan bisa diedit di tab Pengaturan stack (textarea), lalu deploy ulang — mis. menambah service, mengubah image tag, atau menunjuk managed database.
- Env stack berisi nilai variabel (termasuk yang di-generate); ubah lalu deploy ulang bila perlu.
- Domain per service bisa ditambah/diubah lewat kartu Domain; saran service diambil dari katalog.
- Stop / Start / Hapus sama seperti stack compose lain — Hapus menghapus volume data.
Jebakan umum
| Gejala | Penyebab & solusi |
|---|---|
| 400: variabel wajib kosong | URL/Host/Domain publik atau email admin (Directus) belum diisi. |
| Tautan admin mengarah ke localhost / http | URL publik tidak sama dengan domain, atau protokol n8n masih http. Perbaiki env stack, deploy ulang. |
| Deploy lama di deploying | Pull image pertama kali. Tunggu; cek Log aksi terakhir untuk progres. |
| RustFS tidak bisa dipakai sebagai tujuan backup | Beri stack sebuah domain pada service apa pun (konsol boleh) agar masuk ke network aoox, lalu pakai http://<nama container>:9000 sebagai endpoint (path-style aktif, bucket dibuat dulu). Port yang terikat ke 127.0.0.1 tidak terjangkau dari container; port host publik bisa tetapi membuka S3 ke internet. |
Langkah berikutnya
Ada yang keliru? Edit halaman ini di GitHub ↗