अपने ऐप्लिकेशन को डिप्लॉय करने की जांच स्थानीय तौर पर करना

App Hosting डिप्लॉयमेंट से पहले, अपने ऐप्लिकेशन के लोकल टेस्ट किए जा सकते हैं. इसके लिए, App Hosting एम्युलेटर का इस्तेमाल करें. यह Firebase Local Emulator Suite का हिस्सा है.

App Hosting एम्युलेटर का इस्तेमाल करने से पहले, पक्का करें कि आपने Firebase Local Emulator Suite के पूरे वर्कफ़्लो को समझ लिया हो. साथ ही, आपने Local Emulator Suite को इंस्टॉल और कॉन्फ़िगर कर लिया हो और इसके सीएलआई कमांड देख ली हों.

इस विषय में यह मानकर चला गया है कि आपको App Hosting के बारे में पहले से पता है. अगर ज़रूरत हो, तो App Hosting के बारे में जानकारी और अन्य दस्तावेज़ पढ़ें. इससे आपको यह समझने में मदद मिलेगी कि App Hosting कैसे काम करता है.

App Hosting एम्युलेटर की मदद से क्या-क्या किया जा सकता है?

App Hosting एम्युलेटर की मदद से, अपने वेब ऐप्लिकेशन को स्थानीय तौर पर टेस्ट किया जा सकता है और उन्हें बेहतर बनाया जा सकता है. इससे डेवलपमेंट की प्रोसेस को बेहतर बनाया जा सकता है. साथ ही, Firebase का इस्तेमाल करके बनाए गए और App Hosting पर डिप्लॉय किए गए वेब ऐप्लिकेशन की क्वालिटी को बेहतर बनाया जा सकता है.

App Hosting एम्युलेटर:

  1. इसकी मदद से, अपने वेब ऐप्लिकेशन को स्थानीय तौर पर चलाया जा सकता है. साथ ही, apphosting.yaml कॉन्फ़िगरेशन फ़ाइलों में तय किए गए एनवायरमेंट वैरिएबल और सीक्रेट का इस्तेमाल किया जा सकता है.
  2. apphosting.emulator.yaml फ़ाइल की मदद से, एनवायरमेंट वैरिएबल और सीक्रेट को बदला जा सकता है, ताकि उनका इस्तेमाल एम्युलेटर में किया जा सके.
  3. इसका इस्तेमाल, Firebase के अन्य एम्युलेटर के साथ किया जा सकता है. अगर Firestore, Auth या किसी अन्य एम्युलेटर का इस्तेमाल किया जा रहा है, तो Local Emulator Suite यह पक्का करता है कि App Hosting एम्युलेटर से पहले ये एम्युलेटर शुरू हो जाएं.

एम्युलेटर को कॉन्फ़िगर करना

शुरू करने के लिए, Local Emulator Suite को इंस्टॉल और शुरू करें. इसके लिए, Local Emulator Suite को इंस्टॉल, कॉन्फ़िगर, और इंटिग्रेट करना में दिया गया तरीका अपनाएं. आपको जिन अन्य Firebase एम्युलेटर को सेट अप करना है उनके अलावा, App Hosting Emulator को चुनना न भूलें. सीएलआई, आपसे 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 को अपडेट करके, App Hosting एम्युलेटर को भी कॉन्फ़िगर किया जा सकता है. ऐप्लिकेशन होस्टिंग एम्युलेटर के लिए स्कीमा यह है:

{
  ...
  "emulators": {
    "apphosting": {
      "startCommand": <command> [optional]
      "rootDirectory": <path> [optional]
      }
    }
  }
  • एम्युलेटर शुरू होने पर, startCommand अपने-आप जनरेट होता है और सेट हो जाता है. अगर यह विकल्प नहीं दिया जाता है, तो एम्युलेटर आपके पैकेज मैनेजर के dev कमांड का पता लगाकर उसे चलाएगा.
  • rootDirectory का इस्तेमाल, मोनोरिपो प्रोजेक्ट सेटअप को सपोर्ट करने के लिए किया जाता है. अगर आपका वेब ऐप्लिकेशन किसी सबडायरेक्ट्री में है, तो आपको रूट डायरेक्ट्री (firebase.json की जगह) के हिसाब से उस डायरेक्ट्री का पाथ देना होगा.

इम्यूलेशन को मैनेज करना

