App Hosting डिप्लॉयमेंट से पहले, App Hosting एमुलेटर का इस्तेमाल करके अपने ऐप्लिकेशन के लोकल टेस्ट किए जा सकते हैं. यह एमुलेटर, Firebase Local Emulator Suite का हिस्सा है.
App Hosting एमुलेटर का इस्तेमाल करने से पहले, पक्का करें कि आपने Firebase Local Emulator Suite के पूरे वर्कफ़्लो को समझ लिया हो. साथ ही, आपने Local Emulator Suite को इंस्टॉल और कॉन्फ़िगर कर लिया हो और इसके CLI कमांड की समीक्षा कर ली हो.
इस विषय में यह माना गया है कि आपको App Hosting के बारे में पहले से जानकारी है. ज़रूरत पड़ने पर, App Hosting के काम करने के तरीके को समझने के लिए, App Hosting के बारे में जानकारी और अन्य कॉन्टेंट देखें.
App Hosting एमुलेटर की मदद से क्या किया जा सकता है?
App Hosting एमुलेटर की मदद से, अपने वेब ऐप्लिकेशन को स्थानीय तौर पर टेस्ट किया जा सकता है और उनमें सुधार किया जा सकता है. इससे, डेवलपमेंट की प्रोसेस को आसान बनाया जा सकता है. साथ ही, Firebase का इस्तेमाल करके बनाए गए और App Hosting पर डिप्लॉय किए गए वेब ऐप्लिकेशन की क्वालिटी को बेहतर बनाया जा सकता है.
App Hosting एम्युलेटर:
- इसकी मदद से,
apphosting.yaml
कॉन्फ़िगरेशन फ़ाइलों में तय किए गए एनवायरमेंट वैरिएबल और गुप्त जानकारी के साथ, अपने वेब ऐप्लिकेशन को स्थानीय तौर पर चलाया जा सकता है. apphosting.emulator.yaml
फ़ाइल की मदद से, एमुलेटर में इस्तेमाल करने के लिए, एनवायरमेंट वैरिएबल और सीक्रेट को बदला जा सकता है.- इसका इस्तेमाल, 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
को सीधे अपडेट करके भी, ऐप्लिकेशन होस्टिंग एमुलेटर को कॉन्फ़िगर किया जा सकता है. ऐप्लिकेशन होस्टिंग एम्युलेटर के लिए स्कीमा यह है:
{
...
"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 एपीआई पासकोड) के बीच बदलने की ज़रूरत नहीं है, तो उसे 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 एम्युलेटर भी शामिल है.