पर्यावरण चर के रूप में एक वेबसाइट के गुप्त मूल्यों को रखने के क्या फायदे हैं?


24

Https://12factor.net/config पर devops दिशानिर्देशों ने वेबसाइट के रहस्यों (डेटाबेस पासवर्ड, एपीआई कुंजी, आदि) को पर्यावरण चर में डालने का सुझाव दिया है। पाठ नियंत्रण (JSON, XML, YAML, INI, या समान) का उपयोग करने के बजाय संस्करण नियंत्रण से अनदेखा करने के क्या फायदे हैं?

मुझे .bash_profile और webserver कॉन्फ़िगरेशन में पर्यावरण चर को संभालने की तुलना में रहस्यों के साथ एक कॉन्फ़िगरेशन फ़ाइल की प्रतिलिपि बनाना बहुत आसान लगता है। क्या मुझे कुछ याद है?


1
सिद्धांत रूप में, मेमोरी की तुलना में किसी फ़ाइल को पढ़ना आसान है ताकि आप हमले की सतह को बड़ा और जटिलता को छोटा समझ सकें।
फ्लोरिन असावोई

मेरे देवता ने कहा कि अंगूठे का नियम है कि पर्यावरण चर में सेटिंग करना केवल डॉकटर जैसे वातावरण में किया जाना सबसे अच्छा है। कंटेनर VMs के बाहर, वह 12factor.net के अन्य सभी बिंदुओं और कॉन्फ़िगर फ़ाइलों के उपयोग को मंजूरी / वरीयता देता है। हममें से किसी को भी नियमित रूप से सर्वर पर पर्यावरण चर की असुरक्षित प्रकृति पसंद नहीं थी।
कोरी ओगबर्न

जवाबों:


21

लेखक उनके तर्क को सूचीबद्ध करता है, हालाँकि यह थोड़ा असम्बद्ध है। उनका प्राथमिक तर्क यह है कि किसी कॉन्फ़िग फ़ाइल में गलती से जाँच करना आसान है, और उस कॉन्फ़िग फ़ाइल में अलग-अलग प्रारूप होते हैं और सिस्टम के चारों ओर बिखरे हुए हो सकते हैं (तीनों जिनमें से सुरक्षा संबंधी कॉन्फ़िगरेशन जैसे कि ऑर्क टोकन और क्रेडेंशियल्स के लिए सर्वश्रेष्ठ औसत दर्जे के तर्क हैं)।

अपने स्वयं के अनुभव को देखते हुए, आपको अनिवार्य रूप से निम्नलिखित तीन विकल्प मिले हैं, संबंधित फायदे और नुकसान के साथ:

कॉन्फिग फाइल में डाटा स्टोर करें।

इस दृष्टिकोण को लेते समय, आपको आदर्श रूप से उन्हें रिपॉजिटरी से अलग करना चाहिए, और सुनिश्चित करें कि वे उस क्षेत्र से बाहर हैं जहां ऐप स्टोर करता है।

लाभ:

  • यदि आप संपूर्ण सिस्टम सुरक्षा को बेहतर बनाने के लिए SELinux या AppArmor जैसी चीज़ों का उपयोग कर रहे हैं, तो विशेष रूप से पहुंच को अलग करना और नियंत्रित करना बहुत आसान है।
  • आम तौर पर गैर-तकनीकी उपयोगकर्ताओं के लिए बदलना आसान है (यह प्रकाशित सॉफ़्टवेयर के लिए एक फायदा है, लेकिन आवश्यक रूप से आपके संगठन के लिए विशिष्ट सॉफ़्टवेयर के लिए नहीं)।
  • सर्वरों के बड़े समूहों में प्रबंधन करना आसान है। वहाँ विन्यास तैनाती के लिए सभी प्रकार के उपकरण हैं।
  • यह सत्यापित करने के लिए उचित रूप से आसान है कि सटीक कॉन्फ़िगरेशन का उपयोग किया जा रहा है।
  • एक अच्छी तरह से लिखे गए ऐप के लिए, आप आमतौर पर कॉन्फ़िगरेशन फ़ाइल को अपडेट करके और फिर एप्लिकेशन को एक विशेष सिग्नल भेजकर (आमतौर पर SITEUP) सेवा को बाधित किए बिना कॉन्फ़िगरेशन बदल सकते हैं।

