$ aoox

DocsStack & database

Managed database

Membuat PostgreSQL, MySQL, MariaDB, Redis, Valkey, atau MongoDB per project dan menghubungkannya ke aplikasi.

Engine
PostgreSQL · MySQL · MariaDB · Redis · Valkey · MongoDB
Bentuk
Container + volume per database
Hubungkan
${{database.<slug>.url}} di env aplikasi

Engine yang didukung

EngineImage (tag default)PortBentuk URL internal
PostgreSQLpostgres:16-alpine5432postgresql://app:pass@host:5432/<db>
MySQLmysql:83306mysql://app:pass@host:3306/<db>
MariaDBmariadb:113306mysql://app:pass@host:3306/<db>
Redisredis:7-alpine6379redis://:pass@host:6379/0
Valkeyvalkey/valkey:8-alpine6379redis://:pass@host:6379/0
MongoDBmongo:727017mongodb://app:pass@host:27017/<db>?authSource=admin

Container mengikuti env resmi image Docker Hub (POSTGRES_*, MYSQL_*, MARIADB_*, --requirepass). Username SQL selalu app; nama database = slug dengan - diganti _. Password acak, disimpan terenkripsi.

Valkey adalah drop-in Redis (fork Linux Foundation) — protokol, perintah, dan format persistensi (AOF) sama persis. Backup, data browser, dan URL koneksi Valkey memakai jalur yang identik dengan Redis (skema redis://, klien Redis apa pun kompatibel).
MongoDB tidak punya CREATE DATABASE — database baru "ada" begitu punya isi. aoox otomatis menulis satu dokumen placeholder (koleksi _aoox_init) setelah container siap, jadi database utama langsung muncul di daftar (tab Data) tanpa menunggu tulisan pertama dari aplikasi.

Varian PostgreSQL

Saat membuat database dengan Engine PostgreSQL, pilih Varian untuk image dengan ekstensi sudah terpasang — protokol, kredensial, backup, dan referensi env tetap sama seperti PostgreSQL polos (hanya image dan tag default yang beda). Ekstensinya diaktifkan otomatis (CREATE EXTENSION IF NOT EXISTS) begitu container siap menerima koneksi.

VarianImage (tag default)Kegunaan
pgvectorpgvector/pgvector:pg16Pencarian similarity vector untuk embedding (AI/ML).
PostGISpostgis/postgis:16-3.4Tipe data & query geografis/spasial.
TimescaleDBtimescale/timescaledb:latest-pg16Data time-series: hypertable, continuous aggregate.
  • Tanpa varian (default) = image postgres polos, tanpa ekstensi tambahan.
  • Ganti varian setelah dibuat tidak didukung dari dashboard — hapus lalu buat ulang (opsional: pulihkan dari backup ke database baru).
  • PostGIS dan TimescaleDB sudah mengaktifkan ekstensinya sendiri saat image pertama kali start; aoox tetap memanggil CREATE EXTENSION IF NOT EXISTS sebagai jaring pengaman (aman diulang, tidak menimbulkan error).

Membuat database

  1. Halaman project → Database baru

    FieldKeterangan
    NamaJadi slug unik (global, bukan per project). Container aoox-db-<slug>, volume aoox_db_<slug>.
    EnginePilih salah satu kartu: PostgreSQL / MySQL / MariaDB / Redis / Valkey / MongoDB. Untuk PostgreSQL, pilih juga Varian (opsional): Polos / pgvector / PostGIS / TimescaleDB.
    Versi (tag image)Tag Docker Hub. Kosong = default untuk engine dan varian yang dipilih (tampil di bawah kolom dan di tabel atas). Contoh: 17, 8.4, 7.2.
    Port hostOpsional. Isi hanya kalau perlu koneksi dari luar Docker (laptop, server remote). Aplikasi di host aoox tidak membutuhkannya.
    Mendengarkan diDefault Hanya server ini (127.0.0.1): database tidak bisa dijangkau dari internet dan kamu terhubung lewat SSH tunnel (ssh -L 5432:127.0.0.1:5432 user@server). Pilih Publik hanya bila harus bisa dijangkau dari mesin lain, dan tutup untuk yang lain di firewall provider: port yang dipublikasikan Docker tidak disaring ufw. Dipilih saat membuat dan tidak bisa diubah nanti (buat ulang database).
    Batas CPU / memoriOpsional; bisa diubah nanti.
  2. Tunggu status running

    1. 01creatingpull image, buat volume & container, lalu tunggu sampai engine menerima login (maksimal 2 menit; mengubah mount, batas resource, atau backup dijawab "masih memulai" selama itu)
    2. 02runningsiap dipakai; kredensial tersedia
    3. 03stoppedcontainer berhenti, data tetap
    4. 04errorprovisioning gagal — lihat pesan

    Provisioning berjalan di latar (pull image bisa lama); halaman menyegarkan otomatis selama creating.

  3. Hubungkan ke aplikasi

    Di env aplikasi (project yang sama), rujuk dengan referensi — bukan menyalin password:

    Env aplikasi
    DATABASE_URL=${{database.app-db.url}}

    Deploy (atau rollback) agar container aplikasi baru mendapat nilainya. Bentuk lain (host, port, username, …) ada di Environment variables.

Tidak ada injeksi otomatis
Membuat database tidak otomatis menambahkan env ke aplikasi mana pun. Referensi hanya berlaku untuk aplikasi/stack di project yang sama.

Koneksi

JenisHostSiapa yang bisa pakai
Koneksi internalaoox-db-<slug>Container di network aoox: aplikasi, stack compose yang bergabung ke network itu, job.
Koneksi eksternal<ip-server>:<port host> (hanya bila port host diisi)Laptop, client GUI, aplikasi di server remote. Dengan "Hanya server ini" alamatnya 127.0.0.1 dan hanya server itu sendiri (atau SSH tunnel) yang bisa memakainya; dengan "Publik", amankan lewat firewall provider.

Tab Ringkasan menampilkan keduanya beserta kredensial (disamarkan, bisa disalin) dan DATABASE_URL siap tempel. Viewer project melihat host, port, database, dan user tetapi tidak pernah password maupun URL-nya, dan tab Data menampilkan nama tabel dan kolom tanpa barisnya (Redis dan Valkey: tidak ada, key adalah data).

Database tambahan di server yang sama

Satu container PostgreSQL/MySQL/MariaDB/MongoDB bisa menampung beberapa database. Di tab Ringkasan, dekat pemilih Koneksi untuk database, owner/admin bisa menekan Tambah database untuk membuat database baru dengan nama [A-Za-z_][A-Za-z0-9_]*, dan menghapus database tambahan lewat ikon tempat sampah di sebelah pemilih (ada dialog konfirmasi; seluruh isinya hilang permanen). Yang dibuat saat provisioning adalah primary dan tidak bisa dihapus. Tab Data tetap punya pemilih database untuk menjelajah.

Merujuk database tambahan dari env
REPORTS_DB_URL=${{database.app-db.url:reports}}
  • Host, user, dan password sama — hanya bagian nama database yang berbeda.
  • Tab Ringkasan menampilkan Koneksi untuk database per nama bila ada lebih dari satu. Tombol tambah/hapus hanya tampil saat database berjalan.
  • Backup punya opsi menyertakan semua database di server (lihat Backup).
  • Redis/Valkey tidak punya fitur ini (pakai nomor DB di URL bila perlu).
  • MongoDB: database baru dibuat langsung terisi dokumen placeholder, sama seperti database utama.

Operasi

AksiDi manaCatatan
Stop / StartPanel databaseContainer berhenti; data di volume tetap. Aplikasi yang terhubung akan error sampai start lagi.
Batas sumber dayaKartu Batas sumber dayaBerlaku langsung; mencabut batas = container dibuat ulang (restart singkat).
Ganti versi (tag)—Belum ada dari UI. Buat database baru, restore backup ke sana.
Konfigurasi engineTab MountFile mount ke path config; container di-provision ulang.
HapusPanel databaseDengan atau tanpa menghapus volume. Daftar backup ikut terhapus. Dengan volume (Hapus dengan data) volume dari mount-nya (termasuk berkas konfigurasi yang tersimpan) dan berkas backup di server beserta salinan S3-nya ikut terhapus; tanpa itu berkasnya dibiarkan di volume backup dan tidak lagi tampil.

Tab lain

  • Data → Data browser: tabel, query, database tambahan.
  • Backup → Backup & restore: manual, jadwal, retensi, S3.
  • Jobs → perintah terjadwal di container database atau container terpisah dari image engine dengan env DB_* — Scheduled jobs.
  • Mount → file konfigurasi engine (my.cnf, redis.conf) atau volume tambahan — Mount.
  • Metrik CPU/RAM (sampel 15 detik) di bagian atas panel.

Jebakan umum

GejalaPenyebab & solusi
Aplikasi: connection refused / ENOTFOUNDMemakai URL eksternal/localhost dari dalam container. Pakai URL internal (nama container) lewat referensi.
400 saat menyimpan env: no database "x"Slug salah atau database ada di project lain.
Status error saat membuatTag image tidak ada di Docker Hub, atau port host sudah dipakai. Hapus dan buat ulang.
Aplikasi di server remote tidak bisa konekDatabase selalu di host aoox. Isi port host + firewall, lalu pakai koneksi eksternal di env (tanpa referensi).
Data hilang setelah hapusDihapus dengan purge volume. Restore dari backup yang sudah diunduh/S3 ke database baru.
Belum tersedia
Ganti versi engine (atau varian PostgreSQL) dari UI setelah dibuat; replika/HA; database di server remote; injeksi env otomatis. Untuk MongoDB: query box hanya <koleksi>.find({...}) (baca saja, belum insert/update/ delete/aggregate lewat query box — pakai backup restore atau aplikasi untuk menulis), belum ada tab Struktur/buat koleksi/edit-hapus baris, dan operator extended-JSON seperti {"$oid":"..."} belum diterjemahkan khusus di filter query.

Langkah berikutnya

Ada yang keliru? Edit halaman ini di GitHub ↗