অনেক সময় আমাদের webhook টেস্ট করতে হয় অথবা লোকাল কাজ immediately কাউকে দেখানোর প্রয়োজন পড়ে। যেমন ধরুন Stripe বা SSLCommerz-এর payment gateway ইন্টিগ্রেশন করছেন — পেমেন্ট হলে তারা আপনার সার্ভারে একটি webhook পাঠাবে। কিন্তু আপনার localhost:3000 তো বাইরের দুনিয়া থেকে দেখা যায় না! এই সমস্যার সমাধানে অনেকে Ngrok ব্যবহার করেন।
Ngrok এবং Expose-এর মতো টুল ভালো, কিন্তু তাদের ফ্রি ভার্সনে URL স্থায়ী থাকে না — বারবার বদলায়, যা third-party webhook টেস্ট করার সময় বড় ঝামেলা। Cloudflare Tunnel ফ্রি প্ল্যানেই একটি স্থায়ী URL দেয়, যেটা cli রিস্টার্ট বা inactivity-র পরেও একই থাকে।
Cloudflare Tunnel আসলে কী?
cloudflared হলো একটি lightweight daemon যেটা আপনার মেশিন থেকে Cloudflare-এর গ্লোবাল নেটওয়ার্কে আউটবাউন্ড কানেকশন তৈরি করে। একবার কানেকশন হলে ট্র্যাফিক দুই দিক থেকেই চলাচল করতে পারে।
এতে কোনো inbound port খুলতে হয় না, আপনার আসল IP লুকানো থাকে, এবং সব ট্র্যাফিক Cloudflare-এর নেটওয়ার্কের মধ্য দিয়ে যাওয়ায় ক্ষতিকর রিকোয়েস্ট স্বয়ংক্রিয়ভাবে ফিল্টার হয়।
সহজ ভাষায়: আপনার localhost SSL সহ ইন্টারনেটে পাবলিক হয়ে যায় — বিনামূল্যে এবং সম্পূর্ণ নিরাপদে।
Ngrok বনাম Cloudflare Tunnel
| বিষয় | Ngrok (ফ্রি) | Cloudflare Tunnel (ফ্রি) |
|---|---|---|
| URL স্থায়িত্ব | প্রতিবার বদলায় | সবসময় একই |
| Custom Domain | পেইড প্ল্যানে | ফ্রিতেই সম্ভব |
| SSL সার্টিফিকেট | স্বয়ংক্রিয় | স্বয়ংক্রিয় |
| DDoS প্রোটেকশন | সীমিত | বিল্ট-ইন |
| আসল IP গোপন | আংশিক | সম্পূর্ণ |
ধাপ ১ — cloudflared ইন্সটল করুন
# macOS
brew install cloudflared
# Windows (winget)
winget install --id Cloudflare.cloudflared
# Linux (Debian/Ubuntu)
sudo apt install cloudflared
ইন্সটল ঠিকমতো হয়েছে কিনা চেক করুন:
cloudflared --version
ধাপ ২ — Quick Tunnel (অ্যাকাউন্ট ছাড়াই)
দ্রুত কাউকে কিছু দেখাতে হলে বা একবারের জন্য webhook টেস্ট করতে হলে, কোনো অ্যাকাউন্ট ছাড়াই এই একটি কমান্ডেই কাজ হয়ে যাবে:
cloudflared tunnel --url http://localhost:3000
টার্মিনালে এরকম একটি URL দেখাবে:
https://proud-forest-abc123.trycloudflare.com
cloudflared স্বয়ংক্রিয়ভাবে trycloudflare.com-এর একটি র্যান্ডম সাবডোমেইন তৈরি করে টার্মিনালে প্রিন্ট করে দেয়। এই URL সরাসরি Stripe Dashboard বা যেকোনো জায়গায় webhook endpoint হিসেবে দিয়ে দিন।
⚠️ সীমাবদ্ধতা: Quick Tunnel শুধু টেস্টিং ও ডেভেলপমেন্টের জন্য — এটি একযোগে সর্বোচ্চ ২০০টি রিকোয়েস্ট হ্যান্ডেল করতে পারে এবং প্রতিবার রিস্টার্টে URL বদলে যায়।
ধাপ ৩ — স্থায়ী Custom Domain টানেল
দীর্ঘমেয়াদে কাজের জন্য, বিশেষত payment webhook-এর মতো জায়গায় যেখানে URL বারবার আপডেট করা ঝামেলা, সেখানে নিজের ডোমেইনে স্থায়ী টানেল সেটআপ করাটাই বুদ্ধিমানের কাজ।
পূর্বশর্ত: ডোমেইনের nameserver Cloudflare-এ পয়েন্ট করা থাকতে হবে।
Cloudflare অ্যাকাউন্টে লগইন করুন:
cloudflared tunnel login
ব্রাউজার খুলবে, লগইন করুন এবং ডোমেইন অথোরাইজ করুন।
টানেল তৈরি করুন:
cloudflared tunnel create my-dev-tunnel
এই কমান্ড একটি স্থায়ী টানেল তৈরি করে এবং credentials ফাইল ~/.cloudflared/ ডিরেক্টরিতে সেভ করে। আউটপুটে tunnel-এর UUID দেখাবে।
~/.cloudflared/config.yml ফাইল তৈরি করুন:
tunnel: <আপনার-tunnel-UUID>
credentials-file: /home/<username>/.cloudflared/<UUID>.json
ingress:
- hostname: dev.yoursite.com
service: http://localhost:3000
- service: http_status:404
DNS রেকর্ড যোগ করুন:
cloudflared tunnel route dns my-dev-tunnel dev.yoursite.com
টানেল চালু করুন:
cloudflared tunnel run my-dev-tunnel
টানেল সক্রিয় হলে https://dev.yoursite.com-এ অ্যাক্সেস করা যাবে। TLS সার্টিফিকেট স্বয়ংক্রিয়ভাবে তৈরি হবে — কোনো পোর্ট খুলতে হবে না।
এখন Stripe বা যেকোনো payment gateway-এর Dashboard-এ একবারের জন্য এই URL দিয়ে রাখুন:
https://dev.yoursite.com/api/webhook
ল্যাপটপ বন্ধ হোক, ইন্টারনেট যাক — পরের দিন টানেল রান করলেই একই URL কাজ করবে। আর Dashboard-এ বারবার URL আপডেট করতে হবে না।
উপসংহার
Payment gateway webhook টেস্টিং থেকে শুরু করে ক্লায়েন্ট ডেমো — Cloudflare Tunnel লোকাল ডেভেলপমেন্ট শেয়ার করাকে নিরাপদ ও সহজ করে তোলে, port forwarding বা self-signed certificate-এর ঝামেলা ছাড়াই।
একবার সেটআপ করলে বারবার কাজে লাগবে। Quick Tunnel দিয়ে আজই শুরু করুন — মাত্র একটি কমান্ড:
cloudflared tunnel --url http://localhost:3000