नुकसान:

  • डेटा को सुरक्षित रखने के लिए उचित योजना की आवश्यकता है।
  • आपको अलग-अलग प्रारूप सीखने पड़ सकते हैं (हालांकि इन दिनों चिंता करने के लिए केवल एक मुट्ठी भर है, और उनके पास आमतौर पर समान सिंटैक्स है)।
  • सटीक संग्रहण स्थान ऐप में हार्ड-कोडित हो सकते हैं, जिससे तैनाती संभावित रूप से समस्याग्रस्त हो सकती है।
  • कॉन्फ़िगरेशन फ़ाइलों की पार्सिंग समस्याग्रस्त हो सकती है।

पर्यावरण चर में डेटा संग्रहीत करें।

आमतौर पर यह स्टार्टअप स्क्रिप्ट से पर्यावरण चर और मूल्यों की एक सूची सोर्सिंग द्वारा किया जाता है, लेकिन कुछ मामलों में यह प्रोग्राम नाम से पहले उन्हें केवल कमांड-लाइन पर बता सकता है।

लाभ:

  • एक विन्यास फ़ाइल को पार्स करने की तुलना में, एक पर्यावरण चर के मान को खींचना बहुत अधिक प्रोग्रामिंग भाषा में तुच्छ है।
  • आपको गलती से कॉन्फ़िगरेशन को प्रकाशित करने के बारे में चिंता करने की ज़रूरत नहीं है।
  • आप अस्पष्टता से कुछ हद तक सुरक्षा प्राप्त करते हैं क्योंकि यह अभ्यास असामान्य है, और अधिकांश लोग जो आपके ऐप को हैक करते हैं, वे अभी पर्यावरण चर को देखने के बारे में सोचने के लिए नहीं जा रहे हैं।
  • एक्सेस को एप्लिकेशन द्वारा ही नियंत्रित किया जा सकता है (जब यह बाल प्रक्रियाओं को जन्म देता है, तो यह संवेदनशील जानकारी को हटाने के लिए आसानी से पर्यावरण को साफ़ कर सकता है)।

नुकसान

  • अधिकांश यूनिक्स प्रणालियों पर, किसी प्रक्रिया के पर्यावरण चर तक पहुंच प्राप्त करना काफी आसान है। कुछ सिस्टम इसे कम करने के तरीके प्रदान करते हैं ( उदाहरण के लिए LInux पर hidepidमाउंट विकल्प /proc), लेकिन वे डिफ़ॉल्ट रूप से सक्षम नहीं हैं, और प्रक्रिया का मालिक है जो उपयोगकर्ता से हमलों से रक्षा नहीं करते हैं।
  • यदि आप उपर्युक्त सुरक्षा समस्या को सही ढंग से संभालते हैं तो कुछ सेटिंग्स का उपयोग करना गैर-तुच्छ है।
  • जब आप बच्चे की प्रक्रियाओं को जन्म देते हैं, तो आपको पर्यावरण को साफ़ करने के लिए ऐप पर भरोसा करना होगा, अन्यथा यह जानकारी लीक कर देगा।
  • आप एप्लिकेशन को पूर्ण पुनरारंभ किए बिना आसानी से कॉन्फ़िगरेशन नहीं बदल सकते।

डेटा में पास करने के लिए कमांड-लाइन तर्कों का उपयोग करें।

गंभीरता से, हर कीमत पर इससे बचें, यह सुरक्षित नहीं है और इसे बनाए रखने के लिए गधे में दर्द है।

लाभ:

  • यहां तक ​​कि अधिकांश भाषाओं में पर्यावरण चर की तुलना में सरल।
  • बाल प्रक्रियाएँ स्वचालित रूप से डेटा को प्राप्त नहीं करती हैं।
  • एप्लिकेशन को विकसित करते समय विशेष कॉन्फ़िगरेशन को जल्दी से जांचने का एक आसान तरीका प्रदान करता है।

नुकसान:

  • पर्यावरण चर की तरह, अधिकांश सिस्टम पर किसी अन्य प्रक्रिया के कमांड-लाइन को पढ़ना आसान है।
  • कॉन्फ़िगरेशन को अपडेट करने के लिए अत्यधिक थकाऊ।
  • कॉन्फ़िगरेशन कितनी देर तक हो सकती है (कभी-कभी 1024 वर्णों की तुलना में कम) पर एक कठिन सीमा डालता है।