एम्युलेटर को शुरू करने पर, आपके ऐप्लिकेशन की रूट डायरेक्ट्री में एक apphosting.emulator.yaml फ़ाइल बन जाती है. इस कॉन्फ़िगरेशन फ़ाइल का स्कीमा, प्रोडक्शन में इस्तेमाल की गई apphosting.yaml फ़ाइल के जैसा ही होता है. हालांकि, इसका इस्तेमाल सिर्फ़ लोकल डेवलपमेंट के लिए किया जाता है. डिफ़ॉल्ट रूप से, एम्युलेटर आपके apphosting.yaml फ़ाइल से कॉन्फ़िगरेशन पढ़ता है. हालांकि, अगर कोई apphosting.emulator.yaml फ़ाइल मौजूद है, तो उस फ़ाइल में मौजूद कॉन्फ़िगरेशन को प्राथमिकता दी जाती है.

apphosting.emulator.yaml फ़ाइल को इस तरह से डिज़ाइन किया गया है कि इसे सुरक्षित तरीके से सेव किया जा सके और अपने साथियों के साथ शेयर किया जा सके. यह पक्का करने के लिए कि आपसे गलती से संवेदनशील डेटा सोर्स रिपॉज़िटरी में न चला जाए, apphosting.yaml में मौजूद हर एनवायरमेंट वैरिएबल को apphosting.emulator.yaml में भी सीक्रेट के तौर पर सेट किया जाना चाहिए. अगर प्रोडक्शन और लोकल डेवलपमेंट के बीच किसी सीक्रेट में बदलाव करने की ज़रूरत नहीं है (जैसे, Gemini API की कुंजी), तो उसे apphosting.emulator.yaml में जोड़ने की ज़रूरत नहीं है. इसके बजाय, अपनी टीम को सीक्रेट का ऐक्सेस दें.

अगर आपका ऐप्लिकेशन कई सीक्रेट का इस्तेमाल करता है (उदाहरण के लिए, तीन अलग-अलग सेवाओं के लिए एपीआई कुंजियां, जिनमें प्रोडक्शन, स्टेजिंग, और लोकल डेवलपमेंट के लिए अलग-अलग वैल्यू होती हैं), तो हो सकता है कि आप Cloud Secret Manager के मुफ़्त टियर की सीमा से ज़्यादा सीक्रेट का इस्तेमाल कर रहे हों. ऐसे में, आपको हर महीने हर अतिरिक्त सीक्रेट के लिए 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 इन कुंजियों के पास प्रोडक्शन डेटा का ऐक्सेस नहीं होता. साथ ही, इनसे ग्लोबल साइड इफ़ेक्ट नहीं होते (जैसे, ईमेल भेजना, क्रेडिट कार्ड से शुल्क लेना). इसके अलावा, इनके कोटे भी कम होते हैं. इससे यह पक्का करने में मदद मिलती है कि बिना समीक्षा किए गए कोड से, असल दुनिया में कम असर पड़े.

अलग-अलग उपयोगकर्ताओं को ऐक्सेस देने के बजाय, सीक्रेट का ऐक्सेस मैनेज करने के लिए Google Groups का इस्तेमाल करें. इससे आपकी डेवलपर टीम में नए सदस्यों को शामिल करना आसान हो जाएगा. ऐसा इसलिए, क्योंकि उन्हें ग्रुप में जोड़ने से, वे उन सभी सीक्रेट को ऐक्सेस कर पाएंगे जिनकी उन्हें ज़रूरत है. ऐसा हो सकता है कि आपके पास पहले से ही कोई ऐसा ग्रुप हो जहां डेवलपर एक-दूसरे से बातचीत करते हों. Google Groups की मदद से ऐक्सेस कंट्रोल करने पर, यह पक्का करने में भी मदद मिलती है कि आपकी टीम छोड़ने वाले डेवलपर के पास सभी सीक्रेट का ऐक्सेस न रहे. ऐसा तब होता है, जब उन्हें ईमेल ग्रुप से हटा दिया जाता है. अगर सीक्रेट के पास प्रोडक्शन डेटा या असल दुनिया में होने वाले साइड इफ़ेक्ट का ऐक्सेस है, तो भी अपनी कुंजी को रोटेट करना और firebase apphosting:secrets:set के साथ उसे नई वैल्यू देना सही हो सकता है.

एम्युलेटर चलाएं

firebase emulators:start

इससे आपकी firebase.json फ़ाइल में तय किए गए सभी एम्युलेटर शुरू हो जाएंगे. इनमें App Hosting एम्युलेटर भी शामिल है.