App Hosting ব্যাকএন্ড কনফিগার ও ম্যানেজ করা

App Hosting সহজে ব্যবহার করা ও কম রক্ষণাবেক্ষণের জন্য ডিজাইন করা হয়েছে, বেশিরভাগ ব্যবহারের ক্ষেত্রে ডিফল্ট সেটিংস অপ্টিমাইজ করা হয়েছে। একই সাথে, App Hosting আপনার নির্দিষ্ট প্রয়োজনের জন্য ব্যাকএন্ড ম্যানেজ ও কনফিগার করার জন্য টুল প্রদান করে। এই নির্দেশিকায় সেইসব টুল ও প্রসেস সম্পর্কে বর্ণনা করা হয়েছে।

এনভায়রনমেন্ট ভেরিয়েবেল এবং সিক্রেট সেট এবং আপডেট করে

App Hosting আপনাকে সংবেদনশীল নয় এমন কনফিগারেশন ভ্যালুর জন্য এনভায়রনমেন্ট ভেরিয়েবল এবং API কী, ডেটাবেস ক্রেডেনশিয়াল ও পরিষেবা টোকেনের মতো সংবেদনশীল প্যারামিটারের জন্য সিক্রেট ব্যবহার করতে দেয়।

  • স্ট্যান্ডার্ড এনভায়রনমেন্ট ভেরিয়েবল: সংবেদনশীল নয় এমন প্লেন-টেক্সট কনফিগারেশনের (যেমন সর্বজনীন API URL, ফিচার ফ্ল্যাগ বা বিল্ড টার্গেট) জন্য ব্যবহার করা হয়। প্রোজেক্টের সব মেম্বার ভ্যালু দেখতে পাবেন।
  • সিক্রেট: সংবেদনশীল প্যারামিটারের (যেমন OAuth ক্লায়েন্ট সিক্রেট, API টোকেন বা ডেটাবেস পাসওয়ার্ড) জন্য ব্যবহার করা হয়। সিক্রেট Cloud Secret Manager-এর মাধ্যমে ব্যাক-আপ নেওয়া হয়। গোপন ভ্যালু সুরক্ষিত থাকে এবং Firebase কনসোলে কখনও প্লেন টেক্সট হিসেবে দেখানো হয় না; পরিবর্তে, কনসোল ক্লাউড সিক্রেট ম্যানেজারে সরাসরি গোপন ভ্যালু দেখতে এবং ম্যানেজ করতে ডিপ লিঙ্ক প্রদান করে।

আপনি দুটি পরিপূরক পদ্ধতি ব্যবহার করে এনভায়রনমেন্ট প্যারামিটার নির্ধারণ ও ম্যানেজ করতে পারবেন:

  • Firebase কনসোল: প্রাথমিক ব্যাকএন্ড তৈরি করার সময় বা ব্যাকএন্ড সেটিংসে পোস্ট-ডিপ্লয়মেন্টের সময় ডাইনামিকভাবে সিক্রেট বা ভেরিয়েবল দ্রুত যোগ, এডিট এবং অ্যাটাচ করুন।
  • কোড-ফার্স্ট (apphosting.yaml): ভার্সন-কন্ট্রোলড ডিপ্লয়মেন্টের জন্য আপনার রিপোজিটরির কনফিগারেশন ফাইলে এনভায়রনমেন্ট ভেরিয়েবেল ও সিক্রেট রেফারেন্স ঘোষণা করুন অথবা apphosting.<env>.yaml ব্যবহার করে বিভিন্ন এনভায়রনমেন্টের জন্য বিভিন্ন ভ্যালু সেট করুন।

Firebase কনসোল

এনভায়রনমেন্ট ভেরিয়েবল যোগ করার জন্য Firebase কনসোল ডায়ালগের স্ক্রিন ক্যাপচার

apphosting.yaml

env:
  - variable: STORAGE_BUCKET
    value: mybucket.firebasestorage.app
  - variable: API_KEY
    secret: myApiKeySecret

Firebase কনসোলে ভেরিয়েবল ও সিক্রেট ম্যানেজ করুন

আপনি ব্যাকএন্ড তৈরি করার সময় বা যেকোনও সময় ব্যাকএন্ড সেটিংস থেকে Firebase কনসোলে এনভায়রনমেন্ট ভেরিয়েবল ও সিক্রেট কনফিগার করতে পারবেন। ডিপ্লয় না করে পরিবর্তন সেভ করলে তা আপনার পরবর্তী রোলআউটে কার্যকর হবে এবং বর্তমান রোলআউটে কোনও প্রভাব ফেলবে না।

ব্যাকএন্ড তৈরির সময় ভেরিয়েবল ও সিক্রেট সেট-আপ করা

Firebase কনসোলে নতুন App Hosting ব্যাকএন্ড তৈরি করার সময়, আপনি সেট-আপ উইজার্ডের আপনার ব্যাকএন্ড কনফিগার করুন ধাপে স্ট্যান্ডার্ড এনভায়রনমেন্ট ভেরিয়েবল ও সিক্রেট কনফিগার করতে পারবেন:

  1. Firebase কনসোলে, হোস্টিং ও সার্ভারলেস > App Hosting বিকল্পে নেভিগেট করুন এবং ব্যাকএন্ড তৈরি করুন বিকল্পে ক্লিক করুন।
  2. আপনার প্রাথমিক অঞ্চল এবং কোড রিপোজিটরি বেছে নিতে প্রাথমিক উইজার্ডের ধাপগুলি সম্পূর্ণ করুন।
  3. আপনার ব্যাকএন্ড কনফিগার করুন বিভাগে, এনভায়রনমেন্ট ভেরিয়েবেল এবং সিক্রেট-এর জন্য কলাপ্স করা যায় এমন কার্ডগুলি খুঁজুন, যেখানে আপনি স্ট্যান্ডার্ড ভেরিয়েবেল যোগ করতে এবং সিক্রেট অ্যাটাচ করতে পারবেন।
  4. ব্যাকএন্ড ক্রিয়েশন উইজার্ড সম্পূর্ণ করে শেষ করুন ও ডিপ্লয় করুন বিকল্পে ক্লিক করুন।