1
एक नहीं महत्वहीन बिंदु एक सर्वर का बूट नहीं है (पुनः) बिना किसी पासवर्ड के मैन्युअल रूप से, अंत में वे इसके लिए डिस्क पर कहीं हैं
प्लाज़्मा

7
अधिकांश यूनिक्स प्रणालियों पर, आप किसी भी महत्वपूर्ण विशेषाधिकार की आवश्यकता के बिना किसी भी प्रक्रिया पर्यावरण चर को बहुत अधिक पढ़ सकते हैं। - क्या आप उस पर विस्तार कर सकते हैं? / Proc / #### / environ फ़ाइल केवल स्वामी द्वारा पठनीय है, इसलिए आपको रूट या sudo करने की आवश्यकता होगी।
रु

मुझे लगता है कि इस env config प्रवृत्ति में से कुछ भी docker जैसी चीजों के बारे में आई हैं जहाँ आप एक मानक कंटेनर का उपयोग करते हैं और इसे env चर को कंटेनर में पास करके कॉन्फ़िगर करते हैं।
रौज़ेना १६'१

जब तक आप खाते से चीजों को अलग करने का बहुत अच्छा काम नहीं करते हैं, तब तक @rrauenza स्वामित्व की प्रक्रिया एक महत्वपूर्ण विशेषाधिकार नहीं है, और यदि आपको मालिक नहीं हैं तो आपको वास्तव में केवल CAP_SYS_ADMIN क्षमता (जो रूट निहित है) की आवश्यकता है। इसके अलावा, पर्यावरण चर बात के बारे में, आप शायद सही हैं, लेकिन यह डॉकर के साथ भी एक मामूली डिजाइन है।
ऑस्टिन हेमेलमेलन

3
मैं @rrauenza बनाता बिंदु से सहमत हूँ। इसका उत्तर चारों ओर बहुत शानदार है, लेकिन मैं इस बात पर स्पष्टीकरण देना चाहता हूं कि वास्तव में आप किसी भी महत्वपूर्ण प्रक्रियाओं की आवश्यकता के बिना पर्यावरण प्रक्रियाओं को बहुत अधिक कैसे पढ़ सकते हैं । के बारे में " और आपको वास्तव में केवल CAP_SYS_ADMIN क्षमता (जो मूल रूप से निहित है) की आवश्यकता है ..." ठीक है, अगर एक दुर्भावनापूर्ण एजेंट के पास विशेष अधिकार हैं, तो आगे की चर्चा बेमानी है, और CAP_SYS_ADMIN रूट विशेषाधिकार हो सकता है (देखें man7.org/linux देखें ) /man-pages/man7/capabilities.7.html , CAP_SYS_ADMIN और कर्नेल डेवलपर्स को नोट्स )
Nubarke

13

पर्यावरण चर को वेब सर्वर की हर बच्चे की प्रक्रिया द्वारा विरासत में दिया जाएगा। वह हर सत्र है जो सर्वर से जुड़ता है, और उनके द्वारा प्रायोजित प्रत्येक कार्यक्रम। उन सभी प्रक्रियाओं के लिए रहस्य अपने आप सामने आ जाएंगे।

यदि आप पाठ फ़ाइलों में रहस्य रखते हैं, तो उन्हें सर्वर प्रक्रिया द्वारा पढ़ा जा सकता है, और इसलिए संभावित रूप से प्रत्येक बच्चे की प्रक्रिया द्वारा भी। लेकिन कम से कम कार्यक्रमों में जाना और उन्हें ढूंढना है; वे स्वचालित रूप से प्रदान नहीं किए गए हैं। आप कुछ बाल प्रक्रियाओं को अलग-अलग खातों के तहत चलाने में सक्षम हो सकते हैं, और केवल उन खातों द्वारा रहस्यों को पढ़ने योग्य बना सकते हैं। उदाहरण के लिए, Apex Apache में ऐसा करता है।


1
"वह हर सत्र जो सर्वर से जुड़ता है" एक भ्रामक कथन है। आप सर्वर के लिए एक http सत्र नहीं खोल सकते हैं और इसे पर्यावरण चर तक पहुंच प्राप्त कर सकते हैं, और न ही आप उस सर्वर पर एक शेल में लॉग इन कर सकते हैं और उन्हें प्राप्त कर सकते हैं जब तक कि आपके पास रूट एक्सेस या स्वयं वेब सर्वर प्रक्रिया न हो।
सेगफॉल्ट

जब तक आप सक्रिय कदम नहीं उठाते, तब तक वेब सर्वर द्वारा शुरू की गई हर प्रक्रिया उसके वातावरण को विरासत में देती है। एक HTML पृष्ठ में उस जानकारी का उपयोग करने की क्षमता नहीं है, लेकिन एक स्क्रिप्ट है।
एंड्रयू स्कुलमैन

सही होने पर, यह उत्तर कुछ सुधारों / रियायतों के साथ कर सकता है, खासकर सत्र सत्र के संबंध में । पहली बार पढ़ने पर, यह एक बाहरी ग्राहक को सूचना के प्रकटीकरण की संभावनाओं का सुझाव देने के लिए लगभग एक खराब रोशनी में पर्यावरण चर के उपयोग को चित्रित करता है। इसके अलावा, suexec की तुलना में रियायत को env-var की सीमित सेटिंग के लिए बनाया जा सकता है। उदाहरण के लिए, प्रति-प्रक्रिया env-var की स्थापना (a la MYVAR=foo /path/to/some/executable) एक प्रक्रिया के प्रसार को सीमित करती है और यह केवल बच्चों की है - और जहाँ मास्टर डेमोंन्स को साफ़ / रीसेट / संशोधित करने की आवश्यकता होती है बाल प्रक्रियाओं का वातावरण।
शालम्ब

2

यहां तक ​​कि अगर पर्यावरण चर या फ़ाइलों की बात आती है तो कुछ सुरक्षा संबंधी व्यापार बंद भी हैं, मुझे नहीं लगता कि इस सिफारिश के लिए सुरक्षा मुख्य ड्राइविंग बल था। याद रखें 12factor.net के लेखक भी हैं (या थे?) हरोकू पा के डेवलपर्स। पर्यावरण चर का उपयोग करने के लिए सभी को प्राप्त करना संभवतः उनके विकास को काफी आसान बना देता है। विभिन्न कॉन्फिग फाइल फॉर्मेट और लोकेशन में इतनी विविधता है और उन सभी को सपोर्ट करना उनके लिए मुश्किल होता। पर्यावरण चर तुलना में आसान हैं।

यह उन कुछ वार्तालापों पर अनुमान लगाने के लिए बहुत कल्पना नहीं करता है जो थे।

डेवलपर A: "आह यह गुप्त कॉन्फ़िग फ़ाइल UI बहुत अधिक अव्यवस्थित है! क्या हमें वास्तव में एक ड्रॉप डाउन की आवश्यकता है जो कि json, xml और csv के बीच स्विच करता है?"

डेवलपर बी: "ओह, जीवन इतना भव्य होगा यदि केवल हर कोई एप्लिकेशन कॉन्फिगर के लिए पर्यावरण चर का उपयोग करता है।"

डेवलपर ए: "वास्तव में ऐसा करने के लिए कुछ प्रशंसनीय सुरक्षा-संबंधित कारण हैं। पर्यावरण चर शायद गलती से नियंत्रण में नहीं आएंगे।"

डेवलपर B: "क्या आप पर्यावरण स्क्रिप्ट को एक स्क्रिप्ट के साथ सेट नहीं करते हैं जो डेमॉन या एक कॉन्फ़िगर फ़ाइल लॉन्च करती है?"

डेवलपर A: "हरकू में नहीं! हम उन्हें UI में टाइप करेंगे।"

डेवलपर B: "ओह देखो, 12factor.net के लिए मेरा डोमेन नाम अलर्ट अभी-अभी बंद हुआ।" 1


1 : स्रोत: बना हुआ है।


1

टी एल; डॉ

कॉन्फ़िगरेशन फ़ाइलों के बजाय पर्यावरण चर का उपयोग करने के कई कारण हैं, लेकिन अनदेखी करने के लिए सबसे आम लोगों में से दो आउट-ऑफ-बैंड कॉन्फ़िगरेशन की उपयोगिता मान और सर्वर, एप्लिकेशन या संगठनात्मक भूमिकाओं के बीच अलग - अलग पृथक्करण है । सभी संभावित कारणों की एक विस्तृत सूची पेश करने के बजाय, मैं अपने उत्तर में सिर्फ इन दो विषयों को संबोधित करता हूं, और उनके सुरक्षा निहितार्थ पर हल्के से स्पर्श करता हूं।

