اذهب إلى المحتوى

محمد هاني صباغ

الأعضاء
  • المساهمات

    95
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    2

كل منشورات العضو محمد هاني صباغ

  1. ​تمام.. يجب تعديل المقال لكي لا تحدث مشاكل بالحقوق وما شابه حيث أنّ الإشارة رابط المصدر الصحيح واجبة تحياتي لك.
  2. DevOps هي عبارة عن اختصار مشترك لكلمتيّ Development و Operations ، وهي بشكلٍ عام تعني مفاهيم تقنية متعلقة بتطوير الأنظمة والبرمجيات واستخدامها وتطويعها، يمكنك مراجعة المزيد هنا: http://theagileadmin.com/what-is-devops/
  3. هناك العديد من الأدوات التي يمكنك استخدامها تبعًا لنوع الخادوم الخاص بك (هل هو ويندوز سيرفر مثلًا أم يعمل بأحد توزيعات لينكس؟) ، ولكنني سأفترض على العموم أنّه خادوم يعمل بأحد توزيعات لينكس. يمكنك مراقبة خادومك عن طريق لوحات التحكّم و/أو الأدوات العادية من سطر الأوامر. هناك عدّة لوحات تحكم يمكنك مراجعها مثل: Webmin: webmin.comAjenti: ajenti.orgيمكنك العثور على قائمة كاملة هنا: http://www.tecmint.com/web-control-panels-to-manage-linux-servers/ وللأدوات التي تمكّنك من المراقبة عبر سطر الأوامر، انظر هنا: http://www.tecmint.com/command-line-tools-to-monitor-linux-performance/
  4. لينكس هو نظام تشغيلٍ متعدد المستخدمين مبني على مفاهيم يونكس (Unix) لملكيّة الملفّّات والأذونات (permissions) بهدفِ توفير حمايةٍ أفضل. إذا كنتَ تخطط لتحسين مهاراتك بلينكس فيجب عليك أن تمتلك فهمًا جيدًا لكيفية عمل ملكية الملفّّات والأذونات في لينكس. هناك العديد من التعقيدات عند التعامل مع ملكية الملفّّات والأذونات، لكننا سنحاول جهدنا لاستخلاص المفاهيم الأساسية المهمّة لفهم كيفية عملها سنتطرّق إلى كيفية عرض وفهم ملكية الملفّّات والأذونات في لينكس. إذا كنتَ تبحث عن دليلٍ حول كيفية تعديل الأذونات، فاطّلع على هذا الدّرس: مبادئ أذونات الملفات (File permissions) على لينكس. المتطلبات تأكّد من أنّك تفهم المفاهيم التي تم تغطيتها بالدروس السابقة في هذه السلسلة: مقدّمة إلى طرفية لينكس. أساسيات التصفّح في لينكس وإدارة الملفّّات. حول المستخدمين كما ذكرنا في المقدّمة، لينكس هو نظام متعدد المستخدمين. يجب علينا أن نفهم أساسيات مستخدمي ومجموعات نظام لينكس قبل الحديث عن ملكية الملفّّات والأذونات، لأنهما الكيانان اللذان ينطبق عليهما ملكية الملفّّات والأذونات. فلنبدأ بالحديث عن أساسيات ماهيّة المستخدمين أولًا. في لينكس، هناك نوعان من المستخدمين: مستخدمو النظام (system users) والمستخدمون العاديون (regular users)، بشكلٍ عام، مستخدمو النظام يتم استخدامهم لتشغيل العمليات غير التفاعلية (non-interactive processes) والعمليات التي تعمل بالخلفية (background processes) على النظام، بينما يتم استخدام المستخدمين العاديين لتسجيل الدخول إلى النظام وتشغيل العمليات التفاعلية. عندما تقوم بالولوج لأول مرّة إلى أيّ نظام لينكس، قد تلاحظ أن النظام يبدأ مع عدّة مستخدمين للنظام حيث يقوم هؤلاء المستخدمون بتشغيل الخدمات التي يعتمد عليها نظام التشغيل، وهذا الأمر طبيعي تمامًا. من الطرق السهلة لعرض جميع المستخدمين المتوفّرين على النظام هي عرض محتويات ملفّّ etc/passwd/. كلّ سطر في هذا الملفّّ يحتوي معلوماتٍ حول مستخدمٍ واحد، بدءً باسم المستخدم الخاص به (الاسم قبل إشارة ":” الأولى). يمكنك طباعة محتويات ملفّّ passwd عن طريق الأمر التالي: cat /etc/passwd المستخدم الجذر بالإضافة إلى النوعين السابقين للمستخدمين، هناك "المستخدم الجذر" أو ما يعرف بـSuperuser أو root user، وهو يمتلك القدرة على الكتابة فوق أي تقييدات لأذونات ملكية الملفّّات أو تعديلها. بشكلٍ آخر، هذا يعني أن المستخدم الجذر يمتلك القدرة على الوصول إلى أيّ شيءٍ على خادومه الخاص. حيث يتم استخدام هذا المستخدم لتطبيق التغييرات المتعلقة بالنظام بأكمله، ويجب إبقاء هذا المستخدم آمنًا. من الممكن أيضًا أن يتم إعداد حسابات مستخدمين آخرين تمتلك صلاحيات "المستخدم الجذر". في الواقع، من أفضل التدربيات الممكن القيام بها هو إنشاء مستخدمٍ عادي يمتلك صلاحيات sudo لإدارة مهام النظام. حول المجموعات المجموعات هي تجميعات لـ0 مستخدمين أو أكثر. ينتمي المستخدم عادةً إلى المجموعة الافتراضية ويمكن أيضًا أن يكون عضوًا في أيٍّ من المجموعات الأخرى على الخادوم. من الطرق السهلة لعرض جميع المجموعات المتوفّرة على الخادوم والأعضاء بداخلها هي الاطّلاع على ملفّّ etc/group/. لن نغطّي أساسيات إدارة المجموعات في هذا المقال، ولكن يمكنك تطبيق هذا الأمر في حال كنتَ فضوليًا عن مجموعاتك: cat /etc/group الآن صرتَ تعرف ماهيةَ المستخدمين والمجموعات، فلنتحدّث عن ملكية الملفّّات والأذونات. عرض ملكية الملفات والأذونات في لينكس، كلّ الملفّّات تعتبر مملوكة من طرف مستخدمٍ واحد ومجموعةٍ واحدة، وكلّ ملفٍّّ يمتلك أذونات الوصول الخاصة به. فلنأخذ لمحة على كيفية عرض أذونات الملفّّات وملكيّتها. الطريقة الأكثر شيوعًا لعرض أذونات ملفٍّّ ما هي باستخدام الأمر ls مع خيار السرد الطويل (long listing option)، كمثال: ls -l myfile . إذا كنتَ تريد عرض أذونات جميع الملفّّات الموجودة في مسارك الحالي، فقم باستخدام الأمر بدون أيّ معامِلات مثل: ls -l تلميح: إذا كنتَ في مسار المنزل الخاص بك وكان فارغًا، ولم تقم بإنشاء أي ملفّّات لعرضها بعد، فيمكنك متابعة العملية عن طريق سرد محتويات المسار etc/ باستخدام هذا الأمر: ls -l /etc بالأسفل تجدُ مثالًا على لقطة شاشة لِمَا يُمكن للخرج أن يكون، مع تسميات كلِّ عمودٍ من الخرج: لاحظ أنّه يتم سرد وضع كلّ ملفّّ، المالك، المجموعة والاسم الخاصّين به. باستثناء عمود وضع الملفّّ (file's mode) فإنّه من السهل فهم جميع أجزاء الخرج. للمساعدة في شرح جميع هذه الحروف والرموز، فلنقم بتقسيم عمود الوضع (Mode column) إلى مكوناته الأساسية. فهم وضع الملفات للمساعدة في فهم ما تعنيه تلك الحروف والرموز، ألقِ نظرة على هذه الصورة التوضيحية التي تشرح ماهية "الوضع" أو الـ"mode” الخاص بأول ملفٍّّ من المثال أعلاه: نوع الملفات في لينكس، هناك نوعان أساسيان من الملفّّات: عادي وخاص. يتم تحديد نوع الملفّّ عن طريق أول حرفٍ من الوضع الخاص به. في هذا الدليل سنشير إلى هذا عن طريق استخدام مصطلح "حقل نوع الملفّّ". يُمكن أن يتم التعرف على الملفّّات العادية عن طريق شَرْطَة hyphen ( - ) في حقل نوع الملفّّ الخاص بها. الملفَّّات العادية هي مجرد ملفَّّات صرّفَة تحتوي على بيانات. يتم تسميتها بالملفّّات "العادية" لتمييزها عن الملفّّات الخاصة. الملفّاّت الخاصّة هي الملفّات التي تمتلك محرف غير شَرْطَي (non-hyphen character) مثل الحروف العادية في حقل نوع الملفّ الخاصة بها، ويتم معاملتها من جانب نظام التشغيل بطريقةٍ مختلفة عن الملفّاّت المحلّية. المحرف الذي يظهر في حقل نوع الملفّ يحدّد نوع الملفّ الخاص. مثل المجلّدات (folders)، وهي الملفّاّت الخاصة الأكثر شيوعًا من بين الملفّاّت الخاصّة. يتم التعرّف على المجلّدات عن طريق محرف d الذي يظهر في حقل نوع الملفّ الخاصّ بالمجلّد (مثل لقطة الشاشة السابقة). هناك أنواعٌ أخرى من الملفّاّت الخاصّة ولكنّها ليست أساسية لِمَا سنتعلّمه هنا. أصناف الأذونات نعلمُ من الرسم البياني السابق أنّ عمود الوضع يحدد نوع الملفّّ، متبوعًا بثلاثة أصناف (classes) من الأذونات: المستخدم (المالك)، المجموعة والآخرون. ترتيب هذه الأصناف ثابت على جميع توزيعات لينكس. فلنلقِ نظرة على الأصناف التي ينتمي إليها كلّ نوعٍ من المستخدمين: المستخدم (User): مالك الملفّ (owner) ينتمي إلى هذا الصنف. المجموعة (Group): أعضاء مجموعة الملفّ ينتمون إلى هذا الصنف. الآخرون (Other): أيُّ مستخدمين آخرين ليسوا جزءًا من صنفيّ المستخدم أو المجموعة فهم ينتمون إلى هذا الصنف. قراءة الأذونات الرمزية الشيء التالي الذي من الواجب الاهتمام به هو تشكيلة المحارف الثلاثة الخاصّة بوضع الملفّ، لأنها هي التي تقوم بتحديد الأذونات الخاصّة بالملفّ، بشكلٍ رمزي (symbolic) يمتلكها كل ملفّ. يتم تمثيل أذونات الكتابة، القراءة والتنفيذ في كلِّ تشكيلةٍ ثلاثية (triad) على النحو التالي: القراءة: يتم تمثيلها بحرف r بالموقع الأول. الكتابة: يتم تمثيلها بحرف w بالموقع الثاني. التنفيذ: يتم تمثيله بحرف x بالموقع الثالث. في بعض الحالات الخاصّة، يمكن أن يكون هناك حرفٌ آخر هنا. عندما يتم وضع شَرْطَة ( - ) في أي موقعٍ من هذه المواقع، فهذا يعني الإذن المعين ذاك ليس متوفرًا لهذا الصنف. كمثال: إذا كانت التشكيلة الثلاثية للمجموعة المالكة لملفٍّ معين هي: --r ، فهذا يعني أن الملفّ هو قابل للقراءة فقط لتلك المجموعة المتصلة بالملفّ. فهم قراءة، كتابة وتنفيذ الملفات الآن صرتَ قادرًا على قراءة الأذونات الخاصّة بكلّ ملفّّ، وعلى الأرجح فإنّك الآن تريد معرفة مالذي يسمح كلّ نوعٍ من أنواع الأذونات للمستخدمين أن يفعلوا. سوف سنشرح كلّ إذنٍ بشكلٍ منفصل، ولكن عليك أن تتذكر أنّه غالبًا ما يتمُ استخدام خليط من هذه الأذونات مع بعضها البعض للسماح بوصولٍ معين إلى هذه الملفّات والمسارات من قبل المستخدمين. إليك شرحًا بسيطًا إلى نوع الوصول الذي يمنحه كلٌّ نوعٍ من الأذونات للمستخدمين. 1- القراءة يسمحُ إذن القراءة لملفٍّ عادي أن يتم عرضه من قبل المستخدم لمشاهدة محتويات الملفّ. لمجلد أو مسار، يسمح إذن القراءة لمستخدمٍ أن يقوم بعرض أسماء الملفّات الموجودة بتلك المجلدات أو المسارات. 2- الكتابة يسمحُ إذن الكتابة لملفٍّ عادي أن يتم تعديله أو حذفه من قبل المستخدم. لمجلدٍ أو مسار، يسمح إذن الكتابة بأن يتم حذف المجلد أو المسار وتعديل محتوياته (إنشاء، حذف وإعادة تسمية الملفّات الموجودة بداخله) وتعديل محتويات الملفّات التي يمكن قراءتها من قبل المستخدم. 3- التنفيذ يسمح إذن الكتابة بأن يتم تنفيذ ملفٍّ من قبل المستخدم (يجب على المستخدم أن يمتلك إذن القراءة أيضًا). أذونات التنفيذ يجب أن يتم إعطاؤها للبرامج التنفيذية وسكربتات الشلّ (shell scripts) قبل أن يتمكّن المستخدم من تشغيلها. لمجلدٍ أو لمسار، يسمح إذن التنفيذ بالوصول إلى البيانات الوصفية (metadata) الخاصة بالملفّات الموجودة بداخله (مثل الأمر cd أو ls -l). أمثلة على أوضاع الملفّات والأذونات الآن وبعدما صرتَ قادرًا على قراءة وضع الملفّات وفهم معنى إذنِ كلِ واحدٍ منها، فسوف نتطرّق إلى بضعة أمثلة لأوضاعٍ شائعة للملفّات مع شرحٍ بسيط حولها: -rw-------: تمثّل ملفًّا قابلًا للوصول فقط من قبل مالكه. -rwxr-xr-x: تمثّل ملفًّا قابلًا للتنفيذ من قبل جميع المستخدمين على النظام. -rw-rw-rw-: تمثّل ملفًّا قابلًا للتعديل من قبل جميع المستخدمين على النظام. drwxr-xr-x: تمثّل مسارًا يمكن لجميع المستخدمين على النظام الوصول إليه وقراءته. drwxrwx---: تمثّل مسارًا قابلًا للتعديل (بالإضافة إلى محتوياته) من قبل مالكه والمجموعة التي ينتمي إليها. drwxr-x---: تمثّل مسارًا يمكن الوصول إليه من قبل مجموعته. كما تلاحظ، عادةً، مالك الملفّ يتمتّع بغالب الأذونات الخاصة بالملفّ مقارنةً مع الصنفين الآخرين. عادةً، سترى أنّ صنفيّ "المجموعة" و "الآخرون" يمتلكان أذونات فرعية فقط من أذونات مالك الملفّ (مساوية لها أو أقل). هذا أمرٌ منطقي لأن الملفّات يجب أن تكون قابلة للوصول فقط من طرف المستخدمين الذين يحتاجون الوصول إليه لسببٍ معيّن. شيءٌ آخر لملاحظته هو أنّه وعلى الرغم من أنّه هناك العديد من تشكيلات الأذونات الممكنة، فإنّ عددًا محدودًا منها فقط قد يكون استخدامها منطقيًا في حالاتٍ معيّنة. كمثال فإنّ أُذنيّ الكتابة والتنفيذ غالبًا ما يتم إلحاقهما بإذن القراءة، لأنّه سيكون من الصعب تعديل، ومن المستحيل تنفيذ ملفٍّ لا تستطيع قراءته. تعديل ملكية الملفات والأذونات للإبقاء على هذا الدليل بأبسط ما يمكن، لن نتطرف إلى كيفية تعديل ملكيّة الملفّات والأذونات هنا. الخاتمة يجب أن تكون الآن قد امتلكت معرفة جيّدة حول كيفية عمل ملكيّة الملفّات والأذونات في نظام لينكس. إذا كنتَ تحبّ تعلم المزيد عن أساسيات لينكس، فمن المستحسن بشدّة أن تقوم بقراءة الدّرس القادم من هذه السّلسلة والذي سيكون حول إعادة توجيه الإدخال/الإخراج في لينكس. ترجمة -وبتصرّف- للمقال: An Introduction to Linux Permissions.
  5. مقّدمة إذا كنتَ لا تمتلك خبرةً كبيرة في التعامل مع أنظمة لينكس، فربّما تكون مندهشًا من فكرة التحكّم بنظام التشغيل عبر سطر الأوامر. هنا، سنحاول شرح أساسيات فعلِ ذلك. لن يغطّي هذا الدّرس كل شيءٍ تحتاج معرفته للتعامل بفعالية مع نظام لينكس. ولكنّ من المفترض أن يعطيك أساسًا جيدًا للارتكاز عليه لكي تتمكن من استكشاف بقية الأمور بنفسك. سيُعطيك هذا الدّرس الأساسيات التي تحتاج أن تعرفها فقط قبل الانتقال إلى دليلٍ آخر. المتُطلّبات والأهداف من أجل المتابعة مع هذا الدّرس، ستحتاج إلى امتلاك الوصول إلى خادوم لينكس. إذا كنتَ تحتاج معلوماتٍ حول كيفية الاتصال بخادومك للمرّة الأولى، فيمكنك اتّباع هذا الدّرس حول كيفية الاتّصال بخادوم لينكس باستخدام SSH. قد تودُّ أيضًا امتلاك أساسيات فهم كيفية عمل الطرفيّة وكيف تبدو الأوامر في نظام لينكس. درسنا السابق هذا يغطّي أساسيات الطرفيّة، لذا فيجب عليك التحقق منه إذا كنتَ جديدًا على استخدام الطرفيّات. جميع المهام الموجودة في هذا الدّرس يُمكن إنجازها باستخدام حساب مستخدم عادي غير جذر (non-root) لا يمتلك صلاحياتٍ إدارية (حيث أننا لن نحتاجها). عندما تصبحُ جاهزًا للبدء، اتّصل بخادومك عبر SSH وتابع القراءة. دورة علوم الحاسوب دورة تدريبية متكاملة تضعك على بوابة الاحتراف في تعلم أساسيات البرمجة وعلوم الحاسوب اشترك الآن التنقّل والاستكشاف أهمّ المهارات الأساسية التي يجب عليك احترافها هي التنقّل في نظام الملفّات (filesystem) والحصول على فكرة عن الأشياء حولك. سنناقش الأدوات التي تسمح لك بفعل ذلك في هذا القسم. معرفة مكانك باستخدام الأمر pwd عندما تقوم بتسجيل الدخول إلى خادومك، فإنّه سيتم إرسالك عادةً إلى مجلّد المنزل (home directory) الخاص بحساب المستخدم الذي تستعمله. مجلّد المنزل هو عبارة عن مسارٍ مُعَدّ لمستخدمك لتخزين الملفات والمجلّدات. إنّه الموقع الذي تمتلك كامل السيطرة عليه في نظام الملفات. لمعرفة موقع مجلّد المنزل الخاص بك بالنسبة إلى بقيّة نظام الملفّات، يمكنك استخدام الأمر pwd. يقوم هذا الأمر بعرض المسار الذي نتواجدُ فيه حاليًا: pwd يجبُ أن تحصل على بعض المعلومات التي تبدو هكذا: /home/demo يتم تسمية مجلّد المنزل باسم المستخدم الذي يتبعُه، لذا ففي المثال السابق تلاحظ ما ستكون قيمة اسم مجلّد المنزل عندما تقوم بتسجيل الدخول إلى الخادوم باستخدام حسابٍ يُدعى demo . هذا المسار موجود داخل مجلد يُدعى /home ، والذي هو بدوره ضمن مسارٍ أعلى يدعى "الجذر (root)” ولكن يتم تمثيله بإشارة / واحدة. معرفة محتوى المجلّدات باستخدام ls الآن صرتَ تعرف كيفية عرض المسار الذي تتواجدُ فيه حاليًا، يمكننا الآن أن نعلّمك كيفية عرض محتويات مسارٍ معيّن. حاليًا، لا يمتلك مجلّد المنزل الخاص بك الذي رأيناه بالأعلى الكثير من الأمور بداخله لرؤيتها، لذلك سننتقل إلى مسارٍ أكثر امتلاءً بالملفّات لنستكشفه. قمّ بكتابة الأمر التالي في طرفيّتك للانتقال إلى هذا المسار (سنشرح تفاصيل الانتقال إلى مساراتٍ أخرى في القسم التالي). بعدها، سنستخدم الأمر pwd للتأكّد مما إذا كنّا قد انتقلنا بنجاح: cd /usr/share pwd /usr/share الآن أصبحنا في المسار الجديد، فلنلقي نظرةً على ما يوجد بداخله. لفعل هذا، يُمكننا استخدام الأمر ls: ls adduser groff pam-configs applications grub perl apport grub-gfxpayload-lists perl5 apps hal pixmaps apt i18n pkgconfig aptitude icons polkit-1 apt-xapian-index info popularity-contest . . . كما ترى، هناك العديد من العناصر بداخل هذا المسار. يمكننا إضافة بعض الأعلام الإضافية (flags) للأمر السابق للتعديل على سلوكه الافتراضي. كمثال، لسرد جميع المحتويات بشكلٍ أكثر تفصيلًا، سنستخدم العَلَم -l (اختصار لـlong output): ls -l total 440 drwxr-xr-x 2 root root 4096 Apr 17 2014 adduser drwxr-xr-x 2 root root 4096 Sep 24 19:11 applications drwxr-xr-x 6 root root 4096 Oct 9 18:16 apport drwxr-xr-x 3 root root 4096 Apr 17 2014 apps drwxr-xr-x 2 root root 4096 Oct 9 18:15 apt drwxr-xr-x 2 root root 4096 Apr 17 2014 aptitude drwxr-xr-x 4 root root 4096 Apr 17 2014 apt-xapian-index drwxr-xr-x 2 root root 4096 Apr 17 2014 awk . . . هذه الرؤيا تعطينا الكثير من المعلومات التي لم نعتد غالبًا على رؤيتها. تصف الكتلة الأولى (block) نوع الملفّ (إذا كان العمود الأول هو حرف "d” فحينها فالعنصر هو مجلّد، وإذا كان إشارة "-” فحينها يكون العنصر ملفًا عاديًا) والأذونات. يصفُ كلُّ عمودٍ منفصل مفصولٍ بمساحةٍ بيضاء عن غيره عددًا من المعلومات المختلفة مثل مالك الملفّ، المجموعة، حجم العنصر، تاريخ آخر تعديل واسم العنصر. سنقوم بتفصيل بعضٍ من هذه الأمور لاحقًا، ولكن الآن، يكفي أن تعرف أنّه بإمكانك عرض هذه المعلومات باستخدام عَلَم -l مع الأمر ls. لسرد جميع الملفّات بما في ذلك الملفّات المخفيّة، فسيجب عليك إضافة العَلَم -a . بما أنّه لا يوجد هناك ملفّات مخفية حقًا في المسار /usr/share ، فسيجب علينا الرجوع إلى مجلّد المنزل الخاص بنا لتجربة ذلك الأمر. يمكنك الرجوع إلى مجلّد المنزل عبر كتابة الأمر cd دون أي مُعطيات: cd ls -a . .. .bash_logout .bashrc .profile كما يمكنك أن ترى، هناك العديد من الملفّات المخفية في هذا المكان بالإضافة إلى كلٍ من . و .. واللذان يعتبران حرفين من نوعٍ خاص في نظام لينكس. ستجد غالبًا أنّه يتم تخزين ملفات الإعداد كملفات مخفيّة، كما في حالتنا هنا. بالنسبة إلى إشارة النقطة والنقطتين، فهما ليسا مجلّدين بالضبط، بل هما عبارة عن طريقة داخلية (method) للإشارة إلى مساراتٍ أخرى مرتبطة بالمسار الحالي. النقطة الواحدة تُشير إلى المسار الحالي، والنقطتان تشير إلى المسار الأبّ (parent directory) للمسار الحالي. سنشرح هذا الأمر في القسم التالي. التنقّل في نظام الملفّات باستخدام cd لقد قمنا بالانتقال بالفعل عبر مسارين مختلفين لتوضيح بعض خصائص ls في القسم السابق. فلنلقي جولةً أفضل على ذلك الأمر هنا. ابدأ عبر الرجوع إلى المسار /usr/share عبر كتابة التالي: cd /usr/share هذا مثالٌ لتغيير المسار الحالي عبر استخدام ما يعرف بالمسار المُطلق (absolute path). في لينكس، جميع الملفّات المجلّدات تقع تحت المسار الأكثر علوًا (top-most directory)، والذي ندعوه بمجلّد الجذر (root directory)، ولكن يُشار إليه بإشارة / واحدة. يقوم المسار المُطلق بتحديد موقع مجلّدٍ معيّن بالنسبة إلى هذا المسار الأكثر علوًا (مجلّد الجذر /). يسمحُ لنا هذا بالإشارة بطريقةٍ غير معقّدة إلى أيّ مكانٍ في نظام الملفّات. أيُّ مسارٍ مُطلق يجب أن يبدأ بإشارة / . الخيار البديل هو استخدام ما يُعرف بالمسارات المُرتبطة (relative paths). تقوم المسارات المُرتبطة بالإشارة إلى المسارات الموجودة على نظام الملفّات بالنسبة إلى المسار الحالي. هذه الطريقة عادةً تكون أسهل وأقصر بالنسبة إلى المسارات القريبة من المسار الحالي في شجرة الملفّات. يُمكن الإشارة إلى أيّ مسارٍ موجود ضمن المسار الحالي عبر تسميته دون الحاجة لإشارة / . يُمكننا الانتقال إلى المجلّد locale الموجود ضمن /usr/share (والذي هو مسارنا الحالي) عبر كتابة: cd locale يُمكننا أيضًا القفز خطوتين بدل خطوةٍ واحدة والانتقال إلى مسارٍ داخل مسارٍ آخر عبر توفير الجزء الثاني (الذي هو اسم المجلّد الثاني الذي سننتقل إليه) ووضعه بعد المسار الأول. كمثال، يُمكننا الوصول إلى المجلّد LC_MESSAGES الموجود داخل المجلّد en عبر كتابة الأمر التالي: cd en/LC_MESSAGES للرجوع إلى أعلى، وللانتقال إلى المسار الأب للمسار الحالي، يُمكننا استخدام حرف النقطتين الخاص .. الذي تحدّثنا عنه من قبل. كمثال، نحن الآن في المسار /usr/share/locale/en/LC_MESSAGES . للانتقال إلى أعلى بدرجةٍ واحدة، يمكننا أن نكتب: cd .. سيأخذنا هذا الأمر إلى المسار /usr/share/locale/en . من الاختصارات التي رأيتها بالسابق هو استخدام الأمر cd للرجوع إلى مجلّد المنزل الخاص بك بسرعة دون الحاجة لتوفير مساره المعيّن: cd pwd /home/demo لتعلّم المزيد حول كيفية استخدام هذه الأوامر الثلاثة، يمكنك مراجعة هذا الدّرس حول استكشاف نظام الملفّات في نظام لينكس. عرض الملفّات في القسم الأخير، تعلّمنا القليل حول كيفية التنقّل في نظام الملفّات. على الأرجح فإنّكَ رأيت بعض الملفّات أثناء استخدام أمر ls في المسارات السابقة. في هذا القسم، سنناقش طرقًا مختلفة يمكنك استخدامها لعرض الملفّات. على عكس الأنظمة الأخرى فإنّ نظام لينكس والأنظمة الأخرى الشبيهة بيونكس (Unix-like) تعتمدُ على استخدام الملفّات الصرفة (plain text files) في معظم أجزاء النظام. الطريقة الرئيسية التي نقوم من خلالها بعرض الملفّات هي عبر استخدام الأمر less. والذي ندعوه بـ"منشئ الصفحات (pager)”، لأنّه يسمح لنا بالتنقّل عبر صفحات ملفٍ معيّن، less هو عبارة عن تطبيقٍ سيستولي على شاشة الطرفيّة بأكملها أثناء عمله وسيبقى عاملًا إلى حين أن تقرر أنت إغلاقه. سنقوم بفتح الملفّ /etc/services ، والذي هو عبارة عن ملف إعداداتٍ يحتوي على معلومات الخدمات التي يعرفها النظام: less /etc/services سيتم فتح الملفّ في less ، مما يسمح لك بعرض جزءٍ من المستند بحيث يتوافق مع مساحة نافذة الطرفيّة: #Network services, Internet style # # Note that it is presently the policy of IANA to assign a single well-known # port number for both TCP and UDP; hence, officially ports have two entries # even if the protocol doesn't support UDP operations. # # Updated from http://www.iana.org/assignments/port-numbers and other # sources like http://www.freebsd.org/cgi/cvsweb.cgi/src/etc/services . # New ports will be added on request if they have been officially assigned # by IANA and used in the real-world or are needed by a debian package. # If you need a huge list of used numbers please install the nmap package. tcpmux 1/tcp # TCP port service multiplexer echo 7/tcp . . . للتمرير بين الصفحات، يُمكنك استخدام مفتاحيّ الأعلى والأسفل على لوحة مفاتيحك. للانتقال بصفحةٍ كاملة إلى الأسفل، يُمكنك إمّا أن تستخدم space bar أو زرّ "Page Down” على لوحة مفاتيحك، أو الاختصار CTRL + F. للرجوع إلى الأعلى، يمكنك إمّا أن تستخدم زرّ "Page Up” أو الاختصار CTRL + B. للبحث عن نصٍ معين في المستند، يمكنك كتابة إشارة / متبوعةً بالنصّ الذي تبحث عنه. كمثال، للبحث عن كلمة "mail”، سيجب علينا كتابة: /mail سيقوم الأمر السابق بالبحث عبر المستند عن كلمة "mail” ويتوقف عند أول نتيجةٍ متوفرة. للانتقال إلى نتيجةٍ أخرى، يمكنك استخدام مفتاح n الصغير (دون Caps Lock): n للرجوع إلى النتيجة السابقة، استخدام حرف N الكبير (مع Caps Lock): N عندما تريد الخروج من برنامج less، يمكنك ببساطة الضغط على حرف q: q صحيحٌ أننا قمنا بالتركيز على أداة less في هذا القسم، إلّا أنه يوجد العديد من الطرق الأخرى لعرض محتويات ملفٍّ ما. يقوم الأمر cat مثلًا بعرض محتويات الملفّ ويقوم بإرجاعك إلى موجّه الأوامر تلقائيًا. يقوم الأمر head افتراضيًا بعرض أول 10 سطورٍ من ملفٍ ما. أيضًا يقوم الأمر tail بعرض السطور الـ10 الأخيرة من ملفٍ ما. تقوم هذه الأوامر بعرض محتويات الملفّات بطريقة تجعلها مناسبة للاستخدام لنقلها عبر الأنابيب (piping) لبرامج أخرى. سنناقش هذا المفهوم في دليلٍ مستقبلي. جرّب الآن استخدام الأوامر السابقة لعرض محتويات الملفّ /etc/services . التّعامل مع الملفّات والمجلّدات تعلّمنا في القسم الأخير كيفية عرض الملفّات، في هذا القسم، سنقوم بتوضيح آلية التّعامل مع الملفّات والمجلّدات وإنشائها. إنشاء ملفّ باستخدام touch يمكن للعديد من الأوامر والبرامج أن تقوم بإنشاء الملفّات. الطريقة الأساسية لإنشاء الملفّات هي عبر الأمر touch. هذا الأمر سيقوم بإنشاء ملفٍ فارغ باستخدام اسم الملفّ المطلوب وموقعه المحدد. أولًا، يجب علينا التأكّد مما إذا كنّا في مجلّد المنزل الخاصّ بنا، بما أنّه المجلّد الذي نمتلكُ فيه صلاحيات حفظ الملفّات. فحينها يمكننا إنشاء ملفٍ يدعى file1 عبر كتابة: cd touch file1 الآن، إذا قمنا بعرض الملفّات الموجودة في مجلّد المنزل الخاصّ بنا، سنرى ملفّنا الجديد: ls file1 إذا استخدمنا هذا الأمر على ملفٍ موجود مسبقًا، فإنّه ببساطة سيتم تحديث وقت آخر تعديل على الملفّ الذي حاولنا إنشاءه (ولكن لن يتم الكتابة فوقه أو حذفه). هذا لن يفيدنا كثيرًا في مرحلتنا هذه. يمكننا أيضًا إنشاء أكثر من ملف في نفس الوقت. يمكننا أيضًا استخدام المسارات المُطلقة. كمثال، إذا كان اسم المستخدم الخاصّ بنا يدعى demo ، فحينها يمكننا كتابة: touch /home/demo/file2 /home/demo/file3 ls file1 file2 file3 إنشاء المسارات باستخدام mkdir هذا الأمر شبيهٌ بالأمر touch، يسمحُ لنا الأمر mkdir بإنشاء مساراتٍ (مجلّدات) جديدة فارغة. كمثال، لإنشاء مجلّد جديد ضمن مجلّد المنزل الخاص بنا ولندعوه test ، يمكننا ببساطة كتابة: cd mkdir test يمكننا أيضًا إنشاء مجلّدٍ داخل مجلّد test ولندعوه example مثلًا عبر كتابة: mkdir test/example لكي يعمل الأمر السابق، يجب على المسار test أن يكون موجودًا بالفعل. لإخبار mkdir بأنّه يجب عليه إنشاء أيّ مساراتٍ ضرورية في طريقه إلى إنشاء مسارٍ مطلوب، يمكنك استخدام الخيار -p معه. يسمحُ لك هذا بإنشاء مساراتٍ ومجلّدات متداخلة في خطوةٍ واحدة. يمكننا إنشاء هيكلة مجلّدات تبدو مثل some/other/directories عبر كتابة: mkdir -p some/other/directories سيقوم الأمر السابق بإنشاء مجلّد some أولًا، ثمّ other ثانيًا بداخله، وأخيرًا مجلّد directories بداخل هذين المجلّدين. نقل وإعادة تسمية الملفّات والمجلّدات باستخدام mv يمكننا تحريكُ ملفٍ ما إلى مسارٍ جديد عبر استخدام الأمر mv. كمثال، يمكننا نقل الملف file1 إلى داخل المجلّد test عبر كتابة: mv file1 test لاستخدام هذا الأمر، سيجبُ علينا إعطاءه جميع العناصر التي نرغبُ بنقلها بالإضافة إلى المواقع التي نريدُ نقلها إليها في النهاية. يمكننا نقلُ ملفٍ ما إلى مجلّد المنزل الخاص بنا عبر استخدام حرف النقطة الخاص . الذي يشير إلى مسارنا الحالي (حرف النقطة يشير للمسار الحالي، ونحن الآن في مجلّد المنزل)، يجب علينا أن نتأكّد مما إذا كنّا في مجلّد المنزل بالفعل، ومن ثمّ ننفذ الأمر: cd mv test/file1 . قد يبدو هذا الأمر مبهمًا قليلًا، ولكن يمكننا استخدام الأمر mv أيضًا لإعادة تسمية الملفّات والمجلّدات. في الواقع، نقل وإعادة تسمية الملفّات ليسا سوى مجرّد عمليتين تضبطان الموقع والاسم لعنصرٍ موجودٍ حالي. لذا، لإعادة تسمية الملفّ test إلى testing ، يمكننا كتابة: mv test testing ملاحظة: من المهمّ أن تُدركَ أنّ نظام لينكس لن يمنعك من القيام بإجراءاتٍ تدميرية له. إذا قمتَ بمحاولة إعادة تسمية ملفٍ ما واخترت اسمًا يوجد بالفعل لملفٍ آخر بنفس المسار، فحينها فإنّه سيتم الكتابة فوق الملفّ القديم والإبقاء على الملفّ الجديد الذي تقوم بنقله. لا يوجد هناك أيّ طريقة لاسترجاع الملفّ القديم في حال قمتَ بالكتابة فوقه. نسخ الملفّات والمجلّدات باستخدام cp مع الأمر mv، يمكننا نقل أو إعادة تسمية ملفٍّ ما أو مجلّد، ولكن لا يمكننا استنساخه. يُمكن للأمر cp أن يقوم بعملِ نسخةٍ جديدة من عنصرٍ موجودٍ حاليًا. كمثال، يمكننا نسخ الملف file3 إلى ملفٍ جديد يُدعى file4: cp file3 file4 على عكس العملية التي يقوم بها mv والتي بعدها لن يبقى ملفّ file3 موجودًا، فإنّنا الآن نمتلكُ كلًّا من الملفّين file3 و file4. ملاحظة: كما هو الحال مع الأمر mv، فإنّه يُمكن أيضًا أن يتم الكتابة فوق ملفٍ ما إذا لم تكن حذرًا حول اسم الملفّ الذي ستستخدمه كهدفٍ للعمليّة. كمثال، إذا كان الملفّ file4 موجودًا بالفعل بالمثال أعلاه، فإنّه سيتم استبدال محتوياته بشكلٍ كامل بمحتويات الملفّ file3. بهدفِ نسخ المجلّدات والمسارات، يجب أن تستخدم الخيار -r مع الأمر cp. هذا الخيار هو اختصار لكلمة "recursive”، حيثُ أنّه يقوم بنسخ المجلّد بالإضافة إلى جميع محتوياته الداخلية. من الضروري استخدام هذا الخيار عند نسخ المجلّدات، بغضّ النظر عمّا إذا كان المجلّد فارغًا أم لا. كمثال، انسخ المجلّد some إلى مجلّدٍ جديد يدعى again ، عن طريق الأمر: cp -r some again على عكس الملفّات، والتي يُمكن الكتابة فوقها في حال كانت موجودة بالفعل، فإنّه في حال كان المجلّد الهدف موجودًا بالفعل، فإنّه سيتم نسخ المجلّد أو الملفّ إلى داخل المجلّد الموجود حاليًا: cp file1 again هذا الأمر سيقوم بإنشاء نسخةٍ جديدة من ملفّ file1 ويضعها داخل مجلّد again. حذف الملفّات والمجلّدات باستخدام rm و rmdir يمكنك استخدام الأمر rm لحذف ملفٍ معيّن. ملاحظة: كنّ حذرًا بشدّة عند استخدام أوامر تدميرية مثل rm . لأنّه لا يوجد هناك أمرٌ استرجاعي لهذه الأفعال في حال حصلت، لذلك فمن الممكن أن تقومَ بتدميرِ ملفاتٍ مهمّة بالخطأ للأبد. لحذف ملفٍ عادي، طبّق: cd rm file4 بالمثلِ أيضًا، لحذف المجلّدات الفارغة، يمكننا استخدام الأمر rmdir. سينجحُ هذا الأمر فقط في حال كان المجلّد فارغًا. كمثال، لحذف مجلّد example الموجود بداخل مجلّد testing، يمكننا أن نكتب: rmdir testing/example إذا كنتَ ترغبُ في حذف مجلّد غير فارغ، فسيجبُ عليك استخدام الخيار -r مع الأمر rmdir، والذي سيقوم بحذف جميع محتويات مسارٍ معيّن مباشرةً، بالإضافة إلى المجلّد نفسه. كمثال، لحذف مجلّد again وكل شيءٍ بداخله، يمكننا أن نكتب: rm -r again مُجدّدًا، تجدرُ الإشارة إلى أن هذه العمليات دائمة. كنّ متأكدًا دائمًا أنّ الأمر الذي كتبته هو أمرٌ ترغبُ في تنفيذه حقًا. تحرير الملفّات حاليًا، صرنا نعرف كيفية التّعامل مع الملفّات ككائنات، ولكننا لم نتعلّم بعد كيفية تحريرها بشكلٍ فعلي وكيفية إضافة المحتوى إليها. الأمر nano هو واحدٌ من أبسط محررات النصوص المُستعملة عبر سطر الأوامر في نظام لينكس، وهو نقطة بدايةٍ عظيمة للمبتدئين. يقوم nano بتنفيذ الأوامر بشكلٍ شبيه ببرنامج less الذي تحدّثنا عنه من قبل، ولكنّه يحتلّ شاشة الطرفيّة بأكملها طوال فترة استخدامه. يُمكن للمحرر nano أن يقوم بفتح ملفاتٍ موجودة أو إنشاء أخرى. إذا قررتَ إنشاء ملفٍ جديد، يمكنك تمرير اسمه للمحرر nano الآن أو لاحقًا عندما تودُّ حفظ المحتوى الذي تريده. يمكننا فتح الملفّ file1 للتحرير عبر كتابة: cd nano file1 سيقوم برنامج nano بفتح الملفّ (والذي هو فارغٌ حاليًا). ستبدو الواجهة شيئًا كالتالي: GNU nano 2.2.6 File: file1 [ Read 0 lines ] ^G Get Help ^O WriteOut ^R Read File ^Y Prev Page ^K Cut Text ^C Cur Pos ^X Exit ^J Justify ^W Where Is ^V Next Page ^U UnCut Text ^T To Spell بالأعلى، لدينا اسم التطبيق واسم الملفّ الذي نقوم حاليًا بتحريره. في المنتصف، محتوى الملفّ الفارغ حاليًا. في الأسفل، يظهرُ عددٌا من المفاتيح التي يُمكن أن يتم ضغطها مع بعضها البعض لتنفيذ مهامٍ معيّنة للتحكم في المحرّر. لكلّ واحدٍ من هؤلاء، يعني الحرف ^ مفتاحَ CTRL. للحصول على المساعدة من المحرّر، اضغط على مفاتحي: Ctrl + G عندما تنتهي من تصفّح المساعدة، اضغط على Ctrl + X للرجوع إلى مستندك. قم بكتابة / تعديل أيِّ نصٍ تريده. في هذا المثال، سنكتبُ العبارتين التاليتين فقط: Hello there. Here Is some text. لحفظ ما كتبناه، يمكننا أن نضغط: Ctrl + O هذا هو الحرف O وليس الرقم صفر. سيسألك البرنامج عن تأكيد اسم الملفّ الذي تودّ حفظه: File Name to Write: file1 ^G Get Help M-D DOS Format M-A Append M-B Backup File ^C Cancel M-M Mac Format M-P Prepend كما ترى، تغيّرت الخيارات التي بالأسفل أيضًا. تعتمد هذه الخيارات على السياق، بمعنى أنّها ستتغير طبقًا لِمَا تحاولُ أن تفعله. إذا كان الملفّ file1 لا يزالُ ملفًا ترغبُ بالكتابة إليه، اضغط على مفتاح "Enter”. إذا قمنا بعمل بعض التغييرات الإضافية ورغبنا في حفظ الملفّ والخروج من البرنامج، فسنتمكّن من رؤية موجّه أوامرٍ مشابه. قم بإضافة سطرٍ جديد، ثمَّ حاول الخروج من البرنامج عبر كتابة: Ctrl + X إذا لم تقم بحفظ المحتويات قبل الخروج بعد عمل تغييراتك، فسيتم سؤالك عمّا إذا كنتَ تريد حفظها أم لا: Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ? Y Yes N No ^C Cancel يمكنك كتابة "Y” لحفظ التغييرات، "N” لرفضها والخروج، أو "Ctrl + C” لإلغاء عمليّة الخروج من البرنامج والعودة إليه. إذا اخترتَ الحفظ، فستحصلُ على نفسِ موجّه أوامر الملفّ الذي حصلتَ عليه من قبل، لتأكيد ما إذا كنتَ تريد حفظ التغييرات إلى نفس الملفّ. اضغط زرّ Enter لحفظ الملفّ والخروج من المحرّر. يمكنك رؤية محتويات الملفّ الذي أنشأته إمّا عبر برنامج cat لعرض محتوياته، أو برنامج less لعرضِه للقراءة. بعد عرضِ البرنامج باستخدام less ، تذكّر أنّه يجب عليك الضغط على زرّ q للرجوع للطرفيّة. less file1 Hello there. Here is some text. Another line. محرّرٌ آخر يمكنُ أن يتم توجيهكَ إليّه في شروحاتٍ مستقبلية هو vim أو vi . هذا المحرّر أكثر تطورًا وأكثر قوةً ، ولكنّ يتطلب الكثير لتعلّمه. إذا أخبركَ أحدهم باستخدام vim أو vi، فاستخدم nano عوضًا عن ذلك. إذا كنتَ ترغبُ بتعلّم المزيد حول كيفية استخدام vim ، فاقرأ هذا الدّرس حول كيفية البدء مع vim. دورة علوم الحاسوب دورة تدريبية متكاملة تضعك على بوابة الاحتراف في تعلم أساسيات البرمجة وعلوم الحاسوب اشترك الآن الخاتمة الآن، يجب أن تكونَ قد امتلكتَ أساسيات فهم كيفية التنقّل في خادومك العامل بنظام لينكس وكيفية عرض الملفّات والمسارات المتوّفرة. يجبُ أن تكون قادرًا أيضًا على معرفة أساسيات أوامر التعامل مع الملفّات والتي ستسمح لك بعرض، نسخ، نقل أو حذف الملفّات. أخيرًا، يجب أن تكون مرتاحًا مع بعض أساسيات تحرير الملفّات باستخدام محرّر nano. مع هذه المهارات القليلة، يجب أن يكون قادرًا على متابعة مشوارك في شروحاتٍ أخرى وتعلّم كيفية استخراج أكبر إمكانية متوفّرة من خادومك. في الدّرس التالي، سنناقش كيفية عرض وفهم الأذونات في لينكس. ترجمة -وبتصرّف- للمقال: Basic Linux Navigation and File Management.
  6. ما هي موازنة الحمل (Load Balancing)موازنة الحمل هي عبارة عن آلية لتوزيع التدفّق (traffic) على عدّة خواديم افتراضية خاصّة عبرَ تقسيم آلية المعالجة إلى عدّة أجهزة مما يضمن استقرارًا أفضل وتعاملًا أكثر سلاسة مع الأخطاء. خوارزمية Round Robin لموازنة الحمل ترسل الزوار إلى واحدٍ من مجموعة عناوين الـIP. تقوم خوارزمية Round Robin بشكلٍ أساسي بتوزيع حملِ الخادوم دون الحاجة إلى تضمين أي أمورٍ إضافية أخرى، آخذةً بعينِ الاعتبار بعض العوامل المهمة مثل سرعة استجابة الخادوم والمنطقة الجغرافية الخاصة بالزوار. الإعدادتتطلب الخطوات في هذا الدّرس وجود مستخدمٍ يمتلك صلاحيات الجذر على خادومك الافتراضي الخاص (VPS). يمكنك تعلم كيفية تثبيت واحد في دليل إدارة المستخدمين. لكي تقوم بتثبيت موازنة الحمل الخاصة بـnginx فيجب بالطبع أن يكون nginx مثبتًا على خادومك الشخصي. يمكنك فعل ذلك بسرعة مع apt-get: sudo apt-get install nginx وحدة المنبع Upstream Moduleبهدف تثبيت موازنة الحمل الخاصة بخوارزمية round robin, فإنّه يجب علينا استخدام وحدة المنبع (upstream module) الخاصة بـnginx. سنقوم بإدراج بعض التضبيطات في إعدادات nginx. اذهب وافتح إعدادات موقعك (في مثالنا سنستخدم فقط إعدادات المضيف الوهمي الافتراضي): sudo nano /etc/nginx/sites-available/defaultسنحتاج إلى إضافة إعدادات موازنة الحمل إلى الملف. أولًا، سنحتاج إلى تضمين وحدة المنبع داخل الملف والتي تبدو هكذا: upstream backend { server backend1.example.com; server backend2.example.com; server backend3.example.com; }بعدها، يجب علينا الإشارة إلى الوحدة داخل الإعدادات بشكلٍ أوضح: server { location / { proxy_pass http://backend; } }ثم لإعادة تشغيل nginx: sudo service nginx restartطالما أن جميع الخواديم الافتراضية الخاصة بك في مكانها الصحيح فإنه يجب عليك أن تجد أنّ عملية موازنة الحمل ستبدأ بتوزيع الزوار إلى الخواديم المربوطة بشكلٍ متساوي تلقائيًا. التوجيهات Directivesالقسم السابق غطّى كيفية توزيع الحمل بشكلٍ متساوٍ عبر عدّة خواديم افتراضية خاصة. على كل حال، هناك عدة أسباب تجعل هذه الطريقة ليست الطريقة الأكثر فعالية للعمل مع البيانات. هناك عدّة توجيهات يمكننا استخدامها لتوجيه زوار الموقع بطريقة أكثر فعالية. الوزنمن الطرق المستخدمة لبدء تخصيص المستخدمين إلى الخواديم بطريقة أكثر دقّةً هي تخصيص وزنٍ محدد لأجهزة محددة. Nginx يسمح لنا بإسناد رقمٍ يُحدد حجم التدفّق الذي يجب توجيهه إلى كلِّ خادوم. يمكن لتثبيت حملٍ مُوازَن يتضمن وزن الخادوم أن يبدو هكذا: upstream backend { server backend1.example.com weight=1; server backend2.example.com weight=2; server backend3.example.com weight=4; }الوزن الافتراضي هو 1. مع وزنٍ بـ2 فإنَّ backend2.example سيتلقّى تدفّقًا أكبر بمرتين من backend1. بينما backend3 مع وزن 4 سيتعامل مع تدفّق أكبر بمرتين من التدفّق الذي يستقبله backend2 وأكبر بأربع مرات من التدفّق الذي يستقبله backend1. التلّبيد (Hash)تلّبيد عنوان الـIP يسمح للخواديم أن تستجيب للعملاء (clients) استنادًا إلى عناوين الـIP الخاصة بهم، حيث يتم إرسال الزوار مجددًا إلى نفس الخادوم الافتراضي الخاص في كلّ مرةٍ يزورون الموقع (باستثناء في حال كان الخادوم معطّلًا). إذا تم اكتشاف خادومٍ غير نشيط، فإنّه يتم تعليمه كخادومٍ معطّل. جميع عناوين الـIP التي كان من المفترض أن تقوم بالتوجيه إلى الخادوم المعطل ستقوم حينها تلقائيًا بالتوجيه إلى واحدٍ بديل. الإعدادات التالية هي مثال على ذلك: upstream backend { ip_hash; server backend1.example.com; server backend2.example.com; server backend3.example.com down; }أقصى عدد لمرّات الفشل (Max Fails)وفقَ إعدادات round robin الافتراضية، فإنّ nginx سيظلّ يرسل البيانات إلى الخواديم الوهمية الخاصّة، حتى لو كانت هذه الخواديم لا تستجيب. “العدد الأقصى لمرّات الفشل" يمكنه تلقائيًا أن يمنع حصولَ هذا عبر تعليم الخواديم التي لا تستجيب تلقائيًا بعد مرور وقتٍ معيّن. هناك عاملان مرتبطان بالعدد الأقصى لمرّات الفشل: max_fails و fall_timeout. يشيرُ الأول إلى العدد الأقصى للمحاولات الفاشلة للاتصال بالخادوم التي يمكن عدّها قبل أن يتم تعليم الخادوم بأنّه غير نشيط. Fall_timeout يحدد طول المدة التي يتم اعتبار الخادوم فيها خارج العمل. بمجرد نفاذ الوقت، ستبدأ محاولات جديدة لإعادة الاتصال بالخادوم. القيمة الافتراضية لهذا المتغير هي 10 ثواني. إعدادٌ بسيط سيبدو هكذا: upstream backend { server backend1.example.com max_fails=3 fail_timeout=15s; server backend2.example.com weight=2; server backend3.example.com weight=4; }كان هذا استعراضًا سريعًا لـ Round Robin load balancing. هناك عدّة طرق أخرى قد نتطرّق إليها لاحقًا في مقالات أخرى ترجمة -وبتصرّف- للمقال: How To Set Up Nginx Load Balancing
  7. لِمَاذا قد تودُّ تشغيل Nginx و Apache معًافي الواقع يعتبر كلٌّ من nginx و apache عبارة عن خواديم ويب فعّالة للعمل. حاليًّا يحتل Apache المرتبة الأولى في مجال إدارة الخواديم منذ إطلاقه للعموم في 2006، nginx يصعد بقوة في شتّى أرجاء العالم وهو الآن يحتل المرتبة الثانية في خواديم الويب التي تدير المواقع النشطة. الأسباب وراء شعبية كلّ خادوم واضحة: قوة apache وسرعة nginx المعروفتان لدى الجميع. وعلى كلّ حال، فإن كلًّا من الخادومين يمتلكان نقاط ضعف – apache يستهلك الذاكرة بشراهة، بينما nginx -الذي يؤدي عملًا ممتازًا مع الملفات الثابتة(static files)- يحتاج مساعدة php-fpm أو وحدات مشابهة للتعامل مع المحتوى الديناميكي. على كلّ حال، يمكن لأي شخص أن يدمج الخادومين للحصول على فعالية ممتازة، مع استخدام nginx كخادوم ويب للملفات الثابتة بالواجهة (front-end) و apache ليعالج العمليات بالخلفية (back-end). التثبيتلتطبيق الخطوات الموجودة في هذا الدّرس ستحتاج إلى امتلاك صلاحيات المستخدم الجذر root على خادومك الافتراضي الخاص. لإنشاء مستخدم يمتلك صلاحيات الجذر، تابع الخطوتيّن الثالثة والرابعة من دليل تثبيت خادوم أوبونتو الشامل. تثبيت nginxلكي نبدأ العمل، سنحتاج إلى تثبيت وإعداد nginx الذي سيخدم واجهة موقعنا. يمكن تثبيته باستخدام apt-get عبر الأمر التالي: sudo apt-get install nginx بمجرد أن يتم التثبيت، يمكنك أن تبدأ بإعداد المضيف الوهمي (virtual host) لكي يتم تشغيله بواجهة الموقع. هناك بضع تغييرات إضافية علينا عملها في الإعدادات. إعداد nginxافتح إعدادات nginx عن طريق الأمر: sudo nano /etc/nginx/sites-available/exampleالإعدادات التالية ستسمح لك باستخدام nginx كخادوم لواجهة الموقع. هذه الإعدادات مشابهة للإعدادات الافتراضية، تفاصيلها تجدها تحتها. server { listen 80; root /var/www/; index index.php index.html index.htm; server_name example.com; location / { try_files $uri $uri/ /index.php; } location ~ \.php$ { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; proxy_pass http://127.0.0.1:8080; } location ~ /\.ht { deny all; } }هذه هي التغييرات التي تم عملها على الإعدادات: مسار الجذر تم تغييره إلى مسار الويب الحالي. ملف index.php تم إضافته إلى سطر الفهرس. دالة try_files ستحاول القيام بتخديم الزوار مهما كانت الصفحات التي يطلبونها. إذا كان nginx غير قادرٍ على فعل ذلك، حينها يتم إرسال الملف إلى الوسيط (proxy). دالة proxy_pass تسمح لـ nginx أن يتعرف على مسار الخادوم الوسيط. "location ~ /\.ht {" تمنع الموقع من الوصول إلى جميع ملفات .htaccess إذا كان مسار الجذر الخاص بـ Apache يتعارض مع ذاك الخاص بـnginx. هذه الإعدادات تقوم بإعداد نظامٍ صغير حيث يتم توجيه جميع الملفات التي نهايتها .php إلى خادوم apache ليعالجها بالخلفية والذي سيعمل على المنفذ 8080. لتفعيل المضيف الوهمي: sudo ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/exampleبالإضافة إلى ذلك، علينا حذف إعداد nginx الافتراضي: sudo rm /etc/nginx/sites-enabled/defaultالخطوة التالية ستكون تثبيت وإعداد apache. تثبيت Apacheبعد أنّ انتهينا من nginx، حان الوقت لتثبيت واجهة موقعنا الخلفية، apache: sudo apt-get install apache2بما أنه لم يتم تشغيل nginx بعد، فإنّ Apache سيعمل المنفذ 80. إعداد Apacheسنحتاج إلى إعداد apache لجعله يدير الواجهة الخلفية لموقعنا، والذي كما قلنا سابقًا، سيعمل على المنفذ 8080. افتح ملف منافذ apache للبدأ في إعداده ليستخدم المنفذ الصحيح عبر الأمر: sudo nano /etc/apache2/ports.confابحث وغيّر السطور التّالية لجعل apache يعمل على المنفذ 8080 والقابل للوصول من المضيف المحلي (localhost) فقط: NameVirtualHost 127.0.0.1:8080 Listen 127.0.0.1:8080احفظ الملف واخرج. بعد ذلك قمّ بإنشاء ملف مضيف وهمي عبر نسخ تخطيط الملف من ملف apache الافتراضي عبر الأمر: sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/example sudo nano /etc/apache2/sites-available/exampleالمشكلة الرئيسية التي يجب حلّها هنا هي أنه يجب أن يتم إعادة ضبط المضيف الوهمي مُجدّدًا لكي يعمل على المنفذ 8080 (عوضًا عن المنفذ الافتراضي الذي هو 80 والذي يعمل عليه nginx). يجب أن يبدو السطر المطلوب هكذا: <VirtualHost 127.0.0.1:8080>تأكّد من أن مسار الجذر صحيح. احفظ الملف واخرج منه وقم بتفعيل المضيف الوهمي: sudo a2ensite exampleقبل البدء باختبار الأشياء، نحتاج إلى دعم apache بملحق php. ثبّته عبر الأمر: sudo apt-get install php5قم بإعادة تشغيل كلٍ من الخادومين للتأكد من عمل التغييرات: sudo service apache2 restart sudo service nginx restartإنهاء العمليّةلقد قمنا بإعداد خادومنا الشخصي الوهمي الخاص (VPS) ليتم تشغيل nginx في واجهة موقعنا وapache ليعالج الطلبات المتعلقة بـ php في الخلفية. الذهاب إلى نطاقنا الرئيسي (domain) الآن سيأخذنا إلى الصفحة الافتراضية لموقعنا. يمكننا التحقق مما إذا كان يتم توجيه المعلومات إلى apache عبر تشغيل سكربت PHP شائع الاستخدام. اذهب وأنشء ملف php.info عبر: sudo nano /var/www/info.phpوالصق الشفرة التالية داخله: <? phpinfo( ); ?>احفظ الملف واخرج. زيارة domain/info.php الخاص بك يجب أن يعرض لك شاشة معلومات php، وسيكون بمقدورك رؤية أنه قد تم معالجة الطلب بواسطة apache أخيرًا، يمكنك رؤية أيٍّ من المنافذ مفتوح وأيّ التطبيقات التي تعمل على كلّ واحدٍ منها عبر كتابة هذا الأمر: sudo netstat -pluntترجمة -وبتصرّف- للمقال How To Configure Nginx as a Reverse Proxy for Apache لصاحبته Etel Sverdlov
  8. سنغطّي في هذا الدّرس أساسيات التعامل مع الطرفيّة (Terminal) في لينكس أو بالأحرى سطر الأوامر في لينكس بالإضافة إلى العديد من الأوامر المشوّقة. إذا كنتَ جديدًا على نظام لينكس فقد تودّ أن تتعرّف على الطرفيّة قليلًا كونها الطريقة الأساسية للتعامل مع الخواديم العاملة بنظام لينكس. ربما يبدو استخدام سطر الأوامر كمهمّةٍ شاقّة للوهلة الأولى ولكنه في الواقع سهلٌ للغاية إذا بدأت بتعلّم الأساسيات أولًا وبناء مهاراتك من هناك. إذا كنتَ تريد أن تستفيد إلى أقصى الحدود من هذا الدليل، فستحتاج خادوم لينكس لتتصل به وتستعمله. تم إعداد هذا الدليل ليتوافق مع خادومٍ يعمل بنظام Ubuntu 14.04 ولكن المعلومات العامّة تنطبق أيضًا على التوزيعات الأخرى. فلنبدأ بتعريف ماهيّة محاكي الطرفيّة. مُحاكي الطرفيّة محاكي الطرفيّة (terminal emulator) هو عبارة عن برنامجٍ يسمح باستخدام الطرفيّة في بيئةٍ رسومية. كما أنّ معظم الناس يستخدمون نظام التشغيل بواسطة واجهةٍ رسومية (GUI) لأداء مهامّهم اليومية، فإنّه من الضروري استخدام محاكي الطرفيّة من قبل معظم مستخدمي خواديم لينكس لأداء مهامّهم. إليك بعض محاكيات الطرفيّة المجانية والشهيرة بناءً على نظام التشغيل: Mac OS X: الطرفية (الافتراضيّة)، iTerm 2. Windows: برنامج Putty. Linux: الطرفيّة، KDE Konsole, Xterm. يمتلكُ كلُّ محاكي طرفية مجموعته الخاصّة من المميزات، ولكنّ كلَّ واحدٍ من القائمة السابقة يعمل جيدًا ومن السهل استخدامه. الصدفة في نظام لينكس، الصدفة (shell) هي عبارة عن واجهة سطر أوامر تتفاعل مع أوامر المستخدم وملفّات السكربتات (scripts) وتقوم بإخبار نظام تشغيل الخادوم عن كيفية التعامل معها. هناك عدّة صدفات شهيرة، مثل صدفة Bourne (اختصارها sh) وصدفة C (اختصارها csh). تمتلك كلُّ صدفة مميزاتها الخاصّة بها والتي تختلف بها عن الأخرى، مثل كيفية معالجة وتفسير الأوامر التي تصلها، ولكنّها جميعًا تمتلك المزايا الأساسية مثل إعادة توجيه الإدخال والإخراج، المتغيّرات، اختبار الشروط وأمور أخرى. تمّ كتابة هذا الدليل ليتعامل مع صدفة Bourne-Again، والتي عادةً يتم الإشارة إليها باسم bash. والتي هي أيضًا الصدفة الافتراضيّة لمعظم توزيعات لينكس، مثل Ubuntu, CentOS و RedHat. موجّه الأوامر عندما تقوم بتسجيل الدخول لأول مرة إلى خادوم، فإنّه عادةً سيتم ترحيبك بواسطة "رسالة اليوم – Message of the day” (اختصارها MOTD)، والتي هي عادةً ما تكون رسالةً تحتوي على معلوماتٍ عدّة مثل إصدار توزيعة لينكس التي يستخدمها الخادوم. بعد رسالة MOTD، سيتم توجيهك إلى موجّه الأوامر (command prompt)، أو موجّه الصدفة، والذي هو المكان الذي يمكنك من خلاله إصدار الأوامر إلى الخادوم. المعلومات التي يتم تقديمها في موجّه الأوامر يُمكن أن يتم تخصيصها من طرف المستخدم، هذا مثال على موجّه الأوامر الافتراضي لتوزيعة أوبونتو 14.04: sammy@webapp:~$ فلنجزّء مكونات الأمر السابق: sammy: اسم المستخدم الحالي. webapp: اسم المضيف الحالي (hostname). ~: المسار الحالي. في bash، والتي هي غالبًا ما تكون الصدفة الافتراضيّة، فإنّ إشارة ~ أو ما تُعرف بإشارة المدّ، هي عبارةً عن محرف خاص يُشيرُ تلقائيًا إلى مسار مجلّد المنزل للمستخدم العادي; في هذه الحالة، هو يمثّل المسار /home/sammy . $: رمز موجّه الأوامر. هذا الرمز يُعَلّم نهاية موجّه الأوامر، والذي بعده سيظهر ما يُدخله المستخدم إلى الطرفيّة. إليك مثالًا لِمَا سيبدو عليه موجّه الأوامر إذا تمّ تسجيل الدخول باسم المستخدم root في المسار /var/log : root@webapp:/var/log# لاحظ أنّ موجّه الأوامر ينتهي برمز # ، والذي يُعتبر رمز موجّه الأوامر الخاص بالمستخدم root. في نظام لينكس، مستخدم root هو المستخدم الفائق والذي هو بإمكانه تطبيق تغييراتٍ على امتداد النظام بأكمله بالإضافة لوظائف الإدارة والإعداد، إنّه مستخدم غير مقيّد بأيّ نوعٍ من القيود وبإمكانه تنفيذ أيّ مهمة على الخادوم. تنفيذ الأوامر يُمكن إصدار الأوامر في موجّه الأوامر عبر تحديد اسم ملفٍّ تنفيذي، والذي يمكن أن يكون برنامجًا تنفيذيًا أو سكربتًا. هناك العديد من أوامر لينكس المعيارية والأدوات التي تأتي مُثبتةً مع نظام التشغيل، والتي تسمح لك بتصفّح نظام الملفّات، تثبيت وإزالة البرامج والحزم بالإضافة إلى إعداد النظام والتطبيقات. مهمّة تشغيل أمرٍ ما تُعرف باسم "عملية". عندما يتم تنفيذ أمرٍ ما من طرف المستخدم (والتي هي الطريقة الافتراضيّة لتنفيذ المهام)، فإنّه يجب على المستخدم أن ينتظر إلى حين انتهاء العملية قبل أن يتم إرجاعه من جديد إلى موجّه الأوامر، حينها يمكنه إصدار المزيد من الأوامر ليتم تنفيذها. من المهم التنويه أيضًا إلى أنّ كلّ الأشياء في نظام لينكس حساسة لحالة الحروف، بما في ذلك أسماء الملفّات والمسارات، الأوامر، المُعطيات والخيارات. إذا كان شيءٌ ما لا يعمل كالمتوقّع، فقم بالتحقق من تهجئة وحالة حروف الأوامر الخاصّة بك. سنقوم بالتطرّق إلى بضع أمثلة تغطّي أساسيات تنفيذ الأوامر. ملاحظة: إذا لم تكن متّصلًا بالفعل بخادوم لينكس، فالآن هو الوقت المناسب لفعل ذلك. إذا كنتَ تمتلك خادوم لينكس ولكنك تواجه مشاكل بالاتّصال، فاتّبع هذا الرابط: كيفية الاتصال بخادوم عبر SSH. دون مُعطيات وخيارات لتنفيذ أمرٍ دون معطياتٍ (arguments) أو خيارات، بكل بساطة قم بكتابة الأمر واضغط على زرّ Enter. إذا قمتَ بتشغيل أمرٍ بهذه الطريقة، فسيقوم باستخدام سلوكه الافتراضي، والذي يختلف من أمرٍ إلى آخر. مثلًا، إذا قمتَ بتشغيل الأمر cd دون أيّ مُعطيات، فسيتم إرجاع إلى مسار مجلّد المنزل الخاص باسم المستخدم الذي تستعمله حاليًا. سيقوم الأمر ls بطباعة محتويات المسار الحالي من ملفّاتٍ ومجلّدات. وبدون أيّ مُعطيات فسيقوم الأمر ip بطباعة رسالةٍ تبيّن لك كيفية استخدام الأمر ip. جرّب تشغيل الأمر ls بدون أي مُعطيات لسرد الملفّات والمجلّدات الحالية في مسارك الحالي (ربما لا يكون هناك أيٌّ منها بالمناسبة): ls مع المُعطيات تتوقع العديد من الأوامر استقبال مُعطيات أو مُعامِلات (parameters)، والتي من شأنها أن تقوم بتغيير سلوك عملية تنفيذ الأمر. مثلًا، الطريقة الأكثر شيوعًا لاستخدام cd هي عبر تمرير مُعطىٍ وحيد إليه يُحدد المسار الذي يجب الانتقال إليه. كمثال، للانتقال إلى المسار /usr/bin حيث يتم تثبيت العديد من الأوامر العادية، فسيتوجّب عليك تطبيق الأمر التالي: cd /usr/bin الجزء "cd” من الأمر السابق هو الأمر، والمُعطى الأول "/usr/bin” يتبُع الأمر. لاحظ كيف تمّ تحديث مسار موجّه الأوامر الحالي تلقائيًا بعد تنفيذ الأمر. إذا كنتَ تحبّ، جرّب تشغيل الأمر ls لرؤية الملفّات الموجودة حاليًا في مسارك الحالي. ls مع الخيارات تقبل معظم الأوامر الخيارات، والتي تُعرف أيضًا باسم الأعلام (flags) أو المحوّلات (switches)، والتي تقوم بالتّعديل على سلوكٍ أمرٍ ما وعمله. وبما أنها عبارة عن مُعطياتٍ من نوعٍ خاص، فإنّ الخيارات تتبعُ الأوامر أيضًا، ويُمكن التعرّف على الخيارات عبر مِحرَف ( - ) متبوعًا بخيارٍ واحدٍ أو أكثر، والتي يتم تمثيلها بحروفٍ كبيرة أو صغيرة. بالإضافة إلى ذلك، تبدأ بعض الخيارات بـ (--) متبوعةً بخيارٍ وحيد يتكون من أكثر من مِحرَف (عادةً يكون كلمةً أو كلمتين تصفان الخيار). كمثالٍ بسيط حول كيفية عمل الخيارات، فلنلقي نظرةً على الأمر ls. إليكَ بعض الخيارات الشائعة التي يتم استخدامها عادةً عند التعامل مع الأمر ls: -l : طباعة "السرد الطويل"، والذي يتضمّن تفاصيل إضافية مثل أذونات الملفّات، الملكيّة، الحجم والتوقيت. -a : سرد جميع محتويات مسارٍ معين، بما في ذلك الملفّّات المخفيّة (والتي تبدأ بإشارة . ). لاستخدام خيار -l مع الأمر ls، استعمل هذا الأمر: ls -l لاحظ أنّ عملية السرد تتضمن نفس الملفّات التي تمّ سردُها مسبقًا، ولكن بمعلوماتٍ إضافية حول كلِّ ملفّّ. كما ذكرنا مسبقًا، يُمكن تجميع الخيارات مع بعضها البعض. إذا كنتَ تريد استخدام الخيارين -a و -l مع بعضهما البعض، فيمكنك تطبيق ls -l -a أو جمعهما هكذا: ls -la لاحظ أنّ عملية السرد تتضمن الملفّّات والمسارات المخفيّة بسبب الخيار -a. مع الخيارات والمُعطيات يُمكن غالبًا جمعُ المُعطيات والخيارات مع بعضهما البعض عند تشغيل الأوامر. كمثال، يُمكنك التحقق من محتويات المسار /home ، بغضّ النظر عن مسارك الحالي عن طريق استخدام أمر ls هذا: ls -la /home ls هو الأمر، -la هو الخيار و/home هو المُعطى الذي يحدد الملفّ أو المسار الذي يجب سردُه. يجب أن يطبع هذا الأمر محتويات المسار /home ،والذي يجب بدوره أن يحتوي جميع مجلّدات المنزل الخاصّة بالمستخدمين العاديين على الخادوم. مُتغيّرات البيئة مُتغيّرات البيئة (environment variables) هي عبارة عن قِيَم (values) تقوم بتغيير طريقة تنفيذ الأوامر والعمليات. عندَ تسجيل الدخول لأولّ مرة إلى الخادوم، فإنّه سيتم ضبط العديد من مُتغيّرات البيئة وفقًا لعدّة ملفّات إعداد افتراضيًا. عرض جميع مُتغيّرات البيئة لعرض جميع مُتغيّرات البيئة التي تم ضبطُها لجلسة طرفية معيّنة، قم بتشغيل الأمر env: env سيكون هناك ناتجٌ كثير للأمر السابق، ولكن حاول العثور على مُدخلة PATH: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games مُتغيّر البيئة PATH هو عبارة عن قائمةٍ مفصولٌ عناصرها بنقطتين فوق بعضهما، تتكون من قائمةٍ بالمسارات التي ستقوم الصَدَفَة بالبحث عن البرامج أو السكربتات التنفيذيّة عند تنفيذ أمرٍ معيّن. مثلًا، يوجد الأمر env بالمسار /usr/bin ، ويُمكننا تنفيذ الأمر دون الحاجة إلى تحديد موقعه بالضبط، لأنّ مساره موجود في متغيّر البيئة PATH. عرض قيمة مُتغيّر يُمكن جلب قيمة مُتغيّر بيئة عن طريق وضع إشارة $ قبل اسم المتغيّر. حيثُ أنّ القيام بذلك سيقوم باستبدال اسم المتغيّر بقيمته. مثلًا، لطباعة قيمة المتغيّر PATH، يمكنك استخدام الأمر echo: echo $PATH يُمكنك استخدام المتغيّر HOME أيضًا، والذي هو عبارة عن مسار مجلّد المنزل الخاص بمستخدمك الحالي الافتراضي، للانتقال إلى مجلّد المنزل الخاص بك، طبّق: cd $HOME إذا كنتَ تحاول الوصول إلى مُتغيّر بيئةٍ لم يتم ضبطه بعد، فإنّه لن يتم طباعة قيمة ذاك المتغيّر، حيث أنه سيكون مُتغيّرا فارغًا. ضبط مُتغيّرات البيئة الآن، تعلّمتَ كيفية عرض مُتغيّرات البيئة الخاصّة بك، يجب عليك الآن تعلّم كيفية ضبطها. لضبط أو تعيين مُتغيّر بيئة، فكلُّ ما ستحتاج القيام به هو البدء بكتابة اسم المتغيّر متبوعًا بإشارة = ، متبوعةً مباشرةً بقيمته، كمثال: VAR=value لاحظ أنّه في حال قمتَ بمحاولة تعيين قيمةٍ لمُتغيّرٍ موجودٍ بالفعل، فإنّه سيتم الكتابة فوق القيمة الافتراضيّة. وإذا لم يكن المتغيّر موجودًا أساسًا فإنّه سيتم إنشاؤه. صدفة Bash تمتلكُ أمرًا يُدعى export والذي يقوم بتصدير مُتغيّرٍ ليُتَمَكَّنَ من استدعائه بواسطة العمليات الفرعية (child processes). بعبارةً أبسط، يَسمحُ لك هذا الأمر باستخدام سكربتاتٍ تستدعي مُتغيّرات بيئة تمّ تصديرها من جلستكَ الحاليّة. إذا كنتَ لم تستوعب بعدُ ما يعني هذا، فلا تقلق الآن. يُمكنك الإشارة إلى متغيراتٍ حالية عند تعيين مُتغيّراتٍ جديدة. مثلًا، إذا قمتَ بتثبيت تطبيقٍ ما إلى المسار /opt/app/bin ، فيُمكنك إضافة ذاك المسار إلى نهاية مُتغيّر البيئة PATH الخاصّ بك عبر هذا الأمر: export PATH=$PATH:/opt/app/bin الآن، تأكّد مما إذا تمّ إضافة /opt/app/bin إلى نهاية مُتغيّر PATH باستخدام الأمر echo: echo $PATH لا تنس أنّ القيام بتعيين مُتغيّرات البيئة بهذه الطريقة يقوم بتعيينها فقط لجلستك الحالية. هذا يعني أنّه في حال قمتَ بتسجيل الخروج من جلستك الحالية أو التبديل لجلسةٍ أخرى، فإنّه لن يتم حفظ أيٍّ من التغييرات التي قمتَ بها على مُتغيّرات البيئة. هناك دومًا طريقة للإبقاء على هذه التغييرات، ولكننا لن نغطّي هذا الأمر في هذا الدليل حاليًا. الخاتمة هكذا الآن تعلّمتَ أساسيات طرفيّة لينكس (وبضع أوامرَ أخرى)، يجب أن تمتلك الآن قدرةً جيّدة على توسيع معرفتك بأوامر نظام لينكس. ترجمة -وبتصرّف- للمقال: An Introduction to the Linux Terminal.
  9. مقدّمةChef هو عبارة عن أداة مفتوحة المصدر مكتوبة بلغة Ruby، يُستخدم كإطار عمل يسمح لك بأتمتة مهام إدارة خواديم الوب الخاصة بك، كما يسمح لك بنشر خواديم افتراضية خاصة (VPS) مُعدّة مسبقًا دون الحاجة إلى تذكّر كيفية ضبطها بالضبط. هذا الأمر مهم للغاية وتزداد أهميته تدريجيًا خاصةً أنه من الشائع امتلاك خواديم خاصة للاختبار، التطوير وإدارة قواعد البيانات بالإضافة لخواديم بيئة العمل الإنتاجية. كل واحدٍ منها له موارده وإعداداته الخاصة. إنّ عملية تثبيت وإعداد وتحديث وصيانة خادوم افتراضي خاص (VPS) منفرد تُعتبر عملية مُستهلكة جدًا للوقت. Chef يسمح لك أن تقوم بسهولة بأتمتة هذه المهام وتعديلها بحيث تناسب كل خادومٍ على حدى أوتوماتيكيًا. باختصار، Chef يسمح لك أن توفر الوقت والمال عن طريق توفير نظام يسهُل إعادة استخدامه لاحقًا. مطوروا Chef قاموا بتوفير سكربت (Script) سهل الاستخدام لتثبيته على توزيعة Ubuntu، ولكن المشكلة هي أن السكربت الذي قاموا بصناعته ليس قابلًا للاستخدام جيدًا مع إطار عمل Ruby on Rails، هذا الدليل سيرشدك إلى طريقة تثبيت بيئة Ruby حقيقية كاملة. ربما تتوقع أن نقوم بتثبيت Ruby عن طريق هذا الأمر: sudo apt-get install rubyولكن هذه الطريقة ليست مُستحسنة في الواقع، لأنه حتّى وإن كنتَ لا تستخدم أكثر من إصدار Ruby على نفس الخادوم الافتراضي الخاص (VPS)، فستواجه مشاكل بالتعامل مع تعارض أحجار روبي (Ruby gems) أو بعض المشاكل بالتعامل مع المشاريع التي تتطلب إصدارًا معينًا من حجر روبي (gem). مدير إصدارات روبي (RVM) يستطيع أن يحلّ هذه المشاكل بسهولة. ملاحظة: يمكنك استخدام rbenv عوضًا عن RVM أيضًا. اُختيرَ RVM لهذا الدليل لأنهما يتساويان بكل الأشياء التي نحتاجها حاليًا، من الأفضل أن تمتلك قوة إضافية ولا تحتاجها بدلًا من أنّ تكتشف أنك بحاجتها ولكن لا تستطيع الحصول عليها. الخطوة الأولى - كيفية تثبيت روبي مع مدير إصدارات روبي (RVM)يعتمد RVM على ثلاث أمور: Bash, Curl و Git. صدفة Bash مثبّتة افتراضيًا على توزيعة أوبونتو، لذا فإنه يتوجب عليك تثبيت كلٍ من Git و Curl فقط حاليًا عن طريق تطبيق الأمر التالي في الطرفية (Terminal): sudo apt-get install git-core curl الآن يمكنك تثبيت مدير إصدارات روبي (RVM) عن طريق الأمر: sudo \curl -L https://get.rvm.io | bash -s stable --ruby=1.9.3ستستغرق هذه العملية حوالي 5 إلى 10 دقائق تقريبًا (اعتمادًا على سرعة اتصالك بالوب بالإضافة إلى الوقت المُستَغرَق ريثما يتم بناء الشفرة المصدرية لروبي). ملاحظة: Chef يتعارض مع روبي 1.9، ولهذا فإننا نقوم بتثبيت روبي 1.9.3. يجب أن ترى الرسالة التالية عندما تكتمل العملية: * To start using RVM you need to run `source /usr/local/rvm/scripts/rvm` in all your open shell windows, in rare cases you need to reopen all shell windows. افعل ما يطلبه منك، فقط طبّق الأمر: source /usr/local/rvm/scripts/rvmالآن، تأكد من أن روبي تم تثبيتها بشكلٍ صحيح عن طريق الأمر: ruby -vإذا كانت توزيعتك من معمارية 32 بت فيجب أن ترى: ruby 1.9.3p448 (2013-06-27 revision 41675) [i686-linux]إمّا إذا كانت من معمارية 64 بت، فيجب أن ترى شيئًا مثل: ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-linux]الآن، تأكد من أنّ أحجار روبي (Ruby gems) مثبّتة بشكل صحيح عن طريق الأمر: gem -vيجب أن يتم عرض رقم الإصدار المثبّت مثل: 1.8.25إذا لم تكن مطور روبي أو إطار عمل Rails، فحينها قد ترغب بجعل الإصدار 1.9.3 من روبي هو الافتراضي حاليًا عن طريق الأمر: rvm use 1.9.3 --defaultملاحظة: هذا الأمر سيقوم بتجاهل أي إصدار مثبّت من قبل من روبي. الخطوة الثانية - كيفية تثبيت Chefتثبيت Chef الآن أصبح بالإمكان تنفيذه بسهولة وسرعة عن طريق الأمر: gem install chef --no-ri --no-rdoc وللتأكد من أنّ Chef مثبّت بالفعل طبّق: chef-solo -vوهو ما سيقوم بطباعة رقم الإصدار الحالي من Chef: Chef: 11.4.4 سنقوم أيضًا بتثبيت بعض الإضافات المفيدة ألا وهي: Knife-Solo, Berkshelf و Foodcritic. Knife-Solo هي مُلحق (plug-in) لأداة Knife الخاصة بـChef تجعل عملية إعداد الخواديم المفردة ممكنة باستخدام chef-solo. حيث أنّها تجعل عملية نشر الخواديم الصغيرة سهلة لأنها توفر عليك عناء تشغيل عميل Chef (يدعى chef-client) والذي بدوره يتطلب خادوم chef (يدعى chef-server). لتثبيته، طبّق الأمر التالي: gem install knife-solo --no-ri --no-rdoc Berkshelf هو مُلحَق يساعدك على كتابة وتحزيم كتب الطبخ (cookbooks وهي ملفات الإعداد الخاصة بإعدادات الخواديم) أو تحميلها باستخدام ملفاتٍ محلية أو مستودع Git أو خادوم Chef. عليكَ أولًا تثبيت بعض الاعتماديات التي يحتاجها Berkshelf ليتمكن من العمل: sudo apt-get install libxslt-dev libxml2-dev الآن لتثبيت Berkshelf، طبّق الأمر: gem install berkshelf --no-ri --no-rdoc وللتأكد من أنّ عملية التثبيت تمت بشكل صحيح، طبّق الأمر: berks -v وهو ما يجب أن يعطيك رقم الإصدار المثبّت مثل: Berkshelf (2.0.7) مُلحق Foodcritic يساعدك عن الكشف عن المشكلات في كتب الطهي الخاصة بـChef (تُدعى Chef Cookbooks). لتثبيته، طبّق الأمر: gem install foodcritic --no-ri --no-rdoc وكالمعتاد، للتأكد من عملية التثبيت: foodcritic -V ستحصل على: foodcritic 2.2.0ملاحظة: في حال كنتَ تتساءل، الخيارات --no-ri –no-rdoc هي ليتم تجنّب إنشاء الوثائق الخاصة بالمُلحقات. الخطوة التاليةهذا الدّرس شرحَ لك كيفية تثبيت Chef على بيئة روبي حقيقية لتكون مناسبة لعملية تطوير البرمجيات. كل شيء تقريبًا أصبحَ جاهزًا للبدء بعملية الأتمتة عن طريق إنشاء وصفاتِكَ الخاصة (recipes) أو باستخدام وصفاتٍ من طرفٍ ثالث (3rd party). ترجمة -وبتصرّف- للمقال: How To Install Chef and Ruby with RVM on a Ubuntu VPS
  10. يمكنك البدء مع أي توزيعةٍ تريدها فلا يوجد واحدة أفضل من البقية، دبيان وأوبونتو هما الأكثر استخدامًا وكذلك CentOS، ابدأ مع التوزيعات الدبيانية ثم انتقل للريدهاتية.
  11. مقدّمةRedis هو عبارة عن مَخزَن قيم مفاتيح key value store مفتوح المصدر يمكنه العمل كمخزن لتخزين البيانات في الذاكرة in-memory store أو كمخزن تخزين بيانات مؤقت. Redis هو خادوم بنية بيانات data structure server يُمكن استخدامه إمّا كخادوم قاعدة بيانات لوحده أو مرتبطًا مع قاعدة بيانات أخرى مثل MySQL لتسريع بعض الأشياء، وهو ما سنشرحه في هذا الدليل. في هذا الدليل، سيتم إعداد Redis كذاكرة تخزين مؤقت cache لووردبريس لتخفيف الحمل الزائد عن عمليات الاستعلام query التي تتم على قاعدة البيانات المُستخدمة لعرض صفحة ووردبريس. النتيجة ستكون توفير موقع ووردبريس أسرع بكثير من ذي قبل ويستخدم موارد أقل للتعامل مع قاعدة البيانات بالإضافة إلى توفير ذاكرة تخزين مؤقت مضبوطة ومستمرة. سيتم استخدام توزيعة Ubuntu 14.04 في هذا الدليل. صحيحٌ أن الوضع يختلف من موقعٍ إلى آخر، ولكن أدناه ستجد مثالًا على قياس أداء الصفحة الرئيسية لعملية تثبيت ووردبريس افتراضية مع وبدون Redis, كما تم إعداده باستخدام هذا الدليل. تم استخدام أدوات مطوري كروم للقيام بعملية الاختبار مع تعطيل عملية التخزين المؤقت الخاصة بالمتصفح لتجنب التأثير على النتائج. صفحة ووردبريس الرئيسية الافتراضية من دون Redis: وقت تحميل الصفحة: 804 ميلي ثانية.صفحة ووردبريس الرئيسية الافتراضية مع Redis:وقت تحميل الصفحة: 449 ميلي ثانية.تحذير: عملية التطبيق هذه لـRedis للقيام بعملية التخزين المؤقت لذاكرة ووردبريس يعتمد على سكربت script طرفٍ ثالث تم تطويره عبر طرفٍ خارجي. إذا كنتَ تريد القيام بعملية تطبيق Redis لووردبريس بنفسك فعليك أن تقوم بعمل بعض العمل الإضافي بناءً على المفاهيم التي سيتم تقديمها هنا. Redis أو Memcachedيُعتبر Memcached أيضًا خيارًا مشهورًا لعمل ذاكرة تخزينٍ مؤقت، لكن في هذه الحالة، Redis يقوم بكل ما يستطيع Memcached القيام به بالإضافة إلى تشكيلة أوسع من المميزات. هذه الصفحة على Stack Overflow بها بعض المعلومات العامة عن المقارنة بينهما. كيف يعمل التخزين المؤقت caching؟عندما يتم تحميل صفحة ووردبريس لأول مرّة، يتم إجراء عملية استعلام على قاعدة البيانات المثبتة على الخادوم. Redis يتذكر أو بالأحرى يخزن مؤقتًا عملية الاستعلام هذه. لذا عندما يحاول مستخدمٌ آخر القيام بتحميل صفحة الووردبريس هذه فالنتيجة سيتم توفيرها من طرف Redis والذاكرة دون الحاجة إلى القيام بعملية استعلام جديدة من قاعدة البيانات. عملية تطبيق Redis المُستخدمة في هذا الدليل ستجعله يعمل ككائن تخزينٍ مؤقت مستمر (persistent object cache) لووردبريس (دون انتهاء). يعمل كائن التخزين المؤقت عبر تخزين عمليات استعلام SQL التي يحتاجها ووردبريس لتحميل الصفحات مؤقتًا في الذاكرة. عندما يتم تحميل أيّ صفحة، يتم توفير النتائج الناتجة عن عمليات الاستعلام في SQL من الذاكرة باستخدام Redis, لذا فإنه لا توجد هناك حاجة لعمل عملية استعلام جديدة من قاعدة البيانات من جديد. وهو ما يعطي سرعةً أكبر في تحميل الصفحات بالإضافة إلى حملٍ أقل من طرف الخادوم على موارد قاعدة البيانات. إذا كان هناك استعلام غير متوفر في Redis، فإنّ قاعدة البيانات تقوم بتوفير نتيجة عملية الاستعلام تلك ويقوم Redis بإضافة تلك النتيجة إلى ذاكرته المؤقتة. إذا تمّ تحديث أيّ قيمة في قاعدة البيانات (مثل إنشاء موضوع أو صفحة جديدة على ووردبريس) فإنّ القيمة المُخزّنة الموازية لتلك القيمة في Redis يتم إبطالها تجنبًا لعرض بيانات قديمة. إذا واجهتَ مشاكل مع التخزين المؤقت، فإنه بإمكانك إلغاء صلاحية ذاكرة التخزين المؤقت الخاصة بـRedis باستخدام أمر flushall عبر سطر الأوامر الخاص بـRedis: redis-cliبمجرد أن ترى سطر الأوامر، طبّق: flushallمرجع إضافي: التوثيق الخاص بكائن التخزين المؤقت لووردبريس. المتطلباتقبل البدء بهذا الدليل، ستحتاج إلى إعداد مستخدمٍ بصلاحيات الجذر (sudo) بالإضافة إلى تثبيت ووردبريس. خادوم Ubuntu 14.04 (من المستحسن أن تكون بذاكرة عشوائية 1 جيجابايت أو أعلى). إضافة مستخدم بصلاحيات الجذر (sudo). تثبيت ووردبريس. الخطوة الأولى – تثبيت Redisبهدف استخدام Redis مع ووردبريس، فإننا بحاجة إلى تثبيت حزمتين: redis-server و php5-redis. حزمة redis-server توفرّ تطبيق Redis نفسه، بينما حزمة php5-redis تقوم بتوفير امتداد PHP للتطبيقات المكتوبة بـPHP مثل ووردبريس للتعامل مع Redis. لتثبيت هذه البرمجيات: sudo apt-get install redis-server php5-redisالخطوة الثانية – إعداد Redis كذاكرة تخزين مؤقتيمكن لـRedis أن يعمل إمّا كمخزن قاعدة بيانات NoSQL أو كذاكرة تخزينٍ مؤقت. في هذا الدليل وهذه الحالة بالضبط، سيتم ضبط Redis كذاكرة تخزينٍ مؤقت. الإعدادات التالية ستكون مطلوبة بهدفِ فعلِ ذلك. حرر الملف /etc/redis/redis.conf عن طريق الأمر: sudo nano /etc/redis/redis/confوقم بإضافة السطور التالية لنهاية الملف: maxmemory 256mb maxmemory-policy allkeys-lru ثم احفظ الملف. الخطوة الثالثة – حمّل سكربت ذاكرة التخزين المؤقت الخلفي لـRedisتم تطوير سكربت الـPHP هذا لووردبريس بواسطة Eric Mann. وهو عبارة عن سندٍ خلفي backend لكائن ذاكرةِ التخزين المؤقت من Redis لووردبريس. عليك تحميل سكربت object-cache.php. عملية التحميل هذه ستتم من خواديم DigitalOcean، ولكن هذا السكربت هو سكربت تم تطويره بواسطة طرفٍ ثالث. يجب عليك قراءة التعليقات داخل السكربت لمعرفة كيفية عمله. لتحميل سكربت الـPHP: wget https://assets.digitalocean.com/articles/wordpress_redis/object-cache.phpقم بنقل الملف إلى مسار /wp-content داخل مجلد ووردبريس الخاص بك: sudo mv object-cache.php /var/www/html/wp-content/قد يكون مسار المجلد (باللون الأحمر) مختلفًا اعتمادًا على طريقة تثبيتك لووردبريس. الخطوة الرابعة – فعّل إعدادات التخزين المؤقت في ملف wp-config.phpالآن، قم بتحرير ملف wp-config.php لإضافة ملحِ مفتاحِ ذاكرةِ تخزينٍ مؤقت (cache key salt) مع اسم موقعك (أو أيّ سلسلة string تريدها): nano /var/www/html/wp-config.phpثم أضف السطر الآتي إلى نهاية قسم * Authentication Unique Keys and Salts: define('WP_CACHE_KEY_SALT', 'example.com');يمكنك استخدام اسم النطاق الخاص بك domain أو أي سلسلة نصية كملح salt. ملاحظة: للمستخدمين الذين يستضيفون أكثر من موقع ووردبريس واحد، يمكن لكلِ موقعٍ أن يتشارك باستخدام تثبيت Redis واحد طالما أن كلّ موقعٍ منفصل يمتلك ملحَ مفتاح ذاكرة التخزين المؤقت الخاص به. أيضًا، قم بإضافة السطر التالي بعد سطر WP_CACHE_KEY_SALT لإنشاء ذاكرة تخزينٍ مؤقت مستمرة مع مُلحق كائن ذاكرة التخزين المؤقت لـRedis: define('WP_CACHE', true);في النهاية، يجب أن يكون ملفّك هكذا: * Authentication Unique Keys and Salts. . . . define('NONCE_SALT', 'put your unique phrase here'); define('WP_CACHE_KEY_SALT', 'example.com'); define('WP_CACHE', true); احفظ الملف وأغلقه. الخطوة الخامسة – قم بإعادة تشغيل Redis و Apacheأخيرًا، قم بإعادة تشغيل redis-service و apache2. لإعادة تشغيل Redis: sudo service redis-server restartلإعادة تشغيل Apache: sudo service apache2 restartأيضًا قم بإعادة تشغيل php5-fpm إذا كنتَ تستخدمها; هذا ليس جزءًا أساسيًا من عملية التثبيت، وعلى كل حال، لفعل ذلك طبّق: sudo service php5-fpm restartهذا كل شيء ! أصبح موقع ووردبريس الخاص بك مضبوطًا ليستخدم تخزين Redis المؤقت. يجب أن تلاحظ تحسنًا إذا قمتَ بالتحقق من سرعة تحميل صفحات موقعك واستهلاك الموارد الآن. مراقبة Redis باستخدام redis-cliلمراقبة Redis، استخدم أمر redis-cli كالتالي: redis-cli monitorعندما تقوم بتشغيل هذا الأمر، ستشاهد خرجًا بالوقت الحقيقي لعمليات تخديم الاستعلامات المُخزّنة مؤقتًا التي يديرها Redis. إذا لم ترى أيّ شيء، فقم بزيارة موقعك وقم بإعادة تحميل أيّ صفحة. بالأسفل مثال على خرجٍ من موقع ووردبريس مضبوط باستخدام هذا الدليل عبر Redis: OK 1412273195.815838 "monitor" 1412273198.428472 "EXISTS" "example.comwp_:default:is_blog_installed" 1412273198.428650 "GET" "example.comwp_:default:is_blog_installed" 1412273198.432252 "EXISTS" "example.comwp_:options:notoptions" 1412273198.432443 "GET" "example.comwp_:options:notoptions" 1412273198.432626 "EXISTS" "example.comwp_:options:alloptions" 1412273198.432799 "GET" "example.comwp_:options:alloptions" 1412273198.433572 "EXISTS" "example.comwp_site-options:0:notoptions" 1412273198.433729 "EXISTS" "example.comwp_:options:notoptions" 1412273198.433876 "GET" "example.comwp_:options:notoptions" 1412273198.434018 "EXISTS" "example.comwp_:options:alloptions" 1412273198.434161 "GET" "example.comwp_:options:alloptions" 1412273198.434745 "EXISTS" "example.comwp_:options:notoptions" 1412273198.434921 "GET" "example.comwp_:options:notoptions" 1412273198.435058 "EXISTS" "example.comwp_:options:alloptions" 1412273198.435193 "GET" "example.comwp_:options:alloptions" 1412273198.435737 "EXISTS" "example.comwp_:options:notoptions" 1412273198.435885 "GET" "example.comwp_:options:notoptions" 1412273198.436022 "EXISTS" "example.comwp_:options:alloptions" 1412273198.436157 "GET" "example.comwp_:options:alloptions" 1412273198.438298 "EXISTS" "example.comwp_:options:notoptions" 1412273198.438418 "GET" "example.comwp_:options:notoptions" 1412273198.438598 "EXISTS" "example.comwp_:options:alloptions" 1412273198.438700 "GET" "example.comwp_:options:alloptions" 1412273198.439449 "EXISTS" "example.comwp_:options:notoptions" 1412273198.439560 "GET" "example.comwp_:options:notoptions" 1412273198.439746 "EXISTS" "example.comwp_:options:alloptions" 1412273198.439844 "GET" "example.comwp_:options:alloptions" 1412273198.440764 "EXISTS" "example.comwp_:options:notoptions" 1412273198.440868 "GET" "example.comwp_:options:notoptions" 1412273198.441035 "EXISTS" "example.comwp_:options:alloptions" 1412273198.441149 "GET" "example.comwp_:options:alloptions" 1412273198.441813 "EXISTS" "example.comwp_:options:notoptions" 1412273198.441913 "GET" "example.comwp_:options:notoptions" 1412273198.442023 "EXISTS" "example.comwp_:options:alloptions" 1412273198.442121 "GET" "example.comwp_:options:alloptions" 1412273198.442652 "EXISTS" "example.comwp_:options:notoptions" 1412273198.442773 "GET" "example.comwp_:options:notoptions" 1412273198.442874 "EXISTS" "example.comwp_:options:alloptions" 1412273198.442974 "GET" "example.comwp_:options:alloptions" اضغط CTRL-C لإيقاف الخرج. هذا الأمر مفيد لرؤية الاستعلامات التي يعالجها Redis بالضبط. الخاتمةبعد اتّباع هذا الدليل، سيصبح ووردبريس مضبوطًا لاستخدام Redis كذاكرة تخزينٍ مؤقت على Ubuntu 14.04. ترجمة -وبتصرّف- للمقال: How To Configure Redis Caching to Speed Up WordPress on Ubuntu 14.04
  12. مقدمةتوفّر أدوات إدارة الإعدادات وسيلةً سهلة لنشر إعدادات متوافقة لمجموعة من الحواسيب العميلة (client computers) عبر خادوم إدارة مركزي. Chef هو واحدٌ من أشهر أدوات إدارة الإعدادات. حيث أنه مكتوب بلغة روبي ويقرأ الإعدادات بناءً على ما يدعى بالوصفات (recipes). يوفر Chef وسيلة سريعة لنشر بيئات عمل كاملة عوضًا عن مجرد تطبيقات مفردة. في أي حالة تحتاج فيها إلى تثبيت أي قطعة برمجيات ثمّ تعديل ملفات إعداداتها، يمكن لـChef أن يقوم بأتمتة العملية. في هذا الدليل، سنقوم بإلقاء لمحة عامة على كيفية تنظيم Chef لملفاته وما الأدوات والأنظمة التي يستخدمها ليقوم بمهامه. مصطلحات Chefمن المهم فهم عمل مختلف المكونات التي تشكل Chef وتفاصيلها. بنية Chef التحتية التشغيليةسنبدأ بالحديث عن النماذج المختلفة التي تُشكل استراتيجية التطوير عالية المستوى لـChef. يتم تقسيم نظام Chef حسب الأدوار التي يلعبها كل حاسوب أو آلة: خادوم Chef: هذا هو المكان الرئيسي الذي يتم فيه تخزين إعدادات الوصفات، كتب الوصفات (cookbooks) وتعريفات العُقَد (nodes definitions) وتعريفات محطة العمل (workstation definitions). إنّه الآلة المركزية التي ستستخدمها كل الآلات الأخرى ضمن الشبكة للحصول على إعدادات نشر الخواديم (deployments). عُقَد Chef: وهي أهداف النشر التي سيتم ضبطها بواسطة Chef. كل عقدة تمثّل بيئة آلة منفصلة مُحتواة إمّا على خادوم حقيقي أو داخل آلة وهمية. يحتوي كلٌ من بيئات أنظمة التشغيل هذه على تطبيق عميل Chef لتتمكن من الاتصال مع خادوم Chef. محطات عمل Chef: هذه المحطات (workstations) هي المكان الذي يتم فيه إنشاء أو تعديل تفاصيل إعدادات Chef. يتم دفع ملفات الإعدادات بعدها إلى خادوم Chef الرئيسي، حيث ستكون متوفرة لنشر أي عقدة جديدة. يسمح لك إعداد مختلف هذه المكونات أن تمتلك محطات عمل أو عُقّد متعددة. يمكن أن يتم إعداد العُقَد مباشرةً عندما تكون على الشبكة وعندما تكون متصلة بالخادوم الرئيسي. قد تعطيك العناوين العريضة أعلاه انطباعًا عن أنّ مكونات Chef هي مكونات منفصلة يجب تشغيلها على أجهزة منفصلة، بينما في الواقع، يمكن لآلة واحدة فقط أن تقوم بدور اثنين من هذه المكونات أو حتى جميعها. هناك مشروع يدعى chef-solo يسمح لك بالتخلي عن استخدام الخادوم المركزي وضبط الحاسوب الذي يتم تثبيته عليه تلقائيًا دون الحاجة للخادوم. تفاصيل الخادومالخادوم هو نقطة التحكم المركزية التي يتم الوصول إليها من طرف جميع آلات Chef الأخرى، سواء كدور عميل أو مدير. يمكن القول أنّه عبارة عن مستودع كبير أو قاعدة بيانات لجميع تفاصيل الإعدادات. خادوم Chef يعالج الاتصالات والأذونات الواردة من العُقَد ومحطات العمل وينظم البيانات لتكون جاهزة ليتم طلبها من قبل العملاء (clients). يمكن للخادوم أن يتضمن أيضًا واجهة وب للتمكن من إدارة أو ضبط بعض التفاصيل. تفاصيل العُقَدكما ذُكر أعلاه، يمكن للعقدة أن تكون جهازًا فيزيائيًا أو آلةً وهمية. الشيء الوحيد الذي تحتاجه هو أن يكون لها اتصال بشبكة الويب وأن تكون قادرة على الاتصال بخادوم Chef المركزي. المُستخدم الذي يشغل تطبيق chef يجب أيضًا أن يكون قادرًا على تثبيت البرمجيات وتطبيق التغييرات على النظام. كل عقدة تتواصل مع الخادوم المركزي باستخدام تطبيق يُدعى chef-client. هذا التطبيق يعالج عملية طلب البيانات من الخادوم المركزي بالإضافة إلى تنفيذ خطوات الإعداد اللازمة لإيصال العقدة إلى حالتها النهائية. يتواصل كلٌ من برنامج chef-client وخادوم Chef عن طريق استيثاق بمفتاح RSA. يستخدم Chef-client أداة تدعى ohai لجلب الإحصائيات عن العقدة. هذه الإحصائيات يتم استخدامها بهدف تثبيت تفاصيل إعدادات معينة وتأهيل المتغيرات المُحتواة داخل الملفات للعمل. تفاصيل محطة العملمحطة العمل تمتلك الأدوات الضرورية لإنشاء وتعديل تفاصيل الإعدادات لأيٍّ من العُقَد المتوفرة كما أنها قادرة على التواصل مع خادوم Chef لجعلها متوفرة. تُعتبر أداة knife أداة مهمة لإدارة Chef على أي محطة عمل . تُستخدم هذه الأداة كبوابة يمكنك من خلالها إعداد أي شيء تريد تخزينه على الخادوم. يمكنها أن تدير العُقَد والإعدادات ويمكن أنّ يتم استخدامها بشكل عام للوصول إلى الخادوم باستخدام "طريقة Chef معينة". بينما من الممكن أن يتم تسجيل الدخول إلى الخادوم باستخدام SSH وعمل جميع التغييرات لكل البيانات المطلوبة يدويًا، فهذه ليست الطريقة المثلى التي ينصح نظام Chef باستخدامها. الإعدادات والتعريفات التي يتم إنشاؤها وتعديلها على محطة العمل يتم تلقائيًا إرسالها إلى نظام إدارة إصدارات معين (version control) ومن ثم يتم دفعها إلى الخادوم المركزي. يُدعى المستودع بـ"chef-repo”. وهو يقوم بإدارة كل البيانات المُحتَاجة لإعداد Chef. هيكلية ملفات مستودع Chefيعالج Chef إعداداته ومعلومات اعتمادياته على محطة العمل باستخدام هيكلية ملفات معيَنة، من المهم فهم هذه الهيكلية بهدف إنشاء وصفات فعالة ودفع التغييرات. كما ذكرنا أعلاه، يجب أن يتم إبقاء ملفات إعداد الخادوم تحت نظام إدارة إصدارات بمستودع يدعى "chef-repo”. وهو مجرد مسار (directory) عادي يحتوي على ملفات chef. في هذا المجلّد، يمكننا أن نجد هيكلية مشابهة للتالي: certificates/: يحتوي على شهادات SSL التي يمكن الوصول إليها من قبل العملاء (clients) للاستيثاق authentication chefignore: يحتوي على الملفات والمسارات التي تُعتبر من ملفات هيكلة Chef الأساسية والتي يجب ألّا يتم دفعها إلى الخادوم. config/: يحتوي على واحدٍ من ملفيّ إعدادات المستودع. rake.rb: يُعرّف بعض المتغيرات لإنشاء شهادات SSL وبعض الخيارات العامة. cookbooks/: يحتوي كتب الوصفات (cookbooks) التي تقوم بإعداد البنية التحتية لمنظمتك. data_bags/: يحتوي على حقائب بيانات مختلفة لإعداداتك. حقائب البيانات محمية بواسطة مسارات فرعية تحتوي تفاصيل إعدادات حساسة. وهي قابلة للوصول فقط من قبل العُقَد التي تمتلك شهادة SSL مطابقة وتحتوي على ملفات بصيغة JSON مع تفاصيل الإعدادات. environments/: يحتوي على تفاصيل الإعدادات لنشر بيئات العمل المختلفة. كلّ بيئة معدّلة عن البيئة الافتراضية يجب أن يتم تعريفها داخل هذا المجلد. Rakefile: هذا الملف يقوم بتعريف المهام التي يمكن لـchef القيام بها عبر إعداداته. roles/: يحتوي الملفات التي تقوم بتعريف الشروط التي يمكن إسنادها إلى العُقَد. هيكلية ملفات كتب التّحضير لـChefضمنَ مسار كتب الوصفات (cookbooks) في chef-repo, تقوم المسارات الفرعية بتعريف كتب وصفات معينة من أجل التطبيقات. ضمنَ كل مسار إعداد تطبيقٍ منفصل هناك هيكلية تعرّف كيف يجب أن يتم تثبيت هذه الخدمة ومالتغييرات التي يجب عملها لجعلها تعمل بصورة صحيحة. ضمنّ التطبيق، ستجد ملفاتٍ وتعريفاتٍ تعرّف كيف يجب أن يتم تثبيت وإعداد أي تطبيق جديد. يحتوي ملف metadata.rb أو metadata.json على معلومات البيانات الوصفية (metadata) حول الخدمة. هذا يتضمن معلوماتٍ أساسية كاسم كتاب الوصفات والإصدار، ولكنه أيضًا مكان حيث يتم تخزين معلومات الاعتماديات. إذا كان كتاب الوصفات هذا يعتمد على كتب وصفات أخرى ليتم تثبيته، فيمكن سردها ضمن هذا الملف وسيتكفل chef بعملية تثبيتها وإعدادها بالإضافة إلى كتاب الوصفات الحالي. يحتوي مسار attributes على تعريفات الخواص (attribute definitions) التي يمكن أن يتم استخدامها للكتابة فوق الإعدادات الموجودة أو تعريفها من جديد للعُقَد التي ستمتلك هذه الخدمة. يحتوي مسار definitions على الملفات التي تقوم بالإعلان عن الموارد المستخدمة. هذا يعني أنه بإمكانك تجميع تشكيلة من الوظائف تحت عنوانٍ واحد. يصف مسار files كيف يجب لـchef أن يقوم بتوزيع الملفات عبر العقدة التي يتم نشر كتاب الوصفات هذا عليها. يحتوي مسار recipes على الوصفات التي تقوم بتعريف كيف يجب أن يتم ضبط الخدمات. بشكلٍ عام، الخدمات هي عبارة عن ملفات صغيرة تقوم بضبط أمورٍ معينة ضمنَ النظام الأكبر. إذا كان يتم استخدام كتب وصفات لتثبيت وضبط خادوم ويب، فحينها فالوصفات يمكن أن تُستخدم لتفعيل وحدات إضافية أو لتثبيت جدار ناري افتراضي. يتم استخدام مسار templates لتوفير إدارة أكثر تطورًا وتعقيدًا للإعدادات. يمكنك توفير ملفات إعداد كاملة تحتوي بداخلها على أوامر روبي مضمّنة. يمكنك تعريف المتغيرات التي يتم طباعتها في ملفاتٍ أخرى كذلك. الخاتمةقد لا يكون هذا المقال مُساعدًا لك في كتابة إعدادات Chef الخاصة بك، إلّا أنه يجب أن يعطيكَ لمحةً عامة حول ماهية المكونات المستقلة التي تعمل ضمنَ بيئة نشر معقّدة. بمجرد أن تبدأ بفهم كيفية عمل العقد والخواديم ومحطات العمل بتناسق تامٍ فيما بينها فستكون قادرًا على إيجاد طريقك إلى chef-repo، يمكنك أن تبدأ بفهم كيفية عمل بعض كتب الوصفات المتوفرة. ترجمة -وبتصرّف- للمقال How To Understand the Chef Configuration Environment on a VPS
  13. ما هو CoreOS ؟CoreOS هي توزيعة لينكس ممتازة أُنشئَت لجعل الأنظمة المنشورة deployments الكبيرة والقابلة للتحجيم على مُختلف البنى التحتية سهلة الإدارة والاستخدام . مُشتقة من نظام Chrome OS. تحتوي CoreOS على نظام إدارة خواديم خفيف وتستخدم حاويات Docker لاحتواء جميع التطبيقات الموجودة. هذا النظام يوفر إمكانية عزل العمليات عن بعضها البعض process isolation بالإضافة إلى توفير إمكانية تمرير التطبيقات عبر العنقود cluster بسهولة. لإدارة هذه العناقيد، تستخدم CoreOS مَخزَنَ قيم مفاتيح موزّع على المستوى العام للنظام (globally distributed key-value store) يُدعى etcd لتمرير الإعدادات بين العقد nodes، هذا المُكون هو أيضًا عبارة عن المنصة التي يتم استخدامها لاكتشاف الخدمات، مما يسمح للتطبيقات أن يتم إعدادها ديناميكيًا بناءً على المعلومات المتوفرة عبر الموارد المُشتركة. لكي يتم جدولة وإدارة التطبيقات عبر العنقود ككلّ، يتم استخدام أداة تُدعى "fleet”, أداة fleet تخدم كنظام تهيئة أولي init system على امتداد العنقود بأكمله، يُمكن استخدامها لإدارة العمليات داخل العنقود بأكمله. هذا يسهل عملية إعداد التطبيقات عالية التوفر (highly available applications) وإدارة العنقود من مكان واحد. أداة Fleet تفعل ذلك عبر الارتباط بكل نظام systemd موجود داخل كل عقدة محلية منفصلة. في هذا الدليل، سنعرّفك على بعض المفاهيم الأساسية حولCoreOS بالإضافة إلى تقديم كل واحدٍ من المكونات الداخلية التي تقوم بالسماح للنظام أن يعمل. تصميم النظامالتصميم العام لـCoreOS يجعلها موجهةً نحو عمل العناقيد والحاويات. النظام المضيف الرئيسي بسيط للغاية ويتخلى عن العديد من المزايا التقليدية للخواديم العادية. في الواقع، CoreOS لا تمتلك نظام إدارة حزم حتّى. عوضًا عن هذا جميع التطبيقات الإضافية يتم تشغيلها كحاويات Docker، وهو الأمر الذي يسمح بعزل الخدمات وإدارتها خارجيًا بالإضافة إلى جعلها محمولة (portable). عند الإقلاع، تقرأ CoreOS ملف إعداد يتم إنشاؤه بواسطة المستخدم يُدعى "cloud-config” لتنفيذ بعض الإعدادات الأولية. هذا الملف يسمح لـCoreOS أن تتصل بالعقد الأخرى ضمن العنقود وأن تبدأ الخدمات الأساسية بالإضافة إلى إعادة ضبط بعض المُعامِلات (parameters) المهمة. بفضل هذا تصبح CoreOS قادرة على الانضمام لأي عنقود كوحدة عاملة مباشرةً بعد الإنشاء. عادةً، ملف "cloud-config” سيقوم في أدنى الأحوال بإخبار المُضِيف عن كيفية ضمّ عنقود موجود بالفعل، بالإضافة إلى أنه سيأمر المُضِيف ببدء عمليتين هما etcd و fleet. كل هذه الإجراءات الثلاثة مرتبطة ببعضها البعض فعليًا حيث أنها تسمح للمُضِيف الجديد أن يتصل مع الخواديم الموجودة ويوفر الأدوات الضرورية لضبط وإدارة كل عقدة داخل العنقود. بشكل أساسي، هذه هي المتطلبات اللازمة لربط عقدة تعمل بتوزيعةCoreOS بأي عنقود. يتم استخدام عفريت (daemon) etcd لتخزين وتوزيع البيانات لكل جهازٍ مضيف داخل العنقود. هذا مفيد لضمان توافق الإعدادات بين الأجهزة، كما أنه يمكن استخدامه كمنصة تستخدمها الخدمات للإعلان عن نفسها. آلية اكتشاف الخدمات هذه يمكن أن يتم استخدامها أيضًا من قبل خدمات أخرى للاستعلام عن المعلومات بهدف ضبط خصائص إعدادات تلك الخدمات عفريت fleet هو عبارة عن نظام تهيئة أولي موزّع (distributed init system). يقوم بعمله عن طريق الارتباط بنظام التهيئة الأولي systemd في كل جهازٍ مستقل داخل عنقود. وهو يقوم أيضًا بجدولة الخدمات عبر تقييد الأهداف التي يتم إليها نشر الأنظمة المنشورة (deployments) بناءً على مُدخلَات المستخدم. يمكن للمستخدمين معاملة العنقود بأكمله كوحدة واحدة باستخدام fleet عوضًا عن الحاجة للقلق حول كل خادومٍ بمفرده. بما أنّه أصبحت لديك الآن فكرة عامة عن النظام ككلّ، فسنتعمق بالقليل من التفصيل حول دورِ كلِّ مكونٍ من هذه المكونات. لمحة عامة على DockerDocker هو نظام حاويات يستخدم LXC (يُعرف أيضًا باسم "Linux containers") ويستخدم فضاء تسمية النواة (kernel namespacing) بالإضافة إلى cgroups (اختصار لـ"مجموعات التحكم") بهدف عزل العمليات عن بعضها البعض. عملية العزل تساعد على إبقاء البيئة التشغيلية للتطبيق نظيفة ومرتّبة. ميزة من ميزات هذا النظام هي أنه يجعل عملية توزيع البرمجيات لا تحتاج أيّ جهدٍ يذكر لفعلها. أيّ حاوية Docker يمكن أن يتم تشغيلها على أي منصة بغض النظر تمامًا عن البيئة التي تشغّلها. هذا يعني أنّ حاويةً تم بناءها على جهازٍ محمول يُمكن أيضًا أن يتم تشغيلها بسلاسة على عنقود يعمل على مستوى مراكز إدارة البيانات (data centers). يسمح لك Docker بأن تقوم بتوزيع أيّ بيئة عمل للبرمجيات مع كلّ الاعتماديات الضرورية. حاويات Docker يمكن أن يتم تشغيلها جنبًا بجنب مع حاويات أخرى، ولكنها ستعمل كخواديم منفصلة. ميزة حاويات Docker التي تتفوق بها على الحوسبة التخيلية (virtualization) هي أنّ Docker لا يحاول العمل على محاكاة نظام التشغيل بأكمله، بل فقط يقوم بتضمين المكونات الضرورية لجعل التطبيق المطلوب يعمل. بسبب هذا يمتلك Docker العديد من ميزات الحوسبة التخيلية، ولكن دون الحاجة إلى تكلفة الموارد العالية. CoreOS تقوم بالاستفادة إلى أقصى حدود من حاويات Docker عبر استخدامها لأي تطبيق خارج مجموعة الحزم الضرورية لعملية التثبيت. هذا يعني أنه تقريبًا يجب أن يتم تشغيل كل شيء داخل حاوية. في حين أنّ هذا النظام يبدو أنه سيكون مُجهِدًا للتعامل معه في البداية، إلّا أنه يجعل عملية مزامنة العناقيد أسهل بكثير. CoreOS مُصممة بشكل أساسي ليتم تضمينها على مستوى العناقيد (مجموعة الخواديم المرتبطة ببعضها البعض وكل واحدٍ منها يُشكل عقدة)، وليس على مستوى الخواديم المنفصلة العادية. هذا يجعل عملية توزيع الخدمات ونشرها أمرًا سهلًا باستخدام CoreOS. الأدوات والخدمات الموجودة ستسمح لك أنّ تقوم بتشغيل العمليات التي تريدها على أيٍّ من العُقد التي تمتلكها داخل العناقيد. Docker يسمح لهذه الخدمات والمهام أن يتم توزيعها كقطع داخلية الاحتواء عوضًا عن تطبيقات عادية يجب تثبيتها وضبطها على كلٍ عقدة بشكل منفصل. لمحة عامة على Etcdطُوّر etcd بشكل أساسي بهدف توفير مجموعة متوافقة من البيانات على المستوى العام لكلِ واحدٍ من العُقد داخل العنقود، بالإضافة إلى تمكين عملية اكتشاف الخدمات داخل العُقد. خدمة etcd هي عبارة عن مخزنّ عالي التوفر لتخزين قيم مفاتيح يُمكن استخدامها بواسطة كل عقدة للحصول على بيانات الإعدادات، الاستعلام عن المعلومات حول الخدمات المُشغلّة ونشر المعلومات التي يجب على العُقد الأخرى داخل شبكة العنقود معرفتها. كلّ عقدة تقوم بتشغيل عميل etcd الخاص بها وهؤلاء العملاء مرتبطون جميعهم ببعضهم البعض داخل شبكة العنقود العامة لمشاركة وتوزيع المعلومات. التطبيقات التي تطلب الحصول على المعلومات من المخزن عليها بكل بساطة أن تتصل بواجهة etcd على نفس الآلة المحلية التي يعمل عليها التطبيق. كل بيانات etcd ستصبح متوفر في كل كل العُقد المنفصلة، بغض النظر عن مكان تخزينها الفعلي، وكل قيمة مُخزّنة بالمخزن سيتم توزيعها ونسخها تلقائيًا داخل العنقود بأكمله. عميلة اختيار العقدة الرئيسية من بين العقد أيضًا سيتم التكفل بها تلقائيًا، مما يجعل عملية إدارة المفاتيح المخزّنة بسيطة وسهلة للغاية. للتفاعل مع البيانات في etcd، عليك بكل بساطة استخدم واجهة HTTP/JSON البرمجية البسيطة (يمكنك الوصل إليها عبر http://127.0.0.1:4001/v2/keys/ افتراضيًا)، أو يمكنك استخدام أداة موجودة بالفعل تُدعى etcdctl لقراءة البيانات. كلا الطريقتين تعتبران سهلة الاستخدام للتفاعل مع البيانات الموجودة بالمخزن. من المهم الإدارك أنّ الواجهة البرمجية (API) عبر HTTP قادرة أيضًا على الوصول إلى التطبيقات التي يتم تشغيلها داخل حاويات Docker. هذا يعني أنّ إعدادات الحاويات المستقلة يمكنها أيضًا أن تضع في الحسبان القيم المخزّنة في etcd عند العمل. لمحة عامة على Fleetبهدف مزامنة عناقيد CoreOS التي تريد بناءها فعليًا، يتم استخدام أداة تدعى fleet. بسيطة التصميم والاستخدام للغاية، fleet تعمل كنظام تهيئة أولي على امتداد العنقود بأكمله. كل عقدة مستقلة داخل بيئة عنقودية تتعامل مع نظام تهيئة systemd الأولي الخاص بها. وهو ما يتم استخدامه لتشغيل وإدارة الخدمات على الآلة المحلية. بعبارةٍ أبسط، ما يفعله fleet هو توفير واجهة للتحكم بكلّ أنظمة systemd المحلية الفرعية الموجودة داخل كل عقدة في العنقود. يمكنك تشغيل وإيقاف الخدمات أو الحصول على معلومات عامة عن العمليات العاملة حاليًا على امتداد العنقود بأكمله، fleet يقوم بعمل بضع أمور هامة لجعل هذه العملية أسهل على المستخدم حيث يتحكم بآلية توزيع العمليات ليتمكن من تشغيل الخدمات على الأجهزة المُضيفة الأقل انشغالًا. يمكنك أيضًا تحديد شروط وضع الخدمات التي تشغلها. يمكنك أن تفرض على خدمة معينة أن تعمل أو ألّا تعمل على جهاز مُضيف معين اعتمادًا على مكانه أو ما يقوم الجهاز المُضيف فعلًا بتشغيله حاليًا والمزيد. بسبب أنّ fleet يستخدم إمكانيات systemd إلى أقصى الحدود لبدء العمليات المحلية فإنّ كل واحدٍ من الملفات المُختصة بتعريف الخدمات هي في الواقع وحدات لـsystemd (مع بضع خيارات إضافية). يمكنك تمرير ملفات الإعدادات هذه إلى fleet مرة واحدة فقط وبعدها يمكنك إدارتها للعنقود بأكمله. هذه المرونة تجعل عملية إنشاء إعدادات عالية التوفر (highly available configurations) سهلة للغاية. مثلًا يمكنك أن تطلب أن يتم نشر حاويات خادوم الوب الخاص بك على عُقد (nodes) مختلفة. ويمكنك أيضًا أن تقوم بنشر حاوية مُساعدة فقط في العُقد التي تقوم بتشغيل الحاوية الأمّ. يمكن استخدام أي عقدة من مجموعة العُقد لإدارة العنقود بأكمله باستخدام أداة fleetctl. هذا يسمح لك بجدولة الخدمات وإدارة العُقد ومشاهدة حالة النظام العامة والمزيد.. برنامج fleetctl سيكون أيضًا واجهتك الرئيسية للتعامل مع العنقود الخاص بك. الخاتمةCoreOS ربما تكون مختلفة عن توزيعات لينكس الأخرى التي قد تكون ألفتَها. كل قرار من قرارات تصميم هذه التوزيعة تم اتّخاذه أخذًا بهدف إدارة العناقيد ومحمولية التطبيقات في عين الاعتبار. هذا أنتجَ توزيعةً ممتازة هدفها الرئيسي هو تلبية احتياجات البُنَى التحتية الحديثة وتحجيم التطبيقات بسهولة. ترجمة -وبتصرّف- للمقال An Introduction to CoreOS System Components
  14. مرحبًا يوغرطة، يمكنك عمل قفل (lock) على حزمة معينة لتجنب ترقيتها حتى لو توفر إصدار جديد، العملية تتم عن طريق إضافة سطر IgnorePkg لملف /etc/pacman.conf، يمكنك مراجعة الرابط التالي للتفاصيل: https://wiki.archlinux.org/index.php/pacman#Skip_package_from_being_upgraded
×
×
  • أضف...