الإعداد بمتغيرات البيئة
المحتويات:
الملخص
المسألة
نريد أن تكون تطبيقاتنا قابلة للإعداد بما يتجاوز النواتج والملفات الثنائية والشيفرة المصدرية، بحيث يمكن لبناء واحد أن يتصرف بصورة مختلفة بحسب بيئة النشر.
ولتحقيق ذلك، نريد استخدام الإعداد بمتغيرات البيئة.
نريد إدارة الإعدادات باستخدام ملفات يمكننا وضعها تحت التحكم في الإصدارات.
نريد توفير بعض الراحة لتجربة المطور، مثل معرفة ما يمكن إعداده وأي قيم افتراضية ذات صلة.
القرار
تقرر اعتماد ملفات .env مع ملف القيم الافتراضية وملف المخطط المرتبطين بها.
الحالة
تم القرار. ونحن منفتحون على النظر في قدرات جديدة كلما ظهرت.
التفاصيل
الافتراضات
نفضّل فصل شيفرة التطبيق عن شيفرة البيئة. ونفترض أن التطبيق يحتاج إلى العمل بصورة مختلفة في بيئات مختلفة، مثل بيئة التطوير وبيئة الاختبار وبيئة العرض التجريبي وبيئة الإنتاج وغيرها.
نفضّل ممارسة القطاع المعروفة بـ«تطبيق 12 عاملًا» (12 factor app)، وأكثر منها الممارسة ذات الصلة «تطبيق 15 عاملًا» (15 factor app).
استخدمت كثير من مشاريعنا السابقة اصطلاح ملف .env أو مجلد .env مشابه. ومن الممارسات المعتادة إبقاء هذه الملفات خارج التحكم في الإصدارات، واستخدام طريقة أخرى لنشرها وإصدارها وإدارتها.
القيود
نريد إبقاء الأسرار خارج نظام التحكم في الإصدارات (VCS) الخاص بإدارة الشيفرة المصدرية (SCM).
نريد السعي إلى التوافق مع أطر البرمجيات والمكتبات الشائعة. فمثلًا، لدى Node وحدة «dotenv» لقراءة الإعدادات بمتغيرات البيئة.
المواقف
نظرنا في بعض المناهج:
تخزين الإعدادات في التطبيق، مثل ملف
config.js.تخزين الإعدادات في البيئة، مثل ملف
.env.جلب الإعدادات من موقع معروف، مثل خادم تراخيص.
الحجة
اخترنا نهج ملف .env لأن:
هو نهج شائع، بما في ذلك بين الخبراء.
يتبع نمط ملفات
.envالذي استخدمته فرقنا بنجاح مرات كثيرة في مشاريع كثيرة.هو بسيط. وعلى وجه الخصوص، نقبل حاليًا المفاضلات المهمة التي نراها، مثل غياب إمكانات التدقيق مقارنةً بنهج خادم التراخيص.
التبعات
نحتاج إلى إيجاد طريقة لفصل الإعدادات العامة بمتغيرات البيئة عن أي إدارة للأسرار.
ذو صلة
قرارات ذات صلة
نتوقع أن تستخدم جميع تطبيقاتنا هذا النهج.
سنخطط لترقية أي من تطبيقاتنا التي تستخدم نهجًا أقل قدرة، مثل التضمين الصلب في ملف ثنائي أو في الشيفرة المصدرية.
وسنُبقي على حالها أي من تطبيقاتنا التي تستخدم نهجًا أكثر قدرة، مثل خادم التراخيص.
متطلبات ذات صلة
سنضيف إمكانات devops للملفات، تشمل الخطافات (hooks) والاختبارات والتكامل المستمر.
نحتاج إلى تدريب جميع زملائنا المطورين على هذا القرار.
نواتج ذات صلة
ستحتاج كل منطقة ننشر فيها إلى ملف .env خاص بها وملفات ذات صلة.
مبادئ ذات صلة
سهل التراجع عنه.
ملاحظات
مثال على ملف .env:
NAME=Alice Anderson
EMAIL=alice@example.com
مثال على ملف .env.defaults:
NAME=Joe Doe
EMAIL=joe@example.com
مثال على ملف .env.schema بالمفاتيح فقط:
NAME
EMAIL