ব্যাকএন্ড সেটিংসে ভেরিয়েবল ও সিক্রেট ম্যানেজ করুন

আপনি ব্যাকএন্ড সেটিংস ড্যাশবোর্ড থেকে অ্যাক্টিভ ব্যাকএন্ডের জন্য এনভায়রনমেন্ট ভেরিয়েবল এবং সিক্রেট দেখতে, যোগ করতে, এডিট করতে বা মুছে ফেলতে পারবেন:

  1. Firebase কনসোলে, আপনার App Hosting ব্যাকএন্ড বেছে নিন এবং সেটিংস > এনভায়রনমেন্ট খুলুন।
  2. এনভায়রনমেন্ট ভেরিয়েবল টেবিলে আগে থেকে থাকা কনফিগারেশন পর্যালোচনা করুন:
    • স্ট্যান্ডার্ড ভেরিয়েবল: কপি করা যায় এমন কোড ব্লকে ভ্যালু প্লেন টেক্সট হিসেবে দেখানো হয়।
    • সিক্রেট: সিক্রেটের নাম সহ ক্লিক করা যায় এমন লিঙ্ক হিসেবে দেখানো হয় (যা Google Cloud কনসোলে Cloud Secret Manager খোলে) এবং এর সাথে টার্গেট করা ভার্সনও (যেমন latest বা 2-এর মতো নির্দিষ্ট ভার্সন নম্বর) দেখানো হয়।
  3. কোনও ভেরিয়েবল বা গোপন তথ্য যোগ করতে:
    1. নতুন যোগ করুন বিকল্পে ক্লিক করুন।
    2. ধাপ ১: ধরন বেছে নিন বিকল্পে গিয়ে, স্ট্যান্ডার্ড এনভায়রনমেন্ট ভেরিয়েবল (প্রজেক্টের সব মেম্বার দেখতে পাবেন এমন সংবেদনশীল নয় এমন ডেটার জন্য) অথবা সিক্রেট (সীমিত অ্যাক্সেস সহ API কী ও সংবেদনশীল ক্রেডেনশিয়ালের জন্য) বেছে নিন এবং তারপরে পরবর্তী বিকল্পে ক্লিক করুন।
    3. ধাপ ২: সেটিংস কনফিগার করুন-এ গিয়ে কী-এর নাম লিখুন এবং হয় প্লেন-টেক্সট ভ্যালু (স্ট্যান্ডার্ড ভেরিয়েবেলের জন্য) লিখুন অথবা গোপনীয় আইডি এবং ভার্সন (গোপনীয়তার জন্য) বেছে নিন।
    4. নিম্নলিখিত বিকল্পগুলির মধ্যে একটি ব্যবহার করে আপনার পরিবর্তন সেভ করুন:
      • সেভ ও ডিপ্লয় করুন: ব্যাকএন্ড কনফিগারেশন অবিলম্বে আপডেট করে এবং নতুন বিল্ড ও রোলআউট ট্রিগার করে।
      • শুধু সেভ করুন (সেভ ও ডেপ্লয় করুন বিকল্পের পাশে দেখানো ড্রপ-ডাউন তীর চিহ্ন থেকে): অবিলম্বে রোল-আউট ট্রিগার না করেই কনফিগারেশনে করা পরিবর্তন সেভ করে। আপডেট করা সেটিংস আপনার পরবর্তী ডেপ্লয়মেন্টে কার্যকর হবে।
  4. আগে থেকে থাকা কোনও এন্ট্রি এডিট করতে বা মুছে দিতে, সারির শেষে আরও অ্যাকশন (...) মেনুতে ক্লিক করুন:
    • 'কী', ভ্যালু, সিক্রেট ম্যাপিং বা ভার্সন পরিবর্তন করতে এডিট করুন বিকল্প বেছে নিন এবং তারপর সেভ করে ডিপ্লয় করুন বা শুধু সেভ করুন বিকল্পে ক্লিক করুন।
    • মুছুন বিকল্প বেছে নিন এবং ডায়ালগে সরানোর বিষয়টি কনফার্ম করুন।

dotenvটি ফাইল থেকে ভেরিয়েবল ট্রান্সফার করুন

Next.js অ্যাপের জন্য, dotenv ফাইল যাতে এনভায়রনমেন্ট ভেরিয়েবল আছে সেগুলি App Hosting-এর সাথে কাজ করে।

ব্যাকএন্ড তৈরি বা আপডেট করার সময়, আপনি dotenv ফাইলের সম্পূর্ণ কন্টেন্ট কপি করে সেটিংস > এনভায়রনমেন্ট-এ নতুন যোগ করুন ফর্মের প্রথম কী ফিল্ডে পেস্ট করার মাধ্যমে আপনার dotenv ফাইল থেকে Firebase কনসোলে এনভায়রনমেন্ট ভেরিয়েবেল ট্রান্সফার করতে পারবেন।

এইভাবে কপি করা সমস্ত এনভায়রনমেন্ট ভেরিয়েবেল অটোমেটিক ফর্মে ফর্ম্যাট করা হয়, প্রতিটি আলাদাভাবে লিখতে হয় না, যতক্ষণ না ইনপুট স্ট্যান্ডার্ড KEY=value ফর্ম্যাটিং ব্যবহার করে:

