خُذ الصورة إلى الإنتاج — وعرّف الخوادم التي تعمل عليها كشيفرةٍ خاضعةٍ للإصدارات.
الوحدة 10 · نشرٌ قابل للتكرار، بلا نقرٍ يدوي.
متقدّم النشر والبنية ككود يتضمّن مختبرًا ~60 دقيقةmain تلقائيًّاالمتطلبات المسبقة: الوحدة 9 (الصورة مبنيّة في CI). تعمّق: مختبر DevOps: البنية ككود والسحابة الحقيقية.
لا تختبر أمام مستخدميك. المشاريع الحقيقية تشغّل التطبيق ذاته في بيئاتٍ منفصلة، لكلٍّ إعدادها وبياناتها:
| البيئة | الغرض |
|---|---|
| التطوير | جهازك / حاوياتك — حيث تبني. |
| التجهيز (Staging) | نسخةٌ شبيهةٌ بالإنتاج للفحوص النهائية قبل الإصدار. |
| الإنتاج | البيئة الحيّة التي يلمسها المستخدمون الحقيقيون. |
لأن الوحدة 8 جمّدت التطبيق في صورة، «انشر إلى الإنتاج» يعني فقط «شغّل تلك الصورة ذاتها على مضيف الإنتاج بإعداد الإنتاج». الصندوق نفسه، متغيّرات بيئةٍ مختلفة.
أبسط نشرٍ حقيقي: جهازٌ سحابيٌّ صغير عليه Docker، يسحب صورتك ويشغّلها بـCompose. بالعبارة البسيطة:
فعل هذا يدويًّا مرّةً لا بأس به للتعلّم. لكن الخطوات اليدوية تنحرف وتُنسى — وهي بالضبط المشكلة التي تحلّها البنية ككود.
النقر في وحدة تحكّم سحابية هو نظير «.env-في-المستودع» للبنية: غير قابلٍ للتكرار ويستحيل مراجعته. البنية ككود تعرّف خوادمك في ملفاتٍ خاضعةٍ للإصدارات، فتصير البيئة كلّها قابلةً للتكرار وللمقارنة.
| الأداة | المهمّة |
|---|---|
| Terraform | التزويد — إنشاء الجهاز والشبكة والجدار الناري من كود. |
| Ansible | التهيئة — تثبيت Docker ونشر التطبيق على ذلك الجهاز. |
وحدة البنية ككود في مختبر DevOps ومجلّدا sample-app/terraform وsample-app/ansible فيها قالبٌ عامل. وجّه مساعدك إليها، وكيّفها للخزنة، وراجع كل سطر — فشيفرة البنية قد تكلّف مالًا حقيقيًّا إن كانت خاطئة.
سيفتح المساعد بسرورٍ جدارًا ناريًّا للعالم أو يكتب رمزًا صراحةً. البنية أعلى مكانٍ مخاطرةً لإمساك الزمام (الوحدة 5). اقرأها كالصقر، وأبقِ الأسرار في متغيّرات، لا في الكود أبدًا.
خطّ نهاية CD: وسّع خطّ الوحدة 9 كي ينشر تلقائيًّا حين ينجح CI على main — يسحب الصورة الجديدة، يعيد تشغيل الحاوية. الآن طلب دمجٍ مدموج يصير إصدارًا حيًّا، بلا يدين، كل مرّة.
فكرة → مواصفة → بناء → اختبار → بوابة → CI → نشر. من هنا، شحن تغييرٍ ما هو إلا دمج طلب دمجٍ مُراجَع. ذاك معيار DevOps الذي كانت الدورة كلّها تبني نحوه.
ستنشر الخزنة إلى مضيفٍ حقيقي وتلتقط بنيتها ككود. جهازٌ من الطبقة المجانية مثاليّ، لكن مضيف حاوياتٍ مُدارًا يفي أيضًا — الهدف رابطٌ عام مع بنيةٍ تستطيع إعادة إنشائها من ملفات.
مستودعك على GitHub من الوحدة 9 (الصورة تُبنى في CI)، ومضيفٌ للنشر (جهازٌ سحابيٌّ من الطبقة المجانية، أو منصّة حاوياتٍ مُدارة).
اطلب من المساعد docker-compose.prod.yml يشغّل صورك المنشورة بمتغيّرات بيئة إنتاج (من المضيف، لا مُودَعة).
راجع كل سطر — خصوصًا قواعد الجدار الناري وأيّ أسرار.
شغّل خطوات التزويد + التهيئة (أو نشر مضيفك المُدار). افتح رابط التطبيق العام في متصفّح وأنشئ مقتطفًا. إنه حيٌّ على الإنترنت.
أضِف مهمّة نشرٍ إلى سير عمل CI تعمل على main بعد نجاح الاختبارات. ادمج تغييرًا صغيرًا وشاهده ينشر نفسه.
في REFLECTION.md: الصق رابطك الحيّ، ودوّن شيئًا في شيفرة بنية الذكاء الاصطناعي اضطررت لإحكامه أمنيًّا. أودِع.
مستودعك مع الرابط الحيّ. تحقّق من نفسك:
REFLECTION.md فيه الرابط وإصلاح أمانٍ قمت به| المصطلح | المعنى المبسّط |
|---|---|
| البيئة | مكانٌ يعمل فيه التطبيق: تطوير، تجهيز، أو إنتاج. |
| التزويد | إنشاء الخوادم/الشبكة التي يحتاجها التطبيق. |
| Terraform | أداةٌ لتزويد البنية من كود. |
| Ansible | أداةٌ لتهيئة الخوادم ونشر التطبيقات من كود. |
| IaC | البنية ككود — خوادمٌ معرَّفة في ملفاتٍ خاضعةٍ للإصدارات. |
خزنة المقتطفات حيّةً على الإنترنت، وبنيتها معرَّفةً في كودٍ قابل للمراجعة، و(اختياريًّا) خطٌّ ينشر عند كل دمجٍ أخضر. تطبيقك المبنيّ بالذكاء الاصطناعي منتجٌ حقيقيٌّ مشحون.
التالي: الوحدة 11 — المراقبة وقابلية الرصد. الحيّ ليس المنتهى — الآن نجعل التطبيق يخبرك متى يكون سليمًا ومتى لا، بالسجلّات والمقاييس والتنبيهات.