आउट-ऑफ-बैंड कॉन्फ़िगरेशन: स्रोत कोड से राज को अलग करना

यदि आप कॉन्फ़िगरेशन फ़ाइल में अपने सभी रहस्यों को संग्रहीत करते हैं, तो आपको उन रहस्यों को प्रत्येक सर्वर पर वितरित करना होगा। इसका मतलब है कि आपके कोड के साथ संशोधन नियंत्रण में रहस्यों की जांच करना, या रहस्यों के लिए एक पूरी तरह से अलग भंडार या वितरण तंत्र होना।

अपने रहस्यों को एन्क्रिप्ट करना वास्तव में इसके लिए हल करने में मदद नहीं करता है। जो सब करता है वह मुद्दे को एक हटाने के लिए प्रेरित करता है, क्योंकि अब आपको प्रमुख प्रबंधन और वितरण के बारे में चिंता करनी होगी!

संक्षेप में, जब आप संचालन से विकास को अलग करना चाहते हैं, तो पर्यावरण चर प्रति स्रोत सर्वर से प्रति-सर्वर या प्रति-अनुप्रयोग डेटा को स्थानांतरित करने के लिए एक दृष्टिकोण है। यह विशेष रूप से महत्वपूर्ण है यदि आपने स्रोत कोड प्रकाशित किया है!

एन्हांस पृथक्करण: सर्वर, अनुप्रयोग और रोल्स

यदि आपके पास निश्चित रूप से आपके रहस्यों को रखने के लिए एक कॉन्फ़िगरेशन फ़ाइल हो सकती है, यदि आप रहस्यों को स्रोत कोड में संग्रहीत करते हैं, तो आपके पास एक विशिष्ट समस्या है। क्या आपके पास रहस्यों के प्रत्येक सेट के लिए एक अलग शाखा या भंडार है? आप यह सुनिश्चित करते हैं कि सही सर्वरों के लिए रहस्यों का सही सेट कैसे प्राप्त होता है? या क्या आप "रहस्य" होने से सुरक्षा को कम करते हैं जो हर जगह समान हैं (या हर जगह पठनीय हैं, यदि आपके पास एक फ़ाइल में सभी हैं), और इसलिए किसी भी एक सिस्टम के सुरक्षा नियंत्रण विफल होने पर एक बड़ा जोखिम होता है?

यदि आप प्रत्येक सर्वर पर या प्रत्येक अनुप्रयोग के लिए अद्वितीय रहस्य रखना चाहते हैं, तो वातावरण चर फ़ाइलों की एक भीड़ का प्रबंधन करने की समस्या को दूर करते हैं। यदि आप एक नया सर्वर, एप्लिकेशन, या भूमिका जोड़ते हैं, तो आपको नई फ़ाइलें बनाने या पुराने अपडेट करने की आवश्यकता नहीं है: आप सिस्टम के वातावरण को केवल अपडेट करते हैं।

सुरक्षा पर बिदाई विचार

हालांकि कर्नेल / मेमोरी / फ़ाइल सुरक्षा का गहन अन्वेषण इस उत्तर के लिए गुंजाइश से बाहर है, यह इंगित करने योग्य है कि ठीक से लागू किया गया, प्रति-सिस्टम वातावरण चर "एन्क्रिप्टेड" रहस्यों से कम सुरक्षित नहीं हैं। या तो मामले में, लक्ष्य प्रणाली को अभी भी मेमोरी में डिक्रिप्टेड रहस्य को किसी बिंदु पर पकड़ना है ताकि इसका उपयोग किया जा सके।

यह भी ध्यान देने योग्य है कि जब किसी दिए गए नोड पर अस्थिर स्मृति में मान संग्रहीत किए जाते हैं, तो कोई भी डिस्क-डिस्क फ़ाइल नहीं होती है जिसे कॉपी और ऑफ़लाइन हमला किया जा सकता है। इसे आमतौर पर इन-मेमोरी रहस्यों का एक फायदा माना जाता है, लेकिन यह निश्चित रूप से निर्णायक नहीं है।

पर्यावरणीय चर बनाम अन्य रहस्य-प्रबंधन तकनीकों का मुद्दा वास्तव में सुरक्षा और प्रयोज्य व्यापार-नापसंद के बारे में अधिक है क्योंकि यह निरपेक्षता के बारे में है। आपकी माइलेज भिन्न हो सकती है।


