Cloudflare gầnёмার Upstash Integration Cloudflare Workers-র জন্য রিলিজ করেছে। এটি Upstash প্রোডাক্টগুল Workers-এ ব্যবহার করা আরও সহজ করে দিয়েছে। এই ব্লগ পোস্টে, আমরা Upstash Redis ইন্টিগ্রেশন ব্যবহার করে একটি সার্ভারলেস URL শর্টেনার তৈরি করব।
শুরু করা যাক
এই প্রজেক্ট বানানোর ধাপগুলো:
- Upstash ডেটাবেস সেট আপ করুন
- Cloudflare-এ Worker তৈরি করুন
- Cloudflare Workers কে Upstash-এর সাথে ইন্টিগ্রেট করুন
- প্রজেক্ট এলগরিদম ইমপ্লিমেন্ট করুন।
- আপনার অ্যাপ্লিকেশন ডিপ্লয় করুন
ডেটাবেস তৈরি করা
Upstash কনসোলে নেভিগেট করুন, এবং Redis সেকশনে Create database বাটনে ক্লিক করুন একটি Redis ডেটাবেস তৈরি করতে।
বাস! আপনার ডেটাবেস রেডি।
Cloudflare Worker তৈরি করা
আমরা Cloudflare CLI টুল ব্যবহার করব Worker জেনারেট করার জন্য। এটি একটি খুব সহজ প্রসেস। আপনার টার্মিনাল খুলুন এবং নিচের কমান্ডটি টাইপ করুন:
npm create cloudflare@latest
এই কমান্ডটি আপনাকে অ্যাপ্লিকেশনের অপশন এবং কনফিগারেশন দিয়ে নিয়ে যাবে। অবশেষে, এটি আপনাকে Cloudflare-এ লগ ইন করার অনুরোধ করবে। নিচে আমার কনফিগারেশন এবং ফলাফলের একটি উদাহরণ:
আমরা একটি সিংল লাইন কমান্ড দিয়ে অ্যাপ্লিকেশন তৈরি ও ডিপ্লয় করেছি। এই কমান্ডটি নিচের মত একটি ফোল্ডার ইনিশিয়ালাইজ করা উচিত:
/url-shortener
src └── worker.ts
node_modules
package-lock.json
package.json
tsconfig.json
wrangler.toml
Upstash ইন্টিগ্রেশন সক্ষম করা একইভাবে সহজ।
Cloudflare - Upstash ইন্টিগ্রেশন
Cloudflare Dashboard-এ অ্যাক্সেস করুন এবং একই অ্যাকাউন্ট দিয়ে লগ ইন করুন যা আপনি url-shortener অ্যাপ্লিকেশন তৈরি করতে használt ছিল। তারপর, সাইডবারের Workers & Pages > Overview সেকশনে যান। এখানে, আপনি url-shortener অ্যাপ্লিকেশনটি লিস্টেড পাবেন।
অ্যাপ্লিকেশনে ক্লিক করলে আপনাকে অ্যাপ্লিকেশন ডিটেইলস পেজে নিয়ে যাবে, যেখানে আমরা ইন্টিগ্রেশন প্রসেস সম্পন্ন করব। অ্যাপ্লিকেশন ডিটেইলসে Settings ট্যাবে স্যুইচ করুন, এবং Integrations সেকশনে যান। আপনি বিভিন্ন Worker ইন্টিগ্রেশন লিস্টেড দেখবেন। প্রসেস চালিয়ে যেতে, Upstash Redis-এর সাথে জুড়ে Add Integration বাটনে ক্লিক করুন।
ইন্টিগ্রেশন পেজে, আপনার Upstash অ্যাকাউন্টের সাথে সংযোগ করুন। তারপর, ড্রপডাউন মেনু থেকে url-shortener ডেটাবেসটি সিলেক্ট করুন। Save button চাপায় প্রসেস ফাইনালাইজ করুন।
নোট: Configure secrets স্টেপে সিক্রেট নামগুলোর কোনো পরিবর্তন করবেন না। এই শংসাপত্রগুলো কোডে Redis.fromEnv(env) লাইন দ্বারা UPSTASH_REDIS_REST_URL এবং UPSTASH_REDIS_REST_TOKEN হিসেবে অটোমেটিক্যালি পিক আপ হবে।
URL শর্টেনার ইমপ্লিমেন্ট করা
আমাদের ইমপ্লিমেন্টেশন খুব সহজ হবে। এর দুটি ফাংশনালিটি হবে:
যখন POST মেথড ব্যবহার করে একটি URL পাঠানো হবে, একটি র্যান্ডমলি জেনারেট করা কি সেটি অ্যাসাইন করা হবে। এই কি-URL জোড়া Redis-এ সংরক্ষণ করা হবে রিট্রিভারের জন্য। কি Worker URL-এ পাথ হিসেবে অ্যাপেন্ড করা হবে এবং
<YOUR_WORKER_URL>/<KEY>ফরম্যাটে ব্যবহারকারীর কাছে পাঠানো হবে।যখন একজন ব্যবহারকারী পূর্বে যোগ করা কি পাথ হিসেবে Worker URL এক্সেস করবে, কির সংশ্লিষ্ট মান Redis থেকে রিট্রিভ করা হবে। ব্যবহারকারীকে এই URL-এ
307রেসপন্স কোড দিয়ে রিডাইরেক্ট করা হবে।
আমরা অ্যাপ্লিকেশনটি src/worker.ts ফাইলে ইমপ্লিমেন্ট করব। নিচে আমাদের URL শর্টেনারের বেসিক ইমপ্লিমেন্টেশন:
import { Redis } from "@upstash/redis/cloudflare";
export interface Env { UPSTASH_REDIS_REST_URL: string; UPSTASH_REDIS_REST_TOKEN: string; }
export default { async fetch( request: Request, env: Env, ctx: ExecutionContext, ): Promise<Response> { const redis = Redis.fromEnv(env); /* generateRandomKey ফাংশনটি একটি ৭-ডিজিট অ্যালফানিউমেরিক কি রিটার্ন করে। যদি Redis-এ একই কি বিদ্যমান থাকে, তবে এটি নতুন কি তৈরি করবে। */ async function generateRandomKey(): Promise<string> { const key: string = btoa( crypto.getRandomValues(new Uint8Array(2)).toString(), ).replaceAll("=", ""); if (await redis.exists(key)) { return generateRandomKey(); } return key; } /* যদি রিকোয়েস্ট মেথড POST হয়, রিকোয়েস্ট বডি থেকে "longUrl" ফিল্ড এক্সট্র্যাক্ট করা হবে এবং এই URL-র জন্য একটি নতুন কি জেনারেট হবে। তারপর এই কি-ভ্যালু জোড়া Redis-এ পERSIST করা হবে। */ if (request.method === "POST") { const requestUrl = request.url; const body = await request.text(); const { longUrl } = JSON.parse(body); const key = await generateRandomKey(); redis.set(key, longUrl); const responseUrl = requestUrl + key; return new Response(responseUrl); } const slug: string = request.url.split("/").pop() || ""; const url = (await redis.get(slug)) as string; /* যদি স্লাগ Redis DB-এ কি হিসেবে বিদ্যমান থাকে, ব্যবহারকারীকে ভ্যালুতে থাকা URL-এ রিডাইরেক্ট করা হবে। যদি স্লাগ Redis-এ না থাকে, বা এটিই না থাকে, একটি এরর রিটার্ন করা হবে। */ if (url) { return Response.redirect(url, 307); } else { const errorText = !slug ? "Please provide a slug." : `Slug ${slug} not found. `; return new Response(errorText, { status: 404 }); } }, };
এখন আমাদের এলগরিদম রেডি, শুধু একটা ধাপ বাকি: অ্যাপ্লিকেশন ডিপ্লয় করা। টার্মিনাল থেকে url-shortener ফোল্ডারে নেভিগেট করুন এবং নিচের কমান্ডটি চালান:
npm run deploy
আমাদের Cloudflare Worker এখন আপ এবং রানিং! আপনি এটিকে অ্যাপ্লিকেশন ড্যাশবোর্ডে বা একটি curl রিকোয়েস্ট দিয়ে টেস্ট করতে পারেন। আপনার জন্য একটি উদাহরণ রিকোয়েস্ট: আপনি আপনার Worker URL দিয়ে রিপ্লেস করতে পারেন, বা আমার ইমপ্লিমেন্টেশন দিয়ে টেস্ট করতে পারেন:
curl -X POST https://url-shortener.fahreddin.workers.dev \
-d '{ "longUrl" : "https://google.com" }'
রেসপন্স URL-এ ক্লিক করলে আপনাকে https://google.com-এ রিডাইরেক্ট করবে।
উপসংহার
টিউটোরিয়ালটি ফলো করার জন্য ধন্যবাদ!
আপনি যেভাবে আবিষ্কার করেছেন, সার্ভারলেস ফাংশন এবং Upstash Redis-এর শক্তির কম্বিনেশন আপনার প্রজেক্টের জন্য সম্ভাবনার একটি নতুন জগত খুলেছে। এই জোড়ার বহুমুখিতা এবং দক্ষতা আপনাকে এমন সমাধান তৈরি করতে সক্ষম করে যা শুধু উদ্ভাবনী নয়, বরং ملحوظة সমান রেসপন্সিভও।
মনে রাখবেন, এই গাইড শুধু শুরু। আপনি এই প্রজেক্টকে কীভাবে বিস্তার ও উন্নত করতে পারেন তার কোনো সীমা নেই।
আপনার যদি কোনো প্রশ্ন বা সমস্যা থাকে, fahreddin@upstash.com-এ আমার সাথে যোগাযোগ করতে দ্বিধা করবেন না।
শুভ কোডিং!