Database
Add Service → Databases menampilkan PostgreSQL, MySQL, MariaDB, MongoDB, Redis, dan Valkey. Pilih versi di barisnya lalu klik (atau tekan Enter): database ditambahkan dan di-deploy.
| Database | Versi | Volume data |
|---|---|---|
| PostgreSQL | 18, 17, 16, 15, 14 | /var/lib/postgresql (18+) atau /var/lib/postgresql/data |
| MySQL | 8.4 LTS, 9, 8.0 | /var/lib/mysql |
| MariaDB | 11.8 LTS, 11.4 LTS, 10.11 LTS | /var/lib/mysql |
| MongoDB | 8.0, 7.0, 6.0 | /data/db |
| Redis | 8, 7.4, 7.2 | /data |
| Valkey | 8, 7.2 | /data |
Setiap database mendapat volume untuk datanya, kata sandi yang dibuat otomatis, dan health check. Versi mayornya tetap: meningkatkannya nanti memerlukan dump dan restore.
Terhubung dari aplikasi Anda
Layanan lain di proyek menjangkau database di <hostname>.zenavo.internal dan menerima variabel berikut, yang dinamai sesuai hostname privat database saat ditambahkan (postgresql → POSTGRESQL_…, postgresql-2 → POSTGRESQL_2_…). Bagian host-nya adalah ${CONTAINER_HOSTNAME}, sehingga mengikuti perubahan hostname di kemudian hari:
| Variabel | Contoh |
|---|---|
<NAME>_CONNECTION_STRING | postgresql://postgres:…@postgresql.zenavo.internal:5432/zenavo |
<NAME>_HOST | postgresql.zenavo.internal |
<NAME>_PORT | 5432 |
<NAME>_DB_PASSWORD | kata sandi yang dibuat otomatis |
Database bersifat privat untuk proyek. Untuk menjangkaunya dari komputer Anda, publikasikan port TCP di Networking (Port TCP & UDP) atau gunakan panel Command layanan.
Tampilan database
Tab Database pada layanan database menampilkan datanya dan menjalankan permintaan di dalam kontainer database dengan klien database itu sendiri, terhubung lewat socket lokal kontainer atau 127.0.0.1 dengan kredensial dari variabel layanan. Port database tidak dibuka untuk ini, kredensial tidak pernah sampai ke browser, dan tidak ada yang Anda ketik yang melewati shell.
| Siapa yang bisa melihat data | Member, admin, dan pemilik tim. Viewer tidak bisa melihat data. |
| Siapa yang bisa mengubah data | Admin dan pemilik tim. |
| Batas | 15 detik, output 2 MB, dan dua permintaan sekaligus per database. Hasil yang lebih panjang dipotong dan ditandai. |
| Log audit | Setiap daftar, halaman, query, dan perintah dicatat di log audit tim beserta layanan dan jenis permintaannya, tetapi tidak pernah SQL, kunci, nilai, filter, atau dokumen, yang mungkin berisi rahasia. |
Klien berjalan sebagai pengguna administratif database, dan member tim sudah bisa membuka shell di kontainer dari panel Command, jadi mode read-only tampilan ini melindungi dari perubahan yang tidak disengaja; ini bukan sandbox. Gunakan pengguna database dengan hak lebih sedikit untuk kebutuhan pemisahan yang lebih ketat.
PostgreSQL, MySQL, dan MariaDB
Tab ini menampilkan tabel dan view beserta perkiraan jumlah baris dan kolomnya (primary key ditandai). Klik tabel untuk menelusuri barisnya, 100 sekaligus, atau beralih ke SQL untuk menjalankan statement dan melihat hasilnya sebagai tabel. Tekan ⌘ Enter (Ctrl Enter) untuk menjalankannya; jika ada teks yang dipilih, hanya pilihan itu yang dijalankan. Query memakai psql, atau mysql / mariadb.
| Read-only secara bawaan | Statement berjalan dalam transaksi read-only, dan hanya SELECT, WITH, SHOW, EXPLAIN, dan DESCRIBE yang diterima. |
| Penulisan | Admin atau pemilik tim menyalakan Allow writes untuk INSERT, UPDATE, DELETE, dan perubahan skema. Perubahan langsung berlaku; buat backup terlebih dahulu. |
| Satu statement setiap kali | Skrip dengan beberapa statement, perintah klien (\!, source, system, …), dan executable comment MySQL (/*! … */) ditolak. |
| Batas | Timeout statement 15 detik dan 1.000 baris per query. |
Redis dan Valkey
Keys menampilkan kunci beserta tipe, time to live, dan ukuran memorinya. Pilih database (db0, db1, …; daftar menunjukkan berapa kunci di masing-masing) dan ketik pola pencocokan seperti user:*. Kunci didaftar dengan SCAN, 100 sekaligus, tidak pernah dengan KEYS, yang memblokir server pada database besar; Scan more melanjutkan. Klik kunci untuk melihat nilainya:
| Tipe | Ditampilkan sebagai |
|---|---|
| string | Nilainya, hingga 256 KB |
| hash | Field dan nilai, 100 sekaligus (HSCAN) |
| list | Item beserta indeksnya, 100 sekaligus |
| set | Anggota, 100 sekaligus (SSCAN) |
| sorted set | Anggota dan skor secara berurutan, 100 sekaligus |
| stream | Entri beserta field-nya, 100 sekaligus |
Elemen dipotong pada 4 KB. Byte yang bukan teks ditampilkan sebagai \xHH. Tipe modul (JSON, time series, …) menampilkan tipe dan ukurannya; baca dengan perintahnya sendiri.
Command menjalankan satu perintah, dengan aturan kutip seperti redis-cli: SET "my key" "a value". Tekan Enter untuk menjalankannya. Perintah memakai redis-cli atau valkey-cli dengan kata sandi dari REDIS_PASSWORD atau VALKEY_PASSWORD.
| Read-only secara bawaan | Hanya perintah baca yang diterima: GET, HGETALL, LRANGE, SCAN, TTL, INFO, … |
| Penulisan | Admin atau pemilik tim menyalakan Allow writes untuk perintah yang mengubah kunci dan nilai: SET, DEL, EXPIRE, HSET, LPUSH, ZADD, XADD, … Perubahan langsung berlaku. |
| Selalu ditolak | Perintah yang memengaruhi seluruh server atau klien lain: FLUSHALL, FLUSHDB, SWAPDB, CONFIG, SHUTDOWN, DEBUG, MODULE, ACL, CLIENT, MONITOR, SLOWLOG, REPLICAOF / SLAVEOF, MIGRATE, SAVE, BGSAVE, CLUSTER, FAILOVER; KEYS; skrip (EVAL, EVALSHA, SCRIPT, FUNCTION, FCALL); perintah yang memblokir (BLPOP, XREAD … BLOCK, WAIT, …); pub/sub, transaksi (MULTI, WATCH), dan SELECT. Perintah yang tidak dikenal tampilan ini juga ditolak. |
Untuk hal lainnya, jalankan redis-cli atau valkey-cli dari panel Command.
MongoDB
Tab ini menampilkan database dan koleksinya beserta perkiraan jumlah dokumen (admin, config, dan local muncul di System databases). Klik koleksi dan masukkan filter, urutan, dan proyeksi sebagai JSON, seperti {"status": "active"}, {"created": -1}, dan {"name": 1}; tekan Enter untuk mencari. Dokumen ditampilkan 50 sekaligus sebagai Extended JSON mode relaxed: {"$oid": "…"} untuk object ID, {"$date": "…"} untuk tanggal, dan {"$numberLong": "…"} untuk integer 64-bit yang tidak bisa direpresentasikan persis oleh angka JavaScript. Gunakan bentuk yang sama di filter. Permintaan memakai mongosh, masuk dengan MONGO_INITDB_ROOT_USERNAME dan MONGO_INITDB_ROOT_PASSWORD.
| Pencarian | Filter, urutan, dan proyeksi masing-masing hingga 64 KB; paling banyak 500 dokumen per halaman. Dokumen di atas 256 KB hanya menampilkan _id-nya; gunakan proyeksi untuk melihat sebagian. |
| Perubahan | Admin dan pemilik tim bisa Insert dokumen, serta memperbarui atau menghapus satu dokumen setiap kali, dicocokkan dengan _id-nya. Pembaruan memakai operator ($set, $unset, $inc, …); mengganti seluruh dokumen tidak didukung. Koleksi sistem tidak bisa diubah. |
| Ditolak | Operator yang menjalankan JavaScript di server ($where, $function, $accumulator). Tidak ada aggregation dan runCommand; gunakan mongosh dari panel Command untuk itu. |