Environment Variables और Secrets क्या हैं? एक सरल गाइड
Environment variable एक नामित सेटिंग है — जैसे DATABASE_URL या STRIPE_SECRET_KEY — जो आपके ऐप को चलते समय दी जाती है, न कि कोड में लिखी जाती है। Secret एक environment variable है जिसकी value निजी रहनी चाहिए: एक API key, एक password, एक signing key। इन values को कोड से बाहर रखने का मतलब है कि आप ऐप में बदलाव किए बिना इन्हें बदल सकते हैं, टेस्टिंग और असली ग्राहकों के लिए अलग-अलग values इस्तेमाल कर सकते हैं, और कोड शेयर या publish करते समय इन्हें लीक होने से रोक सकते हैं।
AI से बनाते समय यह क्यों मायने रखता है
जैसे ही आपका ऐप किसी दूसरी सेवा के साथ कुछ उपयोगी काम करता है — पेमेंट लेना, email भेजना, AI model को कॉल करना — उसे एक key चाहिए। AI app builders इन keys को नियमित रूप से माँगते हैं, और यह तय करता है कि key कहाँ जाती है कि आपका ऐप सुरक्षित है या नहीं।
AI से बने ऐप्स में दो चीज़ें अक्सर गलत हो जाती हैं:
- Key को chat या कोड में पेस्ट कर दिया जाता है। फिर वह chat history, project files और किसी भी export या repository में रह जाती है। जो भी उसे देखे, वह आपके account का इस्तेमाल कर सकता है।
- Key ब्राउज़र में इस्तेमाल होती है। अगर Stripe या OpenAI को कॉल करने वाला कोड page में चलता है, तो key हर विज़िटर तक पहुँचती है। लोग देखते हैं — और automated scanners लगातार exposed keys खोजते रहते हैं।
Environment variables को समझने से आप दोनों को पहचान सकते हैं, और उनका समाधान माँग सकते हैं।
रोज़मर्रा की मिसाल: होटल का सेफ़
आपके ऐप का कोड होटल के कमरे जैसा है। मेहमान (और सफ़ाईकर्मी, और जिसे भी आप key card दें) उसमें से गुज़रते हैं। आप अपना पासपोर्ट मेज़ पर नहीं छोड़ते।
Environment variables कमरे में रखे सेफ़ जैसे हैं। कमरे को पता है कि सेफ़ है और ज़रूरत पड़ने पर उसे कैसे खोलना है, पर पासपोर्ट कहीं पड़ा नहीं होता। और अगर आप एक कमरे से दूसरे कमरे में जाते हैं — अपने टेस्ट setup से अपनी लाइव साइट पर — तो आप उस कमरे के सेफ़ में दूसरा पासपोर्ट रख देते हैं, बिना कमरा दोबारा सजाए।
यह कैसे काम करता है
आपका कोड एक नाम की ओर इशारा करता है, किसी value की ओर नहीं। सर्वर पर JavaScript में यह कुछ ऐसा दिखता है: process.env.STRIPE_SECRET_KEY। जब ऐप शुरू होता है, तो जिस platform पर वह चल रहा है, वह उस नाम के लिए value भर देता है। Platform की settings में value बदलें, restart या redeploy करें, और ऐप नई value इस्तेमाल करने लगता है — कोड बदलने की ज़रूरत नहीं।
Values कहाँ से आती हैं, यह इस पर निर्भर है कि ऐप कहाँ चलता है:
| कहाँ चलता है | Values कहाँ रखी जाती हैं |
|---|---|
| डेवलपर के laptop पर | एक local फ़ाइल, जो आम तौर पर .env कहलाती है और जिसे git में कभी commit नहीं करना चाहिए |
| AI builder के preview में | प्रोजेक्ट का secrets या settings panel |
| hosting platform पर | उस platform की environment variables settings |
| GitHub Actions या दूसरे automation में | उस सेवा का अपना encrypted secrets store |
Public बनाम secret variables
हर environment variable secret नहीं होती। इन्हें दो समूहों में बाँटना मददगार है:
| प्रकार | उदाहरण | क्या ब्राउज़र इसे देख सकता है? |
|---|---|---|
| Public configuration | साइट का नाम, public analytics ID, Stripe का publishable key, feature switches | हाँ, यह ठीक है |
| Secrets | Stripe का secret key, OpenAI या Anthropic API key, database connection string, email provider key, webhook signing secret | कभी नहीं |
Web frameworks इस बँटवारे को साफ़ तौर पर दिखाते हैं। Vite में, केवल वे variables browser कोड में शामिल होते हैं जिनके नाम VITE_ से शुरू होते हैं; Next.js में prefix NEXT_PUBLIC_ है। यह एक सुरक्षा व्यवस्था है: इन prefixes वाली हर चीज़ उन फ़ाइलों में पहुँचती है जिन्हें हर विज़िटर डाउनलोड करता है, इसलिए किसी secret को कभी ऐसा prefix नहीं मिलना चाहिए।
एक उदाहरण: AI summary बटन
आप चाहते हैं कि एक "Summarise this note" बटन AI model को कॉल करे।
असुरक्षित तरीका: बटन का कोड, जो ब्राउज़र में चलता है, सीधे AI provider को कॉल करता है और उसमें API key लिखी होती है। Preview में यह काम करता है। लेकिन इसका मतलब है कि कोई भी browser के developer tools खोलकर key कॉपी कर सकता है और आपके account पर बिल बढ़ा सकता है।
सुरक्षित तरीका:
- आप AI provider पर key बनाते हैं और उसे अपनी project settings में
OPENAI_API_KEY(या ऐसे किसी नाम) से secret के रूप में रखते हैं। - Backend में एक route होता है,
POST /api/summarise, जोprocess.env.OPENAI_API_KEYपढ़ता है, जाँचता है कि user logged in है, और provider को कॉल करता है। - बटन provider की बजाय आपके route को कॉल करता है। ब्राउज़र को key कभी नहीं दिखती।
- आप वही secret publish किए गए ऐप की settings में जोड़ते हैं और redeploy करते हैं, ताकि लाइव साइट पर भी वह हो।
यह पैटर्न — ब्राउज़र आपके सर्वर को कॉल करता है, सर्वर key रखता है और सेवा को कॉल करता है — पेमेंट, email, maps और हर दूसरी paid API पर लागू होता है। AI के मामले को गहराई से समझने के लिए LLM APIs इस्तेमाल करने की गाइड पढ़ें।
मुख्य शब्द
.envफ़ाइल:NAME=valueलाइनों की एक text फ़ाइल, जो local development में इस्तेमाल होती है। इसे.gitignoreमें रखें ताकि यह commit न हो।.env.example: इसकी एक कॉपी जिसमें नाम होते हैं पर असली values नहीं, और जिसे commit किया जाता है ताकि दूसरों को पता रहे कि कौन सी variables सेट करनी हैं।- Rotate: किसी secret को नए से बदलना और पुराने को revoke करना।
- Scope / permissions: कई providers आपको ऐसी keys बनाने देते हैं जो केवल कुछ काम कर सकें। केवल email भेजने वाली key, वह सब कुछ कर सकने वाली key से कम खतरनाक है।
- Test बनाम live keys: Stripe जैसे providers testing और असली पैसे के लिए अलग keys देते हैं। लॉन्च तक test keys इस्तेमाल करें।
- Signing secret: वह secret जिससे जाँचा जाता है कि कोई message, जैसे webhook, सच में भेजने वाले से आया है।
आम गलतियाँ और गलतफ़हमियाँ
- "मेरी repository private है, इसलिए उसमें keys रखना ठीक है।" Private repositories भी share, fork, export और laptops पर clone होती हैं। Keys वहाँ भी नहीं होनी चाहिए। अगर आप प्रोजेक्ट को GitHub से जोड़ते हैं, तो जाँचें कि उसमें कोई
.envफ़ाइल शामिल न हो। - "मैंने उसे मिटा दिया, तो वह गई।" Git history रखता है, और chat logs संदेश रखते हैं। अगर कोई key कभी exposed हुई थी, तो उसे rotate करें।
- Secret पर public prefix लगाना।
VITE_OPENAI_KEYआपकी key को browser bundle में डाल देता है। - Redeploy करना भूल जाना। Settings में variable बदलने का असर आम तौर पर तभी होता है जब ऐप restart हो या फिर से publish हो।
- हर चीज़ के लिए एक ही key। Test और live के लिए, और हर ऐप के लिए अलग keys होने से एक को revoke करने पर बाकी नहीं टूटते।
- कोई खर्च सीमा नहीं। Paid APIs के लिए, provider के dashboard में budget या limit सेट करें, ताकि key लीक होने पर नुकसान सीमित रहे।
अपने AI builder से क्या माँगें
- "
STRIPE_SECRET_KEYनाम के environment variable से Stripe secret key पढ़ें। उसे केवल सर्वर पर इस्तेमाल करें।" - "पक्का करें कि कोई secret client-side कोड में इस्तेमाल न हो और उसे
VITE_/NEXT_PUBLIC_prefix न मिले।" - "एक
.env.exampleबनाएँ जिसमें ऐप को चाहिए हर variable की सूची हो, बिना values के, और पक्का करें कि.envgit-ignored हो।" - "Built frontend फ़ाइलों में किसी भी ऐसी string को जाँचें जो API key जैसी दिखती है।"
AI से बने ऐप्स के लिए हमारी security checklist लॉन्च से पहले की दूसरी जाँचों के साथ secrets को भी कवर करती है।
Mythex पर secrets
Mythex पर secrets प्रोजेक्ट के environment variables हैं, जो live preview sandbox और आपके publish किए गए ऐप, दोनों में डाले जाते हैं। आप इन्हें project settings → Secrets में जोड़ते हैं या chat में /secrets से। जब agent को किसी key की ज़रूरत होती है, तो वह chat में एक secrets card दिखाता है, ताकि value एक form field में जाए, chat transcript में नहीं। अगर आप live ऐप का कोई secret बदलते हैं, तो फिर से publish करें ताकि deploy उसे उठा ले। Project exports में secrets शामिल नहीं होते, और आयात किए गए .env फ़ाइलों से उन्हें हटा दिया जाता है, ताकि आप उन्हें settings में दोबारा जोड़ें। Docs में environment variables और secrets और chat में secrets देखें।
सवाल
Environment variable क्या है?
Environment variable एक नामित सेटिंग है, जैसे STRIPE_SECRET_KEY या DATABASE_URL, जो प्रोग्राम चलने के समय उसे दी जाती है, न कि उसके कोड में लिखी जाती है। इसी कोड को development और production में अलग-अलग मान मिल सकते हैं।
Environment variable और secret में क्या फ़र्क है?
Secret एक ऐसा environment variable है जिसकी value निजी रहनी चाहिए, जैसे API key, database password या webhook signing secret। बाकी environment variables, जैसे साइट का नाम या कोई feature switch, सार्वजनिक हो सकती हैं।
क्या API keys को frontend में डालना सुरक्षित है?
नहीं। Frontend कोड में जो भी है, वह हर विज़िटर के ब्राउज़र में डाउनलोड होता है और पढ़ा जा सकता है। Secret keys केवल सर्वर पर इस्तेमाल होनी चाहिए, और ब्राउज़र आपके सर्वर को कॉल करे, जो फिर provider को कॉल करे।
अगर मेरी API key लीक हो जाए तो क्या करूँ?
उसे तुरंत provider के यहाँ revoke या rotate करें, नई key बनाएँ, उसे जहाँ भी आपका ऐप secrets रखता है वहाँ अपडेट करें, और फिर से deploy करें। सिर्फ़ कोड या chat history से key हटाना काफ़ी नहीं है, क्योंकि उसकी कॉपियाँ पहले ही मौजूद हो सकती हैं।