KEY1=value1
KEY2=value2
KEY3=value3

যেকোনও ফ্রেমওয়ার্কের সাথে জটিল বা গ্র্যানুলার এনভায়রনমেন্ট ভেরিয়েবল কন্ট্রোলের জন্য, আমরা apphosting.yaml ব্যবহার করার সাজেশন দিই।

apphosting.yaml-এ ভেরিয়েবল ও সিক্রেট ম্যানেজ করুন

কোড-ফার্স্ট ওয়ার্কফ্লোর জন্য, আপনার প্রোজেক্ট রিপোজিটরির apphosting.yaml কনফিগারেশন ফাইলের env: কী-এর অধীনে স্ট্যান্ডার্ড এনভায়রনমেন্ট ভেরিয়েবেল ও সিক্রেট রেফারেন্স ঘোষণা করুন (apphosting.yaml তৈরি ও এডিট করুন দেখুন)।

env:
  # Standard environment variables
  - variable: PUBLIC_API_URL
    value: https://api.example.com
    availability:
      - BUILD
      - RUNTIME
  - variable: FEATURE_FLAG_NEW_UI
    value: "true"

  # Secret references backed by Cloud Secret Manager
  - variable: DATABASE_URL
    secret: projects/PROJECT_ID/secrets/db-connection-string/versions/latest
  - variable: GEMINI_API_KEY
    secret: myGeminiApiKeySecret@1

env:-এর প্রতিটি এন্ট্রিতে নিম্নলিখিত ফিল্ডগুলি থাকে:

  • variable: আপনার অ্যাপ্লিকেশন প্রসেসে দেখানো এনভায়রনমেন্ট ভেরিয়েবলের নাম।
  • value: প্লেন-টেক্সট স্ট্রিং ভ্যালু (স্ট্যান্ডার্ড এনভায়রনমেন্ট ভেরিয়েবলের জন্য)।
  • secret: Cloud Secret Manager-এর সিক্রেট রেফারেন্স (সিক্রেটের জন্য)। আপনি ছোট সিক্রেট নাম (যেমন myGeminiApiKeySecret বা পিন করা myGeminiApiKeySecret@1) অথবা সম্পূর্ণ রিসোর্স পাথ (projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION) ব্যবহার করতে পারেন। আরও বিবরণের জন্য সিক্রেট প্যারামিটার স্টোর ও অ্যাক্সেস করুন দেখুন।
  • availability: BUILD ফেজ চলাকালীন, RUNTIME-এ অথবা দুটিতেই ভেরিয়েবেল বা সিক্রেট অ্যাক্সেস করা যাবে কিনা তা কন্ট্রোল করে।

ভেরিয়েবেল উপলভ্যতা সেট করুন

Firebase কনসোলে কনফিগার করা এনভায়রনমেন্ট ভেরিয়েবল ও সিক্রেট বিল্ড টাইম ও রান টাইম, দুটিতেই উপলভ্য। এছাড়াও, apphosting.yaml-এ উল্লেখ করা এন্ট্রির জন্য এটি ডিফল্ট অ্যাকশন, যদি না আপনি availability প্রপার্টি ব্যবহার করে স্কোপ সীমিত করেন। apphosting.yaml-এ (তবে কনসোলে নয়), আপনি কোনও ভেরিয়েবল বা সিক্রেটকে শুধু বিল্ড এনভায়রনমেন্ট (BUILD) বা শুধু রানটাইম এনভায়রনমেন্টে (RUNTIME) সীমাবদ্ধ করতে পারবেন।

অ্যাপ্লিকেশন কোডে ভেরিয়েবল ও সিক্রেট অ্যাক্সেস করা

Firebase কনসোল বা apphosting.yaml-এ কনফিগার করা হোক না কেন, এনভায়রনমেন্ট ভেরিয়েবেল এবং সিক্রেট আপনার অ্যাপ্লিকেশন রানটাইমে স্ট্যান্ডার্ড এনভায়রনমেন্ট ভেরিয়েবেল (যেমন, Node.js-এ process.env) হিসেবে প্রকাশ করা হয়।

// Accessing a standard environment variable
const apiUrl = process.env.PUBLIC_API_URL;

// Accessing a secret
const apiKey = process.env.GEMINI_API_KEY;

export async function fetchData() {
  const response = await fetch(`${apiUrl}/data`, {
    headers: {
      'Authorization': `Bearer ${apiKey}`
    }
  });
  return response.json();
}
  • সার্ভার-সাইড অ্যাক্সেস: সব এনভায়রনমেন্ট ভেরিয়েবল ও সিক্রেট সার্ভার-সাইড এক্সিকিউশন কন্টেক্সটে (যেমন Next.js সার্ভার কম্পোনেন্ট, API রুট বা Node.js ব্যাকএন্ড হ্যান্ডলার) নিরাপদে অ্যাক্সেস করা যায়।
  • ক্লায়েন্ট-সাইড এক্সপোজার: Next.js-এর মতো ফ্রেমওয়ার্কে ব্রাউজারে স্ট্যান্ডার্ড এনভায়রনমেন্ট ভেরিয়েবল এক্সপোজ করতে, ভেরিয়েবল কী ফ্রেমওয়ার্ক কনভেনশন (যেমন, NEXT_PUBLIC_ দিয়ে শুরু) অনুসরণ করছে কিনা তা নিশ্চিত করুন।

    env:
      - variable: NEXT_PUBLIC_STORAGE_BUCKET
        value: mybucket.firebasestorage.app
        availability:
          - BUILD
          - RUNTIME
    

ভেরিয়েবল হায়ারার্কি

