App Hosting ডেপ্লয়মেন্ট করার আগে, আপনি App Hosting এমুলেটর ব্যবহার করে আপনার অ্যাপের স্থানীয় পরীক্ষা চালাতে পারেন, যা ফায়ারবেস লোকাল এমুলেটর স্যুটের একটি অংশ।
App Hosting এমুলেটর ব্যবহার করার আগে, নিশ্চিত হয়ে নিন যে আপনি ফায়ারবেস Local Emulator Suite সামগ্রিক কার্যপ্রবাহ বুঝতে পেরেছেন , এবং Local Emulator Suite ইনস্টল ও কনফিগার করার পাশাপাশি এর CLI কমান্ডগুলো পর্যালোচনা করেছেন।
এই বিষয়টি ধরে নেওয়া হচ্ছে যে আপনি App Hosting সম্পর্কে আগে থেকেই পরিচিত। প্রয়োজন হলে, App Hosting কীভাবে কাজ করে তা বুঝতে App Hosting ভূমিকা এবং অন্যান্য উপকরণগুলো পর্যালোচনা করুন।
App Hosting এমুলেটর দিয়ে আমি কী করতে পারি?
App Hosting এমুলেটর আপনাকে আপনার ওয়েব অ্যাপ্লিকেশনগুলো স্থানীয়ভাবে পরীক্ষা ও উন্নত করতে দেয়। এটি আপনার ডেভেলপমেন্ট প্রক্রিয়াকে সুবিন্যস্ত করতে পারে এবং ফায়ারবেস ব্যবহার করে তৈরি ও App Hosting -এ ডেপ্লয় করা ওয়েব অ্যাপগুলোর মান উন্নত করতে পারে।
App Hosting এমুলেটর:
- এটি আপনাকে
apphosting.yamlকনফিগারেশন ফাইলে এনভায়রনমেন্ট ভেরিয়েবল এবং সিক্রেট সংজ্ঞায়িত করে আপনার ওয়েব অ্যাপ স্থানীয়ভাবে চালানোর সুযোগ দেয়। -
apphosting.emulator.yamlফাইলের মাধ্যমে এমুলেটরে ব্যবহারের জন্য এনভায়রনমেন্ট ভেরিয়েবল এবং সিক্রেট ওভাররাইড করা যায়। - অন্যান্য ফায়ারবেস এমুলেটরগুলির পাশাপাশি এটি ব্যবহার করা যেতে পারে। আপনি যদি ফায়ারস্টোর, অথ বা অন্য কোনো এমুলেটর ব্যবহার করেন, তাহলে Local Emulator Suite নিশ্চিত করে যে App Hosting এমুলেটরের আগে এই এমুলেটরগুলি চালু হয়।
এমুলেটর কনফিগার করুন
শুরু করার জন্য, “ Local Emulator Suite ইনস্টল, কনফিগার এবং ইন্টিগ্রেট করুন” অংশে বর্ণিত পদ্ধতি অনুযায়ী লোকাল এমুলেটর স্যুট ইনস্টল এবং ইনিশিয়ালাইজ করুন। আপনি সেট আপ করতে চান এমন অন্য যেকোনো ফায়ারবেস এমুলেটরের পাশাপাশি, App Hosting Emulator নির্বাচন করতে ভুলবেন না। CLI আপনার কাছে কিছু App Hosting এমুলেটর” ভ্যালু জানতে চাইবে, যার মধ্যে রয়েছে:
- প্রজেক্টের সাপেক্ষে আপনার অ্যাপের রুট ডিরেক্টরি; আপনি যদি App Hosting সাথে মোনোরেপো ব্যবহার করেন, তবে এটি গুরুত্বপূর্ণ।
- আপনি স্থানীয় উন্নয়নের জন্য কোনো মান পরিবর্তন করতে চান কিনা।
- আপনি স্থানীয় উন্নয়নের জন্য সতীর্থদের গোপনীয় তথ্যে প্রবেশাধিকার দিতে চান কিনা।
firebase init emulators
=== Emulators Setup
? Which Firebase emulators do you want to set up? Press Space to select emulators, then Enter to confirm your choices. (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ App Hosting Emulator
◯ Firestore Emulator
◯ Database Emulator
◯ Hosting Emulator
◯ Pub/Sub Emulator
◯ Storage Emulator
◯ Eventarc Emulator
(Move up and down to reveal more choices)
? Specify your app's root directory relative to your project (./)
? The App Hosting emulator uses a file called apphosting.emulator.yaml to
override values in apphosting.yaml for local testing. This codebase does not
have one, would you like to create it? (Y/n)
? Which environment variables would you like to override? (Press <space> to
select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ MEMCACHE_ADDR
◯ API_KEY
? What new value would you like for plaintext MEMCACHE_ADDR?
? What would you like to name the secret reference for API_KEY? (test-api-key)
? What new value would you like for secret TESTKEY [input is hidden]? [input is hidden]
? Your config has secret values. Please provide a comma-separated list of users
or groups who should have access to secrets for local development:
✔ Successfully set IAM bindings on secret test-api-key.
এই সেটআপ ফ্লোতে আপনি যে ভ্যালুগুলো প্রদান করেন, সেগুলো firebase.json এ আপনার App Hosting এমুলেটর কনফিগারেশন আপডেট করতে ব্যবহৃত হয়। আপনি সরাসরি firebase.json আপডেট করার মাধ্যমেও অ্যাপ হোস্টিং এমুলেটর কনফিগার করতে পারেন। অ্যাপ হোস্টিং এমুলেটরের স্কিমাটি হলো:
{
...
"emulators": {
"apphosting": {
"startCommand": <command> [optional]
"rootDirectory": <path> [optional]
}
}
}
- এমুলেটর চালু করার সময়
startCommandস্বয়ংক্রিয়ভাবে তৈরি ও সেট করা হয়। এটি প্রদান করা না হলে, এমুলেটর আপনার প্যাকেজ ম্যানেজারের dev কমান্ডটি শনাক্ত করে চালাবে। -
rootDirectoryis used to support monorepo project setups. If your web app is in a subdirectory, you need to provide the path of that directory relative to the root (the location offirebase.json).
এমুলেশন পরিচালনা করুন
এমুলেটর চালু করলে আপনার অ্যাপের রুট ডিরেক্টরিতে একটি apphosting.emulator.yaml ফাইল তৈরি হয়। এই কনফিগারেশন ফাইলটির স্কিমা প্রোডাকশনে ব্যবহৃত apphosting.yaml ফাইলের মতোই, কিন্তু এটি কঠোরভাবে লোকাল ডেভেলপমেন্টের জন্য তৈরি। ডিফল্টরূপে, এমুলেটর আপনার apphosting.yaml ফাইল থেকে কনফিগারেশন পড়ে, কিন্তু যদি একটি apphosting.emulator.yaml ফাইল উপস্থিত থাকে, তাহলে সেই ফাইলের কনফিগারেশনগুলোকে অগ্রাধিকার দেওয়া হয়।
apphosting.emulator.yaml ফাইলটি সহকর্মীদের সাথে নিরাপদে কমিট এবং শেয়ার করার জন্য ডিজাইন করা হয়েছে। আপনি যাতে ভুলবশত সোর্স রিপোজিটরিগুলিতে সংবেদনশীল ডেটা কমিট না করেন, তা নিশ্চিত করতে apphosting.yaml এ থাকা যেকোনো এনভায়রনমেন্ট ভেরিয়েবল যা একটি সিক্রেট, তা অবশ্যই apphosting.emulator.yaml এও একটি সিক্রেট হতে হবে। যদি কোনো সিক্রেট প্রোডাকশন এবং লোকাল ডেভেলপমেন্টের মধ্যে পরিবর্তন করার প্রয়োজন না হয় (যেমন একটি Gemini API কী), তবে সেটি apphosting.emulator.yaml এ যোগ করার প্রয়োজন নেই; এর পরিবর্তে আপনার টিমকে সেই সিক্রেটটিতে অ্যাক্সেস দিন ।
যদি আপনার অ্যাপ্লিকেশন অনেকগুলো সিক্রেট ব্যবহার করে (উদাহরণস্বরূপ, তিনটি ভিন্ন সার্ভিসের জন্য এপিআই কী, যেখানে প্রোডাকশন, স্টেজিং এবং লোকাল ডেভেলপমেন্টের প্রতিটির জন্য আলাদা আলাদা ভ্যালু থাকে), তাহলে আপনাকে ক্লাউড সিক্রেট ম্যানেজারের ফ্রি টিয়ার অতিক্রম করতে হতে পারে এবং প্রতি মাসে প্রতিটি অতিরিক্ত সিক্রেটের জন্য $0.06 প্রদান করতে হতে পারে। এই ফি এড়ানোর জন্য যদি আপনি সোর্স কন্ট্রোলের বাইরে লোকাল কনফিগারেশন পরিচালনা করতে পছন্দ করেন, তাহলে আপনি লিগ্যাসি apphosting.local.yaml ফাইলটি ব্যবহার করতে পারেন। apphosting.emulator.yaml ফাইলের থেকে ভিন্ন, এই ফাইলটিতে এনভায়রনমেন্ট ভেরিয়েবলের জন্য প্লেইনটেক্সট ভ্যালু প্রদান করার অনুমতি রয়েছে, যেগুলো apphosting.yaml ফাইলে সিক্রেট ভ্যালু হিসেবে থাকে।
ব্যবহারকারী বা গোষ্ঠীগুলিকে গোপনীয় তথ্যে প্রবেশাধিকার দিন
এমুলেটর চালু হওয়ার সময় apphosting.emulator.yaml এ সংরক্ষিত সিক্রেটগুলো পড়া হয়। এর মানে হলো, আপনার ডেভেলপমেন্ট টিমের সেই সিক্রেটটিতে অ্যাক্সেস প্রয়োজন। আপনি কোনো ব্যবহারকারী বা ইমেলের মাধ্যমে কোনো গ্রুপকে একটি সিক্রেটে অ্যাক্সেস দেওয়ার জন্য apphosting:secrets:grantaccess কমান্ডটি ব্যবহার করতে পারেন।
firebase apphosting:secrets:grantaccess test-api-key --emails my-team@my-company.com
প্রযোজ্য ক্ষেত্রে, apphosting.emulator.yaml এ শুধুমাত্র পরীক্ষার জন্য এমন কী (test-only key) ব্যবহার করার কথা বিবেচনা করুন, যেগুলোর প্রোডাকশন ডেটাতে অ্যাক্সেস নেই, কোনো গ্লোবাল সাইড এফেক্ট (যেমন ইমেল পাঠানো, ক্রেডিট কার্ড চার্জ করা) থাকতে পারে না এবং/অথবা যেগুলোর কোটা কম। এটি নিশ্চিত করতে সাহায্য করে যে অপরীক্ষিত কোডের বাস্তব জগতের পরিণতি কম হয়।
ব্যক্তিগত ব্যবহারকারীদের অ্যাক্সেস দেওয়ার পরিবর্তে, সিক্রেট-এর অ্যাক্সেস ম্যানেজ করার জন্য গুগল গ্রুপস ব্যবহার করার কথা বিবেচনা করুন। এটি আপনার ডেভেলপার টিমে নতুন সদস্যদের অন্তর্ভুক্তিকরণকে সহজ করে তুলবে, কারণ গ্রুপে যুক্ত করলেই তারা তাদের প্রয়োজনীয় সমস্ত সিক্রেট-এর অ্যাক্সেস পেয়ে যাবে। আপনার হয়তো ইতিমধ্যেই এমন একটি উপযুক্ত গ্রুপ আছে যেখানে ডেভেলপাররা একে অপরের সাথে যোগাযোগ করে। গুগল গ্রুপস-এর মাধ্যমে অ্যাক্সেস নিয়ন্ত্রণ করা এটাও নিশ্চিত করতে সাহায্য করে যে, আপনার টিম ছেড়ে যাওয়া ডেভেলপাররা ইমেল গ্রুপ থেকে অপসারিত হলে সমস্ত সিক্রেট-এর অ্যাক্সেস হারাবে। তবে, যদি সিক্রেটটির প্রোডাকশন ডেটা বা বাস্তব জগতের সাইড-ইফেক্ট-এর অ্যাক্সেস থাকে, তাহলে firebase apphosting:secrets:set ব্যবহার করে আপনার কী-টি রোটেট করে একটি নতুন ভ্যালু দেওয়া উপযুক্ত হতে পারে।
এমুলেটরটি চালান
firebase emulators:start
এটি আপনার firebase.json ফাইলে সংজ্ঞায়িত App Hosting এমুলেটর সহ সমস্ত এমুলেটর চালু করবে।
অ্যাঙ্গুলার অ্যাপের জন্য start কমান্ড কনফিগার করুন
যদি এমুলেটর start কমান্ডের টাইম আউট হয়, তাহলে সম্ভবত অ্যাঙ্গুলার ডেভেলপমেন্ট সার্ভারটি আপনার অ্যাপটিকে App Hosting এমুলেটরের প্রত্যাশিত পোর্টের চেয়ে ভিন্ন কোনো পোর্টে সার্ভ করছে। আপনি firebase.json এ কিছু অতিরিক্ত কনফিগারেশন যোগ করে এই সমস্যাটি সমাধান করতে পারেন:
-
emulators.apphosting.startCommandকেng serveএ সেট করুন। - ডিফল্ট নয় এমন কোনো পোর্ট ব্যবহার করতে চাইলে,
emulators.apphosting.portদিয়ে তা সেট করুন (emulators.apphosting.startCommandএng serveএর সাথে--portফ্ল্যাগ যোগ করার পরিবর্তে)।
উদাহরণস্বরূপ:
"emulators": {
"apphosting": {
"port": 5002,
"rootDirectory": "./test-app",
"startCommand": "ng serve"
},
"ui": {
"enabled": true
},
...
}