Fabric – أتمتة تنفيذ الأوامر ونشر Linux عبر SSH

في عالم تطوير البرمجيات المتغير باستمرار، إدارة الخوادم عن بُعد بكفاءة أمر أساسي. سواء كنت مسؤول نظام، مهندس برمجيات، أو مطور برمجيات، القدرة على تشغيل أوامر Linux على الخوادم عن بُعد هي مهمة شائعة.

هنا تأتي دور Fabric، وهي مكتبة Python متقدمة تم تصميمها لتنفيذ أوامر Linux عن بُعد عبر SSH، مما يجعلها أداة لا غنى عنها لأي شخص بحاجة إلى إدارة الأنظمة عن بُعد مع الاستفادة من قوة Python.

ما هو Fabric؟

Fabric هي مكتبة متعددة الاستخدامات في Python تبسط عملية تشغيل أوامر الشل على الخوادم عن بُعد عبر اتصالات SSH. تم تطويرها أولاً بواسطة جيف فورسييه وأصبحت لاحقًا مشروعًا مفتوح المصدر.

توفر واجهة برمجية عالية المستوى وبأسلوب Pythonic للعمل مع الأنظمة عن بُعد، مما يتيح لك أتمتة المهام، نشر الشيفرات، وإدارة التكوينات عبر عدة خوادم بكل سهولة.

لماذا استخدام Fabric؟

هناك عدة أسباب مقنعة لاختيار Fabric لاحتياجات تنفيذ الأوامر عن بُعد الخاصة بك:

  • النهج البايثوني – يلتزم Fabric بفلسفة Python، مما يجعل من السهل على المطورين ومسؤولي النظام كتابة النصوص في لغة يعرفونها بالفعل.
  • SSH و Paramiko – يعتمد Fabric على مكتبة Paramiko لـ معالجة اتصالات SSH، مما يوفر وسيلة آمنة وموثوقة لتنفيذ الأوامر عن بُعد.
  • سير العمل القائم على المهام – يشجع Fabric على نهج موجه نحو المهام لتنفيذ الأوامر عن بُعد. تقوم بتعريف المهام، التي هي ببساطة وظائف Python، ويعتني Fabric بتنفيذها على الخوادم البعيدة.
  • حالات الاستخدام – يعد Fabric أداة متعددة الاستخدامات تناسب مجموعة واسعة من حالات الاستخدام، بما في ذلك نشر التطبيقات، وإدارة تكوينات الخادم، وتشغيل مهام صيانة النظام.

في هذا الدليل، سنغطي الخطوات لتقديم والبدء باستخدام Fabric لتعزيز إدارة الخادم لمجموعات من الخوادم.

كيفية تثبيت أداة التشغيل التلقائي Fabric في Linux

سمة مهمة لـ fabric هي أن الآلات البعيدة التي تحتاج إلى إدارتها تحتاج فقط إلى تثبيت خادم OpenSSH القياسي.تحتاج فقط إلى تثبيت متطلبات معينة على الخادم الذي تدير منه الخوادم البعيدة قبل أن تتمكن من البدء.

لديك فقط المتطلبات المحددة التي يجب تثبيتها على الخادم الذي تدير منه الخوادم البعيدة قبل أن تتمكن من البدء.

المتطلبات:

  • بيثون 2.5+ مع رؤوس التطوير
  • بايثون-setuptools و pip (اختياري، لكن مفضل) gcc

Fabric يتم تثبيته بسهولة باستخدام مدير الحزم pip، لكن قد تفضل اختيار مدير حزمك الافتراضي yum، dnf، أو apt/apt-get لتثبيت حزمة fabric، وعادة ما تسمى fabric أو python-fabric.

تثبيت Fabric في أنظمة RHEL

على توزيعات RHEL-based مثل CentOS Stream و Rocky Linux و AlmaLinux ، يجب أن يكون مستودع EPEL مثبتًا ومفعلًا على النظام لتثبيت حزمة fabric.

sudo dnf install epel-release
sudo dnf install fabric

تثبيت Fabric في الأنظمة Debian