Firebase App Hosting আপনার এনভায়রনমেন্ট ভেরিয়েবল ও সিক্রেটকে তাদের সোর্সের উপর ভিত্তি করে অগ্রাধিকারের ক্রম অনুযায়ী প্রয়োগ করে। Firebase কনসোলে সেট করা কনফিগারেশন সবসময় apphosting.yaml এবং dotenv ফাইলে ঘোষিত প্যারামিটারকে ওভাররাইড করে। একই নামের এনভায়রনমেন্ট ভেরিয়েবেল বা সিক্রেট কী apphosting.yaml এবং Firebase কনসোল, দুটিতেই থাকলে, বিল্ড ও রানটাইম এক্সিকিউশনের সময় কনসোল ভ্যালু অগ্রাধিকার পায়।

এখানে অগ্রাধিকারের সম্পূর্ণ ক্রম দেওয়া হল:

  1. Firebase কনসোল → কনসোলে সেট করা ভেরিয়েবল ও সিক্রেট
  2. apphosting.<env>.yaml → এনভায়রনমেন্ট-নির্দিষ্ট YAML ফাইলে উল্লেখ করা ভেরিয়েবল ও সিক্রেট, যেমন apphosting.staging.yaml (একাধিক এনভায়রনমেন্ট ডিপ্লয় করুন দেখুন)
  3. apphosting.yaml → apphosting.yaml ফাইলে উল্লেখ করা ভেরিয়েবেল ও সিক্রেট
  4. Firebase সিস্টেম → Firebase-এর সেট করা ভেরিয়েবল যাতে FIREBASE_CONFIG বা FIREBASE_WEBAPP_CONFIG-এর ভ্যালু থাকে, এর সাথে এনভায়রনমেন্ট ভেরিয়েবল যা SSR অ্যাপের জন্য হোস্টনেম ও পোর্ট সেট করে (App Hosting অ্যাডাপ্টারের মাধ্যমে bundle.yaml-এ সেট করা হয়)

অটোমেটিক পপুলেট হওয়া এনভায়রনমেন্ট ভেরিয়েবল

কিছু এনভায়রনমেন্ট ভেরিয়েবল আছে যা App Hosting-এর মাধ্যমে অটোমেটিক পূরণ করা হয়। এর মধ্যে Google Cloud-এর মাধ্যমে পপুলেট করা ভেরিয়েবল এবং সেট-আপের সময় ব্যাকএন্ডে appId সেট করা থাকলে Firebase-নির্দিষ্ট এনভায়রনমেন্ট ভেরিয়েবল অন্তর্ভুক্ত:

  • FIREBASE_CONFIG: (বিল্ড ও রানটাইম এনভায়রনমেন্টে উপলভ্য) নিম্নলিখিত Firebase প্রোজেক্ট কনফিগারেশন সংক্রান্ত তথ্য প্রদান করে:

    {
      "databaseURL": "https://DATABASE_NAME.firebaseio.com",
      "storageBucket": "PROJECT_ID.firebasestorage.app",
      "projectId": "PROJECT_ID"
    }
    

    আপনি কোনও আর্গুমেন্ট ছাড়াই Firebase Admin SDK শুরু করলে, এই কনফিগারেশন অটোমেটিক প্রয়োগ করা হয়।

  • FIREBASE_WEBAPP_CONFIG: (শুধুমাত্র বিল্ড এনভায়রনমেন্টে উপলভ্য) নিম্নলিখিত Firebase প্রোজেক্ট কনফিগারেশন সংক্রান্ত তথ্য প্রদান করে:

    {
      "apiKey": "API_KEY",
      "appId": "APP_ID",
      "authDomain": "AUTH_DOMAIN.firebaseapp.com",
      "databaseURL": "https://DATABASE_NAME.firebaseio.com",
      "messagingSenderId": "PROJECT_NUMBER",
      "projectId": "PROJECT_ID",
      "storageBucket": "PROJECT_ID.firebasestorage.app"
    }</span>
    

    Firebase JS SDK বিল্ড করার সময় পোস্ট-ইনস্টল স্ক্রিপ্টে এই FIREBASE_WEBAPP_CONFIG এনভায়রনমেন্ট ভেরিয়েবল অটোমেটিক চেক করে, যা আপনাকে কোনও আর্গুমেন্ট ছাড়াই ক্লায়েন্ট SDK ইনিশিয়ালাইজ করার অনুমতি দেয়।

SDK শুরু করার জন্য কীভাবে এইসব এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করতে হয় সেই সম্পর্কে আরও বিবরণ পেতে, Firebase Admin SDK এবং ওয়েব SDK অটোমেটিক শুরু করুন দেখুন।

মনে রাখবেন যে আপনার আসল Firebase কনফিগারেশনের ভ্যালু আপনার প্রোজেক্টে প্রভিশন করা নির্দিষ্ট রিসোর্সের সাথে সামঞ্জস্যপূর্ণ হবে।

ভেরিয়েবেল হায়ারার্কি

Firebase App Hosting আপনার ভেরিয়েবেলগুলিকে তাদের সোর্সের উপর ভিত্তি করে অগ্রাধিকারের ক্রমে প্রয়োগ করে। যেমন, Firebase কনসোলে সেট করা ভ্যালু সবসময় apphosting.yaml এবং dotenv ফাইলে সেট করা ভ্যালুকে ওভাররাইড করে বা তার উপর অগ্রাধিকার পায়।