2
यह आश्वस्त करने वाला नहीं है, क्योंकि कॉन्फ़िगरेशन फ़ाइलों के लिए आपके द्वारा उल्लिखित सभी डाउनॉइड्स पर्यावरण चर के लिए भी लागू होते हैं। वातावरण चर रहे हैं विन्यास डेटा। वे जादुई रूप से खुद को सेट नहीं करते हैं। उन्हें प्रत्येक सिस्टम में वितरित किया जाना है, और उन्हें सेट करने के लिए कुछ प्रकार के कॉन्फ़िगरेशन तंत्र का उपयोग करना होगा।

@jpaugh आप एक स्ट्रॉ मैन तर्क कर रहे हैं और कुछ पर हमला कर रहे हैं जो मैंने कभी नहीं कहा। मेरे द्वारा संबोधित किए जाने वाले मुद्दे आउट-ऑफ-बैंड कॉन्फ़िगरेशन और डेटा पृथक्करण हैं। जैसा कि स्पष्ट रूप से समझाया गया है, आप इन चीजों को किसी भी तरह से पसंद कर सकते हैं। यदि आप पसंद करते हैं, तो आप अपने कोड को अपने कोड के साथ सार्वजनिक रूप से GitHub पर पोस्ट कर सकते हैं, लेकिन यह निश्चित रूप से सामान्य मामले में नासमझ लगता है। हालाँकि, केवल आप अपने सिस्टम के लिए दिए गए खतरे के मॉडल को ठीक से संचालित करने के लिए आवश्यक ट्रेड-ऑफ निर्धारित कर सकते हैं ।
कोडनेम Code

2
आपके सभी बिंदु सही हैं, सिवाय इसके कि यह पर्यावरण चर पर लागू होता है जितना कि किसी अन्य कॉन्फ़िगरेशन डेटा पर। यदि आप फ़ाइलों में पर्यावरण चर संग्रहीत करते हैं, तो आप उन्हें कर सकते हैं; और यदि आप उन्हें आउट-ऑफ-बैंड भेजते हैं, तो फ़ाइल में उन्हें टाइप करना आसान होता है। लेकिन अगर आप उन्हें टाइप करना पसंद करते हैं, तो इसके बजाय JSON ऑब्जेक्ट को क्यों नहीं टाइप करें, और इसे stdin पर पढ़ें? यह वास्तव में कमांड लाइन की तुलना में अधिक सुरक्षित है।
jpaugh

1

व्यक्तिगत रूप से, मैं पर्यावरणीय चर निर्धारित करने की सिफारिश नहीं करूंगा .bashrcक्योंकि ये शेल द्वारा शुरू की गई सभी प्रक्रियाओं के लिए दृश्यमान हो जाते हैं , लेकिन इन्हें डेमन / सुपरवाइजर स्तर (init / rc स्क्रिप्ट, सिस्टमड कॉन्फिग) पर सेट करने के लिए ताकि उनका दायरा जहां तक ​​सीमित हो ।

जहां अलग-अलग टीमें संचालन का प्रबंधन करती हैं, पर्यावरण चर अनुप्रयोगों के लिए वातावरण सेट करने के लिए संचालन के लिए एक आसान इंटरफ़ेस प्रदान करते हैं, बिना कॉन्फ़िगरेशन फ़ाइलों / प्रारूपों और / या उनकी सामग्री के प्रबंधन का सहारा लेने के लिए। यह बहु-भाषा / मल्टी-फ्रेमवर्क सेटिंग्स में विशेष रूप से सच है, जहां संचालन की टीम परिचालन आवश्यकताओं (तैनाती आसानी, स्केलेबिलिटी, सुरक्षा, आदि) के आधार पर तैनाती प्रणाली (ओएस, पर्यवेक्षक प्रक्रियाओं) को चुन सकती है।

