# Integrasi & Konfigurasi Cloudflare Tunnel Dokumen ini mendokumentasikan pemetaan hostname, arsitektur origin, panduan verifikasi, dan prosedur rollback untuk integrasi Cloudflare Tunnel pada KeluargaMart Monorepo. --- ## 1. Pemetaan Hostname Publik ke Origin Lokal Kontrak rute ingress publik yang wajib dipertahankan: | Hostname Publik | Origin Hostinger VPS | Container Target | Fungsi Aplikasi | |---|---|---|---| | `erp-km.trl.my.id` | `http://127.0.0.1:3001` | `keluargamart-erp:8080` | Back-Office ERP Admin Portal (Vue 3 SPA) | | `b2b-km.trl.my.id` | `http://127.0.0.1:3002` | `keluargamart-b2b:3000` | B2B Wholesale Storefront (Nuxt 4 SSR) | | `pos-km.trl.my.id` | `http://127.0.0.1:3003` | `keluargamart-pos:8080` | Store POS Register (Vue 3 Cashier SPA) | | `api-km.trl.my.id` | `http://127.0.0.1:3004` | `keluargamart-backend:8080` | Core Go REST API & Direct Client Mobile | > [!IMPORTANT] > Jangan pernah mengubah hostname publik ini pada Cloudflare Dashboard tanpa koordinasi tertulis dan otorisasi dari tim kepemilikan domain. --- ## 2. Struktur Konfigurasi Ingress (`config.yml`) Pada VPS Hostinger, agen `cloudflared` membaca konfigurasi ingress yang mengarahkan keempat domain ke origin loopback lokal: ```yaml tunnel: credentials-file: /etc/cloudflared/.json ingress: # ERP Admin Portal - hostname: erp-km.trl.my.id service: http://127.0.0.1:3001 originRequest: noTLSVerify: false httpHostHeader: erp-km.trl.my.id # B2B E-Commerce - hostname: b2b-km.trl.my.id service: http://127.0.0.1:3002 originRequest: noTLSVerify: false httpHostHeader: b2b-km.trl.my.id # POS Cashier Register - hostname: pos-km.trl.my.id service: http://127.0.0.1:3003 originRequest: noTLSVerify: false httpHostHeader: pos-km.trl.my.id # Core Backend API - hostname: api-km.trl.my.id service: http://127.0.0.1:3004 originRequest: noTLSVerify: false httpHostHeader: api-km.trl.my.id # Catch-all 404 rule (wajib ada di baris terakhir) - service: http_status:404 ``` --- ## 3. Langkah-Langkah Verifikasi Konektivitas Setelah container stack dijalankan di VPS (`podman compose -f infra/containers/compose.prod.yml up -d`): ### 1. Verifikasi Listeners Lokal Pastikan keempat port origin mendengarkan pada interface loopback host: ```bash ss -tulpn | grep -E '3001|3002|3003|3004' ``` Output harus menunjukkan `127.0.0.1:3001`, `127.0.0.1:3002`, `127.0.0.1:3003`, dan `127.0.0.1:3004`. ### 2. Verifikasi Respons HTTP Lokal ```bash curl -I http://127.0.0.1:3001 # ERP: HTTP 200 OK curl -I http://127.0.0.1:3002 # B2B: HTTP 200 OK curl -I http://127.0.0.1:3003 # POS: HTTP 200 OK curl -I http://127.0.0.1:3004/health # API: HTTP 200 OK {"status":"ok"} ``` ### 3. Verifikasi Status Agen Cloudflare Tunnel ```bash systemctl status cloudflared # Atau periksa log koneksi: journalctl -u cloudflared -f ``` --- ## 4. Prosedur Rollback Jaringan Jika tunnel mengalami error konektivitas setelah pembaruan: 1. **Periksa Host Loopback Binding**: Pastikan container tidak bind ke port lain atau gagal start (`podman ps`). 2. **Restart Cloudflared Service**: ```bash sudo systemctl restart cloudflared ``` 3. **Verifikasi Log Error**: Jika muncul error `502 Bad Gateway`, periksa resolver Nginx pada kontainer ERP/POS (`podman logs keluargamart-erp`).