এখানে অগ্রাধিকারের সম্পূর্ণ ক্রম দেওয়া হল:

  1. Firebase কনসোল → কনসোলে সেট করা ভেরিয়েবেল
  2. apphosting.<env>.yaml → এনভায়রনমেন্ট-নির্দিষ্ট yaml ফাইলে উল্লেখ করা ভেরিয়েবল, যেমন apphosting.staging.yaml (একাধিক এনভায়রনমেন্ট ডেপ্লয় করুন দেখুন)
  3. apphosting.yaml → apphosting.yaml ফাইলে উল্লেখ করা ভেরিয়েবেল
  4. Firebase সিস্টেম → Firebase-এর সেট করা ভেরিয়েবল যাতে firebase_config json বা firebase_webapp_config-এর ভ্যালু থাকে, এর পাশাপাশি এনভায়রনমেন্ট ভেরিয়েবল যা SSR অ্যাপের জন্য হোস্টনেম ও পোর্ট সেট করে (App Hosting অ্যাডাপ্টার দ্বারা bundle.yaml-এ সেট করা)

সংরক্ষিত নাম ও সীমাবদ্ধতা

Cloud Run কন্টেনার রানটাইম কন্ট্র্যাক্ট-এ সংজ্ঞায়িত এনভায়রনমেন্ট ভেরিয়েবল রিজার্ভ করা আছে এবং সেট করা যাবে না।

অটোমেটিক সেট করা এনভায়রনমেন্ট ভেরিয়েবল ছাড়া, এনভায়রনমেন্টের মাধ্যমে প্রদান করা এনভায়রনমেন্ট ভেরিয়েবল, ভবিষ্যতের রানটাইম ভার্সনে পরিবর্তন হতে পারে। পেশাদার পদ্ধতি হিসেবে, আমরা সাজেস্ট করি যে আপনি স্পষ্টভাবে সেট করেননি এমন কোনও এনভায়রনমেন্ট ভেরিয়েবলের উপর নির্ভর করবেন না বা তা পরিবর্তন করবেন না এবং দ্বন্দ্ব এড়াতে অনন্য কী সহ যেকোনও এনভায়রনমেন্ট ভেরিয়েবলের প্রিফিক্সিং করার কথা বিবেচনা করুন।

কিছু এনভায়রনমেন্ট ভেরিয়েবেল কী ইন্টার্নাল ব্যবহারের জন্য রিজার্ভ করা আছে। আপনার কনফিগারেশন ফাইলে এইসব 'কী'-এর কোনওটি ব্যবহার করবেন না:

  • খালি স্ট্রিং ("")
  • "=" আছে এমন কী
  • X_FIREBASE_, X_GOOGLE_ বা CLOUD_RUN_ দিয়ে শুরু হওয়া কী
  • PORT
  • K_SERVICE
  • K_REVISION
  • K_CONFIGURATION
  • ডুপ্লিকেট কী

apphosting.yaml তৈরি ও এডিট করুন

সিক্রেট বা রানটাইম সেটিংসের মতো উন্নত কনফিগারেশনের জন্য যেমন কনকারেন্সি, CPU এবং মেমরির সীমা, আপনাকে আপনার অ্যাপের রুট ডিরেক্টরিতে apphosting.yaml ফাইল তৈরি এবং এডিট করতে হবে। এই ফাইল Cloud Secret Manager-এর মাধ্যমে ম্যানেজ করা সিক্রেটের রেফারেন্স সাপোর্ট করে, যার ফলে সোর্স কন্ট্রোলে চেক করা নিরাপদ হয়।

apphosting.yaml তৈরি করতে, এই কমান্ড রান করুন:

firebase init apphosting

এটি উদাহরণ (কমেন্ট করা) কনফিগারেশন সহ একটি প্রাথমিক স্টার্টার apphosting.yaml ফাইল তৈরি করে। এডিট করার পরে, একটি সাধারণ apphosting.yaml ফাইল নিম্নলিখিতের মতো দেখতে লাগতে পারে, যেখানে ব্যাকএন্ডের Cloud Run পরিষেবার জন্য সেটিংস, কিছু এনভায়রনমেন্ট ভেরিয়েবেল এবং Cloud Secret Manager-এর মাধ্যমে ম্যানেজ করা সিক্রেটের কিছু রেফারেন্স থাকে:

# Settings for Cloud Run
runConfig:
  minInstances: 2
  maxInstances: 100
  concurrency: 100
  cpu: 2
  memoryMiB: 1024

# Environment variables and secrets
env:
  - variable: STORAGE_BUCKET
    value: mybucket.firebasestorage.app
    availability:
      - BUILD
      - RUNTIME

  - variable: API_KEY
    secret: myApiKeySecret

    # Same as API_KEY above but with a pinned version.
  - variable: PINNED_API_KEY
    secret: myApiKeySecret@5

    # Same as API_KEY above but with the long form secret reference as defined by Cloud Secret Manager.
  - variable: VERBOSE_API_KEY
    secret: projects/test-project/secrets/secretID

    # Same as API_KEY above but with the long form secret reference with pinned version.
  - variable: PINNED_VERBOSE_API_KEY
    secret: projects/test-project/secrets/secretID/versions/5

এই গাইডের বাকি অংশে এইসব উদাহরণ সেটিংসের জন্য আরও তথ্য এবং প্রসঙ্গ প্রদান করা হয়েছে।

Cloud Run পরিষেবা সেটিংস কনফিগার করুন

apphosting.yaml সেটিংসের মাধ্যমে, আপনার Cloud Run পরিষেবা কীভাবে প্রভিশন করা হবে তা কনফিগার করতে পারবেন। Cloud Run পরিষেবার জন্য উপলভ্য সেটিংস runConfig অবজেক্টে দেওয়া আছে:

