অনেক সময় আমাদের webhook টেস্ট করতে হয় অথবা লোকাল কাজ immediately কাউকে দেখানোর প্রয়োজন পড়ে। যেমন ধরুন Bkash বা 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 গোপন | আংশিক | সম্পূর্ণ |
চলুন দেখা যাক কীভাবে ক্লাউড ফ্লায়ার টানেল ব্যবহার করা যায়। শুরুতেই আমাদেরকে ক্লাউডফ্লায়ারের cli আমাদের মেসিনে install করতে হবে।
ধাপ ১ — 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 সরাসরি Bkash Dashboard বা যেকোনো জায়গায় webhook endpoint হিসেবে দিতে পারবেন।
⚠️ সীমাবদ্ধতা: Quick Tunnel শুধু টেস্টিং ও ডেভেলপমেন্টের জন্য — এটি একযোগে সর্বোচ্চ ২০০টি রিকোয়েস্ট হ্যান্ডেল করতে পারে এবং প্রতিবার রিস্টার্টে URL বদলে যায়।
ধাপ ৩ — Fixed Domain Tunnel
দীর্ঘমেয়াদে কাজের জন্য, বিশেষত payment webhook-এর মতো জায়গায় যেখানে URL বারবার আপডেট করা ঝামেলা, সেখানে নিজের ডোমেইনে স্থায়ী টানেল সেটআপ করাটাই বুদ্ধিমানের কাজ।
পূর্বশর্ত: ডোমেইনের nameserver Cloudflare-এ পয়েন্ট করা থাকতে হবে।
Cloudflare অ্যাকাউন্টে লগইন করুন:
cloudflared tunnel login
ব্রাউজার খুলবে, লগইন করুন এবং ডোমেইন অথোরাইজ করুন।
টানেল তৈরি করুন:
cloudflared tunnel create my-dev-tunnel
এই কমান্ড একটি স্থায়ী টানেল তৈরি করে এবং credentials ফাইল ~/.cloudflared/ ডিরেক্টরিতে সেভ করে। আউটপুটে tunnel-এর UUID দেখাবে।
DNS রেকর্ড যোগ করুন:
cloudflared tunnel route dns <টানেলের-নাম-অথবা-UUID> dev.yoursite.com
উদাহরণ: cloudflared tunnel route dns my-dev-tunnel dev.yoursite.com — প্রথম আর্গুমেন্টে টানেলের নাম (my-dev-tunnel) বা UUID যেকোনোটি দেওয়া যায়।
টানেল চালু করুন — config.yml ছাড়াই (অন-ডিমান্ড)
ingress লিখে ~/.cloudflared/config.yml রাখা সবসময় লাগবে না। টানেল একবার create করে DNS রুট ঠিক করে ফেললে, লোকাল অ্যাপ কোন পোর্টে চলছে সেটা কমান্ডলাইনে বলে যখন দরকার তখনই টানেল চালু করা যায় — ফাইল এডিট ছাড়াই।
cloudflared tunnel --url localhost:3000 run <NAME>
<NAME>-এ cloudflared tunnel create-এর সময় যে নাম দিয়েছিলেন (যেমন my-dev-tunnel) সেটি বসান। প্রয়োজনে স্কিম সহ লিখুন: http://localhost:3000।
ঐচ্ছিক — ~/.cloudflared/config.yml (একাধিক hostname বা জটিল ingress)
একাধিক hostname, http_status:404 ক্যাচ-অল, বা অন্য ingress নিয়ম ফাইলে রাখতে চাইলে তখন 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
এই ক্ষেত্রে লোকাল সার্ভিসের ঠিকানা ingress-এ থাকায় চালু করতে:
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