
[!IMPORTANT] Data lives in Volumes, not in the Image.
Dokumen ini menjelaskan bagaimana kami mengelola data aplikasi, database, dan konfigurasi saat menggunakan lingkungan terisolasi (Docker/Nix).
Dalam filosofi ShowMyGear (lihat Filosofi Inti), Host Machine (WSL/Windows) adalah tanah suci. Komando seperti apt install postgresql adalah penodaan.
flowchart TD
subgraph "Windows/WSL Host"
V["Direktori Volume Lokal: ./data/postgres"]
end
subgraph "Kontainer Docker"
D["DB Engine: PostgreSQL 16"]
C["Penyimpanan Internal: /var/lib/postgresql/data"]
end
V <-->|"Mount/Sync"| C
D --> C
docker-compose.yml mendokumentasikan Infrastructure as Code../docker/data atau Named Docker Volume, memastikan data bertahan meski kontainer di-restart.pgcli (Postgres) dan mycli (MySQL) menawarkan auto-completion dan syntax highlighting yang jauh lebih unggul dari klien bawaan.localhost yang diekspos Docker. Jangan menginstall software server hanya untuk mendapatkan klien-nya.Di era agentik, “Data” bukan hanya isi row database, tapi juga struktur codebase, logs, dan dokumentasi yang menjadi “makanan” bagi AI.
AI hanya sepintar data yang bisa ia akses. Kita harus menganggap Konteks sebagai Data.
Agar AI bisa membantu Anda, data/codebase harus “skimmable”:
.d.ts (TS) atau Type Hints (Python). Ini adalah metadata paling berharga bagi AI.graph LR
Raw["Raw Project Data"] --> Triage["Context Triage (.cursorrules)"]
Triage --> RAG["RAG Index (Searchable)"]
Triage --> LC["Long Context (Full Ingest)"]
RAG --> AI["AI Architect"]
LC --> AI
style Triage fill:#fff9c4,stroke:#fbc02d
Untuk skenario di mana “menjalankan docker” terasa terlalu berat, atau untuk prototyping kolaboratif yang cepat, kami mengadopsi filosofi Serverless Data.
Kami melihat data sebagai aliran yang dinamis, bukan sekadar tabel statis yang terkunci di satu server.
graph LR
subgraph Local["Lingkungan Lokal (Source of Truth)"]
L1["SQLite / libSQL"] --> L2["Penyimpanan Lokal (Host)"]
end
subgraph Edge["Lapisan Edge (The Bridge)"]
E1["Turso / TiDB Serverless"] --> E2["Replikasi Global"]
end
subgraph Access["Lapisan Aplikasi (Consumer)"]
C1["Aplikasi Mobile / Web"]
C2["Kolaborasi Tim (Global)"]
end
L1 -.->|"turso db push"| E1
E1 --> C1
E1 --> C2
E2 --> C1
style Local fill:#fff3e0,stroke:#ef6c00
style Edge fill:#e8f5e9,stroke:#2e7d32
style Access fill:#e1f5fe,stroke:#0288d1
sqlite3. Satu file, nol konfigurasi. “The Hello World of Data.”stateDiagram-v2
direction LR
Local: "SQLite Lokal (db.sqlite)"
Edge: "Turso Cloud / Edge"
Collab: "Teman Tim"
Local --> Edge : "turso db push"
Edge --> Collab : "Akses via URL"
Collab --> Edge : "Query/Edit"
dump.sql via chat itu primitif dan berbahaya. Sinkronisasi state MariaDB lokal antara 3 developer adalah mimpi buruk.| Metode | Pro | Kontra | Rekomendasi | | :— | :— | :— | :— | | Container-First | Bersih, ter-versi per proyek. | Sedikit kompleks di manajemen volume. | 🟢 Wajib (Enterprise) | | Local-First AI Data | Privasi total, tanpa latensi cloud. | Butuh resource hardware lokal besar. | 🔵 Wajib (Digital Sovereignty)| | Turso/TiDB | Kolaboratif, instan, branching. | Bergantung koneksi cloud. | 🟡 Pilihan Agile/Proto |
Gunkan template ini untuk layer persistensi yang bersih dan terisolasi.
services:
# Aplikasi (e.g., Laravel, Node, Python)
app:
build: .
volumes:
- .:/var/www/html
# Persistensi (Jangan di Host)
db:
image: postgres:16-alpine
volumes:
- db_data:/var/lib/postgresql/data
ports:
- "5432:5432" # Diekspos hanya untuk GUI Lokal (DBeaver)
# Cache
redis:
image: redis:alpine
volumes:
db_data: # **Named Volume** bertahan meski kontainer dihancurkan
turso db shell <db-name> (Koneksi instan).mycli -h <serverless-host> -u <user> (Smart auto-complete).