एक अन्य विचार CI / CD पाइपलाइन है - जैसा कि कोड अलग-अलग वातावरणों में जाता है(यानी देव, परीक्षण / क्यूए, स्टेजिंग, उत्पादन) पर्यावरण विशेष (तैनाती क्षेत्र, डेटाबेस कनेक्शन विवरण, क्रेडेंशियल, आईपी पते, डोमेन नाम, आदि) समर्पित कॉन्फ़िगरेशन प्रबंधन उपकरण / रूपरेखा द्वारा सबसे अच्छा सेट होते हैं और अनुप्रयोग द्वारा खपत करते हैं। पर्यावरण से प्रक्रिया (एक DRY में, एक बार लिखो, कहीं भी चलाओ फैशन)। परंपरागत रूप से जहां डेवलपर्स इन परिचालन चिंताओं का प्रबंधन करते हैं, वे कोड के अलावा कॉन्फ़िगरेशन फ़ाइलों या टेम्प्लेट की जांच करते हैं - और फिर संचालन आवश्यकताओं में परिवर्तन होने पर वर्कआर्ड और अन्य जटिलता जोड़ना समाप्त करते हैं (जैसे नए वातावरण / तैनाती / साइटें स्केलेबिलिटी / सुरक्षा के साथ आती हैं तौलना,

  • Env-var पैमाने पर विन्यास / जटिलता को सरल बनाते हैं।
  • Env-vars एक समान (यदि मानक नहीं है) गैर-बाध्यकारी तरीके से आवेदन के गैर-कोड संबंधित पहलुओं के लिए जिम्मेदार टीम के साथ परिचालन कॉन्फ़िगरेशन को स्क्वायर रूप से रखता है ।
  • Env-vars मास्टर / पर्यवेक्षक प्रक्रियाओं (जैसे देव, मुनि, पर्यवेक्षक, sysvinit, systemd, आदि) की अदला-बदली का समर्थन करते हैं जो आवेदन वापस करते हैं - और निश्चित रूप से यहां तक ​​कि तैनाती प्रणाली (OSes, कंटेनर चित्र, आदि) या परिचालन आवश्यकताओं के रूप में भी। Evolve / परिवर्तन। हालांकि आजकल हर भाषा ढांचे में कुछ प्रक्रिया क्रम होता है, ये क्रियात्मक रूप से हीन होते हैं, देव वातावरण के लिए अधिक अनुकूल होते हैं और / या बहु-भाषा / बहु-फ्रेमवर्क उत्पादन वातावरण में जटिलता बढ़ाते हैं।

उत्पादन के लिए, मैं एक एन्वायरमेंटफाइल में एप्लिकेशन एनवी-वार सेट करने का पक्ष लेता हूं, जैसे /etc/default/myapplication.confकि कॉन्फ़िगरेशन प्रबंधन द्वारा तैनात किया गया है और केवल rootइस तरह से पठनीय सेट किया गया है systemd(या उस मामले के लिए कुछ और) एक निजी में समर्पित प्रणाली उपयोगकर्ता के तहत एप्लिकेशन को स्पॉन कर सकता है समूह । के लिए समर्पित उपयोगकर्ता समूहों के साथ समर्थित opsऔर sudo- ये फाइलें डिफ़ॉल्ट रूप से दुनिया से अपठनीय हैं। यह देव + ऑप्स प्लस की सभी अच्छाई का समर्थन करने वाला 12factor अनुपालन है, जिसमें सभ्य सुरक्षा के सभी लाभ हैं, जबकि अभी भी डेवलपर्स / परीक्षकों को अपने स्वयं के पर्यावरणविदों को देव / क्यूए / परीक्षण वातावरण में छोड़ने की अनुमति देते हैं।


0

एक डेवलपर के दृष्टिकोण से, पर्यावरण चर में कॉन्फ़िगर डेटा को अलग-अलग वातावरण - विकास, क्यूए और उत्पादन के बीच तैनाती को सरल बनाता है और डेवलपर्स को गलत कॉन्फ़िगरेशन फ़ाइल को तैनात करने के बारे में चिंता करने से मुक्त करता है।

Azure वेब ऐप्स इस पैटर्न का उपयोग करने का विकल्प प्रदान करते हैं और यह बहुत अच्छी तरह से काम करता है।

इसके अतिरिक्त, यह उस संभावित संवेदनशील डेटा को स्रोत नियंत्रण से बाहर रखता है। स्रोत नियंत्रण से उन फ़ाइलों को अनदेखा करना वास्तव में संभव नहीं है (कम से कम .NET में) क्योंकि उन फ़ाइलों में बहुत सारे आवश्यक बॉयलरप्लेट कॉन्फ़िगरेशन भी मौजूद हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.