Cara Membuat Localhost Jadi Online dengan Cloudflare Tunnel (Pakai Domain Sendiri)

Panduan praktis untuk mempublikasikan aplikasi yang berjalan di localhost (misalnya web app di port 3000/5173/8080) agar bisa diakses publik menggunakan Cloudflare Tunnel, lengkap dengan konfigurasi domain yang sudah Anda miliki. Cocok untuk developer, QA, dan tim kecil yang butuh demo cepat tanpa buka port router atau setting NAT.

Apa Itu Cloudflare Tunnel dan Kenapa Lebih Aman daripada Port Forwarding

Cloudflare Tunnel (sebelumnya dikenal sebagai Argo Tunnel) adalah metode untuk mengekspos layanan lokal (localhost atau server on-prem) ke internet melalui koneksi outbound yang aman dari perangkat Anda ke jaringan Cloudflare. Artinya, Anda tidak perlu membuka port inbound di modem/router atau firewall.

Secara konsep, alurnya seperti ini:

Browser Publik → Cloudflare (Edge) → Tunnel → cloudflared di PC/Server Anda → Localhost App

Manfaat utama Cloudflare Tunnel:

  • ✅ Tidak perlu port forwarding / public IP.
  • ✅ Mengurangi risiko serangan langsung ke jaringan rumah/kantor.
  • ✅ Bisa memakai domain sendiri dan HTTPS otomatis.
  • ✅ Cocok untuk demo, staging kecil, atau akses tool internal.

⚠️ Catatan penting: Untuk penggunaan production skala besar, tetap perlu arsitektur yang benar (HA, observability, backup, dsb). Tunnel lebih ideal untuk internal tools, staging, atau publikasi cepat.


Prasyarat yang Wajib Disiapkan

  1. Akun Cloudflare (gratis cukup untuk banyak kebutuhan).
  2. Domain yang sudah Anda miliki dan sudah bisa Anda kelola DNS-nya.
  3. Domain tersebut harus ditambahkan ke Cloudflare (nameserver domain mengarah ke Cloudflare).
  4. Perangkat yang menjalankan aplikasi lokal (PC/laptop/server) bisa akses internet outbound.
  5. Aplikasi Anda sudah berjalan di localhost, misalnya: http://localhost:3000.

Arsitektur Contoh Kasus: Localhost Jadi Online dengan Domain

Contoh target yang akan kita buat:

  • Aplikasi berjalan di: http://localhost:3000
  • Domain yang dipakai: app.domainanda.com
  • Akses publik: https://app.domainanda.com

Langkah 1: Pastikan Domain Anda Sudah Aktif di Cloudflare

Sebelum membuat tunnel, pastikan domain sudah berada di dashboard Cloudflare:

  1. Masuk ke Cloudflare Dashboard.
  2. Pilih menu WebsitesAdd a site → masukkan domain Anda.
  3. Ikuti instruksi untuk mengubah nameserver di registrar domain ke nameserver Cloudflare.
  4. Tunggu propagasi sampai status domain di Cloudflare “Active”.

✅ Best Practice: Pastikan Anda memahami bahwa mengganti nameserver berarti DNS dikelola oleh Cloudflare. Migrasikan record DNS lama jika ada (A, MX, TXT untuk email, dsb) sebelum cutover.


Langkah 2: Install cloudflared di Komputer yang Menjalankan Localhost

cloudflared adalah agent yang akan membuat koneksi tunnel dari mesin Anda ke Cloudflare.

Di macOS (konsep instalasi):

brew install cloudflare/cloudflare/cloudflared

Verifikasi:

cloudflared --version

💡 Tips Pro: Jika Anda memakai Windows atau Linux, instalasi juga tersedia lewat package manager atau download binary resmi.


Langkah 3: Login cloudflared ke Akun Cloudflare

Langkah ini akan membuka browser untuk autentikasi dan mengikat mesin Anda ke akun Cloudflare.

cloudflared tunnel login

Setelah sukses, sertifikat akan disimpan di mesin Anda (digunakan untuk membuat tunnel).


Langkah 4: Buat Tunnel Baru

Buat tunnel dan beri nama yang mudah dipahami, misalnya tunnel-localhost:

cloudflared tunnel create tunnel-localhost

Perintah ini akan menghasilkan Tunnel UUID dan membuat credential file di mesin Anda.


Langkah 5: Buat DNS Record untuk Subdomain (Rute ke Tunnel)

Anda bisa membuat DNS record otomatis dari CLI, misalnya untuk app.domainanda.com:

cloudflared tunnel route dns tunnel-localhost app.domainanda.com

