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 dengan 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, karena 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.