dotenv से dotenvx तक - अगली पीढ़ी का Config मैनेजर
(dotenvx.com)- जुलाई 2013 में dotenv की पहली commit के बाद 11 वर्षों में यह दुनिया भर में सबसे ज़्यादा निर्भर किए जाने वाले packages में से एक बन गया
- TypeScript, ESLint जैसे अनिवार्य software के समान स्थान तक पहुंच गया
dotenv की समस्याएं
- .env फ़ाइल लीक होने का जोखिम
- multi-environment को मैनेज करना मुश्किल
- platforms के बीच consistency की कमी
समस्या का समाधान: dotenvx
- सभी platforms पर एक जैसा काम करता है
- multi-environment support
- environment variable files का encryption
कहीं भी चलाया जा सकता है
- सभी languages, frameworks और platforms पर एक जैसा काम करता है
dotenvx run -- your-cmdसे runtime पर environment variables inject किए जा सकते हैं- .env parsing engine, variable expansion, command substitution आदि एक जैसे काम करते हैं
- npm, brew, curl, docker, windows आदि कई तरीकों से install किया जा सकता है
$ echo "HELLO=World" > .env $ echo "console.log('Hello ' + process.env.HELLO)" > index.js $ node index.js # dotenvx के बिना Hello undefined $ dotenvx run -- node index.js # dotenvx के साथ Hello World
multiple environments का समर्थन
.env.productionफ़ाइल बनाने के बाद-foption से load करें- कई
-fflags का उपयोग करके multi-environment configuration किया जा सकता है$ echo "HELLO=production" > .env.production $ dotenvx run -f .env.production -- node index.js [dotenvx][info] loading env (1) from .env.production Hello production
encryption
dotenvx encryptcommand से .env फ़ाइल में encryption जोड़ा जा सकता है- public key encryption method का उपयोग
- .env फ़ाइल लीक हो जाने पर भी
DOTENV_PRIVATE_KEYके बिना decrypt नहीं किया जा सकता - open source projects में पुराने secrets को decrypt किए बिना भी नई settings जोड़ी जा सकती हैं
$ dotenvx encrypt ✔ encrypted (.env)
1.0.0 version release
- dotenvx 1.0.0 version release की घोषणा
- अगली पीढ़ी के config management tool के रूप में कई developers इसका उपयोग कर सकेंगे
GN⁺ की राय
dotenvxsecurity और convenience दोनों एक साथ देता है- कई environments को आसानी से मैनेज किया जा सकता है, इसलिए यह developers के लिए उपयोगी है
- encryption feature security-sensitive projects में विशेष रूप से उपयोगी है
dotenvxकी विशेषताएं विभिन्न languages और platforms पर consistency देती हैं, जिससे development efficiency बढ़ती है
2 टिप्पणियां
प्रोग्राम के अंदर product mode और development mode को अलग किए बिना, सीधे execution script में declare किया जा सकता है।
Hacker News राय
सीक्रेट्स को environment variables के ज़रिए पास न करना बेहतर है। environment variables आसानी से लीक हो सकते हैं। इसकी बजाय, process के अंदर vault या file system से सीक्रेट्स पढ़ना बेहतर है.
.envफ़ाइलें इस्तेमाल करने का कारण यह है कि वे सरल और स्पष्ट हैं। अगर अधिक सुरक्षित और शक्तिशाली configuration तरीका इस्तेमाल करना है, तो documentation पढ़नी पड़ती है.काम में Mise का इस्तेमाल शुरू किया है। अभी बहुत ज़्यादा इस्तेमाल नहीं किया, लेकिन यह काफ़ी promising लग रहा है। यह local test DB initialize करने, linting scripts चलाने जैसे काम संभालता है, और environment variables व virtual environments भी manage करता है.
सीक्रेट लीक होना बड़ी समस्या है, इसलिए dotenvx इस्तेमाल करते समय सीक्रेट्स को encrypt करना समझदारी है। जो tools unencrypted secrets को support नहीं करते, वे ज़्यादा सुरक्षित हैं.
यह Sops जैसा है, लेकिन इसमें by default encryption फीचर नहीं है। Sops आसानी से AWS और मौजूदा key management solutions के साथ integrate हो जाता है, और 5 साल में दो नौकरियों पर इसका इस्तेमाल करने के अनुभव में यह बहुत अच्छा रहा.
सीक्रेट्स को encrypt करके commit करना सुविधाजनक है, लेकिन अगर encryption key तक पहुँच मिल जाए, तो सभी सीक्रेट्स उजागर हो सकते हैं। cloud environment के secret manager में सेट करके फिर उसे दोबारा न छूना ज़्यादा सुरक्षित है.
environment variables ज़रूरत से ज़्यादा share होते हैं और files local permissions पर निर्भर करती हैं। processes के बीच सीक्रेट्स ट्रांसफ़र करने का कोई नया तरीका चाहिए। उदाहरण के लिए, Unix socket के ज़रिए इस तरह सीक्रेट्स देना कि उन्हें सिर्फ़ एक बार पढ़ा जा सके.
.envफ़ाइलों को vault में सही तरह डालने के बारे में documentation चाहिए। अगर vault password-protected है, तो यह समस्या आती है कि application को vault password पढ़ने देने के लिए उसे plain text में लिखना पड़ता है.मैं सभी environment variables को एक ही फ़ाइल में TOML फ़ॉर्मैट में manage करना चाहता हूँ। इससे update, compare और share करना आसान हो जाएगा। लेकिन environment names में consistency बनाए रखना मुश्किल है। यह अक्सर जल्दी में लिए गए फ़ैसलों या ज़रूरतों की वजह से होता है, और लोग इसे बदलने से डरते हैं।