— Ini Arsitekturnya
Solo DevOps, 2 server, 0 laptop.
TL;DR
Saya membangun infrastruktur cloud production yang menjalankan 12+ container Docker di 2 server di benua berbeda — semuanya dikontrol dari Samsung Galaxy. Artikel ini membahas arsitektur Brain-Hands pattern, isolasi project, dan kenapa ini works untuk solo developer.
Pola Pikir: Brain & Hands
Masalah klasik solo developer: satu server untuk semua = satu titik kegagalan. Solusi saya: pisahkan intelligence dari execution.
Brain Server (US): AI, Memory, Vector DB, Embeddings
↕ SSH/API Tunnel
Hands Server (SG): Apps, Databases, N8N, Video Pipeline
Kenapa dipisah?
- Resource concerns berbeda — AI butuh RAM besar, web app butuh I/O cepat
- Fault tolerance — SG down? Brain tetap jalan. US down? Apps tetap live
- Security — Database AI tidak accessible dari internet
Brain Server: Otak yang Tidak Pernah Tidur
Server ini tidak menjalankan aplikasi production. Tugasnya satu: menyimpan dan memproses intelligence.
Stack:
- Qdrant — Vector database untuk semantic search
- PostgreSQL + pgvector — Penyimpanan terstruktur
- Redis — Cache berkecepatan tinggi
- Embeddings Service — Mengubah teks jadi vektor 3072-dim
- Bridge API — HTTP endpoint agar server lain bisa query otak
Kenapa vector database? Karena saya butuh sistem yang bisa menjawab "apa yang kita diskusikan tentang project X minggu lalu?" — bukan keyword search, tapi semantic understanding.
Hands Server: Eksekusi Murni
Server ini menjalankan semua aplikasi production. Setiap project diisolasi dalam Docker network terpisah.
Container topology:
Shared: NPM (reverse proxy), Cloudflare Tunnels, Portainer
Project A: App + MySQL (network: project-a-net)
Project B: API + N8N + PostgreSQL (network: project-b-net)
Project C: N8N + PostgreSQL (network: project-c-net)
Kunci: setiap project punya network sendiri. Container di project A tidak bisa akses database di project B. Ini bukan paranoia — ini basic security hygiene.
Network Isolation: Tidak Ada yang Saling Ganggu
Database MySQL di project A? Hanya bisa diakses dari container di network yang sama. Mau akses dari luar? Harus lewat reverse proxy NPM. Tidak ada port yang di-expose langsung.
Semua port bind ke localhost — tidak accessible dari internet.
Infrastructure as Code (IaC)
Semua konfigurasi disimpan dalam file. Tidak ada "magic configuration" yang hanya ada di kepala.
Struktur:
/opt/project-a/
├── docker-compose.yml # Definisi semua service
├── .env # Secrets (tidak di-git)
├── config/ # Konfigurasi aplikasi
└── scripts/ # Deploy, backup, monitor
Docker Compose adalah IaC. Satu file docker-compose.yml mendefinisikan seluruh stack: image, ports, volumes, networks, environment, health checks, memory limits. Run docker compose up -d dan seluruh stack berjalan.
Rollback? git checkout HEAD~1 && docker compose up -d. Done.
Memory Management: Tidak Ada OOM Kill
Server 2GB RAM menjalankan 12+ container. Tanpa manajemen yang baik, satu container bisa habiskan semua RAM dan crash-kan yang lain.
Solusi: memory limits per container.
Total alokasi: ~3.6GB (dalam 2GB RAM + swap). Container yang melebihi limit akan di-kill oleh OOM killer, bukan crash-kan seluruh server.
Hasil: Server yang sebelumnya crash setiap beberapa hari karena OOM, sekarang sudah jalan 35+ hari tanpa masalah.
Cloudflare Tunnel: Tidak Perlu Buka Port
Expose port ke internet = security risk. Buka port di firewall = kompleks. Solusi: Cloudflare Tunnel.
Request → Cloudflare Edge → Tunnel → NPM → Container
Keuntungan:
- Tidak perlu buka port di firewall
- SSL otomatis dari Cloudflare
- DDoS protection bawaan
- IP server tersembunyi dari publik
Implementasi: Satu container cloudflared yang connect ke Cloudflare. DNS pointing ke tunnel. Selesai.
Backup Strategy
Automated backup setiap jam 2 pagi.
Backup mencakup:
- Docker volumes (database, uploads)
- Konfigurasi (docker-compose.yml, .env)
- Upload ke cloud storage
Restore? Pull backup, docker compose up -d. Selesai.
Monitoring dari HP
Dengan 12+ container, monitoring manual tidak scalable. Solusi: health check script yang jalan setiap menit via cron. Kalau service down, otomatis restart dan kirim notifikasi. Saya bisa monitor dari mana saja via terminal SSH di HP.
Kenapa Ini Works untuk Solo Developer
- Sederhana — Tidak ada Kubernetes, tidak ada Helm charts. Docker Compose cukup.
- Isolated — Setiap project terpisah. Tidak ada dependency hell.
- Reproducible — Semua dalam file. Server baru? Copy file, run compose. Selesai.
- Observable — Semua service punya health check. Masalah terdeteksi sebelum user komplain.
- Mobile-friendly — Semua dikontrol via SSH. Tidak perlu dashboard GUI.
Angka-angkanya
- Server: 2 (US + SG)
- Container: 12+
- Network isolation: 4 terpisah
- Uptime: 35+ hari
- Tim: 1 orang
- Perangkat: Samsung Android
- Crash terakhir: 35+ hari lalu
Kesimpulan
Arsitektur 2-server dengan Brain-Hands pattern bukan untuk semua orang. Tapi untuk solo developer yang manage multiple project, ini memberikan:
- Isolasi tanpa kompleksitas Kubernetes
- Fault tolerance tanpa load balancer
- Security tanpa firewall rules yang rumit
- Mobility — kelola semuanya dari HP
Kadang solusi terbaik bukan yang paling canggih, tapi yang paling sederhana yang masih works.
Ditulis dari Samsung Galaxy, sambil monitoring 12 container di 2 benua.
Top comments (0)