على توزيعات Debian-based مثل Ubuntu و Linux Mint ، يمكن للمستخدمين ببساطة القيام بـ apt لتثبيت حزمة fabric كما هو موضح:

sudo apt install fabric

تثبيت Fabric باستخدام PiP

إذا لم تتوفر fabric من مستودعات نظامك ، يمكنك استخدام pip لتثبيتها كما هو موضح.

sudo yum install python3-pip       [On RedHat based systems] 
sudo dnf install python3-pip       [On Fedora 22+ versions]
sudo apt install python3-pip       [On Debian based systems]

بمجرد تثبيت pip بنجاح ، يمكنك استخدام pip للحصول على أحدث إصدار من fabric كما هو موضح:

pip3 install fabric

كيفية استخدام Fabric لأتمتة أدوار إدارة النظام اللينكس

لنبدأ في كيفية استخدام Fabric. كجزء من عملية التثبيت ، تمت إضافة سكربت Python يسمى 'fab' إلى دليل في مسار نظامك. يتولى السكربت 'fab' معالجة جميع المهام عند استخدام Fabric.

قم بتشغيل أوامر Linux محليًا

بشكل تقليدي، تحتاج إلى البدء بإنشاء ملف Python يسمى fabfile.py باستخدام محرر النص المفضل لديك. تذكر أنه يمكنك تسمية هذا الملف باسم مختلف إذا أردت، لكنك ستحتاج إلى تحديد مسار الملف على النحو التالي:

fab --fabfile /path/to/the/file.py

Fabric يستخدم 'fabfile.py' لتشغيل المهام، 'fabfile' يجب أن يكون في نفس الدليل الذي تقوم بتنفيذ أداة الـFabric.

مثال 1: لننشئ أولاً مرحباً بالعالم.

# vi fabfile.py

أضف هذه الأسطر من الكود إلى الملف.

def hello():
       print('Hello world, Tecmint community')

احفظ الملف وقم بتشغيل الأمر التالي.

# fab hello
Fabric Tool Usage

دعونا الآن نلقي نظرة على مثال لـfabfile.py لتنفيذ الأمر uptime على الجهاز المحلي.

مثال 2: افتح ملف fabfile.py جديد على النحو التالي:

# vi fabfile.py

والصق الأسطر التالية من الكود في الملف.

#!  /usr/bin/env python
from fabric.api import local
def uptime():
  local('uptime')

ثم احفظ الملف وقم بتشغيل الأمر التالي:

# fab uptime
Fabric: Check System Uptime

قم بتشغيل أوامر Linux عن بُعد عبر SSH

يستخدم واجهة برمجة التطبيقات Fabric مفتاح تكوين ضمني يُعرف بالقاموس، وهو ما يعادل صفائف الارتباط التابعة في Python، والمعروفة بـenv، والتي تخزن القيم التي تتحكم في ما تفعله Fabric.

الـ env.hosts هي قائمة بالخوادم التي تريد تشغيل عليها مهام Fabric. إذا كان شبكتك 192.168.0.0 وترغب في إدارة المضيفين 192.168.0.2 و 192.168.0.6 باستخدام fabfile الخاص بك، يمكنك تكوين env.hosts على النحو التالي:

#!/usr/bin/env python
from  fabric.api import env
env.hosts = [ '192.168.0.2', '192.168.0.6' ]

تحديد السطر الموجود أعلاه يشمل المضيفين الذين ستقوم بتشغيل مهام Fabric عليهم فقط ولا يفعل شيئًا آخر. وبالتالي يمكنك تعريف بعض المهام، يوفر Fabric مجموعة من الوظائف التي يمكنك استخدامها للتفاعل مع آلاتك البعيدة.

على الرغم من وجود العديد من الوظائف، فإن الأكثر استخدامًا هي:

  • run – التي تقوم بتشغيل أمر طاولة المفاتيح على جهاز بعيد.
  • local – التي تقوم بتشغيل الأمر على الجهاز المحلي.
  • sudo – التي تقوم بتشغيل أمر طاولة المفاتيح على جهاز بعيد بأذونات المسؤول.
  • Get – التي تقوم بتنزيل ملف أو أكثر من جهاز بعيد.
  • Put – التي تقوم بتحميل ملف أو أكثر إلى جهاز بعيد.

