Episode ini membahas mode client-server ChromaDB: menjalankan server dengan chroma run, menghubungkan lewat HttpClient, mengatur host dan port, memahami model tenant dan database, serta konfigurasi server untuk deployment lokal versus produksi.

Sejak episode 2 kita menyebut mode client-server sebagai rekomendasi produksi. Episode 12 inilah tempatnya menjadi nyata: kalian akan menjalankan server, menghubungkan klien, mengatur host dan port, memahami model tenant dan database, serta menyusun konfigurasi server yang tepat untuk deployment lokal maupun produksi.
Ini episode peralihan: dari ChromaDB sebagai library menjadi ChromaDB sebagai service. Seluruh episode berikutnya — keamanan, deployment, dan scaling — berasumsi kalian sudah nyaman dengan mode ini.
Server ChromaDB dijalankan dengan perintah chroma run. Perintah ini menjalankan server Rust modern yang direkomendasikan untuk produksi:
chroma run --path ./data-server --port 8000chroma run --path ./data-server --port 8000 memulai server dengan data persisten di ./data-server. Secara default server mendengarkan di localhost:8000.
Untuk memastikan server hidup, cek endpoint health:
curl http://localhost:8000/api/v2/heartbeatResponse curl http://localhost:8000/api/v2/heartbeat berupa JSON dengan timestamp nanosecond. Jika muncul, server siap menerima permintaan.
Klien Python terhubung lewat HttpClient:
import chromadb
client = chromadb.HttpClient(
host="localhost",
port=8000,
)chromadb.HttpClient(host="localhost", port=8000) membuat klien yang mengirim semua operasi ke server. Dari sini, seluruh API yang kalian pelajari di episode 3-10 bekerja sama persis — create_collection, add, query, semuanya.
Cara lain mengonfigurasi klien: lewat variabel environment. chromadb.HttpClient() tanpa argumen membaca pengaturan dari environment:
export CHROMA_SERVER_HOST="localhost"
export CHROMA_SERVER_HTTP_PORT="8000"client = chromadb.HttpClient()chromadb.HttpClient() tanpa argumen memakai CHROMA_SERVER_HOST dan CHROMA_SERVER_HTTP_PORT. Pendekatan ini memudahkan konfigurasi antar environment tanpa mengubah kode.
Info
Pada versi 1.x, klien Python memakai REST API (/api/v1 dan /api/v2) menuju server. Pastikan versi klien dan server sejajar — perbedaan versi mayor bisa menghasilkan protokol yang tidak cocok.
ChromaDB memakai model dua tingkat: tenant dan database. Tenant memisahkan kepemilikan logis (misalnya per tim atau per produk), database memisahkan collection di dalam tenant. Secara default semuanya berada di tenant default_database.
client.create_tenant("tim-data")
client.set_tenant("tim-data")
collection = client.create_collection("analytics")client.create_tenant("tim-data") lalu client.set_tenant("tim-data") mengarahkan operasi berikutnya ke tenant tersebut. Model ini sangat berguna untuk deployment bersama — kita akan membahas kontrol aksesnya di episode 13.
Di dalam tenant, kalian bisa memisahkan lagi dengan database:
client.create_database("analytics-db")
client.set_database("analytics-db")client.create_database("analytics-db") membuat ruang collection tambahan. Kombinasi tenant dan database memberi hierarki pemisahan data yang fleksibel tanpa harus memakai server terpisah.
Server membaca konfigurasi lewat variabel environment. Yang paling sering diatur:
export CHROMA_SERVER_HOST="0.0.0.0"
export CHROMA_SERVER_HTTP_PORT="8000"
export CHROMA_SERVER_AUTHN_CREDENTIALS_FILE="/etc/chroma/creds.txt"
chroma runDengan CHROMA_SERVER_HOST="0.0.0.0", server menerima koneksi dari luar localhost — diperlukan untuk deployment. Baris CHROMA_SERVER_AUTHN_CREDENTIALS_FILE menyiapkan autentikasi yang akan dibahas penuh di episode 13.
| Aspek | Lokal | Produksi |
|---|---|---|
| Host | localhost | 0.0.0.0 di belakang reverse proxy |
| Autentikasi | Opsional | Wajib |
| Storage | Path lokal | Volume persisten / object storage |
| Backup | Manual | Terjadwal |
| Monitoring | Tidak ada | Health check + metrics |
Untuk production, jangan mengekspos server langsung ke internet. Letakkan di belakang reverse proxy dengan TLS, aktifkan autentikasi, dan sambungkan ke storage persisten. Detail deployment akan kita bahas di episode 15.
Episode 12 membawa ChromaDB dari library menjadi service: menjalankan server dengan chroma run, menghubungkan klien lewat HttpClient dengan host dan port, mengatur konfigurasi via environment, memahami model tenant dan database untuk pemisahan data, serta menyusun pengaturan yang membedakan deployment lokal dan produksi.
Inti yang harus dibawa pulang:
chroma run menjalankan server Rust; curl /api/v2/heartbeat memverifikasinya.HttpClient membuat seluruh API ChromaDB bekerja melalui HTTP.localhost untuk lokal; 0.0.0.0 di belakang proxy untuk produksi.Di episode 13 selanjutnya kita akan membahas authentication dan authorization — kondisi default tanpa autentikasi, token-based auth, BasicAuth, konfigurasi server auth, serta kontrol akses per collection dan tenant pada deployment bersama. Server kalian mulai terbuka; saatnya menguncinya.