মনে রাখবেন যে cpu, memoryMiB এবং concurrency-এর একে অপরের উপর নির্ভরশীল সীমা আছে (যেমন, আরও বেশি মেমরি কনফিগারেশনের জন্য আরও বেশি ন্যূনতম CPU সীমা প্রয়োজন এবং ভগ্নাংশ CPU-এর জন্য 1-এর কনকারেন্সি প্রয়োজন)। সঠিক রেঞ্জ এবং প্রয়োজনীয় কম্বিনেশনের জন্য CPU সীমা এবং মেমরি সীমা সম্পর্কে Cloud Run ডকুমেন্টেশন দেখুন।

বিল্ড ও রান স্ক্রিপ্ট ওভাররাইড করুন

App Hosting শনাক্ত করা ফ্রেমওয়ার্কের উপর ভিত্তি করে আপনার অ্যাপের বিল্ড ও স্টার্ট কমান্ড অনুমান করে। আপনি কাস্টম বিল্ড বা স্টার্ট কমান্ড ব্যবহার করতে চাইলে, App Hosting-এর ডিফল্ট সেটিংস apphosting.yaml-এ ওভাররাইড করতে পারবেন।

scripts:
  buildCommand: next build --no-lint
  runCommand: node dist/index.js

বিল্ড কমান্ড ওভাররাইড অন্য যেকোনও বিল্ড কমান্ডের চেয়ে বেশি অগ্রাধিকার পায় এবং আপনার অ্যাপকে ফ্রেমওয়ার্ক অ্যাডাপ্টার থেকে অপ্ট-আউট করে এবং App Hosting-এর প্রদান করা যেকোনও ফ্রেমওয়ার্ক-নির্দিষ্ট অপ্টিমাইজেশন বন্ধ করে দেয়। আপনার অ্যাপের ফিচার অ্যাডাপ্টারে ভালভাবে কাজ না করলে এটি ব্যবহার করা সবচেয়ে ভাল। আপনি যদি বিল্ড কমান্ড পরিবর্তন করতে চান কিন্তু এখনও প্রদত্ত অ্যাডাপ্টার ব্যবহার করতে চান, তাহলে package.json-এ আপনার বিল্ড স্ক্রিপ্ট সেট করুন পরিবর্তে App Hosting ফ্রেমওয়ার্ক অ্যাডাপ্টার-এ বর্ণিত হিসাবে।

আপনার অ্যাপ চালু করার জন্য নির্দিষ্ট কোনও কমান্ড ব্যবহার করতে চাইলে, রান কমান্ড ওভাররাইড ব্যবহার করুন। এটি App Hosting-এর অনুমান করা কমান্ডের থেকে আলাদা।

বিল্ড আউটপুট কনফিগার করুন

App Hosting ফ্রেমওয়ার্কের নির্দেশ অনুযায়ী অব্যবহৃত আউটপুট ফাইল মুছে দিয়ে ডিফল্ট হিসেবে আপনার অ্যাপ ডিপ্লয়মেন্ট অপ্টিমাইজ করে। আপনি যদি নিজের অ্যাপ ডিপ্লয় সাইজ আরও অপ্টিমাইজ করতে চান অথবা ডিফল্ট অপ্টিমাইজেশন উপেক্ষা করতে চান, তাহলে আপনি apphosting.yaml-এ এটি ওভাররাইড করতে পারেন।

outputFiles:
  serverApp:
    include: [dist, server.js]

include প্যারামিটার অ্যাপ রুট ডিরেক্টরির সাথে সম্পর্কিত ডিরেক্টরি ও ফাইলের তালিকা নেয়, যা আপনার অ্যাপ ডিপ্লয় করার জন্য প্রয়োজন। আপনি যদি নিশ্চিত করতে চান যে সব ফাইল রাখা হয়েছে, তাহলে অন্তর্ভুক্ত করার বিকল্প [.]-এ সেট করুন এবং সব ফাইল ডিপ্লয় করা হবে।

সিক্রেট প্যারামিটার স্টোর ও অ্যাক্সেস করুন

API কী-এর মতো সংবেদনশীল তথ্য গোপন হিসেবে স্টোর করা উচিত। আপনি Firebase কনসোলে আপনার ব্যাকএন্ডে সিক্রেট অ্যাটাচ করতে পারেন অথবা সোর্স কন্ট্রোলে সংবেদনশীল তথ্য চেক করা এড়াতে apphosting.yaml-এ সেগুলি রেফারেন্স করতে পারেন।

secret ধরনের প্যারামিটার স্ট্রিং প্যারামিটারকে দেখায় যার মান Cloud Secret Manager-এ সেভ করা থাকে। সরাসরি ভ্যালু বের করার পরিবর্তে, সিক্রেট প্যারামিটার Cloud Secret Manager-এ উপস্থিতি চেক করে এবং রোলআউটের সময় ভ্যালু লোড করে।

env:
  - variable: API_KEY
    secret: myApiKeySecret

Cloud Secret Manager-এ সিক্রেটের একাধিক ভার্সন থাকতে পারে। ডিফল্ট হিসেবে, আপনার লাইভ ব্যাকএন্ডে উপলভ্য সিক্রেট প্যারামিটারের মান ব্যাকএন্ড তৈরি করার সময় সিক্রেটের লেটেস্ট উপলভ্য ভার্সনে পিন করা থাকে। আপনার যদি প্যারামিটারের ভার্সনিং এবং লাইফসাইকেল ম্যানেজমেন্টের প্রয়োজনীয়তা থাকে, তাহলে আপনি Firebase কনসোলে বা apphosting.yaml-এ নির্দিষ্ট ভার্সনে পিন করতে পারেন। যেমন, apphosting.yaml-এ ভার্সন ৫ পিন করতে:

env:
  - variable: PINNED_API_KEY
    secret: myApiKeySecret@5