مثال 3: لطباعة رسالة على أجهزة متعددة، قم بإنشاء fabfile.py مثل الموجود أدناه.

#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def echo():
      run("echo -n 'Hello, you are tuned to Tecmint ' ")

لتنفيذ المهام، قم بتشغيل الأمر التالي:

# fab echo
Fabric: Automate Linux Tasks on Remote Linux

مثال 4: يمكنك تحسين fabfile.py الذي أنشأته سابقًا لتنفيذ أمر uptime على الجهاز المحلي بحيث يعمل الأمر uptime ويتحقق أيضًا من استخدام القرص باستخدام أمر df على أجهزة متعددة كما يلي:

#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def uptime():
      run('uptime')
def disk_space():
     run('df -h')

احفظ الملف وقم بتشغيل الأمر التالي:

# fab uptime
# fab disk_space
Fabric: Automate Tasks on Multiple Linux Systems

تثبيت سلسلة LAMP تلقائيًا على خادم لينكس بعيد المدى

مثال 4: دعونا ننظر إلى مثال على نشر LAMP (لينكس ، أباتشي ، ميرا سكول / ماريادب ، و PHP) على خادم لينكس بعيد المدى.

سنكتب وظيفة تسمح بتثبيت LAMP عن بُعد باستخدام أذونات المستخدم المسمى root.

لـ RHEL / CentOS و Fedora
#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def deploy_lamp():
  run ("yum install -y httpd mariadb-server php php-mysql")
لـ Debian / Ubuntu و Linux Mint
#!/usr/bin/env python
from fabric.api import env, run
env.hosts = ['192.168.0.2','192.168.0.6']
def deploy_lamp():
  sudo("apt-get install -q apache2 mysql-server libapache2-mod-php php-mysql")

احفظ الملف وقم بتشغيل الأمر التالي:

# fab deploy_lamp

ملاحظة: بسبب النتائج الكبيرة ، لا يمكننا إنشاء سكرينكاست (ميكرومتر ثلاثي الأبعاد) لهذا المثال.

الآن يمكنك إجراء مهام إدارة خادم لينكس تلقائيًا باستخدام Fabric وميزاته والأمثلة المذكورة أعلاه…

خيارات فابريك مفيدة

  • يمكنك تشغيل fab --help لعرض معلومات مفيدة وقائمة طويلة من الخيارات المتوفرة في سطر الأوامر.
  • خيار مهم --fabfile=PATH يساعدك على تحديد ملف وحدة Python مختلف لاستيراده بدلاً من fabfile.py.
  • لتحديد اسم المستخدم لاستخدامه عند الاتصال بالمضيفين البعيدين، استخدم خيار --user=USER.
  • لاستخدام كلمة المرور للتوثيق و/أو sudo، استخدم خيار --password=PASSWORD.
  • لطباعة معلومات مفصلة حول الأمر NAME، استخدم خيار --display=NAME.
  • لعرض التنسيقات استخدم خيار --list، الخيارات: short, normal, nested، استخدم خيار --list-format=FORMAT.
  • لطباعة قائمة بالأوامر الممكنة والخروج، ضمن خيار --list.
  • يمكنك تحديد موقع ملف التكوين للاستخدام عن طريق استخدام خيار --config=PATH.
  • لعرض خروج خطأ ملون، استخدم --colorize-errors.
  • لعرض رقم إصدار البرنامج والخروج، استخدم خيار --version.
ملخص

Fabric هي مكتبة Python قوية تبسط تنفيذ الأوامر البعيدة عبر SSH، مما يوفر نهجًا مرئيًا يسهل التعامل معه. قدرتها على تبسيط المهام المعقدة وأتمتة إدارة النظام تجعلها أداة قيمة لمديري النظام والمطورين ومحترفي DevOps.

سواء كنت تدير خادمًا واحدًا أم ترتبط في نشرٍ واسع النطاق، يمكن لـ Fabric أن يساعدك على إنجاز المهمة بكفاءة وفعالية.

Source:
https://www.tecmint.com/automating-linux-system-administration-tasks/