আপনার ডাইনামিক কন্টেন্ট তৈরি ও পরিবেশন করতে অথবা মাইক্রোসার্ভিস হিসেবে REST API তৈরি করতে Cloud Functions সাথে Firebase Hosting যুক্ত করুন।
Cloud Functions for Firebase আপনাকে HTTPS অনুরোধের জবাবে স্বয়ংক্রিয়ভাবে ব্যাকএন্ড কোড চালাতে দেয়। আপনার কোড গুগলের ক্লাউডে সংরক্ষিত থাকে এবং একটি পরিচালিত পরিবেশে চলে। আপনার নিজের সার্ভার পরিচালনা এবং স্কেল করার কোনো প্রয়োজন নেই।
Firebase Hosting সাথে সমন্বিত Cloud Functions উদাহরণ ও নমুনা দেখতে আমাদের সার্ভারলেস ওভারভিউ দেখুন।
Cloud Functions Firebase Hosting এর সাথে সংযুক্ত করুন
এই বিভাগে Firebase Hosting এর সাথে একটি ফাংশন সংযোগ করার জন্য ধাপে ধাপে উদাহরণ দেওয়া হয়েছে।
মনে রাখবেন যে, ডাইনামিক কন্টেন্ট পরিবেশনের পারফরম্যান্স উন্নত করতে আপনি ঐচ্ছিকভাবে আপনার ক্যাশ সেটিংস পরিবর্তন করতে পারেন।
ধাপ ১: Cloud Functions সেট আপ করুন
নিশ্চিত করুন যে আপনার কাছে Firebase CLI-এর সর্বশেষ সংস্করণ রয়েছে এবং আপনি Firebase Hosting চালু করেছেন।
CLI ইনস্টল করা এবং Hosting চালু করার বিষয়ে বিস্তারিত নির্দেশাবলীর জন্য, Hosting এর 'গেট স্টার্টেড' গাইডটি দেখুন।
নিশ্চিত করুন যে আপনি Cloud Functions সেট আপ করেছেন:
আপনি যদি ইতিমধ্যেই Cloud Functions সেট আপ করে থাকেন, তাহলে আপনি ধাপ ২: একটি HTTPS ফাংশন তৈরি এবং পরীক্ষা করতে পারেন।
যদি আপনি Cloud Functions সেট আপ না করে থাকেন :
আপনার প্রজেক্ট ডিরেক্টরির রুট থেকে নিম্নলিখিত কমান্ডটি চালিয়ে Cloud Functions চালু করুন:
firebase init functions
নির্দেশিত হলে জাভাস্ক্রিপ্ট নির্বাচন করুন (এই ধাপে ধাপে দেখানো উদাহরণটিতে JS ব্যবহার করা হয়েছে)।
আপনার লোকাল প্রজেক্ট ডিরেক্টরিতে (যা আপনি এইমাত্র চালানো Firebase কমান্ডের মাধ্যমে তৈরি করেছেন) একটি
functionsডিরেক্টরি আছে কিনা তা যাচাই করুন। এইfunctionsডিরেক্টরিতেই Cloud Functions কোড থাকে।
ধাপ ২: আপনার Hosting সাইটের জন্য একটি HTTPS ফাংশন তৈরি ও পরীক্ষা করুন।
আপনার পছন্দের এডিটরে
/functions/index.jsখুলুন।ফাইলটির বিষয়বস্তু নিম্নলিখিত কোড দিয়ে প্রতিস্থাপন করুন।
এই কোডটি
bigbenনামের একটি HTTPS ফাংশন তৈরি করে, যা ঘড়ির কাঁটার মতো দিনের প্রতিটি ঘণ্টায় HTTPS অনুরোধের জবাবে একটিBONGশব্দ করে।const functions = require('firebase-functions/v1'); exports.bigben = functions.https.onRequest((req, res) => { const hours = (new Date().getHours() % 12) + 1 // London is UTC + 1hr; res.status(200).send(`<!doctype html> <head> <title>Time</title> </head> <body> ${'BONG '.repeat(hours)} </body> </html>`); });Firebase Local Emulator Suite ব্যবহার করে আপনার ফাংশনগুলো স্থানীয়ভাবে পরীক্ষা করুন।
আপনার স্থানীয় প্রজেক্ট ডিরেক্টরির রুট থেকে নিম্নলিখিত কমান্ডটি চালান:
firebase emulators:start
CLI দ্বারা প্রাপ্ত স্থানীয় URL ব্যবহার করে ফাংশনটি অ্যাক্সেস করুন, উদাহরণস্বরূপ:
।http://localhost:5001/ PROJECT_ID /us-central1/bigben
HTTPS অনুরোধ সম্পর্কে আরও জানতে Cloud Functions ডকুমেন্টেশন দেখুন।
পরবর্তী ধাপে দেখানো হবে কীভাবে একটি Firebase Hosting ইউআরএল থেকে এই HTTPS ফাংশনটি অ্যাক্সেস করতে হয়, যাতে এটি আপনার ফায়ারবেস-হোস্টেড সাইটের জন্য ডাইনামিক কন্টেন্ট তৈরি করতে পারে।
ধাপ ৩: আপনার ফাংশনে HTTPS অনুরোধগুলি নির্দেশ করুন
রিরাইট রুল ব্যবহার করে, আপনি নির্দিষ্ট প্যাটার্নের সাথে মিলে যাওয়া রিকোয়েস্টগুলোকে একটিমাত্র গন্তব্যে পাঠাতে পারেন। নিচের ধাপগুলোতে দেখানো হয়েছে কীভাবে আপনার Hosting সাইটে ../bigben পাথ থেকে আসা সমস্ত রিকোয়েস্টকে bigben ফাংশনটি এক্সিকিউট করার জন্য নির্দেশ দেবেন।
আপনার
firebase.jsonফাইলটি খুলুন।hostingসেকশনের অধীনে নিম্নলিখিতrewriteকনফিগারেশনটি যোগ করুন:"hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "/bigben", "function": { "functionId": "bigben", "region": "us-central1" // optional (see note below) "pinTag": true // optional (see note below) } } ] }ফায়ারবেস এমুলেটরগুলো দিয়ে পুনরায় পরীক্ষা করে নিশ্চিত করুন যে আপনার রিডাইরেক্টটি প্রত্যাশিতভাবে কাজ করছে।
আপনার স্থানীয় প্রজেক্ট ডিরেক্টরির রুট থেকে নিম্নলিখিত কমান্ডটি চালান:
firebase emulators:start
CLI দ্বারা প্রাপ্ত আপনার সাইটের স্থানীয়ভাবে হোস্ট করা URL-টি (সাধারণত
localhost:5000) ভিজিট করুন, কিন্তু URL-টির শেষেbigbenযুক্ত করুন, যেমন:http://localhost:5000/bigben
আপনার সাইটের জন্য আপনার ফাংশন এবং এর কার্যকারিতা পরিমার্জন করতে থাকুন। এই পরিমার্জনগুলো পরীক্ষা করার জন্য ফায়ারবেস এমুলেটরগুলো ব্যবহার করুন।
hosting.rewritesকনফিগের কোনোfunctionব্লক থেকে যদিregionউল্লেখ না করা থাকে, তাহলে Firebase CLI ফাংশনটির সোর্স কোড থেকে স্বয়ংক্রিয়ভাবে region শনাক্ত করার চেষ্টা করে, যা অনির্দিষ্ট থাকলে ডিফল্টভাবেus-central1হয়ে যায়। যদি ফাংশনটির সোর্স কোড পাওয়া না যায়, তাহলে CLI ডেপ্লয় করা ফাংশন থেকে region শনাক্ত করার চেষ্টা করে। যদি ফাংশনটি একাধিক region-এ থাকে, তাহলে CLI-এর জন্যhosting.rewritesকনফিগেregionউল্লেখ করা আবশ্যক।
pinTagফিচারটি শুধুমাত্র Cloud Functions for Firebase (2nd gen)-এ উপলব্ধ। এই ফিচারের মাধ্যমে, আপনি নিশ্চিত করতে পারেন যে আপনার সাইটের ডাইনামিক কন্টেন্ট তৈরির প্রতিটি ফাংশন আপনার স্ট্যাটিক Hosting রিসোর্স এবং Hosting কনফিগের সাথে সিঙ্ক করা আছে। এছাড়াও, এই ফিচারটি আপনাকে Hosting প্রিভিউ চ্যানেলে আপনার ফাংশনগুলোর রিরাইট প্রিভিউ করার সুযোগ দেয়।আপনি যদি
hosting.rewritesকনফিগের কোনোfunctionব্লকে"pinTag": trueযোগ করেন, তাহলেচালালেও আপনার স্ট্যাটিক Hosting রিসোর্স এবং কনফিগারেশনের সাথে "pinned" ফাংশনটিও ডেপ্লয় হয়ে যাবে। আপনি যদি আপনার সাইটের কোনো ভার্সন রোল ব্যাক করেন, তাহলে "pinned" ফাংশনটিও রোল ব্যাক হয়ে যাবে।firebase deploy --only hosting এই ফিচারটি Cloud Run ট্যাগ-এর উপর নির্ভর করে, যেখানে প্রতি সার্ভিসে ১০০০টি এবং প্রতি অঞ্চলে ২০০০টি ট্যাগের সীমা রয়েছে। এর মানে হলো, শত শতবার ডেপ্লয় করার পর একটি সাইটের সবচেয়ে পুরোনো সংস্করণগুলো কাজ করা বন্ধ করে দিতে পারে।
সর্বোত্তম পারফরম্যান্সের জন্য, নিম্নলিখিত অঞ্চলগুলির মধ্যে একটি বেছে নিয়ে আপনার ফাংশনগুলিকে Hosting সাথে সংযুক্ত করুন:
-
us-west1 -
us-central1 -
us-east1 -
europe-west1 -
asia-east1
রিরাইট রুল সম্পর্কে আরও বিস্তারিত জানতে Hosting কনফিগারেশন পেজটি দেখুন। এছাড়াও, আপনি বিভিন্ন Hosting কনফিগারেশনের জন্য রেসপন্সগুলোর অগ্রাধিকার ক্রম সম্পর্কে জানতে পারবেন।
মনে রাখবেন যে, ডাইনামিক কন্টেন্ট পরিবেশনের পারফরম্যান্স উন্নত করতে আপনি ঐচ্ছিকভাবে আপনার ক্যাশ সেটিংস পরিবর্তন করতে পারেন।
ধাপ ৪: আপনার ফাংশনটি ডিপ্লয় করুন
একবার আপনার ফাংশনটি এমুলেটরে ইচ্ছামতো কাজ করা শুরু করলে, আপনি আসল প্রোজেক্ট রিসোর্স ব্যবহার করে এটিকে ডেপ্লয়, টেস্ট এবং রান করার জন্য অগ্রসর হতে পারেন। প্রোডাকশনে চলমান ফাংশনগুলোর স্কেলিং আচরণ নিয়ন্ত্রণের জন্য রানটাইম অপশন সেট করার কথা বিবেচনা করার এটি একটি ভালো সময়।
আপনার লোকাল প্রজেক্ট ডিরেক্টরির রুট থেকে নিম্নলিখিত কমান্ডটি চালিয়ে আপনার ফাংশন এবং Hosting কন্টেন্ট ও কনফিগারেশন আপনার সাইটে ডিপ্লয় করুন:
firebase deploy --only functions,hosting
নিম্নলিখিত URL-গুলিতে আপনার লাইভ সাইট এবং ফাংশন অ্যাক্সেস করুন:
আপনার ফায়ারবেস সাবডোমেনগুলি:
PROJECT_ID .web.app/bigbenএবংPROJECT_ID .firebaseapp.com/bigbenযেকোনো সংযুক্ত কাস্টম ডোমেইন :
CUSTOM_DOMAIN /bigben
একটি ওয়েব ফ্রেমওয়ার্ক ব্যবহার করুন
আপনি Cloud Functions এক্সপ্রেস.জেএস (Express.js) -এর মতো ওয়েব ফ্রেমওয়ার্ক ব্যবহার করে আপনার অ্যাপের ডাইনামিক কন্টেন্ট পরিবেশন করতে পারেন এবং আরও সহজে জটিল ওয়েব অ্যাপ তৈরি করতে পারেন।
নিম্নলিখিত অংশে Firebase Hosting এবং Cloud Functions সাথে এক্সপ্রেস.জেএস ব্যবহারের একটি ধাপে ধাপে উদাহরণ দেওয়া হয়েছে।
আপনার
functionsডিরেক্টরি থেকে নিম্নলিখিত কমান্ডটি চালিয়ে আপনার লোকাল প্রজেক্টে Express.js ইনস্টল করুন:npm install express --save
আপনার
/functions/index.jsফাইলটি খুলুন, তারপর Express.js ইম্পোর্ট এবং ইনিশিয়ালাইজ করুন:const functions = require('firebase-functions/v1'); const express = require('express'); const app = express();
নিম্নলিখিত দুটি এন্ডপয়েন্ট যোগ করুন:
আমাদের ওয়েবসাইটের ইন্ডেক্স পরিবেশন করার জন্য প্রথম এন্ডপয়েন্টটি
/এ যোগ করুন।app.get('/', (req, res) => { const date = new Date(); const hours = (date.getHours() % 12) + 1; // London is UTC + 1hr; res.send(` <!doctype html> <head> <title>Time</title> <link rel="stylesheet" href="/style.css"> <script src="/script.js"></script> </head> <body> <p>In London, the clock strikes: <span id="bongs">${'BONG '.repeat(hours)}</span></p> <button onClick="refresh(this)">Refresh</button> </body> </html>`); });এবং
/apiঅধীনে JSON ফরম্যাটে একটি API হিসাবেBONGসংখ্যাটি ফেরত দেওয়ার জন্য আরেকটি এন্ডপয়েন্ট:app.get('/api', (req, res) => { const date = new Date(); const hours = (date.getHours() % 12) + 1; // London is UTC + 1hr; res.json({bongs: 'BONG '.repeat(hours)}); });
Express.js অ্যাপটিকে HTTPS ফাংশন হিসেবে এক্সপোর্ট করুন:
exports.app = functions.https.onRequest(app);
আপনার
firebase.jsonফাইলে, সমস্ত অনুরোধappফাংশনে পাঠান। এই পুনর্লিখনটি Express.js-কে আমাদের কনফিগার করা বিভিন্ন সাবপাথ (এই উদাহরণে,/এবং/api) পরিবেশন করার সুযোগ দেয়।{ "hosting": { // ... // Add the "rewrites" attribute within "hosting" "rewrites": [ { "source": "**", "function": "app" } ] } }
মিডলওয়্যার যোগ করুন
আমাদের উদাহরণটি চালিয়ে গেলে, এখন যেহেতু আপনি Express.js ব্যবহার করছেন, আপনি প্রচলিত পদ্ধতিতেই Express.js মিডলওয়্যার যোগ করতে পারেন। উদাহরণস্বরূপ, আপনি আমাদের এন্ডপয়েন্টগুলিতে CORS রিকোয়েস্ট সক্রিয় করতে পারেন।
নিম্নলিখিত কমান্ডটি চালিয়ে
corsমিডলওয়্যারটি ইনস্টল করুন:npm install --save cors
আপনার
/functions/index.jsফাইলটি খুলুন, তারপর আপনার Express.js অ্যাপেcorsযোগ করুন, এইভাবে:const cors = require('cors')({origin: true}); app.use(cors);
এক্সপ্রেস অ্যাপ এবং মিডলওয়্যার মডিউলের সাথে ফায়ারবেস ব্যবহার সম্পর্কে আরও জানতে Cloud Functions ডকুমেন্টেশন দেখুন।
পরবর্তী পদক্ষেপ
আপনার ডাইনামিক কন্টেন্টের জন্য একটি গ্লোবাল সিডিএন-এ ক্যাশিং সেট আপ করুন ।
Firebase অ্যাডমিন SDK ব্যবহার করে অন্যান্য Firebase পরিষেবাগুলির সাথে যোগাযোগ করুন।
Cloud Functions মূল্য এবং কোটা ও সীমা পর্যালোচনা করুন।