আপনি Firebase CLI কমান্ড firebase apphosting:secrets:set ব্যবহার করে সিক্রেট তৈরি করতে পারবেন এবং আপনাকে প্রয়োজনীয় অনুমতি যোগ করার জন্য প্রম্পট করা হবে। এই ফ্লো আপনাকে apphosting.yaml-এ অটোমেটিক সিক্রেট রেফারেন্স যোগ করার বিকল্প দেয়।

Cloud Secret Manager-এ অ্যাক্সেস দিন

বিল্ড ও রানটাইম রোলআউটের সময় App Hosting-এর সিক্রেট ভ্যালু ফেচ করার জন্য, App Hosting ব্যাকএন্ড পরিষেবা অ্যাকাউন্টের কাছে Cloud Secret Manager অ্যাক্সেস করার অনুমতি থাকতে হবে।

আপনি যদি gcloud-এর পরিবর্তে Cloud Secret Manager কনসোল বা firebase apphosting:secrets:set CLI ব্যবহার করে সিক্রেট তৈরি করেন, তাহলে Firebase CLI ব্যবহার করে আপনার ব্যাকএন্ডে অ্যাক্সেস দিন:

firebase apphosting:secrets:grantaccess SECRET_NAME

বিকল্প হিসেবে, আপনি gcloud CLI ব্যবহার করে App Hosting সার্ভিস এজেন্ট (service-PROJECT_NUMBER@gcp-sa-apphosting.iam.gserviceaccount.com) অথবা আপনার ব্যাকএন্ডের রানটাইম পরিষেবা অ্যাকাউন্টকে Secret Manager Secret Accessor ভূমিকা (roles/secretmanager.secretAccessor) প্রদান করতে পারেন:

gcloud secrets add-iam-policy-binding SECRET_NAME \
    --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-apphosting.iam.gserviceaccount.com" \
    --role="roles/secretmanager.secretAccessor"

Console অ্যাক্সেস ও ভূমিকা-ভিত্তিক অনুমতি

Firebase কনসোল ব্যবহারকারীর IAM অনুমতির উপর ভিত্তি করে পরিবেশ এবং গোপন ম্যানেজমেন্ট ফিচার ডাইনামিকভাবে সীমাবদ্ধ করে:

  • দর্শকের ভূমিকা: শুধুমাত্র প্রোজেক্ট দেখার অনুমতি আছে এমন ব্যবহারকারীরা আগে থেকে থাকা কনফিগারেশন সেটিংস দেখতে পারবেন কিন্তু কোনও পরিবর্তন করতে পারবেন না।
    • ব্যাকএন্ড তৈরি করার সময়, ব্যাকএন্ড তৈরি করুন বোতামটি বন্ধ করা থাকে।
    • ব্যাকএন্ড সেটিংস > এনভায়রনমেন্ট-এ, নতুন যোগ করুন বোতামটি বন্ধ করা আছে এবং আরও অ্যাকশন (...) সারি মেনু লুকানো আছে।
  • Secret Manager-এর অনুমতি নেই: যেসব ব্যবহারকারীর Cloud Secret Manager-এর সাথে ইন্টার‍্যাক্ট করার জন্য IAM অনুমতি নেই, তারা কনসোলে একটি সতর্কতামূলক মেসেজ দেখতে পান (গোপনীয়তা যোগ করার জন্য প্রোজেক্টের মালিকের কাছে অনুমতি চান):
    • ব্যাকএন্ড তৈরি করার সময়, সিক্রেট কার্ড বন্ধ করা থাকে।
    • ব্যাকএন্ড সেটিংস > এনভায়রনমেন্ট-এ, নতুন যোগ করুন বিকল্পে ক্লিক করলে গোপনীয় বিকল্পটি বন্ধ হয়ে যায় এবং আগে থেকে থাকা গোপনীয় এন্ট্রির ক্ষেত্রে আরও অ্যাকশন (...) সারি মেনুর কিছু বিকল্প লুকানো থাকে।

VPC অ্যাক্সেস কনফিগার করা

আপনার App Hosting ব্যাকএন্ড ভার্চুয়াল প্রাইভেট ক্লাউড (VPC) নেটওয়ার্কের সাথে কানেক্ট করতে পারে। আরও তথ্য ও উদাহরণের জন্য, VPC নেটওয়ার্কের সাথে Firebase App Hosting কানেক্ট করুন দেখুন।

অ্যাক্সেস কনফিগার করতে আপনার apphosting.yaml ফাইলে vpcAccess ম্যাপিং ব্যবহার করুন। সম্পূর্ণ উপযুক্ত নেটওয়ার্ক/কানেক্টরের নাম অথবা আইডি ব্যবহার করুন। আইডি ব্যবহার করলে, বিভিন্ন কানেক্টর/নেটওয়ার্কের সাথে স্টেজিং ও প্রোডাকশন এনভায়রনমেন্টের মধ্যে পোর্ট করা যায়।

ডাইরেক্ট VPC ইগ্রেস কনফিগারেশন (apphosting.yaml):

runConfig:
  vpcAccess:
    egress: PRIVATE_RANGES_ONLY # Default value
    networkInterfaces:
      # Specify at least one of network and/or subnetwork
      - network: my-network-id
        subnetwork: my-subnetwork-id

সার্ভারলেস কানেক্টর কনফিগারেশন (apphosting.yaml):

runConfig:
  vpcAccess:
    egress: ALL_TRAFFIC
    connector: connector-id

ব্যাকএন্ড ম্যানেজ করুন

