# Topologi Produksi (Production Topology)
Dokumen ini menjelaskan topologi arsitektur runtime, jaringan kontainer, dan interaksi layanan pada VPS Hostinger KVM 2.
---
## 1. Diagram Topologi Sistem
```mermaid
graph TD
User["Public Internet Users"]
subgraph Cloudflare["Cloudflare Edge Network"]
CF_ERP["erp-km.trl.my.id (SSL/Edge)"]
CF_B2B["b2b-km.trl.my.id (SSL/Edge)"]
CF_POS["pos-km.trl.my.id (SSL/Edge)"]
CF_API["api-km.trl.my.id (SSL/Edge)"]
end
subgraph Hostinger["Hostinger KVM 2 VPS (2 vCPU, 8 GB RAM)"]
CFTunnel["Cloudflare Tunnel Agent (cloudflared)
Running on Host Network"]
subgraph LoopbackPorts["Host Loopback (127.0.0.1)"]
P3001["127.0.0.1:3001"]
P3002["127.0.0.1:3002"]
P3003["127.0.0.1:3003"]
P3004["127.0.0.1:3004"]
end
subgraph ContainerStack["Podman / Docker Bridge Network (keluargamart)"]
ERP["keluargamart-erp
(Nginx 8080)"]
B2B["keluargamart-b2b
(Nuxt SSR 3000)"]
POS["keluargamart-pos
(Nginx 8080)"]
Backend["keluargamart-backend
(Go Chi 8080)"]
NextReport["keluargamart-nextreport
(Puppeteer 5489)"]
DB[(PostgreSQL 16)]
Redis[(Redis 7)]
end
end
User --> CF_ERP
User --> CF_B2B
User --> CF_POS
User --> CF_API
CF_ERP -.->|Encrypted Tunnel| CFTunnel
CF_B2B -.->|Encrypted Tunnel| CFTunnel
CF_POS -.->|Encrypted Tunnel| CFTunnel
CF_API -.->|Encrypted Tunnel| CFTunnel
CFTunnel --> P3001 --> ERP
CFTunnel --> P3002 --> B2B
CFTunnel --> P3003 --> POS
CFTunnel --> P3004 --> Backend
ERP -.->|Internal /api proxy| Backend
POS -.->|Internal /api proxy| Backend
B2B -.->|Internal NUXT_API_PROXY_TARGET| Backend
Backend -.->|Internal PDF rendering| NextReport
Backend --> DB
Backend --> Redis
```
---
## 2. Pemetaan Port Origin & Layanan
| Public Hostname | Host Loopback Origin | Target Container Port | Lingkup Akses |
|---|---|---|---|
| `erp-km.trl.my.id` | `http://127.0.0.1:3001` | `erp:8080` | Terbuka melalui Cloudflare (Auth required) |
| `b2b-km.trl.my.id` | `http://127.0.0.1:3002` | `b2b:3000` | Publik Storefront |
| `pos-km.trl.my.id` | `http://127.0.0.1:3003` | `pos:8080` | Terbuka melalui Cloudflare (Kasir POS) |
| `api-km.trl.my.id` | `http://127.0.0.1:3004` | `backend:8080` | Public API & Mobile |
| *(Internal)* | — | `nextreport:5489` | Internal Docker Network only |
| *(Internal)* | — | `postgres:5432` | Internal Docker Network only |
| *(Internal)* | — | `redis:6379` | Internal Docker Network only |
---
## 3. Isolasi Keamanan Jaringan
1. **Zero Open Public Ports**: Firewall VPS (`ufw` atau Hostinger Cloud Firewall) hanya perlu mengizinkan port `22` (SSH). Port 80, 443, 3001, 3002, 3003, 3004, 5432, 6379 TIDAK BOLEH dibuka ke publik.
2. **Tunnel Ke Edge**: Semua koneksi masuk dienkripsi dan di-tunnel secara aman oleh `cloudflared` ke edge Cloudflare.
3. **Internal Bridge Network**: Komunikasi antar-kontainer (Backend ke DB, Backend ke NextReport, B2B SSR ke Backend) berjalan cepat dan terisolasi melalui bridge network privat `keluargamart`.