Orbit
पर्यावरण चर
Environment variables hold the configuration and secrets your app needs at build time and at runtime, such as API keys, database URLs and feature flags, without any of it living in your repository…
पर्यावरण चर आपके ऐप को बिल्ड समय और रनटाइम पर आवश्यक कॉन्फ़िगरेशन और गोपनीयता रखते हैं, जैसे API कुंजियाँ, डेटाबेस URL और फीचर फ़्लैग, इनमें से कुछ भी आपकी रिपॉजिटरी में नहीं रहता है। यह गाइड कवर करता है कि वे Orbit में कहाँ रहते हैं, स्कोप और प्राथमिकता कैसे काम करती है, एक मान को गोपनीय चिह्नित करना, बल्क आयात और निर्यात, और जिन गलतियों से एक चर हमेशा अपरिभाषित रहता है।
वे कहाँ रहते हैं
अपनी प्रोजेक्ट को Orbit में खोलें और Env vars टैब पर क्लिक करें, /orbit/<project-id>/env-vars पर।
पृष्ठ अनुभागों में आयोजित है:
- शीर्ष पर सभी परिवेश: प्रोजेक्ट-व्यापी चर, हर बिल्ड में उपलब्ध।
- प्रति परिवेश एक संक्षिप्त अनुभाग (Production, Staging, और कोई भी पूर्वावलोकन) जो उस परिवेश के ओवरराइड को रखता है।
सूची के ऊपर एक सर्च बॉक्स और एक केवल गोपनीयता फ़िल्टर है, जो लंबी सूची से तेजी का तरीका है।
स्कोप कैसे काम करता है
| स्कोप | इस पर प्रभाव |
|---|---|
| सभी परिवेश (प्रोजेक्ट-व्यापी) | इस प्रोजेक्ट के हर बिल्ड में इंजेक्ट किया जाता है |
| परिवेश-स्तरीय ओवरराइड | केवल उस एक परिवेश पर लागू होता है, और समान कुंजी के साथ प्रोजेक्ट-व्यापी मान पर जीत हासिल करता है |
पृष्ठ पर सबटाइटल नियम को स्पष्ट रूप से बताता है: प्रोजेक्ट-व्यापी चर हर बिल्ड में उपलब्ध हैं, और परिवेश-स्तरीय ओवरराइड को प्राथमिकता मिलती है।
एक विशिष्ट सेटअप एक प्रोजेक्ट-व्यापी DATABASE_URL है जो एक परीक्षण डेटाबेस की ओर इशारा करता है, एक प्रोडक्शन-स्तरीय ओवरराइड के साथ जो असली को इंगित करता है। प्रोडक्शन बिल्ड को असली डेटाबेस मिलता है, बाकी सभी को परीक्षण वाला मिलता है, और कुछ भी जो आप बाद में जोड़ते हैं वह गलती से प्रोडक्शन क्रेडेंशियल को पूर्वावलोकन में लीक नहीं करता है।
प्रोजेक्ट-व्यापी चरों पर एक उपलब्ध है नियंत्रण भी है, जो आपको विशेष परिवेश प्रकारों (production, staging, preview) को एक चर से बाहर करने देता है जो अन्यथा प्रोजेक्ट-व्यापी है।
प्रति-परिवेश स्कोपिंग पर पूर्ण विवरण, सुरक्षा तर्क सहित, प्रति परिवेश पर्यावरण चर सेट करना में है।
एक प्रोजेक्ट-व्यापी चर शाखा पूर्वावलोकन बिल्ड में इंजेक्ट किया जाता है, और पूर्वावलोकन URL सार्वजनिक रूप से लिंक वाले किसी को भी पहुंचने योग्य हैं। प्रोडक्शन डेटाबेस क्रेडेंशियल, लाइव पेमेंट कुंजियाँ और एडमिन टोकन केवल प्रोडक्शन के लिए स्कोप किए जाने चाहिए। यह इस पृष्ठ पर सही पाने के लिए एकमात्र सबसे महत्वपूर्ण बात है।
एक चर जोड़ना
- Env vars टैब के निचले भाग में चर जोड़ें फॉर्म तक स्क्रॉल करें।
- KEY दर्ज करें, उदाहरण के लिए
NEXT_PUBLIC_API_URL। - मान दर्ज करें।
- एक स्कोप चुनें: सभी परिवेश (प्रोजेक्ट-व्यापी), या एक विशिष्ट परिवेश ओवरराइड।
- यदि आपने प्रोजेक्ट-व्यापी चुना है, तो किसी भी परिवेश प्रकार को रद्द करने के लिए उपलब्ध है बटन का उपयोग करें जिससे यह चर नहीं पहुंचना चाहिए।
- कुछ भी संवेदनशील के लिए गोपनीय के रूप में चिह्नित करें को टिक करें।
- जोड़ें पर क्लिक करें।
फॉर्म आपको बताता है कि यह प्रतिबद्ध होने से पहले क्या करने जा रहा है: एक परिवेश ओवरराइड एक नोटिस दिखाता है जो कहता है कि यह केवल उस परिवेश के बिल्ड पर लागू होगा, और एक प्रतिबंधित प्रोजेक्ट-व्यापी चर दिखाता है कि यह किन परिवेश प्रकारों में इंजेक्ट किया जाएगा।
परिवर्तन कब प्रभावी होते हैं
एक चर को जोड़ना, संपादित करना या हटाना वर्तमान में लाइव डिप्लॉयमेंट को नहीं बदलता है। चर तब इंजेक्ट किए जाते हैं जब एक बिल्ड चलती है, इसलिए परिवर्तन अगली डिप्लॉयमेंट से आगे लागू होता है। अपने ऐप जो कुछ पर निर्भर करता है उसे बदलने के बाद पुनः डिप्लॉय करें।
Orbit इस बारे में स्पष्ट है। एक डिप्लॉयमेंट का विस्तार पृष्ठ खोलें और, यदि कॉन्फ़िगरेशन निर्मित होने के बाद बदल गया है, तो आपको एक पर्यावरण चर इस डिप्लॉयमेंट के बाद अपडेट किए गए नोटिस मिलता है जो आपको बताता है कि परिवर्तन तब तक प्रभावी नहीं होगा जब तक आप पुनः डिप्लॉय न करें।
गोपनीयता
कुछ भी के लिए गोपनीय के रूप में चिह्नित करें जो आप चैट में पेस्ट नहीं करेंगे: API कुंजियाँ, डेटाबेस पासवर्ड, टोकन, हस्ताक्षर कुंजियाँ।
गोपनीय मान पैनल में मास्क किए जाते हैं और एक गोपनीय बैज रखते हैं। गैर-गोपनीय मान एक (साधारण) मार्कर दिखाते हैं।
एक गोपनीय का मान इसे सहेजने के बाद वापस नहीं पढ़ा जा सकता है, न तो आप और न ही पैनल में कोई और। आप इसे बदल सकते हैं (संपादन आइकन पर क्लिक करें, एक नया मान टाइप करें, सहेजें) लेकिन आप इसे प्रकट नहीं कर सकते। इसे यहाँ सहेजने से पहले पासवर्ड मैनेजर में अपनी स्वयं की प्रति रखें।
Orbit यह भी ट्रैक करता है कि एक मान कितने समय से जगह पर है और पुराने चर पर एक आयु बैज दिखाता है, एक संकेत के साथ जो घुमाव की सुझाव देता है। यह एक धक्का है, लागू नहीं है।
संपादन और हटाना
एक चर के आगे संपादन आइकन पर क्लिक करें इसके मान को बदलने के लिए। इसे हटाने के लिए हटाएं पर क्लिक करें, और पुष्टि करें: डायलॉग चेतावनी देता है कि इस पर निर्भर बिल्ड टूट जाएंगी, जो अगली डिप्लॉयमेंट पर क्या होता है इसका सटीक विवरण है।
बल्क आयात और निर्यात
टैब के शीर्ष पर दो बटन बल्क कार्य को संभालते हैं।
आयात .env एक पेस्ट बॉक्स खोलता है। एक .env फ़ाइल की सामग्री को पेस्ट करें, एक स्कोप चुनें, और Orbit आपको बताता है कि इसने कितने चर का पता लगाया और कितने को गोपनीय के रूप में चिह्नित करेगा। यह कुंजियों को उनके नामों के आधार पर स्वचालित रूप से फ़्लैग करता है, इसलिए कुछ भी जिसमें SECRET, TOKEN, KEY, PASSWORD और समान होते हैं, आयात से पहले गोपनीय चिह्नित किए जाते हैं। एक समान कुंजी वाले मौजूदा चर को अधिलेखित करें विकल्प है, जो डिफ़ॉल्ट रूप से बंद है।
डाउनलोड .env एक टेम्पलेट बनाता है जिसमें केवल चर नाम, कोई मान के साथ नहीं। यह एक साथी के साथ साझा किया जाने वाला है जो फिर अपने स्वयं के मान भरता है, बैकअप के रूप में नहीं उपयोग किया जाता है।
एक .env टेम्पलेट डाउनलोड करना कभी भी मान शामिल नहीं करता है, गैर-गोपनीय चर के लिए भी। Orbit से मान निर्यात करने का कोई तरीका नहीं है। यदि आपको किसी मान की प्रति चाहिए, तो इसे उसी जगह से लें जहाँ आपने मूल रूप से इसे उत्पन्न किया था।
परिवेशों के बीच चर की नकल करना
परिवेशों के बीच चर की नकल करें पैनल एक पूरा सेट एक स्कोप से दूसरे में नकल करता है। एक से चुनें (प्रोजेक्ट-स्तरीय या एक विशिष्ट परिवेश) और एक को, वैकल्पिक रूप से लक्ष्य में पहले से मौजूद चर को अधिलेखित करें को टिक करें, और पूर्वावलोकन पर क्लिक करें यह देखने के लिए कि प्रतिबद्ध होने से पहले कितने जोड़े जाएंगे, अपडेट किए जाएंगे और छोड़े जाएंगे।
एक Env sync check पेज भी है जो प्रोडक्शन और स्टेजिंग की तुलना कुंजी दर कुंजी करता है और रिपोर्ट करता है कि केवल एक में क्या है, क्या भिन्न है, और क्या मेल खाता है। यह "स्टेजिंग काम करता है और प्रोडक्शन नहीं" के लिए सही उपकरण है।
परियोजनाओं में चर साझा करना
यदि कई प्रोजेक्ट को एक ही क्रेडेंशियल चाहिए, तो इसे हर प्रोजेक्ट में कॉपी करने की बजाय एक env group का उपयोग करें। Orbit पर जाएं, फिर Env groups, एक समूह बनाएं, इसमें चर जोड़ें, और परियोजनाओं को लिंक करें जिन्हें उनकी आवश्यकता है।
समूह चर बिल्ड समय पर इंजेक्ट किए जाते हैं, और प्रोजेक्ट-स्तरीय और परिवेश-स्तरीय चर समूह चर पर प्राथमिकता रखते हैं। आपके पास एक खाते पर 20 समूह तक हो सकते हैं।
फ्रेमवर्क नोट्स
कौन सी चर ब्राउज़र तक पहुंचती हैं यह आपके फ्रेमवर्क द्वारा तय की जाती है, Orbit द्वारा नहीं। Orbit स्कोप में सब कुछ इंजेक्ट करता है; फ्रेमवर्क तय करता है कि क्या उजागर करना है।
- Next.js:
NEXT_PUBLIC_से पहले वाली कुंजियाँ बिल्ड समय पर ब्राउज़र बंडल में इनलाइन की जाती हैं। बाकी सब कुछ सर्वर-साइड रहता है। - Vite:
VITE_से पहले वाली कुंजियाँ ब्राउज़र के लिए उजागर की जाती हैं। बाकी सब कुछ केवल बिल्ड-समय है। - Node.js ऐप्स: स्कोप में सब कुछ बिल्ड के दौरान
process.envपर है, और सर्वर मोड चालू होने पर रनटाइम पर।
कभी भी एक मान को गोपनीय चिह्नित न करें और फिर इसे NEXT_PUBLIC_ या VITE_ के साथ भी उपसर्ग न करें। गोपनीय फ़्लैग केवल नियंत्रित करता है कि क्या पैनल आपको मान दिखाता है; उपसर्ग नियंत्रित करता है कि क्या आपका फ्रेमवर्क इसे हर आगंतुक के ब्राउज़र को भेजता है। उपसर्ग जीत हासिल करता है।
एक बिल्ड ने वास्तव में क्या प्राप्त किया इसे जाँचना
हर डिप्लॉयमेंट विवरण पृष्ठ पर पर्यावरण चर कुंजियों की सूची है जो बिल्ड समय पर इंजेक्ट की गई थीं, और उन्हें आपकी वर्तमान कॉन्फ़िगरेशन के विरुद्ध अलग करता है: जोड़ा गया, बदला गया, हटाया गया और अपरिवर्तित। Teal कुंजियाँ एक परिवेश-विशिष्ट ओवरराइड से आईं, ग्रे लोग प्रोजेक्ट स्तर से। मान कभी भी संग्रहीत या दिखाए नहीं जाते हैं, लेकिन एक कुंजी पर hover एक SHA-256 फिंगरप्रिंट देता है, जो यह पुष्टि करने के लिए पर्याप्त है कि दो परिवेश समान मान रखते हैं इसे प्रकट किए बिना।
यह "क्या मेरा चर वास्तव में बिल्ड तक पहुँच रहा है" का निश्चित उत्तर है। कुछ और बदलने से पहले इसे जाँचें।
समस्या निवारण
चर रनटाइम पर अपरिभाषित है। जाँचें कि डिप्लॉयमेंट परिवर्तन के बाद है, फिर जाँचें कि स्कोप इस परिवेश को कवर करता है, फिर ऊपर फ्रेमवर्क उपसर्ग नियमों को जाँचें। उसी क्रम में।
यह प्रोडक्शन में काम करता है लेकिन पूर्वावलोकन में नहीं। चर केवल प्रोडक्शन के लिए स्कोप किया गया है, या एक प्रोजेक्ट-व्यापी चर के उपलब्ध है के अंतर्गत preview को रद्द किया गया है। यह आमतौर पर जानबूझकर है।
यह स्थानीय रूप से काम करता है लेकिन बिल्ड में नहीं। आपकी स्थानीय .env फ़ाइल रिपॉजिटरी में नहीं है, और नहीं होनी चाहिए। इसे आयात .env के साथ आयात करें और सही स्कोप चुनें।
स्टेजिंग प्रोडक्शन में सब कुछ याद कर रहा है। सेटिंग्स में स्टेजिंग: पर्यावरण चर के अंतर्गत प्रोडक्शन env vars को विरासत में दें को चालू करें, या परिवेशों के बीच चर की नकल करें का उपयोग करें।