App Hosting ব্যাকএন্ডের প্রাথমিক ম্যানেজমেন্টের জন্য কমান্ড Firebase কনসোল এবং Firebase CLI-তে প্রদান করা হয়। এই বিভাগে ব্যাকএন্ড তৈরি ও মুছে ফেলা সহ আরও কিছু সাধারণ ম্যানেজমেন্ট টাস্কের বিবরণ দেওয়া হয়েছে।

ব্যাকএন্ড তৈরি করুন

App Hosting ব্যাকএন্ড হল ম্যানেজ করা রিসোর্সের সংগ্রহ যা App Hosting আপনার ওয়েব অ্যাপ তৈরি ও চালানোর জন্য তৈরি করে।

Firebase কনসোল: হোস্টিং ও সার্ভারলেস > App Hosting বিকল্পে নেভিগেট করুন, তারপর ব্যাকএন্ড তৈরি করুন বিকল্পে ক্লিক করুন (আপনার Firebase প্রজেক্টে এটি প্রথম ব্যাকএন্ড হলে, শুরু করুন বিকল্পে ক্লিক করুন)।

Firebase CLI: (v13.15.4 বা তার পরবর্তী ভার্সন) ব্যাকএন্ড তৈরি করতে, আপনার লোকাল প্রোজেক্ট ডিরেক্টরির রুট থেকে নিম্নলিখিত কমান্ড রান করুন, আর্গুমেন্ট হিসেবে আপনার প্রোজেক্ট আইডি প্রদান করুন:

firebase apphosting:backends:create --project PROJECT_ID

কনসোল বা CLI, দুটির ক্ষেত্রেই, অঞ্চল বেছে নিতে, GitHub কানেকশন সেট-আপ করতে এবং এইসব প্রাথমিক ডেপ্লয়মেন্ট সেটিংস কনফিগার করতে প্রম্পট অনুসরণ করুন:

  • আপনার অ্যাপের রুট ডিরেক্টরি সেট করুন (ডিফল্ট হিসেবে /-এ সেট করা থাকে)

    সাধারণত আপনার package.json ফাইল এখানে থাকে।

  • লাইভ ব্রাঞ্চ সেট করুন

    এটি আপনার GitHub রিপোজিটরির ব্রাঞ্চ যা আপনার লাইভ URL-এ ডিপ্লয় করা হয়। সাধারণত, এটি এমন একটি ব্রাঞ্চ যেখানে ফিচার ব্রাঞ্চ বা ডেভেলপমেন্ট ব্রাঞ্চ মার্জ করা হয়।

  • অটোমেটিক রোল-আউট গ্রহণ বা প্রত্যাখ্যান করা

    অটোমেটিক রোল-আউট ডিফল্ট হিসেবে চালু করা থাকে। ব্যাকএন্ড তৈরি করা সম্পূর্ণ হলে, আপনি সাথে সাথে App Hosting-এ আপনার অ্যাপ ডিপ্লয় করার জন্য বেছে নিতে পারবেন।

  • আপনার ব্যাকএন্ডের জন্য একটি নাম অ্যাসাইন করুন।

  • আপনার রানটাইম এনভায়রনমেন্ট বেছে নিন। ডিফল্ট হিসেবে, Node.js-এর সবচেয়ে নতুন সাজেস্ট করা ভার্সন আপনার জন্য আগে থেকেই বেছে নেওয়া থাকে।

    • অটোমেটিক বেস ইমেজ আপডেট (ABIU) কনফিগার করুন। ABIU ডিফল্ট হিসেবে চালু থাকে এবং আপনার অন্তর্নিহিত পরিবেশে অটোমেটিক সিকিউরিটি প্যাচ প্রয়োগ করে। আপনার রানটাইমের জন্য "নির্দিষ্ট করা নেই" বিকল্প বেছে নিয়ে আপনি ABIU থেকে অপ্ট-আউট করতে পারবেন।

ব্যাকএন্ড মুছে দেওয়া

কোনও ব্যাকএন্ড সম্পূর্ণভাবে সরাতে, প্রথমে এটি মুছে ফেলার জন্য Firebase কনসোল বা Firebase CLI ব্যবহার করুন এবং তারপরে ম্যানুয়ালি সম্পর্কিত অ্যাসেটগুলি সরান, বিশেষ যত্ন নিন যাতে অন্য ব্যাকএন্ড বা আপনার Firebase প্রোজেক্টের অন্যান্য দিক দ্বারা ব্যবহার করা হতে পারে এমন কোনও রিসোর্স মুছে না যায়।

Firebase কনসোল: সেটিংস মেনু থেকে, ব্যাকএন্ড মুছুন বিকল্প বেছে নিন।

Firebase CLI: (v13.15.4 বা তার পরবর্তী যেকোনও ভার্সন)

  1. App Hosting ব্যাকএন্ড মুছে ফেলতে এই কমান্ড রান করুন। এটি আপনার ব্যাকএন্ডের জন্য সব ডোমেন বন্ধ করে দেয় এবং সংশ্লিষ্ট Cloud Run পরিষেবা মুছে দেয়:

    firebase apphosting:backends:delete BACKEND_ID --project PROJECT_ID
    
  2. (ঐচ্ছিক) Artifact Registry-এর জন্য Google Cloud কনসোল ট্যাবে, "firebaseapphosting-images"-এ আপনার ব্যাকএন্ডের জন্য ছবি মুছে দিন।

  3. Cloud Secret Manager-এ, "apphosting" নাম আছে এমন যেকোনও সিক্রেট মুছে দিন, বিশেষভাবে লক্ষ্য রাখবেন যাতে এইসব সিক্রেট অন্য কোনও ব্যাকএন্ড বা আপনার Firebase প্রোজেক্টের অন্য কোনও দিক থেকে ব্যবহার না করা হয়।