Expose Webhook Lokal dengan Domain Statis¶
Use case: testing payment gateway, webhook, OAuth callback, atau integrasi API tanpa perlu deploy ke server publik. Menggunakan URL statis dan HTTPS, cocok untuk Stripe, Midtrans, Xendit, Twilio, GitHub, GitLab, dan layanan serupa.
Ngrok versi gratis kurang ideal untuk pengujian webhook jangka panjang karena:
- URL berubah setiap kali tunnel dibuat
- Memiliki batasan request dan koneksi
- Perlu memperbarui URL webhook di dashboard provider
Alternatif yang lebih stabil adalah Cloudflare Tunnel dengan domain sendiri.
Arsitektur¶
Payment Gateway
│
▼
https://webhook.example.com
│
▼
Cloudflare
│
▼
Cloudflare Tunnel (cloudflared)
│
▼
http://localhost:8000
Webhook hanya mengetahui domain publik, sementara aplikasi tetap berjalan secara lokal.
Prasyarat¶
Pastikan telah memenuhi hal berikut:
- Memiliki domain yang DNS-nya dikelola oleh Cloudflare
- Memiliki akun Cloudflare
- Aplikasi lokal sudah berjalan (misalnya
http://localhost:8000) cloudflaredsudah terpasang
1. Install cloudflared¶
Ikuti panduan instalasi resmi sesuai sistem operasi yang digunakan:
- Windows
- macOS
- Linux (Ubuntu, Debian, Fedora, Arch, dan distribusi lainnya)
Setelah selesai, pastikan instalasi berhasil.
2. Login ke Cloudflare¶
Jalankan:
Browser akan terbuka.
Selanjutnya:
- Login ke akun Cloudflare.
- Pilih domain yang akan digunakan.
- Berikan izin akses.
Jika berhasil, folder konfigurasi akan dibuat secara otomatis.
Linux/macOS
Windows
3. Buat Tunnel¶
Perintah ini akan menghasilkan:
- Tunnel UUID
- File kredensial (
<TUNNEL_UUID>.json)
Contoh:
4. Hubungkan Domain ke Tunnel¶
Misalnya menggunakan subdomain:
Jalankan:
Cloudflare akan otomatis membuat DNS Record berupa CNAME.
Pastikan status DNS adalah Proxied (Orange Cloud).
5. Buat File Konfigurasi¶
Buat file:
Lokasi default:
Linux/macOS
Windows
Contoh konfigurasi:
tunnel: TUNNEL_UUID
credentials-file: /path/to/TUNNEL_UUID.json
ingress:
- hostname: webhook.example.com
service: http://localhost:8000
- service: http_status:404
Sesuaikan:
TUNNEL_UUIDcredentials-filehostnamelocalhost:8000
Contoh path file credentials:
Linux¶
macOS¶
Windows¶
Perhatikan Indentasi YAML
File config.yml menggunakan format YAML yang sensitif terhadap spasi. Pastikan indentasi sesuai contoh.
6. Jalankan Tunnel¶
Jika berhasil, maka request ke:
akan diteruskan ke:
Menjalankan Tanpa config.yml (Opsional)¶
Untuk kebutuhan sederhana, tunnel juga dapat dijalankan langsung:
Namun cara ini tidak menggunakan domain statis, sehingga kurang cocok untuk webhook dari layanan pihak ketiga.
Menjalankan Sebagai Service (Opsional)¶
Agar tunnel otomatis berjalan saat komputer menyala, cloudflared dapat dijalankan sebagai service.
Implementasinya berbeda untuk setiap sistem operasi:
| Sistem Operasi | Service Manager |
|---|---|
| Windows | Windows Service |
| Linux | systemd |
| macOS | launchd |
Silakan mengikuti dokumentasi resmi Cloudflare sesuai sistem operasi yang digunakan.
Contoh Endpoint Webhook¶
Pisahkan endpoint berdasarkan provider agar lebih mudah melakukan debugging.
POST /webhooks/payment/stripe
POST /webhooks/payment/midtrans
POST /webhooks/payment/xendit
POST /webhooks/payment/paypal
POST /webhooks/message/twilio
POST /webhooks/github
POST /webhooks/gitlab
Troubleshooting¶
Jika tunnel tidak berfungsi, periksa beberapa hal berikut.
- Pastikan aplikasi lokal masih berjalan.
- Pastikan DNS sudah mengarah ke tunnel.
- Pastikan DNS menggunakan status Proxied.
- Pastikan isi
config.ymlbenar. - Pastikan path
credentials-filebenar. - Jalankan kembali tunnel dan periksa log error.
Untuk melihat daftar tunnel:
Melihat informasi tunnel:
Menguji konfigurasi:
Melihat log lebih detail:
Kelebihan Cloudflare Tunnel¶
- URL publik tetap (statis)
- HTTPS otomatis
- Tidak perlu membuka port pada router
- Tidak memerlukan IP publik
- Mendukung banyak subdomain dalam satu tunnel
- Gratis untuk penggunaan dasar
- Cocok untuk webhook, callback OAuth, dan pengembangan aplikasi
Kesimpulan¶
| Cloudflare Tunnel | Ngrok (Free) |
|---|---|
| URL statis | ❌ |
| HTTPS otomatis | ✅ |
| Domain sendiri | ✅ |
| Cocok untuk webhook | ✅ |
| Perlu update URL setiap restart | ❌ |
Cloudflare Tunnel merupakan pilihan yang lebih tepat untuk pengembangan yang melibatkan webhook dan integrasi dengan layanan pihak ketiga karena menyediakan URL yang tetap, HTTPS otomatis, dan tidak memerlukan deploy ke server publik.