مقدمة
في الوقت الحاضر، يلزم إنشاء الخوادم وتدميرها بشكل متكرر للغاية. وذلك لأنه في بعض الأحيان، تتعرض الخوادم لضغط تشغيل كبير بينما ينخفض الضغط في أوقات أخرى، مما يؤدي إلى إهدار موارد النظام. ومن الأمثلة الشائعة على ذلك مواقع التجارة الإلكترونية خلال مواسم الأعياد التي تجذب الكثير من الزيارات. عندما تكون طبيعة التطبيق قابلة للتوسع، تكون هناك حاجة دائمًا إلى أدوات إدارة التكوين لتسهيل العملية الإجمالية لإنشاء الخوادم. Ansible هي أداة رائعة لإدارة التكوين تعمل على أتمتة إنشاء الخوادم باستخدام إجراءات قياسية مما يقلل من الأخطاء البشرية.
لا يتطلب Ansible تثبيت برامج خاصة على عقد الخوادم. فهو يحتوي على جميع الأدوات اللازمة لكتابة وبناء وتسهيل أتمتة البرامج النصية. يوضح هذا البرنامج التعليمي كيفية استخدام Ansible لأتمتة الخطوات الواردة في دليلنا كيفية إعداد خادم Ubuntu الخاص بك التعليمي.
المتطلبات الأساسية
لإكمال هذا الدليل سنستخدم Ubuntu 20.04. علاوة على ذلك، ستحتاج أيضًا إلى:
-
عقدة تحكم Ansible: جهاز Ubuntu يعمل بأحدث إصدار من Ubuntu. يجب تثبيت الملف الثنائي الرئيسي لـ Ansible وتشغيله على هذا الجهاز. يجب أن يكون هذا الجهاز قادرًا على الاتصال بعقد Ansible. بالنسبة لهذه الاتصالات، تحتاج إلى استخدام مفاتيح SSH. لتجنب المشاكل عند الاتصال، تأكد من تمكين جدار الحماية في عقدة تحكم Ansible الخاصة بك. إذا كنت بحاجة إلى مساعدة، فراجع مدونتنا تثبيت وتكوين Ansible على Ubuntu 20.04 المدونة.
-
مضيفو Ansible: يلزم وجود مضيف واحد أو أكثر للاتصال به. المضيفون هم في الأساس العقد المدارة في Ansible. يجب أن تكون هذه خوادم Ubuntu.
وظائف Ansible Playbook
يمكنك إعداد جميع الخطوات المذكورة أدناه يدويًا. ومع ذلك، سنقوم بأتمتة هذا التنفيذ. عند تشغيل هذا الـ playbook، فإنه سيقوم بالعمليات التالية على جهازك:
-
سيقوم بتثبيت aptitude، وهو المفضل لدى Ansible كمدير حزم خاص به.
-
سيقوم بإنشاء مجموعة إدارية باسم wheel بصلاحيات sudo بدون كلمة مرور.
-
سيقوم بإنشاء مستخدم sudo جديد.
-
سيقوم بنسخ مفتاح SSH محلي في authorized_keys. ويتم استخدام هذا لمستخدم إداري جديد على مضيف بعيد.
-
سيقوم بتعطيل المصادقة المستندة إلى كلمة المرور للمستخدم الجذر (root).
-
سيقوم بتثبيت الحزم اللازمة.
-
سيقوم بتكوين جدار حماية UFW للسماح باتصالات SSH فقط. سيتم إيقاف أي اتصالات أخرى.
بمجرد انتهاء تنفيذ Playbook، سيكون هناك مستخدم جديد متاحًا. يمكنك استخدام هذا المستخدم لتسجيل الدخول إلى النظام.
استخدام Ansible Playbook
لإعداد الخادم، ستحتاج إلى playbook الإعداد الأولي للخادم والتبعيات الخاصة به. إذا كنت تستخدمه للمرة الأولى، فستحتاج إلى استنساخ المستودع باستخدام الرابط أدناه:
|
1 |
cd ~ |
|
1 |
git clone https://github.com/do-community/ansible-playbooks.git |
|
1 |
cd ansible-playbooks |
إذا كان المستودع موجودًا بالفعل في نظامك، فقم بتشغيل الأمر أدناه للحصول على آخر التحديثات:
|
1 |
cd ~/ansible-playbooks |
|
1 |
git pull |
ستحصل على هيكل الملفات التالي على جهازك:
|
1 2 3 4 |
setup |-- playbook.yml |__vars |-- default,yml |
فيما يلي وصف للملفات:
-
vars/default.yml: يحتوي هذا الملف على المتغيرات لتكوين عقدة Ansible.
-
playbook.yml: يحتوي هذا الملف على الوظائف التي سيتم تنفيذها على الخادم.
الملف vars/default.yml يبدو كالتالي:
|
1 2 3 4 |
--- create_user: my_user copy_local_key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}" sys_packages: [ 'curl', 'vim', 'git', 'ufw'] |
فيما يلي وصف لهذه المتغيرات. إذا كنت ترغب في تعديلها، يمكنك استبدال قيمها بقيمك الخاصة:
-
create_user: هذا هو المستخدم الذي تم إنشاؤه. يمتلك هذا المستخدم صلاحيات sudo صلاحيات.
-
copy_local_key: يحتوي هذا على المسار إلى مفتاح SSH العام المحلي. سيتم نسخه إلى الخادم البعيد كـ authorized_key.
-
sys_packages: إذا كنت تريد تثبيت حزمة واحدة أو أكثر على خادمك، فاذكرها هنا كمصفوفة.
بمجرد تعديل هذا الملف، احفظ المحتويات. بعد ذلك، في nano، اضغط على CTRL+X , Y. ثم, ENTER لحفظ محتويات الملف.
الآن أنت جاهز لتشغيل playbook هذا على خوادم متعددة. بشكل افتراضي، تكون Playbooks جاهزة للتنفيذ على الخوادم الموجودة في مخزونك. إذا كنت تريد استخدام Playbook على خوادم معينة، يمكنك استخدام -l العلم. الآن افترض أن الخادم البعيد يحتوي على مستخدمين متعددين، يمكنك استخدام -u العلم لتحديد المستخدم الذي تريد الاتصال به.
إذا كان اسم خادمك هو my_server واسم المستخدم هو my_user، فقم بتشغيل الأمر أدناه للتنفيذ على عقد Ansible:
|
1 |
ansible-playbook playbook.yml -l my_server -u my_user |
ستحصل على مخرجات تشبه ما يلي:
|
1 2 3 4 5 6 7 8 9 |
PLAY [all] ***************************************************************************************************************************** TASK [جمع الحقائق] ***************************************************************************************************************** ok: [my_server] TASK [تثبيت المتطلبات الأساسية] *********************************************************************************************************** changed: [my_server] TASK [التأكد من أن لدينا مجموعة 'wheel' 'wheel' group] *********************************************************************************************** changed: [my_server] TASK [السماح 'wheel' لمجموعة 'wheel' بالحصول على passwordless sudo بدون كلمة مرور] *********************************************************************************** changed: [my_server] |
بمجرد الانتهاء من هذا التنفيذ، يمكنك الاتصال باستخدام الأمر أدناه:
|
1 |
ssh my_user@server_host_or_IP |
تذكر أن my_user كان الاسم الذي استخدمناه في ملف vars/default.yml . ستحتاج إلى تغيير عنوان IP الخاص بالخادم إلى عنوان IP الخاص بخادمك في الأمر أعلاه أيضًا. إذا كنت قد قدمت المتغير copy_local_key للإشارة إلى مفتاح SSH مخصص، فحدد الموقع باستخدام الخيار -i :
|
1 |
ssh my_user@server_host_or_IP -i ~/.ssh/ansible_controller_key |
بعد ذلك، قم بتسجيل الدخول إلى خادمك للتحقق من قواعد جدار الحماية UFW:
|
1 |
sudo ufw status |
ستحصل على المخرجات كما يلي:
|
1 2 3 4 5 |
الحالة: نشط إلى الإجراء من -- ------ ---- OpenSSH السماح أي مكان OpenSSH (v6) السماح أي مكان (v6) |
تؤكد المخرجات أعلاه أنه تم تفعيل جدار الحماية UFW بنجاح. كانت هذه هي الخطوة الأخيرة في playbook الخاص بنا. إذا تم تنفيذ ذلك بشكل صحيح، فهذا يعني أن التنفيذ قد تم بنجاح.
محتويات Ansible Playbook
ملفات Playbook التي استخدمناها في هذا البرنامج التعليمي مستضافة على ansible-playbooks/setup_ubuntu1804 at master · do-community/ansible-playbooks · GitHub. إذا كنت ترغب في رؤية محتويات كل ملف لاستخدامه أو تعديله، فانقر فوق الزر Raw الموجود في الجزء العلوي من كل برنامج نصي.
كمرجع سريع، سنشارك المحتويات الكاملة لـ Playbook بالإضافة إلى الملفات ذات الصلة:
-
vars/default.yml
يحتوي هذا الملف على القيم التي سيتم استخدامها بواسطة مهام playbook. وتشمل هذه القيم مثل اسم المستخدم، والامتيازات، ومفاتيح SSH، والحزم التي سيتم تثبيتها كجزء من الإعداد الأولي، وما إلى ذلك:
|
1 2 3 4 |
--- create_user: my_user copy_local_key: "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}" sys_packages: [ 'curl', 'vim', 'git', 'ufw'] |
-
playbook.yml
إن ملف playbook.yml يحتوي على الوظائف التي سيتم تنفيذها. أولاً، يسرد الملف جميع المضيفين المستهدفين. إذا كنت تريد تحديد جميع الخوادم، فاجعل قيمة هذا المفتاح all. بعد ذلك، إذا كنت تريد تحديد المهام التي سيتم تنفيذها باستخدام امتيازات sudo، فيمكنك تعيين قيمة المتغير become: true. وأخيرًا، يحتاج هذا الملف إلى تضمين محتويات ملف 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 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: تثبيت المتطلبات الأساسية apt: name=aptitude update_cache=yes state=latest force_apt_get=yes # إعداد مجموعة Sudo - name: التأكد من أن لدينا مجموعة 'wheel' group group: name: wheel state: present - name: السماح 'wheel' لمجموعة بالحصول على sudo بدون كلمة مرور lineinfile: path: /etc/sudoers state: present regexp: '^%wheel' line: '%wheel ALL=(ALL) NOPASSWD: ALL' validate: '/usr/sbin/visudo -cf %s' # إعداد المستخدم + المفتاح - name: إنشاء مستخدم جديد عادي بصلاحيات sudosudo privileges user: name: "{{ create_user }}" state: present groups: wheel append: true create_home: true shell: /bin/bash - name: تعيين المفتاح المصرح به للمستخدم البعيد authorized_key: user: "{{ create_user }}" state: present key: "{{ copy_local_key }}" - name: تعطيل المصادقة بكلمة المرور للمستخدم root lineinfile: path: /etc/ssh/sshd_config state: present regexp: '^#?PermitRootLogin' line: 'PermitRootLogin prohibit-password' # تثبيت الحزم - name: تحديث apt apt: update_cache=yes - name: تثبيت حزم النظام المطلوبة apt: name={{ sys_packages }} state=latest # إعداد UFW - name: UFW - السماح باتصالات SSH ufw: rule: allow name: OpenSSH - name: UFW - - رفض كل حركة المرور الواردة الأخرى بشكل افتراضي ufw: state: enabled policy: deny direction: incoming |
الخاتمة
تعد الأتمتة أمرًا أساسيًا في تكنولوجيا المعلومات، حيث تضمن خلو جميع العمليات من الأخطاء واتباعها للممارسات والإجراءات القياسية. ونظرًا لأن معظم البرمجيات اليوم يتم تقديمها عبر الويب وتتميز بطبيعة موزعة، فقد أصبح إنشاء خوادم جديدة مهمة يومية، على سبيل المثال لبيئات مختلفة مثل بيئات الاختبار (staging) أو الإنتاج (production)، أو حتى بيئات العرض التجريبي (demo).
في هذا البرنامج التعليمي، أوضحنا كيفية تحقيق أتمتة الخوادم باستخدام Ansible، وهي أداة قوية وسهلة الاستخدام يمكنها توفير الكثير من الوقت لك.
حوسبة سعيدة!
التعليقات
لا توجد تعليقات بعد. كن أول من يعلق.