هذا الدّرس هو جزء من سلسلة دروس حول نشر تطبيقات PHP باستخدام Ansible على Ubuntu، تحدّثنا في الأجزاء الأولى عن الخطوات الأساسيّة لنشر تطبيق، وفي بقيّة الأجزاء تكلمنا عن مواضيع أكثر تقدّمًا مثل قواعد البيانات، عفاريت الطابور queue daemons، وجدولة المهام (عبر cron).
سنقوم في هذا الدّرس بالبناء على ما تعلمناه في الدروس السابقة عن طريق تحويل playbook في Ansible من دعمها لتطبيق واحد إلى دعمها لنشر تطبيقات PHP متعدّدة على خادوم أو عدّة خواديم.
سنستخدم تطبيقات Lumen بسيطة كجزء أمثلتنا، ولكن يُمكِن تعديل هذه التعليمات بسهولة لتدعم أطر عمل وتطبيقات أخرى في حال كانت متواجدة لديك، من المفضّل أن تستخدم تطبيقات الأمثلة حتى تجد نفسك متآلفًا مع القيام بالتغييرات لِـ playbook.
الخطوة الأولى – إضافة المزيد من التطبيقات
في هذه الخطوة سنقوم بإعداد تطبيقين إضافيين في الـ playbook لدينا.
الآن وقد أعدنا تصنيع الـ playbook سنستخدم متغيرات لتعريف التطبيقات، إنّ عملية إضافة تطبيقات جديدة لخادومنا هي عملية سهلة جدًّا، نقوم بإضافتها ببساطة إلى قائمة المتغيرات applications
، وهنا تظهر قوة متغيرات Ansible.
نفتح playbook من أجل تحريرها:
nano php.yml
نبحث في أعلى القسم vars
عن الكتلة applications
:
Existing applications variable in php.yml applications: - name: laravel domain: laravel.example.com repository: https://github.com/do-community/do-ansible-adv-php.git branch: example
نضيف تطبيقين اثنين:
Updated applications variable in php.yml applications: - name: laravel domain: laravel.example.com repository: https://github.com/do-community/do-ansible-adv-php.git branch: example - name: one domain: one.example.com repository: https://github.com/do-community/do-ansible-php-example-one.git branch: master - name: two domain: two.example.com repository: https://github.com/do-community/do-ansible-php-example-two.git branch: master
نحفظ الـ playbook ونقوم بتشغيلها:
ansible-playbook php.yml --ask-sudo-pass
قد تستغرق هذه الخطوة بعض الوقت بينما يقوم الـ composer بإعداد التطبيقات الجديدة، وعندما ينتهي سنلاحظ تغيير عدد من المهام، وإن دققنا أكثر سنلاحظ أنّه سيتم عرض كل عنصر ناتج عن الحلقة، يخبرنا الأول وهو تطبيقنا الأصل بعبارة ok
أو skipped
، بينما يخبرنا التطبيقان الجديدان بالحالة changed
.
والأهم من ذلك أنّه إذا زرنا النطاقات الثلاثة لمواقعنا التي أعددناها في متصفح الإنترنت فينبغي أن نلاحظ ثلاثة مواقع مختلفة.
الأول يبدو مألوفًا لنا، أما الموقعان الآخران سيعرضان:
http://one.example.com/ This is example app one!
http://two.example.com/ This is example app two!
وبذلك قمنا بنشر تطبيقي ويب جديدين عن طريق تحديث قائمة التطبيقات ببساطة.
الخطوة الثانية – استخدام متغيرات المضيفين Host Variables
سنستخرج في هذه الخطوة متغيراتنا إلى متغيرات المضيفين.
بالرجوع إلى الوراء نجد أنّ متغيرات الـ playbook جيدة، ولكن ماذا لو أردنا نشر تطبيقات مختلفة على خواديم مختلفة باستخدام نفس الـ playbook؟ نستطيع عمل تحقّق شرطي على كل مهمّة لإيجاد الخادوم الذي يقوم بتشغيل المهمة، أو نستطيع استخدام متغيرات المضيفين، وهي تمامًا كما تبدو عليه: متغيرات تُطبَّق على مضيف معيّن بدلًا من كافّة المضيفين عبر الـ playbook.
يمكن تعريف متغيرات المضيف سطريًّا inline بداخل الملف hosts
كما فعلنا مع المتغير ansible_ssh_user
أو يمكن تعريفها في ملف مخصّص لكل مضيف داخل الدليل host_vars
.
في البداية نقوم بإنشاء دليل جديد إلى جانب الملف hosts
والـ playbook، نقوم بتسمية الدليل بـ host_vars
:
mkdir host_vars
نحتاج بعدها إلى إنشاء ملف من أجل المضيف، الاتفاقية التي تستخدمها Ansible هي من أجل أن يتوافق اسم الملف مع اسم المضيف في الملف hosts
، لذلك على سبيل المثال إن كان يبدو الملف hosts
لدينا كما يلي:
Ansible hosts file your_first_server_ip ansible_ssh_user=sammy
فينبغي أن نقوم بإنشاء ملف يُدعى host_vars/your_first_server_ip
، فلنقم بإنشائه الآن:
nano host_vars/your_first_server_ip
تستخدم ملفّات المضيفين YAML من أجل تنسيقها تمامًا كما هو الحال مع الـ playbooks، ويعني هذا أنّنا نستطيع نسخ القائمة applications إلى ملف المضيفين الجديد لدينا بحيث يبدو كما يلي:
New host_vars/your_first_server_ip file --- applications: - name: laravel domain: laravel.example.com repository: https://github.com/do-community/do-ansible-adv-php.git branch: example - name: one domain: one.example.com repository: https://github.com/do-community/do-ansible-php-example-one.git branch: master - name: two domain: two.example.com repository: https://github.com/do-community/do-ansible-php-example-two.git branch: master
نقوم بحفظ ملف المضيفين الجديد ونفتح الـ playbook لتحريرها:
nano php.yml
نحدّث أعلى الملف لإزالة كامل القسم applications
:
Updated top of php.yml --- - hosts: php sudo: yes vars: wwwuser: www-data tasks: . . .
نحفظ الـ playbook ونقوم بتشغيلها:
ansible-playbook php.yml --ask-sudo-pass
وعلى الرغم من أنّنا نقلنا متغيراتنا من الـ playbook إلى ملف المضيفين فيجب أن يبقى الخرج نفسه ولا يجب أن يتم تبليغنا عن تغييرات من قبل Ansible، وكما نرى يعمل host_vars
بنفس الطريقة التي يعمل بها vars
في الـ playbook، ولكنّه مُخصّص للمضيف.
ستكون المتغيرات المُعرّفة في ملفّات host_vars
قابلة للوصول عبر كامل الـ playbooks التي تدير الخادوم، وهو مفيد من أجل الخيارات والإعدادات الشائعة، ومع ذلك كن حذرًا من استخدام اسم شائع قد يعني أشياء مختلفة عبر الـ playbooks المختلفة.
الخطوة الثالثة – نشر التطبيقات على خادوم آخر
سنستخدم في هذه الخطوة ملفات المضيفين الجديدة وننشر تطبيقاتنا على خادوم آخر.
نحتاج في البداية إلى تحديث ملف المضيفين hosts
بمضيفنا الجديد، نفتحه من أجل تحريره:
nano hosts
ونقوم بإضافة المضيف الجديد:
Ansible hosts file your_first_server_ip ansible_ssh_user=sammy your_second_server_ip ansible_ssh_user=sammy
نحفظ الملف ونغلقه.
نحتاج بعدها إلى إنشاء ملف مضيفين جديد، كما فعلنا مع أول ملف:
nano host_vars/your_second_server_ip
تستطيع انتقاء واحد أو أكثر من تطبيقات مثالنا وإضافتها إلى ملف المضيف لديك، فإذا أردت مثلًا نشر مثالنا الأصلي والمثال الثاني إلى خادوم جديد فيجب أن تستخدم:
New host_vars/your_second_server_ip file --- applications: - name: laravel domain: laravel.example2.com repository: https://github.com/do-community/do-ansible-adv-php.git branch: example - name: two domain: two.example2.com repository: https://github.com/do-community/do-ansible-php-example-two.git branch: master
نقوم بحفظ playbook.
وأخيرًا نقوم بتشغيلها:
ansible-playbook php.yml --ask-sudo-pass
ستستغرق Ansible وقتًا ليتم تشغيلها لأنّها تقوم بإعداد كل شيء على خادومنا الثاني، وعندما تنتهي نفتح تطبيقاتنا التي اخترناها في المتصفح (استخدمنا في هذا المثال laravel.example2.com
وtwo.example2.com
) وللتأكد من أنّه تم إعدادها بشكل صحيح يجب أن نرى التطبيقات المحدّدة التي اخترناها من أجل ملف المضيفين، وينبغي ألّا تحدث أيّة تغييرات على خادومنا الأصلي.
الخاتمة
أخذنا في هذا الدرس playbook تطبيق وحيد تعمل بشكل كامل وقمنا بتحويلها لتدعم تطبيقات متعددة عبر عدّة خواديم، وبجمعها مع المواضيع التي تمت تغطيتها في الدروس السابقة يجب أن تمتلك كل ما تحتاجه لكتابة playbook كاملة لنشر تطبيقاتك، وكما هو الحال مع الدروس السابقة فلا زلنا لم نسجل الدخول بشكل مباشر باستخدام SSH.
ومن المؤكد أنك لاحظت مدى بساطة إضافة المزيد من التطبيقات والمزيد من الخواديم بعد الانتهاء من تجهيز بنية الـ playbook، وهنا تكمن قوة Ansible وهو ما يجعلها مرنة جدًّا وسهلة الاستخدام.
ترجمة -وبتصرّف- لـ How To Deploy Multiple PHP Applications using Ansible on Ubuntu 14.04 لصاحبه Stephen Rees-Carter.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.