أتمتة الخوادم هي عملية آمنة وموثوقة لإدارة ومراقبة الخوادم بطريقة فعالة ومواكبة للتطور التكنولوجي. وعلى عكس الأسلوب التقليدي لإدارة الخوادم في مراكز البيانات التي يديرها فريق مخصص من الخبراء، يتم إدارة جميع الخوادم باستخدام الأتمتة. ونتيجة لذلك، يتم تقليل الأخطاء البشرية إلى الحد الأدنى.
تُستخدم أدوات إدارة التكوين مثل Ansible, Puppet, Terraform، على سبيل المثال لا الحصر، عادةً لأتمتة الخوادم. وتقوم هذه الأدوات بإعداد الخوادم باستخدام الأتمتة من خلال وضع إجراءات قياسية للخوادم الجديدة مع التخلص من الأخطاء المحتملة عند القيام بذلك يدويًا.
Ansible هو مشروع قوي مفتوح المصدر. إنه مرن وسهل الاستخدام ويتميز ببنية غاية في البساطة. لا يتطلب استخدام Ansible playbooks أي خلفية في البرمجة، كما أنه لا يتطلب تثبيت برامج على العقد. وقبل كل شيء، فهو مجهز بقدرات ممتازة تتيح له كتابة البرامج النصية وتبسيط الأتمتة.
في هذا الدليل، سنقوم بـ إرشادك خلال خطوات تثبيت وإعداد LAMP على Ubuntu 20.04 باستخدام Ansible.
المتطلبات الأساسية
لمتابعة هذا البرنامج التعليمي، ستحتاج إلى:
- أن يكون Ubuntu مثبتًا على نظامك.
- مضيف Ansible واحد أو أكثر: يجب إعداد مضيف Ansible بعيد واحد أو أكثر يعمل بأحدث إصدار من Ubuntu في البداية. اتبع البرنامج التعليمي أتمتة إعداد الخادم باستخدام Ansible و Ubuntu 20.04 من أجل الإعداد.
- عقدة تحكم Ansible واحدة: جهاز يعمل بنظام Ubuntu ومثبت عليه Ansible ومكون ومتصل بمضيفي Ansible باستخدام مفاتيح SSH:
-
- يجب أن تحتوي عقدة التحكم على مستخدم يتمتع بامتيازات sudo وجدار حماية مفعّل.
- إذا كنت بحاجة إلى مساعدة في إعداد Ansible، فراجع البرنامج التعليمي حول تثبيت وتهيئة Ansible على Ubuntu 20.04.
ما هو الغرض من Ansible Playbook؟
إن دليل تشغيل Ansible هذا هو طريقة بديلة لتنفيذ الإجراء الموضح في دليلنا إعداد LAMP Stack – Linux Apache MySQL PHP.
سيؤدي تشغيل دليل تشغيل Ansible إلى الإجراءات التالية على مضيفي Ansible لديك:
-
تثبيت aptitude، وهو بديل لمدير الحزم apt كما يفضل Ansible.
-
تثبيت جميع حزم LAMP اللازمة.
-
إنشاء Apache جديدVirtualHost وتكوين جذر مستند مخصص.
-
تفعيل ON الـ الجديدVirtualHost.
-
تعطيل OFF لموقع Apache الافتراضي، أي ضبط متغير disable_default على true.
-
اختر كلمة مرور لمستخدم root الخاص بـ MySQL.
-
إزالة حسابات MySQL المجهولة وقاعدة بيانات الاختبار.
-
إعداد UFW للسماح بمرور حركة مرور HTTP على المنفذ المكون، حيث يكون الافتراضي هو 80.
-
إعداد سكربت اختبار PHP.
بعد اكتمال تشغيل Ansible playbook، سترى بيئة ويب PHP تعمل فوق Apache وفقًا للتكوينات التي قمنا بضبطها.
استخدام Ansible Playbook
أولاً، احصل على LAMP playbook والتبعيات الخاصة به من do-community/ansible-playbooks المستودع. بعد ذلك، قم باستنساخ المستودع الذي يحتوي على LAMP playbook إلى مجلد محلي داخل Ansible Control Node.
قم بتشغيل git pull أمر للتأكد من أن لديك إمكانية الوصول إلى المحتوى الصحيح الذي سنستخدمه في هذا البرنامج التعليمي:
|
1 2 |
cd ~/ansible-playbooks git pull |
إذا كنت تستخدم do-community/ansible-playbooks للمرة الأولى، فكر في استنساخ المستودع إلى المجلد الرئيسي الخاص بك:
|
1 2 3 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
انتقل إلى lamp_ubuntu2004 وسوف ترى البنية:
|
1 2 3 4 5 6 7 8 |
lamp_ubuntu2004 ├── files │ ├── apache.conf.j2 │ └── info.php.j2 ├── vars │ └── default.yml ├── playbook.yml └── readme.md |
إليك نظرة عامة على ما تعنيه هذه الملفات:
-
files/info.php.j2: هذا ملف قالب حيث يمكنك إعداد صفحة اختبار PHP على جذر خادم الويب.
-
files/apache.conf.j2: ملف قالب آخر يُستخدم لإعداد Apache VirtualHost.
-
vars/default.yml: إنه ملف متغيرات لتخصيص إعدادات playbook.
-
playbook.yml: يحتوي هذا الملف على جميع محتويات المهام التي سيتم تنفيذها على الخادم/الخوادم البعيدة.
-
readme.md: ملف قراءة يحتوي على المعلومات الخاصة بـ playbook هذا.
فلنقم بتخصيص تكوينات MySQL و Apache عن طريق إجراء تغييرات في ملف متغيرات playbook. انتقل إلى lamp_ubuntu2004 وافتح ملف vars/default.yml باستخدام nano محرر:
|
1 2 |
cd lamp_ubuntu2004 nano vars/default.yml |
عند فتح ملف vars/default.yml ، ستكون هناك قائمة بالمتغيرات التي يجب تعديلها:
|
1 2 3 4 5 6 7 |
--- mysql_root_password: "mysql_root_password" app_user: "justin" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true |
دعونا نفهم كل متغير من المتغيرات بالتفصيل:
-
mysql_root_password: يخزن كلمة المرور لحساب root الخاص بـ MySQL.
-
app_user: هو مستخدم بعيد غير root على مضيف Ansible يعمل كمالك لملفات التطبيق.
-
http_host: يعرض اسم النطاق الخاص بك.
-
http_conf: يعرض اسم ملف التكوين الذي تم إنشاؤه داخل Apache.
-
http_port: هو منفذ HTTP لهذا المضيف الافتراضي، و 80 هو الافتراضي.
-
disable_default: يُستخدم للتراجع عن الخيارات الافتراضية التي تأتي مع Apache.
ثم احفظ وأغلق vars/default.yml الملف.
بمجرد الانتهاء من الإعداد، نكون جاهزين لتشغيل playbook هذا على الخوادم. بشكل افتراضي، تم تكوين معظم الخوادم في الـ playbooks ليتم تنفيذها على كل خادم في قوائم الجرد. فلنستخدم -l علامة للتأثير على خادم واحد فقط أو مجموعة فرعية محددة تتأثر بالـ playbook. بدلاً من ذلك، يمكننا استخدام -u علامة للحصول على عرض تفصيلي لأي خادم بعيد يتم الاتصال به ويتم التنفيذ على الأجهزة المضيفة البعيدة.
دعونا ننفذ الـ playbook على خادم واحد server1 والاتصال به باستخدام مستخدم واحد كـ justin:
|
1 |
ansible-playbook playbook.yml -l server1 -u justin |
ستحصل على مخرجات مشابهة لهذا:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
تشغيل [الكل] ********************************************************************************************************* مهمة [جمع الحقائق] *********************************************************************************************************موافق: [server1] مهمة [تثبيت المتطلبات الأساسية] *********************************************************************************************************موافق: [server1] => (عنصر=aptitude) ... مهمة [UFW - السماح بـ HTTP على منفذ 80] ********************************************************************************************************* تم التغيير: [server1] مهمة [إعداد وتجهيز PHP معلومات صفحة] ********************************************************************************************************* تم التغيير: [server1] تشغيل المعالج [إعادة تحميل Apache] ********************************************************************************************************* تم التغيير: [server1] تشغيل المعالج [إعادة تشغيل Apache] ********************************************************************************************************* تم التغيير: [server1] تشغيل ملخص ********************************************************************************************************* server1 : موافق=15 تم التغيير=11 لا يمكن الوصول إليه=0 فشل=0 تم التخطّي=0 تم الإنقاذ=0 تم التجاهل=0 |
بمجرد رؤية اكتمال تشغيل دليل التشغيل (playbook)، انتقل إلى متصفح الويب الخاص بك وقم بالوصول إلى مضيف الخادم. لا تنسَ إرفاق /info.php في نهاية عنوان IP:
|
1 |
http://server_host_or_IP/info.php |
عند النقر على هذا الـ URL، ستظهر لك صفحة كهذه:
|
تحذير: تحتوي الصفحة المعروضة على معلومات حساسة حول بيئة PHP الخاصة بك. لذلك، يوصى بإزالة معلوماتك الشخصية من الخادم باستخدام الأمر التالي: rm -f /var/www/info.php |
ماذا يوجد في الـ Playbook؟
بعد ذلك، دعنا نفهم معنى وأهمية الملفات المستخدمة في ansible-playbook محتوى:
-
vars/default.yml
إنّ ملف متغيرات default.yml يحتوي على اسم النطاق وكلمة المرور لحساب MySQL root . هذه هي القيم الافتراضية المستخدمة في مهام ansible-playbook :
|
1 2 3 4 5 6 7 |
--- mysql_root_password: "mysql_root_password" app_user: "justin" http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" disable_default: true |
- files/apache.conf.j2
إن ملف apache.conf.j2 هو قالب Jinja 2 يُستخدم لتكوين Apache VirtualHost جديد. يجب تحديد المتغيرات المستخدمة في هذا القالب في ملف vars/default.yml للمتغيرات:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<VirtualHost *:{{ http_port }}> ServerAdmin webmaster@localhost ServerName {{ http_host }} ServerAlias www.{{ http_host }} DocumentRoot /var/www/{{ http_host }} ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/{{ http_host }}> Options -Indexes </Directory> <IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm </IfModule> </VirtualHost> |
- files/info.php.j2
على غرار files/apache.conf.j2، فإن ملف info.php.j2 هو أيضًا قالب Jinja. نستخدم هذا الملف لإعداد سكربت PHP تجريبي في جذر المستند لخادم LAMP تم تكوينه حديثًا:
|
1 2 |
<?php phpinfo(); |
-
playbook.yml
إن ملف playbook.yml هو الملف الذي يتم فيه تحديد جميع المهام الخاصة بهذا الإعداد. في هذا الملف، يتم تكوين جميع حزم LAMP. يبدأ بتحديد مجموعة الخوادم المستهدفة ويتم تعيينه على all. أيضًا، فإنه يأخذ become كقيمة true ( become: true)، ويحدد جميع المهام التي يجب تنفيذها. بعد ذلك، يحتوي ملف yaml على الملف الافتراضي، وهو vars/default.yml ملف المتغيرات، لتحميل خيارات التكوين:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
--- - المضيفون: الكل يصبح: صحيح ملفات_المتغيرات: - المتغيرات/افتراضي.yml المهام: - الاسم: تثبيت المتطلبات الأساسية apt: الاسم={{ العنصر }} تحديث_المخزن_المؤقت=نعم الحالة=الأحدث force_apt_get=نعم حلقة: [ 'aptitude' ] #تكوين Apache - الاسم: تثبيت LAMP حزم apt: الاسم={{ العنصر }} تحديث_المخزن_المؤقت=نعم الحالة=الأحدث حلقة: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] - الاسم: إنشاء مستند جذر ملف: مسار: "/var/www/{{ http_host }}" الحالة: دليل المالك: "{{ app_user }}" وضع: '0755' - الاسم: إعداد وتكوين Apache المضيف الافتراضي قالب: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" إشعار: إعادة تحميل Apache - الاسم: تمكين جديد موقع shell: /usr/sbin/a2ensite {{ http_conf }} إشعار: إعادة تحميل Apache - name: تعطيل موقع Apache الافتراضي shell: /usr/sbin/a2dissite 000-default.conf when: disable_default notify: إعادة تحميل Apache # تكوين MySQL - name: يضبط كلمة مرور الـ root mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock - name: يزيل جميع حسابات المستخدمين المجهولين mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" - name: يزيل قاعدة بيانات اختبار MySQL mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" # تكوين UFW - name: "UFW - السماح بـ HTTP على المنفذ {{ http_port }}" ufw: rule: allow port: "{{ http_port }}" proto: tcp # صفحة معلومات PHP - name: إعداد صفحة معلومات PHPPage template: src: "files/info.php.j2" dest: "/var/www/{{ http_host }}/info.php" handlers: - name: إعادة تحميل Apache service: name: apache2 state: reloaded - name: إعادة تشغيل Apache service: name: apache2 state: restarted |
يمكنك تعديل هذه الملفات بناءً على احتياجات ومتطلبات مشروعك.
الخاتمة
في هذا البرنامج التعليمي، استعرضنا خطوات تثبيت وتهيئة LAMP على خادم بعيد باستخدام Ansible. هناك الكثير من خيارات التخصيص الأخرى التي يمكنك تجربتها. على سبيل المثال، استخدام وثائق Ansible الرسمية واستخدام حالات mysql_user من وحدة Ansible هي طريقة ممتازة للارتقاء بمستواك. أيضًا، اتبع الخطوات الموضحة في هذا الدليل لممارسة الأتمتة باستخدام أدوات إدارة التكوين الأخرى وأنظمة التشغيل لزيادة مستوى الصعوبة.
هل أنت جديد على حزمة LAMP وتريد التعمق في هذا الموضوع؟ استكشف البرامج التعليمية التالية على مدونتنا:
- كيفية تثبيت WordPress مع LAMP على Ubuntu 20.04
- كيفية تثبيت حزمة Linux و Apache و MySQL و PHP (LAMP) على Centos-7
- كيفية تثبيت حزمة LEMP Stack Linux Nginx MySQL PHP على Ubuntu 20.04
حوسبة سعيدة!

التعليقات
لا توجد تعليقات بعد. كن أول من يعلق.