لماذا تهمّ متغيّرات البيئة
متغيّر البيئة هو قيمة مسمّاة توجد في بيئة تشغيل تطبيقك — منفصلةً عن شفرته المصدرية. فعندما يحتاج تطبيقك إلى مفتاح API، أو سلسلة اتصال بقاعدة بيانات، أو سرّ webhook لجهة خارجية، يقرأ تلك القيمة من البيئة عند بدء التشغيل بدلًا من إيجادها مكتوبة بشكل ثابت في ملف.
هذا الفصل يهمّ لسببين. الأول، أن الأسرار التي تعيش في الكود ينتهي بها المطاف في نظام التحكّم بالإصدارات. ودفعة واحدة عرضية إلى مستودع GitHub عام قد تكشف بيانات الاعتماد للإنترنت بأسره، والتدوير بعد التسرّب مؤلم. والثاني، أن البيئات المختلفة — التطوير على حاسوبك، والمرحلية لضمان الجودة، والإنتاج للمستخدمين الحقيقيين — تحتاج إلى قيم مختلفة لنفس المتغيّر. ومتغيّرات البيئة تجعل ذلك التبديل بسيطًا.
ضبط المتغيّرات في مايندلاب
لكل مشروع في مايندلاب لوحة بيئة تُعرّف فيها متغيّراتك. وللوصول إليها:
قيم التطوير مقابل الإنتاج
يحتفظ مايندلاب بمخازن متغيّرات منفصلة لبيئتي Development وProduction. وهذا يتيح لك استخدام مفتاح Stripe تجريبي وعنوان قاعدة بيانات محلي أثناء التطوير، بينما تستخدم بيئة الإنتاج بيانات اعتماد حيّة وقاعدة بياناتك السحابية — دون أي تغييرات في الكود.
عندما يدفع مايندلاب عملية نشر إلى Vercel أو Railway، يحقن متغيّرات الإنتاج مباشرةً في مخزن أسرار منصّة الاستضافة عبر واجهات API الخاصة بها. ولا تحتاج أبدًا إلى نسخ بيانات الاعتماد ولصقها في لوحة استضافة يدويًا.
الإشارة إلى المتغيّرات في الكود المولّد
يولّد مايندلاب كودًا يقرأ متغيّرات البيئة باستخدام النمط الاصطلاحي لكل لغة. وإليك الحالتين الأكثر شيوعًا:
في خادم FastAPI (Python)، تُحمَّل المتغيّرات باستخدام المكتبة القياسية:
في واجهة React الأمامية (Vite)، يجب أن تُسبَق المتغيّرات ببادئة VITE_ كي تُعرَض لحزمة المتصفّح. وهذه البادئة إجراء أمني — فالمتغيّرات التي تخلو منها لا تُضمَّن أبدًا في كود جانب العميل، حتى لو كانت موجودة في البيئة.
في خادم Express (Node.js)، النمط مشابه لـ Python لكنه يستخدم process.env:
المزامنة مع GitHub
عندما يزامن مايندلاب مشروعك مع GitHub، تُعالَج متغيّرات البيئة بعناية لمنع التسرّب العرضي:
تدوير سرّ
تدوير السرّ — استبدال بيانات اعتماد مخترَقة أو منتهية الصلاحية بأخرى جديدة — ينبغي أن يتمّ بعناية لتجنّب التوقّف. وإليك التسلسل الآمن الذي تتبعه في مايندلاب: