Testing webhook dari GitHub, Slack, Stripe, atau service pihak ketiga lain di localhost itu ribet. Mereka butuh URL publik buat POST, dan http://localhost:3000 tidak bisa diakses dari internet. Cloudflare Tunnel menyelesaikan ini — satu command, dapat HTTPS URL langsung, tanpa perlu buat akun.
Install cloudflared
macOS:
brew install cloudflare/cloudflare/cloudflared
Linux (Debian/Ubuntu):
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
sudo dpkg -i cloudflared.deb
Atau ambil binary-nya langsung dari halaman releases kalau pakai distro lain.
Jalankan tunnel
cloudflared tunnel --url http://localhost:3000
Beberapa detik kemudian muncul:
+----------------------------------------------------------+
| Your quick Tunnel has been created! Visit it at |
| https://cotton-steal-most-sage.trycloudflare.com |
+----------------------------------------------------------+
URL itu langsung aktif. Semua request ke URL tersebut akan masuk ke server lokalmu.
Pakai untuk webhook
Copy tunnel URL-nya terus tambahkan path webhook.
GitHub: Repo → Settings → Webhooks → Add webhook
https://cotton-steal-most-sage.trycloudflare.com/api/webhooks/github
Stripe: Dashboard → Webhooks → Add endpoint. Sama saja. Atau kalau pakai Stripe, bisa langsung stripe listen yang sudah handle tunneling otomatis.
Slack, Twilio, SendGrid — service apapun yang butuh callback URL, caranya sama.
Server lokalmu terima webhook persis seperti di production. Log payload-nya, pasang breakpoint di handler, iterasi tanpa perlu deploy.
Satu catatan: URL-nya berubah
Setiap kali jalankan cloudflared tunnel --url, subdomain-nya berbeda. Kalau sudah daftar https://cotton-steal-most-sage.trycloudflare.com/api/webhooks/github di GitHub hari ini, besok perlu update lagi karena dapat subdomain baru.
Kalau cuman testing sebentar, ini tidak masalah. Tapi kalau sama webhook punya masalah berhari-hari, buat akun Cloudflare gratis dan setup named tunnel dengan subdomain milikmu sendiri. Named tunnel tidak berubah setiap restart.
Quick tunnel juga tidak ada autentikasi. URL-nya random jadi susah ditebak, tapi bukan tidak mungkin. Untuk testing webhook ini masih aman — webhook signature sudah diverifikasi di server side. Tapi jangan biarkan quick tunnel jalan semalaman yang arahnya ke server lokal berisi data sensitif.
Selesai
cloudflared tunnel --url http://localhost:3000 dapat public HTTPS URL dalam hitungan detik. Tanpa signup, tanpa konfigurasi. Paste ke webhook dashboard, biarkan tunnel jalan bareng dev server, dan testing seperti di production.