0Pricing
Ansible Academy · درس

هندسة المشروع: Roles وInventory

نظّم مستودع النشر كاملًا

هندسة المشروع: Roles وInventory درس مجاني في Ansible Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Ansible Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Ansible Academy 4 دروس في المجموع.

هدف المشروع النهائي

حان وقت نشر تطبيق حقيقي متعدد الطبقات مع نشر تدريجي ودون توقف. الخطوة الأولى: صمّم تخطيط المشروع. 🚀

فكّر باستخدام الأدوار

قسّم النظام إلى أدوار: دور لكل مسؤولية مثل common وweb وapp وdb وloadbalancer. وكل دور قابل لإعادة الاستخدام والاختبار بمفرده.

التخطيط على المستوى الأعلى

يحافظ المستودع المنظم على inventory وgroup_vars وroles وملف playbook الرئيسي site.yml في الجذر، حتى يتمكن أي شخص من العثور على العناصر بسرعة.

deploy/
  site.yml
  inventory/
  group_vars/
  host_vars/
  roles/

يربط site.yml كل شيء

يستورد ملف playbook الرئيسي site.yml ملفات الـ plays الخاصة بكل طبقة بالترتيب. وهو الأمر الوحيد الذي ينشر المكدس بأكمله.

- import_playbook: plays/loadbalancer.yml
- import_playbook: plays/db.yml
- import_playbook: plays/app.yml
- import_playbook: plays/web.yml

اربط الطبقات بالمجموعات

يعرّف inventory لديك مجموعةً لكل طبقة: lb وdb وapp وweb. ويستهدف كل play المضيفين الذين يخصونه تمامًا.

[lb]
lb1

[web]
web1
web2

[app]
app1
app2

[db]
db1

group_vars لكل طبقة

خزّن إعدادات الطبقات في group_vars: منافذ web، وإصدار app، وبيانات اعتماد db. وترثها المضيفون تلقائيًا دون نسخ ولصق.

group_vars/web.yml:
  nginx_port: 80
  upstream: app:8080

host_vars للحالات الخاصة

عندما يختلف أحد المضيفين، ضع التجاوزات في host_vars. فقد تتضمن قاعدة db الأساسية، مثلًا، إعدادات النسخ المتماثل التي لا تتوفر لدى البقية.

host_vars/db1.yml:
  postgresql_role: primary

ثبّت إصدار التطبيق

اجعل إصدار الإصدار متغيرًا بدلًا من جعله نصًا ثابتًا. وتتيح لك نقطة تغيير واحدة التقدم إلى إصدار أحدث أو الرجوع إلى إصدار سابق خلال ثوانٍ.

group_vars/all.yml:
  app_version: "2.4.1"

افصل بين البيئات

احتفظ بمجلدات inventory لكل بيئة حتى لا تتشارك staging وproduction المضيفين أبدًا. الأدوار نفسها، لكن الأهداف مختلفة.

inventory/
  staging/hosts
  production/hosts

ثبّت تبعياتك

أدرج أدوار Galaxy الخارجية في requirements.yml حتى يثبّت كل عضو في الفريق وكل تشغيل لـ CI شفرة الأتمتة نفسها تمامًا.

roles:
  - name: geerlingguy.nginx
    version: 3.1.4

الاستثمار في البنية أولًا يؤتي ثماره

يحوّل التخطيط المدروس عملية نشر مخيفة إلى بضعة أوامر يمكن التنبؤ بها. ويوفر لك التنظيم الآن عناء معالجة المشكلات لاحقًا. 🧱

اختبار سريع

دعونا نضع جزءًا من التهيئة في مكانه الصحيح.

مراجعة

صمّمت المستودع: أدوار لكل طبقة، ومجموعات inventory، وgroup_vars وhost_vars، وsite.yml يشغّل عملية النشر بأكملها. ✅

الأسئلة الشائعة

هل درس «هندسة المشروع: Roles وInventory» مجاني؟

نعم — نص درس «هندسة المشروع: Roles وInventory» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Ansible Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Ansible Academy 4 دروس في المجموع.

ماذا ستتعلم في «هندسة المشروع: Roles وInventory»؟

نظّم مستودع النشر كاملًا تتمرن على Ansible Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Ansible Academy؟

لا تُشترط خبرة سابقة. Ansible Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «هندسة المشروع: Roles وInventory»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Ansible Academy هذا؟

نعم. كل درس في Ansible Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. هندسة المشروع: Roles وInventory
  2. تجهيز المضيفين وتأمينهم وتهيئتهم الأولية
  3. نشر متدرّج خلف Load Balancer
  4. اختبارات Smoke والتراجع والإشعارات
← العودة إلى Ansible Academy