Hasilnya, Cloudflare akan membuat record DNS yang mengarah ke tunnel (bukan ke IP publik Anda).

⚠️ Perhatian: Pastikan subdomain yang Anda pilih belum dipakai record penting lain (mis. email/CRM). Gunakan subdomain terpisah untuk aplikasi.


Langkah 6: Konfigurasi Ingress (Mapping Domain → Localhost)

Agar tunnel tahu harus meneruskan request ke port localhost yang mana, buat file konfigurasi config.yml untuk cloudflared.

Struktur konsep yang umum:

tunnel: <TUNNEL_UUID>
credentials-file: /path/ke/<TUNNEL_UUID>.json

ingress:
  - hostname: app.domainanda.com
    service: http://localhost:3000
  - service: http_status:404

✅ Best Practice: Selalu pasang rule terakhir http_status:404 untuk mencegah host tak dikenal diarahkan ke service default.


Langkah 7: Jalankan Tunnel

Jalankan tunnel dengan file config yang sudah dibuat:

cloudflared tunnel run tunnel-localhost

Jika sukses, akses:

  • https://app.domainanda.com

HTTPS akan dikelola oleh Cloudflare, sehingga dari sisi publik akan aman dan valid.


Opsional: Jalankan Tunnel Sebagai Service (Autostart)

Jika tunnel perlu selalu hidup (misalnya untuk staging yang sering dipakai), Anda bisa menjalankan cloudflared sebagai service sesuai OS (launchd/systemd/Windows Service). Prinsipnya: jalankan proses cloudflared saat boot dan restart otomatis jika crash.

💡 Tips Pro: Untuk laptop pribadi, biasanya cukup jalankan manual saat diperlukan. Untuk server mini (NUC/Raspberry Pi/VPS), service mode lebih cocok.


Best Practices: Security dan Access Control

1) Batasi akses dengan Cloudflare Access (Zero Trust)

Jika ini adalah aplikasi internal, sebaiknya jangan dibuka publik tanpa proteksi. Gunakan Cloudflare Zero Trust/Access untuk:

  • Login dengan Google Workspace/Microsoft/OTP
  • Allowlist email tertentu
  • Enforce MFA

🔒 Keamanan: Ini cara paling “rapi” untuk membuat internal app tetap private, tanpa VPN.

2) Pisahkan subdomain untuk setiap aplikasi

  • app.domainanda.com untuk web app
  • api.domainanda.com untuk API
  • grafana.domainanda.com untuk monitoring

3) Pastikan aplikasi lokal tidak lemah secara auth

Cloudflare Tunnel menyelesaikan masalah networking dan TLS, bukan menggantikan autentikasi aplikasi. Minimal pastikan ada login dan kontrol akses.


Troubleshooting Cepat

  1. Domain tidak resolve / 404
    • Pastikan record DNS untuk hostname sudah dibuat via cloudflared tunnel route dns.
    • Pastikan ingress punya hostname yang sama persis.
    • Pastikan rule terakhir adalah http_status:404.
  2. Bad Gateway / 502
    • Aplikasi lokal belum running atau salah port.
    • Service di ingress salah (http vs https).
    • Aplikasi hanya bind ke 127.0.0.1 tidak masalah, tunnel bisa akses localhost; tetapi coba pastikan port benar.
  3. Cloudflared putus-putus
    • Koneksi internet tidak stabil.
    • Jalankan sebagai service dan aktifkan restart policy.

Kesimpulan

  1. Cloudflare Tunnel membuat localhost bisa diakses publik tanpa port forwarding, sehingga setup lebih aman dan cepat.
  2. Domain sendiri bisa dipakai dengan mudah lewat route DNS ke tunnel dan ingress mapping.
  3. Security terbaik dicapai dengan Cloudflare Access untuk membatasi siapa yang boleh membuka aplikasi.
  4. Konfigurasi ingress adalah inti: hostname harus match, service harus benar, dan pasang fallback 404.
  5. Tunnel ideal untuk demo/staging/internal, namun production butuh pertimbangan reliability dan operasional.

Disclaimer: Tulisan ini disusun dari sudut pandang dan pengalaman pribadi. Implementasi bisa berbeda tergantung versi Cloudflare, OS, dan kebijakan keamanan di lingkungan Anda.


Referensi dan Sumber

  1. Cloudflare Tunnel (Cloudflare One) Documentation
  2. Get started with Cloudflare Tunnel
  3. Cloudflare Access (Zero Trust) Documentation
  4. cloudflared configuration file
Share the Post:

Related Posts