<?xml version="1.0"?>
<rss version="2.0"><channel><title>DevOps: &#x62E;&#x648;&#x627;&#x62F;&#x64A;&#x645;</title><link>https://academy.hsoub.com/devops/servers/page/5/?d=4</link><description>DevOps: &#x62E;&#x648;&#x627;&#x62F;&#x64A;&#x645;</description><language>ar</language><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x642;&#x648;&#x645; &#x628;&#x627;&#x644;&#x646;&#x633;&#x62E; &#x627;&#x644;&#x627;&#x62D;&#x62A;&#x64A;&#x627;&#x637;&#x64A; &#x644;&#x62E;&#x627;&#x62F;&#x648;&#x645; Ubuntu &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; Bacula</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81-%D8%AA%D9%82%D9%88%D9%85-%D8%A8%D8%A7%D9%84%D9%86%D8%B3%D8%AE-%D8%A7%D9%84%D8%A7%D8%AD%D8%AA%D9%8A%D8%A7%D8%B7%D9%8A-%D9%84%D8%AE%D8%A7%D8%AF%D9%88%D9%85-ubuntu-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-bacula-r149/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_12/bacula-ubuntu-backup.png.801e17f32edb2837a8f2e64db88b191d.png" /></p>

<p>سنتعلّم في هذا الدّرس كيفيّة إعداد Bacula لإنشاء نُسَخ احتياطيّة backups لمُضيف Ubuntu عن بُعد remote وذلك عبر اتصال عن طريق الشبكة، يتضمّن هذا تثبيت وإعداد برمجيّة عميل Bacula على مُضيف عن بُعد remote host، والقيام ببعض الإضافات لإعدادات خادوم Bacula موجود حاليًّا (تمّت تغطية هذا الموضوع في فقرة المتطلبات الأساسيّة الآتي ذكرها).</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_12/bacula-ubuntu-backup.png.fc374c8efe0c19b3ddaf412693982b49.png"><img data-fileid="8317" class="ipsImage ipsImage_thumbnailed" alt="bacula-ubuntu-backup.thumb.png.44bfac32e" src="https://academy.hsoub.com/uploads/monthly_2015_12/bacula-ubuntu-backup.thumb.png.44bfac32e700fa9260264fa65049cdb0.png"></a></p><h2>المتطلبات الأساسية</h2><p>يفترض هذا الدّرس أنّك تمتلك خادوم تعمل عليه عناصر خادوم Bacula، كما هو موصوف في هذا الرّابط: <a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81-%D8%AA%D8%AB%D8%A8%D8%AA-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-bacula-%D9%84%D9%84%D9%86%D8%B3%D8%AE-%D8%A7%D9%84%D8%A7%D8%AD%D8%AA%D9%8A%D8%A7%D8%B7%D9%8A-%D8%B9%D9%84%D9%89-ubuntu-1404-r144/">كيف تثبت خادوم Bacula للنسخ الاحتياطي على Ubuntu 14.04</a>.</p><p>نفترض أيضًا أنّك تستخدم واجهات شبكة خاصّة للنسخ الاحتياطي للاتصالات بين الخادوم والعميل، سنقوم بالرجوع إلى FQDN الخاص للخواديم (حيث تُشير FQDNs إلى عناوين IP الخاصّة)، إن كنت تستخدم عناوين IP فضع معلومات الاتصال الخاصّة بك في الأماكن الملائمة.</p><p>سنقوم في بقيّة هذا الدّرس بالإشارة إلى خادوم Bacula بـ "BaculaServer"، "Bacula Server"، أو "Backup Server"، سنشير إلى المُضيف عن بُعد والذي يتم النسخ الاحتياطي له بـ "ClientHost"، "Client Host"، أو "Client".</p><p>فلنبدأ بالقيام ببعض التغييرات السريعة لإعدادات خادوم Bacula.</p><h2>تنظيم إعدادات مدير Bacula Director (الخادوم)</h2><p>نقوم على <strong>خادوم Bacula</strong> بتطبيق هذا القسم مرّة واحدة.</p><p>ربما قد لاحظت عند إعداد خادوم Bacula أنّ ملفّات الإعدادات طويلة بشكل زائد، سنحاول تنظيم إعدادات مدير Bacula قليلًا بحيث يستخدم ملفّات منفصلة لإضافة الإعدادات الجديدة مثل الوظائف jobs، مجموعات الملفّات file sets، والأحواض pools.</p><p>فلنقم بإنشاء دليل ليساعدنا على تنظيم ملفّات إعدادات Bacula:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo mkdir /etc/bacula/conf.d</pre><p>نفتح بعدها ملف إعدادات مدير Bacula:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo vi /etc/bacula/bacula-dir.conf</pre><p>نضيف هذا السطر في نهاية الملف:<code> </code></p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">@|"find /etc/bacula/conf.d -name '*.conf' -type f -exec echo @{} \;"</pre><p>نقوم بحفظ الملف والخروج منه، يُخبِر هذا السطر المدير أن يبحث في الدليل <code>/etc/bacula/conf.d</code> عن ملفّات إضافيّة للإعدادات ليقوم بإلحاقها، وهذا يعني أنّ أي ملف <code>.conf</code> تتم إضافته هنا سيتم تحميله كجزء من الإعدادات.</p><h3>إضافة حوض الملفات عن بعد RemoteFile Pool</h3><p>نريد إضافة حوض Pool إضافي لإعدادات مدير Bacula لدينا، وسنستخدمه لإعداد وظائف النسخ الاحتياطي عن بُعد.</p><p>نفتح الملف <code>conf.d/pools.conf</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo vi /etc/bacula/conf.d/pools.conf</pre><p>نضيف موارد الحوض Pool التالية:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Pool {
  Name = RemoteFile
  Pool Type = Backup
  Label Format = Remote-
  Recycle = yes                       # Bacula can automatically recycle Volumes
  AutoPrune = yes                     # Prune expired volumes
  Volume Retention = 365 days         # one year
    Maximum Volume Bytes = 50G          # Limit Volume size to something reasonable
  Maximum Volumes = 100               # Limit number of Volumes in Pool
}</pre><p>نقوم بحفظ الملف والخروج منه، يُعرِّف هذا حوض للملفّات عن بُعد "RemoteFile"، والذي سنستخدمه من قبل وظيفة النسخ الاحتياطي التي سنقوم بإنشائها لاحقًا، ولك الحريّة في تغيير أي مُعامِل بحيث يُلائم احتياجاتك.</p><p>حتى الآن لا نحتاج إلى إعادة تشغيل مدير Bacula، ولكن فلنتحقّق أنّ إعداداته لا تحتوي على أيّة أخطاء فيها:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo bacula-dir -tc /etc/bacula/bacula-dir.conf</pre><p>إن لم تكن هنالك أيّة أخطاء فنحن جاهزون للمتابعة في إعداد عميل Bacula Client.</p><h2>تثبيت وإعداد عميل Bacula</h2><p>نقوم بتنفيذ هذا القسم على أي مُضيف عميل <strong>Client Host</strong> نريد إضافته إلى إعداد Bacula.</p><p>في البداية نُحدِّث apt-get:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo apt-get update</pre><p>نثبّت بعدها الحزمة <code>bacula-client</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo apt-get install bacula-client</pre><p>يقوم هذا بتثبيت عفريت (بالإنجليزية Daemon وهو برنامج يعمل في خلفيّة النظام) ملفّات Bacula FD أي (Bacula File Daemon)، والذي عادة تتم الإشارة إليه بعميل Bacula أي "Bacula client".</p><h3>إعداد العميل</h3><p>ينبغي قبل إعداد عفريت ملفّات العميل File Daemon إيجاد المعلومات التالية، والتي سيتم استخدامها خلال هذا الدّرس:</p><ul><li><strong>اسم مضيف العميل Client hostname</strong>: سيستخدم مثالنا "ClientHost".</li><li><strong>FQDN الخاص للعميل Client Private FQDN</strong>: سنشير له بـ "client<em>private</em>FQDN"، وهو يبدو مُشابِهًا لـ <code>clienthost.private.example.com.</code></li><li><strong>اسم مضيف خادوم Bacula أي Bacula Server hostname</strong>: سيستخدم مثالنا "BackupServer".</li></ul><p>ستختلف إعداداتك الفعلية عن هذه الأمثلة، لذا تأكّد من وضع معلوماتك في الأماكن المناسبة.<br>نفتح إعدادات عفريت الملفّات File Daemon:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo vi /etc/bacula/bacula-fd.conf</pre><p>نحتاج لتغيير بعض العناصر وحفظ بعض المعلومات التي سنحتاجها لأجل إعدادات خادومنا.</p><p>نبدأ بإيجاد مورد المدير Director resource المُسمّى على اسم مضيف العميل لدينا (على سبيل المثال "ClientHost-dir")، وبما أنّ مدير Bacula الذي نريد التحكّم من خلاله بالعميل متواجد على خادوم Bacula فلنقم بتغيير مُعامِل الاسم "Name" إلى اسم المضيف لخادوم النسخ الاحتياطي لدينا متبوعًا بـ "-dir"، في مثالنا وباستخدام "BackupServer" كاسم مضيف خادوم Bacula يجب أن يبدو هذا مُشابِهًا لما يلي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Director {
  Name = BackupServer-dir
  Password = "IrIK4BHRA2o5JUvw2C_YNmBX_70oqfaUi"
}</pre><p>نحتاج أيضًا أن ننسخ المُعامِل <code>Password</code> ونحفظه من أجل العودة إليه لاحقًا، وهو عبارة عن كلمة السّر المُولَّدة تلقائيًّا والمستخدمة من أجل الاتصال إلى عفريت الملفّات File Daemon، سيتم استخدامها في إعدادات مدير خادوم النسخ الاحتياطي حيث سنقوم بتعيينها في خطوة قادمة من أجل الاتصال إلى عفريت الملفّات File Daemon الخاص بالعميل.</p><p>نحتاج بعدها إلى ضبط معامل واحد في مورد عفريت الملفّات FileDaemon، حيث سنقوم بتغيير المُعامِل <code>FDAddress</code> ليُطابِق FQDN الخاص لأجهزة عملائنا، يجب أن يكون مُسبقًا قد تم إعداد المُعامِل <code>Name</code> بشكل صحيح مع اسم عفريت الملفّات file daemon للعميل، ينبغي أن يبدو المورد مشابهًا لما يلي (قم بوضع FQDN الفعلية أو عنوان IP لديك):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">FileDaemon {                          # this is me
  Name = ClientHost-fd
  FDport = 9102                  # where we listen for the director
  WorkingDirectory = /var/lib/bacula
  Pid Directory = /var/run/bacula
  Maximum Concurrent Jobs = 20
  FDAddress = client_private_FQDN
}</pre><p>نحتاج أيضًا لضبط هذا العفريت daemon ليقوم بتمرير رسائل سجلّاته إلى خادوم النسخ الاحتياطي، نقوم بالبحث عن مورد الرسائل Messages وتغيير المُعامِل <code>director</code> ليطابق اسم مضيف خادوم النسخ الاحتياطي لدينا مع اللاحقة "-dir"، ينبغي أن يبدو مشابهًا لما يلي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Messages {
  Name = Standard
  director =  BackupServer-dir = all, !skipped, !restored
}</pre><p>نقوم بحفظ الملف والخروج منه، تم الآن إعداد عفريت الملفّات File Daemon (عميل Bacula) ليستمع للاتصالات عبر الشبكة الخاصّة.</p><p>نتحقّق من أن ملف الإعدادات يمتلك الصياغة الصحيحة باستخدام الأمر التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo bacula-fd -tc /etc/bacula/bacula-fd.conf</pre><p>إن لم يُعد الأمر أي خَرْج output فهذا يعني أنّ ملف الإعدادات يمتلك صياغة صحيحة، نعيد تشغيل عفريت الملفّات File Daemon ليستخدم الإعدادات الجديدة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service bacula-fd restart</pre><p>فلنقم بإعداد دليل يستطيع خادوم Bacula استعادة الملفّات إليه، نقوم بإنشاء بنية الملفّات وحصر الصلاحيّات والملكيّة لأجل الأمان عن طريق الأوامر التالية:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo mkdir -p /bacula/restore
sudo chown -R bacula:bacula /bacula
sudo chmod -R 700 /bacula</pre><p>تمّ الآن إعداد جهاز العميل بشكل صحيح، سنقوم بعدها بضبط خادوم النسخ الاحتياطي ليكون قادرًا على الاتصال إلى عميل Bacula.</p><h2>إضافة مجموعات الملفات FileSets (الخادوم)</h2><p>تُعرِّف Bacula FileSet مجموعة من الملفّات أو الأدلة التي يتم تضمينها أو استثناؤها من اختيار النسخ الاحتياطي، ويتم استخدامها من قبل وظائف النسخ الاحتياطي على خادوم Bacula.</p><p>إن اتبعت الدّرس الموجود في المتطلّبات الأساسيّة والذي يقوم بإعداد عناصر خادوم Bacula فأنت تمتلك مسبقًا مجموعة ملفّات FileSet تُدعى "Full Set"، إن كنت تريد تشغيل وظائف نسخ احتياطي تتضمّن كل ملف على جهاز العميل لديك فتستطيع استخدام مجموعة الملفّات FileSet هذه في وظائفك، ومع ذلك ربّما تجد غالبًا أنّك لا تريد ولا تحتاج امتلاك نسخة احتياطية لكل شيء على الخادوم، وبهذا تكفيك مجموعة فرعيّة من البيانات.</p><p>عندما تكون أكثر انتقائيّة في اختيار الملفّات التي تريد تضمينها في مجموعة الملفّات FileSet ستوفّر من مساحة القرص لديك وتوفّر من الوقت الذي يحتاجه خادوم النسخ الاحتياطي للقيام بوظيفة نسخ احتياطي، وستجعل عمليّة استعادة الملفّات أبسط حيث لن يتوجب عليك البحث في مجموعة كاملة "Full Set" لإيجاد الملفّات التي تريد استعادتها.</p><p>سنشرح كيفيّة إنشاء موارد مجموعة ملفّات FileSet جديدة، بحيث تستطيع أن تكون أكثر انتقائية فيما تريد نسخه احتياطيًّا.</p><p>على خادوم Bacula نفتح الملف الذي يُدعى <code>filesets.conf</code> الموجود في دليل إعدادات مدير Bacula الذي أنشأناه:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo vi /etc/bacula/conf.d/filesets.conf</pre><p>نقوم بإنشاء مورد مجموعة ملفّات FileSet لكل مجموعة محدّدة من الملفّات التي نريد استخدامها في وظائف النسخ الاحتياطي، سننشئ في هذا المثال مجموعة ملفّات FileSet تشمل فقط الدليل الرئيسي home والدليل etc:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">FileSet {
  Name = "Home and Etc"
  Include {
    Options {
      signature = MD5
      compression = GZIP
    }
    File = /home
    File = /etc
  }
  Exclude {
    File = /home/bacula/not_important
  }
}</pre><p>هنالك الكثير من الأشياء التي تحدث في هذا الملف ولكن هذه بعض التفاصيل التي يجب أن تبقى في ذهننا:</p><ul><li>يجب أن يكون اسم مجموعة الملفّات FileSet فريدًا</li><li>تضمين أي ملفّات أو أقراص نريد الحصول على نسخ احتياطيّة لها</li><li>استثناء أي ملفّات لا نريد النسخ الاحتياطي لها ولكن تمّ اختيارها نتيجة وجودها بداخل ملفّات مُضمَّنة</li></ul><p>نستطيع إنشاء العديد من مجموعات الملفّات FileSets إن كنّا نرغب بذلك، نقوم بالحفظ والخروج بعد الانتهاء.<br>نحن الآن مستعدون لإنشاء وظيفة نسخ احتياطي تستخدم مجموعة ملفّاتنا الجديدة.</p><h2>إضافة عميل Client ووظيفة نسخ احتياطي Backup Job إلى خادوم Bacula</h2><p>نحن الآن جاهزون لإضافة عميلنا إلى خادوم Bacula، ولعمل هذا يجب علينا إعداد مدير Bacula مع موارد العميل والوظيفة الجديدة.</p><p>نفتح الملف <code>conf.d/clients.conf</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo vi /etc/bacula/conf.d/clients.conf</pre><h3>1. إضافة مورد عميل Client Resource</h3><p>يقوم مورد العميل بضبط المدير Director مع المعلومات التي يحتاجها للاتصال إلى مضيف العميل، يتضمّن هذا الاسم، العنوان، وكلمة السّر لعفريت ملفّات العميل Client File Daemon.</p><p>نقوم بلصق التعريف التالي لمورد العميل إلى ذلك الملف، تأكد من أن تضع اسم مضيف العميل لديك، FQDN الخاص، وكلمة السّر (من ملف العميل <code>bacula-fd.conf</code>):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Client {
  Name = ClientHost-fd
  Address = client_private_FQDN
  FDPort = 9102 
  Catalog = MyCatalog
  Password = "IrIK4BHRA2o5JUvw2C_YNmBX_70oqfaUi"          # password for Remote FileDaemon
  File Retention = 30 days            # 30 days
  Job Retention = 6 months            # six months
  AutoPrune = yes                     # Prune expired Jobs/Files
}</pre><p>نحتاج لعمل هذا مرّة واحدة فقط لكل عميل.</p><h3>2. إنشاء وظيفة نسخ احتياطي backup job</h3><p>تُعرِّف وظيفة النسخ الاحتياطي backup job تفاصيل حول العميل والبيانات التي يجب عمل نسخ احتياطي لها، ويجب أن يملك اسمًا فريدًا.</p><p>نلصق وظيفة النسخ الاحتياطي التالية إلى الملف، مع وضع اسم مضيف العميل لدينا بدلًا من كلمة ClientHost:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Job {
  Name = "BackupClientHost"
  JobDefs = "DefaultJob"
  Client = ClientHost-fd
  Pool = RemoteFile
  FileSet="Home and Etc"
}</pre><p>يقوم هذا بإنشاء وظيفة نسخ احتياطي تُدعى "BackupClientHost" والتي تقوم بإنشاء نسخة احتياطيّة للدليلين home وetc من مضيف العميل، كما هو مُعرَّف في مجموعة الملفّات FileSet التي تُدعى "Home and Etc"، ستستخدم هذه الوظيفة الإعدادات المُحدّدة في تعريف الوظائف JobDefs الذي يُدعى "DefaultJob" وموارد الحوض Pool الذي يُدعى "RemoteFile"، وكلاهما مُعرَّف في الملف الرئيسي <code>bacula-dir.conf</code>، الوظائف التي تُحدِّد <code>JobDefs = "DefaultJob"</code> يتم تشغيلها أسبوعيًّا بشكل افتراضي.</p><p>عند الانتهاء نحفظ الملف ونخرج منه.</p><h3>3. التحقق من إعدادات المدير Director</h3><p>فلنتحقّق من عدم وجود أخطاء صياغة في ملف إعدادات المدير لدينا:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo bacula-dir -tc /etc/bacula/bacula-dir.conf</pre><p>إن تمّت إعادتنا إلى مُحث الصدفة shell prompt فهذا يعني أنّه لا توجد أخطاء صياغة في ملفّات إعدادات مدير Bacula.</p><h3>4. إعادة تشغيل مدير Bacula</h3><p>ولتطبيق التغييرات التي قمنا بها نعيد تشغيل مدير Bacula:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service bacula-director restart</pre><p>يكون العميل أو المضيف عن بعد مُعدًّا الآن ليتم نسخه احتياطيًّا عن طريق خادوم Bacula.</p><h2>اختبار اتصال العميل</h2><p>ينبغي أن نتحقّق من قدرة مدير Bacula على الاتصال بعميل Bacula.</p><p>ندخل إلى Bacula Console على خادوم Bacula:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo bconsole

Select Client resource: ClientHost-fd
The defined Client resources are:
     1: BackupServer-fd
     2: ClientHost-fd
Select Client (File daemon) resource (1-2): 2</pre><p>ينبغي أن تعود إلينا حالة عفريت ملفّات العميل Client File Daemon، وإن لم يحدث ذلك ووجد خطأ بالاتصال فهنالك مشكلة ما في إعدادات خادوم Bacula أو عفريت ملفّات العميل Client File Daemon.</p><h2>اختبار وظيفة النسخ الاحتياطي</h2><p>فلنقم بتشغيل وظيفة النسخ الاحتياطي للتأكد من أنّها تعمل.</p><p>نستخدم هذا الأمر على <strong>خادوم Bacula</strong> من خلال الـ Console:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">run</pre><p>سيتم حثّنا على اختيار الوظيفة التي نريد تشغيلها، نختار الوظيفة التي أنشأناها سابقًا (في مثالنا "4. BackupClientHost"):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Select Job resource: BackupClientHost
The defined Job resources are:
     1: BackupLocalFiles
     2: BackupCatalog
     3: RestoreLocalFiles
     4: BackupClientHost
Select Job resource (1-4): 4</pre><p>وفي مُحث prompt التأكيد نختار "yes":</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Confirmation prompt:
OK to run? (yes/mod/no): yes</pre><h3>التحقق من الرسائل والحالة</h3><p>سيخبرنا Bacula بعد تشغيل الوظيفة أنّنا نمتلك رسائل، وهي عبارة عن خَرْج تمّ توليده من قبل الوظائف قيد التشغيل.</p><p>نتحقّق من الرسائل بكتابة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">messages</pre><p>ينبغي أن تخبرنا الرسائل أنّه لم يتم إيجاد تسجيل لوظيفة نسخ احتياطي كامل سابقة "No prior Full backup Job record found" وأنّه بدأت وظيفة النسخ الاحتياطي لدينا، إن وُجِدَت أيّة أخطاء أخرى فهناك خطأ ما ويجب أن تعطيك هذه الأخطاء تلميحًا عن سبب عدم عمل الوظيفة.</p><p>ومن الطرق الأخرى لرؤية حالة الوظيفة هي التحقّق من حالة المدير Director، ولعمل هذا نكتب الأمر التالي في bacula console:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">status director</pre><p>إن كان كل شيء على ما يرام فينبغي أن نرى أنّ وظيفتنا قيد التشغيل أو تمّت مقاطعتها بحالة "OK".</p><h2>القيام باستعادة ملفات Restore</h2><p>يجب أن نختبر في المرّة الأولى لإعداد عميل Bacula جديد أنّ استعادة الملفّات تعمل بشكل صحيح.</p><p>إن أردنا القيام باستعادة ملفّات نستخدم الأمر <code>restore</code> في Bacula Console:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">restore all</pre><p>ستظهر قائمة للاختيار مع العديد من الخيارات المختلفة، والتي تُستخدم لتحديد مجموعة النسخ الاحتياطي التي نريد الاستعادة منها، وبما أنّنا نملك نسخة احتياطيّة واحدة فقط سنختار الخيار 5 وهو اختيار أحدث نسخة احتياطيّة "Select the most recent backup":</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Select item (1-13):
5</pre><p>يجب بعدها أن نحدّد العميل الذي نريد الاستعادة إليه، نريد الاستعادة للمضيف عن بعد الذي قمنا بإعداده للتو، وهو في مثالنا "ClientHost-fd":</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Select the Client: ClientHost-fd
Defined Clients:
     1: BackupServer-fd
     2: ClientHost-fd
Select the Client (1-2): 2</pre><p>ستُعرَض الآن لنا شجرة ملفّات افتراضية مع كامل بنية الدليل الذي قمنا بالنسخ الاحتياطي له، تسمح هذه الواجهة المشابهة لواجهة الصدفة shell للأوامر البسيطة بتحديد وإلغاء تحديد الملفّات التي نريد استعادتها.</p><p>ولأنّنا حدّدنا أنّنا نريد استعادة كافّة الملفّات "restore all"، فجميع الملفّات الموجودة في النسخة الاحتياطيّة مُحدّدة لاستعادتها، الملفّات المحدّدة مسبوقة بالحرف <code>*</code>.</p><p>ولتحسين اختيار الملفّات، نستطيع التصفّح وسرد الملفّات باستخدام الأمرين "ls" و"cd"، تحديد الملفّات باستخدام الأمر "mark"، وإلغاء تحديد الملفّات باستخدام الأمر "unmark"، وتوجد قائمة من الأوامر متاحة بكتابة "help" في الـ console.</p><p>عند الانتهاء من اختيار الملفّات التي نريد استعادتها نتابع بكتابة ما يلي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">done</pre><p>نقوم بتأكيد أنّنا نرغب بتنفيذ وظيفة الاستعادة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">OK to run? (yes/mod/no):
yes</pre><h3>التحقق من الرسائل والحالة</h3><p>يجب علينا التحقّق من الرسائل وحالة المدير بعد تشغيل وظيفة استعادة الملفّات، كما هو الحال مع وظيفة النسخ الاحتياطي.</p><p>نتحقّق من الرسائل بكتابة ما يلي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">messages</pre><p>ينبغي أن نجد رسالة تخبرنا أنّ وظيفة استعادة الملفّات قد بدأت أو تمّت مقاطعتها بحالة "Restore OK"، إن وُجِدَت أيّة أخطاء أخرى فهناك خطأ ما ويجب أن تعطيك هذه الأخطاء تلميحًا عن سبب عدم عمل الوظيفة.</p><p>وكما وجدنا سابقَا فإنّ التحقّق من حالة المدير هو طريقة رائعة لنرى حالة وظيفة استعادة الملفّات:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">status director</pre><p>عند الانتهاء من استعادة الملفّات نكتب <code>exit</code> لمغادرة Bacula Console:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">exit</pre><p>إن سار كل شيء على ما يرام فسنجد الملفّات التي تمّت استعادتها على مضيف العميل في الدليل <code>/bacula/restore</code>، إن كنت فقط تختبر عمليّة استعادة الملفّات فاحذف محتويات هذا الدليل.</p><h2>الخاتمة</h2><p>تمتلك الآن خادوم Bacula يقوم بالنسخ الاحتياطي للملفّات من عميل Bacula عن بعد، تأكّد من أن تراجع إعداداتك حتى تصبح متأكدًا من أنّك تقوم بالنسخ الاحتياطي لمجموعة الملفّات FileSets الصحيحة، وبجدول ملائم لاحتياجاتك.</p><p>الخطوة القادمة التي يجب فعلها هي أن تعيد الخطوات السابقة من أجل خواديم Ubuntu الإضافية التي تريد عمل نسخ احتياطي لها.</p><p>ترجمة -وبتصرّف- لـ <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14-04-server-with-bacula">How To Back Up an Ubuntu 14.04 Server with Bacula</a> لصاحبه Mitchell Anicas.</p>
]]></description><guid isPermaLink="false">149</guid><pubDate>Wed, 02 Dec 2015 22:21:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x62A;&#x62B;&#x628;&#x64A;&#x62A; &#x634;&#x647;&#x627;&#x62F;&#x629; SSL &#x645;&#x646; &#x633;&#x644;&#x637;&#x629; &#x634;&#x647;&#x627;&#x62F;&#x627;&#x62A; &#x62A;&#x62C;&#x627;&#x631;&#x64A;&#x629;: &#x627;&#x644;&#x62D;&#x635;&#x648;&#x644; &#x639;&#x644;&#x649; &#x627;&#x644;&#x634;&#x647;&#x627;&#x62F;&#x629; &#x648;&#x62A;&#x62B;&#x628;&#x64A;&#x62A;&#x647;&#x627;</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%B4%D9%87%D8%A7%D8%AF%D8%A9-ssl-%D9%85%D9%86-%D8%B3%D9%84%D8%B7%D8%A9-%D8%B4%D9%87%D8%A7%D8%AF%D8%A7%D8%AA-%D8%AA%D8%AC%D8%A7%D8%B1%D9%8A%D8%A9-%D8%A7%D9%84%D8%AD%D8%B5%D9%88%D9%84-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%B4%D9%87%D8%A7%D8%AF%D8%A9-%D9%88%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA%D9%87%D8%A7-r148/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_11/ssl-setup.png.22c3a4ce266fc9c971998451f7f6843b.png" /></p>

<p dir="rtl">سنتعلّم في هذا الدّرس كيفيّة الحصول على<a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%B4%D9%87%D8%A7%D8%AF%D8%A9-ssl-%D9%85%D9%86-%D8%B3%D9%84%D8%B7%D8%A9-%D8%B4%D9%87%D8%A7%D8%AF%D8%A7%D8%AA-%D8%AA%D8%AC%D8%A7%D8%B1%D9%8A%D8%A9-%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-r146/"> شهادة SSL من سلطة شهادات تجاريّة (Commercial Certificate Authority (CA</a> وكيفيّة تثبيتها، تسمح شهادات SSL لخواديم الويب بتشفير حركة مرور بياناتها traffic وتُوفِّر آليّة للتحقّق من هويّات الخواديم من أجل الزوّار، إنّ الميزة الأساسيّة لشراء شهادة SSL من سلطة شهادات تجاريّة (CA) موثوقة عن الشهادات المُوقَّعة ذاتيًّا self-signed أنّه لن يتم عرض تحذير مُخيف للزوّار حول عدم القدرة على التحقّق من هويّة موقعنا.</p><p dir="rtl" style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/ssl-setup.png.408a59da2229998aff683113db7a274d.png"><img data-fileid="8156" class="ipsImage ipsImage_thumbnailed" alt="ssl-setup.thumb.png.5d10ce43d5d715e42d36" src="https://academy.hsoub.com/uploads/monthly_2015_11/ssl-setup.thumb.png.5d10ce43d5d715e42d36ba1c24a72239.png"></a></p><p dir="rtl">يغطّي هذا الدرس كيفيّة الحصول على شهادة SSL من سلطات الشهادات الموثوقة التالية:</p><ul dir="rtl"><li>GoDaddy</li><li>RapidSSL via Namecheap</li></ul><p dir="rtl">بإمكانك أيضًا استخدام أي سلطة شهادات CA من اختيارك.</p><p dir="rtl">سنشرح بعد أن حصلنا على شهادة SSL كيفيّة تثبيتها على خواديم ويب Nginx و Apache HTTP.</p><p dir="rtl">سنشاهد في هذا الدّرس كيفيّة الحصول على شهادة SSL مُفردة النطاق أو wildcard من GoDaddy وRapidSSL، ولكنّ الحصول على الأنواع الأخرى من الشهادات مماثل تمامًا.</p><h2 dir="rtl">توليد CSR ومفتاح خاص Private Key</h2><p dir="rtl">بعد أن تقوم بتجهيز المتطلبات الأساسيّة وتختار نوع الشهادة التي نريد الحصول عليها، تحتاج لتوليد طلب توقيع الشهادة (certificate signing request (CSR ومفتاح خاص private key.</p><p dir="rtl">إن كنت تخطّط لاستخدام Apache HTTP أو Nginx كخادوم ويب لديك فاستخدم <strong>openssl</strong> لتوليد CSR ومفتاحك الخاص على خادومك الويب، سنبقي في هذا الدّرس كافّة الملفات المرتبطة بهذا في الدليل الرئيسي home directory ولكن لا تتردد في تخزينها في أي موقع آمن على خادومك:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">cd ~</pre><p dir="rtl">نقوم بتنفيذ هذا الأمر لتوليد مفتاح خاص يُدعى <span style="font-family:courier new,courier,monospace;">example.com.key</span> و CSR يُدعى <span style="font-family:courier new,courier,monospace;">example.com.csr</span> (ضع اسم نطاقك بدلًا من <span style="font-family:courier new,courier,monospace;">example.com</span>):</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">openssl req -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr</pre><p dir="rtl">عند هذه النقطة سيتم حثنا على إدخال عدّة أسطر من المعلومات تُضمَّن في طلب شهادتنا، إنّ الجزء الأهم منها هو حقل الاسم الشائع Common Name والذي يجب أن يُطابق الاسم الذي نرغب باستخدام الشهادة معه، على سبيل المثال <span style="font-family:courier new,courier,monospace;">example.com </span>،w<span style="font-family:courier new,courier,monospace;">ww.example.com</span>، أو (بالنسبة لطلب شهادة wildcard) <span style="font-family:courier new,courier,monospace;">*.example.com</span>، إن كنت تُخطّط للحصول على شهادة OV أو EV فتأكّد من أن تتوافق كافّة الحقول الأخرى بدقة مع بيانات منظمتك أو عملك.</p><p dir="rtl">على سبيل المثال:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">Country Name (2 letter code) [AU]:US
State or Province Name (full name) [Some-State]:New York
Locality Name (eg, city) []:New York
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Company
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:sammy@example.com</pre><p dir="rtl">سيقوم هذا بتوليد ملفات <span style="font-family:courier new,courier,monospace;">key.</span> و <span style="font-family:courier new,courier,monospace;">csr.</span>، حيث يكون الملف <span style="font-family: 'courier new', courier, monospace; line-height: 24.8889px;">key.</span> هو مفتاحنا الخاص ويجب أن نبقيه في مكان آمن، والملف <span style="font-family: 'courier new', courier, monospace; line-height: 24.8889px;">csr.</span> هو الذي يجب أن نرسله إلى سلطة الشهادات لطلب شهادة SSL.</p><p dir="rtl">نحتاج إلى نسخ ولصق CSR الخاصّة بنا عند تقديم طلب الشهادة إلى سلطة الشهادات، نستخدم هذا الأمر لطباعة محتويات ملف <span style="font-family:courier new,courier,monospace;">CSR</span> لدينا (ضع اسم ملفّك بدلًا من التالي):</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">cat example.com.csr</pre><p dir="rtl">نحن الآن مستعدون لشراء شهادة من سلطة الشهادات، سنعرض هنا مثالين، GoDaddy و RapidSSL عبر Namecheap، ولكن لك الحرية بالحصول على الشهادة من أي بائع آخر.</p><h2 dir="rtl">مثال سلطة الشهادات الأول: RapidSSL via Namecheap</h2><p dir="rtl">توفّر Namecheap طريقة لشراء شهادات SSL من مجموعة متنوعة من سلطات الشهادات، سنشرح عمليّة الحصول على شهادة نطاق مُفرَد من RapidSSL، ولكن إن أردت نوعًا مختلفًا من الشهادات فبإمكانك فعل ذلك.</p><p dir="rtl"><strong>ملاحظة:</strong> إن طلبنا شهادة نطاق مُفرَد من RapidSSL من أجل النطاق الفرعي www لنطاقنا (على سبيل المثال <span style="font-family:courier new,courier,monospace;">www.example.com</span>) فسيقومون بإصدار الشهادة لنا مع SAN لنطاقنا الأساسي، فإن كان طلب شهادتنا على سبيل المثال من أجل <span style="font-family:courier new,courier,monospace;">www.example.com</span> فستعمل الشهادة الصادرة من أجل <span style="font-family:courier new,courier,monospace;">www.example.com</span> و <span style="font-family:courier new,courier,monospace;">example.com</span>.</p><h3 dir="rtl">اختيار وشراء الشهادة</h3><p dir="rtl">نذهب إلى صفحة <a rel="external nofollow" href="https://www.namecheap.com/security/ssl-certificates.aspx">Namecheap لشهادات SSL </a>.</p><p dir="rtl">نستطيع هنا البدء في اختيار مستوى التحقّق، نوع الشهادة ("Domains Secured") أو ("CA Brand").</p><p dir="rtl">سنضغط في مثالنا على زر مقارنة المنتجات <strong>Compare Products</strong> في مربّع التحقّق من النطاق "Domain Validation"، بعدها نستطيع إيجاد "RapidSSL" والضغط على زر إضافة إلى السلّة <strong>Add to Cart</strong>.</p><p dir="rtl">عند هذه النقطة يجب علينا التسجيل في Namecheap أو تسجيل الدخول إليه، وإنهاء عمليّة الدفع.</p><h3 dir="rtl">طلب الشهادة</h3><p dir="rtl">نذهب بعد أن دفعنا من أجل الشهادة التي اخترناها إلى الرابط <strong>Manage SSL Certificates</strong> الموجود تحت القسم "Hi Username".</p><p dir="rtl" style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/img01.png.e75bc59f916c6a626b7271304659c944.png"><img data-fileid="8152" class="ipsImage ipsImage_thumbnailed" alt="img01.thumb.png.bf388cc09b57c08e8706a9bd" src="https://academy.hsoub.com/uploads/monthly_2015_11/img01.thumb.png.bf388cc09b57c08e8706a9bdf7835b3c.png"></a></p><p dir="rtl">سنشاهد هنا قائمة بكامل شهادات SSL التي اشتريناها عبر Namecheap، نضغط على رابط التفعيل الآن <strong>Activate Now</strong> من أجل الشهادة التي نريد استخدامها.</p><p dir="rtl" style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/img02.png.839d3146bc7db1b05955a1a53b126013.png"><img data-fileid="8153" class="ipsImage ipsImage_thumbnailed" alt="img02.thumb.png.ed1dda51f3c03bbff5761c5b" src="https://academy.hsoub.com/uploads/monthly_2015_11/img02.thumb.png.ed1dda51f3c03bbff5761c5bb65c185c.png"></a></p><p dir="rtl">نختار الآن برمجيّة خادوم الويب لدينا والتي تُحدِّد تنسيق الشهادة التي سيسلمها Namecheap لنا، الخيارات التي نختارها بشكل شائع هي "Apache + MOD SSL"، "nginx"، أو "Tomcat".</p><p dir="rtl">نلصق CSR الخاصة بنا في المربّع ونضغط بعدها زر التالي <strong>Next</strong>.</p><p dir="rtl">يجب أن نكون الآن في خطوة اختيار المُصادِق "Select Approver" من العمليّة، والتي سترسل بريد إلكتروني لطلب التحقّق إلى عنوان في تسجيل WHOIS لنطاقنا أو إلى عنوان من نوع مدير administrator للنطاق الذي نريد أن نحصل على شهادة له، نختار العنوان الذي نريد أن نرسل إليه البريد الإلكتروني للتحقّق.</p><p dir="rtl">نقوم بتزويد معلومات التواصل الإداريّة "Administrative Contact Information" ونضغط على زر تقديم الطلب <strong>Submit order</strong>.</p><h3 dir="rtl">التحقق من النطاق</h3><p dir="rtl">سيتم عند هذه النقطة إرسال بريد إلكتروني إلى عنوان المُصادِق "approver"، نفتح البريد الإلكتروني ونصادق على طلب الشهادة.</p><h3 dir="rtl">تنزيل الشهادات</h3><p dir="rtl">بعد المُصادَقة على الشهادة سيتم إرسالها عبر البريد الإلكتروني إلى القسم التقني Technical Contact، ستكون الشهادة الصادرة لنطاقنا وشهادة سلطة الشهادات الوسيطة CA's intermediate certificate في أسفل رسالة البريد الإلكتروني.</p><p dir="rtl">ننسخها ونحفظها إلى خادومنا في نفس المكان الذي وضعنا فيه CSR ومفتاحنا الخاص.</p><p dir="rtl">نقوم بتسمية الشهادة باسم النطاق مُضافًا إليه اللاحقة <span style="font-family:courier new,courier,monospace;">crt.</span>، مثل<span style="font-family:courier new,courier,monospace;"> example.com.crt</span>، وتسمية الشهادة الوسيطة <span style="font-family:courier new,courier,monospace;">intermediate.crt</span>.</p><p dir="rtl">تكون الشهادة الآن جاهزة للتثبيت على خادوم الويب لدينا.</p><h2 dir="rtl">مثال سلطة الشهادات الثاني: GoDaddy</h2><p dir="rtl">إنّ GoDaddy هي سلطة شهادات شائعة تملك كافّة أنواع الشهادات الأساسية، سنشرح عمليّة الحصول على شهادة نطاق مُفرَد، ولكن إن أردت نوعًا مختلفًا من الشهادات فبإمكانك فعل ذلك.</p><h3 dir="rtl">اختيار وشراء الشهادة</h3><p dir="rtl">نذهب إلى صفحة <a rel="external nofollow" href="https://www.godaddy.com/ssl/ssl-certificates.aspx">GoDaddy لشهادات SSL</a>.</p><p dir="rtl">ننزل للأسفل ونضغط على زر البدء <strong>Get Started</strong>.</p><p dir="rtl" style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/img03.png.a0e9df5fbaedad8bd7683ca963fabb32.png"><img data-fileid="8154" class="ipsImage ipsImage_thumbnailed" alt="img03.thumb.png.fb6ff77c65a48874b9507cba" src="https://academy.hsoub.com/uploads/monthly_2015_11/img03.thumb.png.fb6ff77c65a48874b9507cbad93015ba.png"></a></p><p dir="rtl">نختار نوع شهادة SSL الذي نريده من القائمة المنسدلة:</p><ul dir="rtl"><li>نطاق مُفرَد single domain</li><li>نطاقات متعدّدة (multidomain (UCC</li><li>wildcard</li></ul><p dir="rtl" style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/img04.png.caea27ef7f36347802dbf439d77a31b6.png"><img data-fileid="8155" class="ipsImage ipsImage_thumbnailed" alt="img04.thumb.png.c3abf500d60d0211dbb09d7d" src="https://academy.hsoub.com/uploads/monthly_2015_11/img04.thumb.png.c3abf500d60d0211dbb09d7dc691d799.png"></a></p><p dir="rtl">نختار بعدها نوع الخطّة plan:</p><ul dir="rtl"><li>نطاق domain</li><li>مُنظَّمة organization</li><li>تحقّق مُوسَّع extended validation</li></ul><p dir="rtl">ثم نختار المدى term (مُدّة الصلاحية).</p><p dir="rtl">نضغط بعدها على زر إضافة إلى السلّة <strong>Add to Cart</strong>.</p><p dir="rtl">نُراجع طلبنا الحالي ثم نضغط على المتابعة إلى الدفع <strong>Proceed to Checkout</strong>.</p><p dir="rtl">ومن ثمّ نكمل التسجيل وعمليّة الدفع.</p><h3 dir="rtl">طلب الشهادة</h3><p dir="rtl">بعد إكمال طلبنا نضغط على زر <strong>SSL Certificates*</strong> (أو نضغط على <strong>My Account &gt; Manage SSL Certificates</strong> الموجودة في الزاوية العلوية اليمنى).</p><p dir="rtl">نقوم بإيجاد شهادة SSL التي اشتريناها للتو ونضغط على زر الإعداد<strong> Set Up</strong>، إن لم تستخدم GoDaddy من قبل من أجل شهادات SSL فسيتم حثك على إعداد مُنتَج "SSL Certificates" وربط طلب شهادتك الأخيرة مع المُنتَج (نضغط على زر Set Up الأخضر وننتظر عدّة دقائق قبل تحديث متصفّحنا).</p><p dir="rtl">بعد أن تتم إضافة مُنتَج "SSL Certificates" إلى حسابنا في GoDaddy ينبغي أن نرى شهادتنا الجديدة "New Certificate" وزر التنفيذ "Launch"، نضغط على الزر <strong>Launch</strong> الموجود بجانب شهادتنا الجديدة.</p><p dir="rtl">نقوم بتقديم CSR الخاص بنا عن طريق لصقه في المربع، تُستخدَم خوارزميّة SHA-2 افتراضيًّا.</p><p dir="rtl">نضع علامة في خانة التأشير I agree ونضغط على زر طلب الشهادة <strong>Request Certificate</strong>.</p><h3 dir="rtl">التحقق من النطاق</h3><p dir="rtl">يجب الآن أن نُثبِت أنّنا نمتلك تحكّمًا بنطاقنا ونزوّد GoDaddy ببعض المستندات، تقوم GoDaddy بإرسال رسالة بريد إلكتروني للتحقّق من ملكيّة النطاق إلى العنوان الموجود في تسجيل WHOIS لنطاقنا، نتبع الخطوات الموجودة في رسائل البريد الإلكتروني التي تصلنا ونُصرِّح بإصدار الشهادة.</p><h3 dir="rtl">تنزيل الشهادة</h3><p dir="rtl">بعد أن نُثبِت لـ GoDaddy أنّنا نمتلك النطاق، نتحقّق من بريدنا الإلكتروني (الذي قمنا من خلاله بالتسجيل في GoDaddy) بحثًا عن رسالة تقول أنّه تم إصدار شهادة SSL الخاصة بنا، نفتحها ونتبع رابط تنزيل الشهادة (أو نضغط على زر Launch بجانب شهادة SSL التي نريدها في لوحة تحكّم GoDaddy).</p><p dir="rtl">نضغط الآن على زر التنزيل <strong>Download</strong>.</p><p dir="rtl">نختار برمجيّة الخادوم التي نستخدمها من القائمة المنسدلة لنوع الخادوم Server type، إن كنّا نستخدم Apache HTTP أو Nginx نختار "Apache" ثم نضغط على زر تنزيل الملف المضغوط <strong>Download Zip File</strong>.</p><p dir="rtl">نستخرج الملف المضغوط، الذي ينبغي أن يحتوي على ملفين <span style="font-family:courier new,courier,monospace;">crt.</span>، أحدهما شهادة SSL الخاصّة بنا (التي ينبغي أن تملك اسمًا عشوائيًّأ) وحزمة bundle شهادة GoDaddy الوسيطة (<span style="font-family:courier new,courier,monospace;">gd_bundle-g2-1.crt</span>)، نقوم بنسخهما إلى خادوم الويب لدينا، ونعيد تسمية الشهادة إلى اسم نطاقنا مع إضافة اللاحقة <span style="font-family:courier new,courier,monospace;">crt.</span>، على سبيل المثال <span style="font-family:courier new,courier,monospace;">example.com.crt</span>، ونعيد تسمية حزمة الشهادة الوسيطة إلى <span style="font-family:courier new,courier,monospace;">intermediate.crt</span>.</p><p dir="rtl">تكون الشهادة الآن جاهزة للتثبيت على خادوم الويب لدينا.</p><h2 dir="rtl">تثبيت الشهادة على خادوم الويب لدينا</h2><p dir="rtl">ينبغي بعد الحصول على شهادتنا من سلطة الشهادات التي نختارها أن نقوم بتثبيتها على خادوم الويب لدينا، يتضمّن هذا إضافة بعض الأسطر المتعلّقة بـ SSL لملفّات إعدادات خادومنا.</p><p dir="rtl">سنغطي في هذا القسم الإعدادات الأساسيّة لخادوم Nginx و Apache HTTP على Ubuntu.</p><p dir="rtl">سنفترض الأمور التالية:</p><ul dir="rtl"><li>يتوضّع المفتاح الخاص وشهادة SSL والشهادات الوسيطة لسلطة الشهادات-إن كان ذلك قابلًا للتطبيق- في الدليل الرئيسي على المسار <span style="font-family:courier new,courier,monospace;">home/sammy/</span></li><li>يُدعى المفتاح الخاص باسم <span style="font-family:courier new,courier,monospace;">example.com.key</span></li><li>تُدعى شهادة SSL باسم <span style="font-family:courier new,courier,monospace;">example.com.crt</span></li><li>تُوجد الشهادة أو الشهادات الوسيطة لسلطة الشهادات في ملف يُدعى <span style="font-family:courier new,courier,monospace;">intermediate.crt</span></li><li>إن كنت تملك جدار ناري مُمكَّنًا لديك فتأكّد من أنّه يسمح بالمنفذ 443 (منفذ HTTPS)</li></ul><p dir="rtl"><strong>ملاحظة: ي</strong>جب في البيئة الحقيقيّة تخزين هذه الملفّات في مكان يستطيع فقط المستخدم الذي يُشغِّل عملية خادوم الويب الرئيسيّة (عادة root) الوصول إليه، ينبغي الاحتفاظ بالمفتاح الخاص في مكان آمن.</p><h3 dir="rtl">خادوم Nginx</h3><p dir="rtl">إن كنت ترغب باستخدام شهادتك مع خادوم Nginx على Ubuntu فاتبع هذا القسم.</p><p dir="rtl">ينبغي في Nginx إن كانت سلطة الشهادات قد أعطتنا شهادة وسيطة أن نقوم بإنشاء ملف شهادة مُفرَد محمي بالسلاسل chained يحتوي على شهادتنا والشهادات الوسيطة لسلطة الشهادات.</p><p dir="rtl">نذهب إلى الدليل الذي يحوي مفتاحنا الخاص، الشهادة، وشهادة سلطة البيانات الوسيطة (أي الملف <span style="font-family:courier new,courier,monospace;">intermediate.crt</span>)، سنفترض أنّها في الدليل الرئيسي على سبيل المثال:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">cd ~</pre><p dir="rtl">بافتراض أنّ ملف الشهادة يُدعى <span style="font-family:courier new,courier,monospace;">example.com.crt</span> نستخدم هذا الأمر لإنشاء ملف مُدمَج يُدعى <span style="font-family:courier new,courier,monospace;">example.com.chained.crt</span> (نضع اسم نطاقنا بدلًا من <span style="font-family:courier new,courier,monospace;">example.com</span>):</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">cat example.com.crt intermediate.crt &gt; example.com.chained.crt</pre><p dir="rtl">نذهب الآن إلى دليل إعدادات كتلة block خادوم Nginx، وبافتراض أنّه موجود في المسار <span style="font-family:courier new,courier,monospace;">etc/nginx/sites-enable/</span> نستخدم هذا الأمر للانتقال إليه:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">cd /etc/nginx/sites-enabled</pre><p dir="rtl">بافتراض أنّنا نريد إضافة SSL إلى ملف كتلة الخادوم الافتراضي default نفتح الملف من أجل تحريره:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo vi default</pre><p dir="rtl">نبحث عن الأمر التوجيهي <span style="font-family:courier new,courier,monospace;">listen</span> ونقوم بتعديله بحيث يبدو كما يلي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">listen 443 ssl;</pre><p dir="rtl">نبحث بعدها عن الأمر التوجيهي <span style="font-family:courier new,courier,monospace;">server_name</span> ونتأكد من أنّ قيمته مُطابِقة لاسم شهادتنا، نُضيف أيضًا الأوامر التوجيهيّة <span style="font-family:courier new,courier,monospace;">ssl_certificate</span> و <span style="font-family:courier new,courier,monospace;">ssl_certificate_key</span> لتحديد المسارات لشهادتنا وتحديد ملفّات المفاتيح الخاصّة (نضع الأسماء الموجودة لدينا بدلًا من <span style="font-family:courier new,courier,monospace;">example.com</span>):</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">server_name example.com;
ssl_certificate /home/sammy/example.com.chained.crt;
ssl_certificate_key /home/sammy/example.com.key;</pre><p dir="rtl">ولنسمح فقط بالشيفرات ciphers وميفاقات SSL protocols الأكثر أمانًا نُضيف الأسطر التالية إلى الملف:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;</pre><p dir="rtl">إن أردنا إعادة توجيه المرور عبر HTTP إلى HTTPS نستطيع إضافة هذه الكتلة الإضافيّة للخادوم في أعلى الملف (نضع معلوماتنا بدلًا من <span style="font-family:courier new,courier,monospace;">example.com</span>):</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">server {
  listen 80;
  server_name example.com;
  rewrite ^/(.*) https://example.com/$1 permanent;
}</pre><p dir="rtl">نقوم بعدها بالحفظ والخروج.</p><p dir="rtl">نعيد تشغيل خادوم Nginx الآن لتحميل الإعدادات الجديدة وتمكين TLS/SSL عبر HTTPS:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo service nginx restart</pre><p dir="rtl">نختبر ذلك بالوصول إلى موقعنا عبر HTTPS، على سبيل المثال <a rel="external nofollow" href="https://example.com">https://example.com</a>.</p><h3 dir="rtl">خادوم Apache</h3><p dir="rtl">إن كنت ترغب باستخدام شهادتك مع خادوم Apache على Ubuntu فاتبع هذا القسم.</p><p dir="rtl">نقوم بعمل نسخة احتياطيّة لملف إعداداتنا عن طريق نسخه، وبافتراض أنّ خادومنا يعمل على ملف إعدادات المُضيف الوهمي virtual الافتراضي، <span style="font-family:courier new,courier,monospace;">etc/apache2/sites-available/000-default.conf/</span>، نستخدم هذه الأوامر لعمل النسخة:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">cd /etc/apache2/sites-available
cp 000-default.conf 000-default.conf.orig</pre><p dir="rtl">نفتح بعدها الملف لتحريره:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo vi 000-default.conf</pre><p dir="rtl">نبحث عن المُدخَل <span style="font-family:courier new,courier,monospace;">&lt;VirtualHost *:80&gt; </span>ونقوم بتعديله بحيث يستمع خادوم الويب لدينا على المنفذ 443:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">&lt;VirtualHost *:443&gt;</pre><p dir="rtl">نقوم بعدها بإضافة الأمر التوجيهي <span style="font-family:courier new,courier,monospace;">ServerName</span> إن لم يكن موجودًا مُسبقًا (نضع اسم نطاقنا هنا):</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">ServerName example.com</pre><p dir="rtl">نضيف بعد ذلك الأسطر التالية لتحديد شهادتنا ومسارات المفاتيح (نضع مسارنا الفعلي هنا):</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">SSLEngine on
SSLCertificateFile /home/sammy/example.com.crt
SSLCertificateKeyFile /home/sammy/example.com.key</pre><p dir="rtl">إن كُنّا نستخدم Apache 2.4.8 أو أكثر نُحدِّد حزمة الشهادة الوسيطة لسلطة الشهادات بإضافة هذا السطر (نضع المسار الفعلي لدينا):</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">SSLCACertificateFile /home/sammy/intermediate.crt</pre><p dir="rtl">إن كُنّا نستخدم إصدار أقدم من Apache نُحدِّد حزمة الشهادة الوسيطة لسلطة الشهادات بإضافة هذا السطر (نضع المسار الفعلي لدينا):</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">SSLCertificateChainFile /home/sammy/intermediate.crt</pre><p dir="rtl">عند هذه النقطة أصبح خادومنا مُعدًّا ليستمع إلى HTTPS فقط (المنفذ 443)، لذا لن يتم تخديم طلبات HTTP (المنفذ 80)، لإعادة توجيه طلبات HTTP إلى HTTPS نضيف ما يلي إلى أعلى الملف (نكتب اسم نطاقنا بدلًا من <span style="font-family:courier new,courier,monospace;">example.com</span>):</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">&lt;VirtualHost *:80&gt;
  ServerName example.com
  Redirect permanent / <a rel="external nofollow" href="https://example.com/">https://example.com/</a>
&lt;/VirtualHost&gt;</pre><p dir="rtl">نقوم بالحفظ والخروج.</p><p dir="rtl">نقوم بتمكين وحدة Apache SSL بتنفيذ هذا الأمر:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo a2enmod ssl</pre><p dir="rtl">نعيد تشغيل خادوم Apache الآن لتحميل الإعدادات الجديدة وتمكين TLS/SSL عبر HTTPS:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo service apache2 restart</pre><p dir="rtl">نختبر ذلك بالوصول إلى موقعنا عبر HTTPS، على سبيل المثال <a rel="external nofollow" href="https://example.com">https://example.com</a>، نريد أيضًا اختبار الاتصال عبر HTTP، مثل <a rel="external nofollow" href="http://example.com">http://example.com</a> لنضمن أنّ إعادة التوجيه تعمل بشكل صحيح.</p><h2 dir="rtl">الخاتمة</h2><p dir="rtl">نمتلك الآن فكرة جيّدة عن كيفيّة إضافة شهادة SSL موثوقة لتأمين خادوم الويب لدينا، احرص على أن تتسوّق من سلطة شهادات تجعلك مسرورًا معها.</p><p dir="rtl">ترجمة -وبتصرّف- لـ <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-install-an-ssl-certificate-from-a-commercial-certificate-authority">How To Install an SSL Certificate from a Commercial Certificate Authority</a> لصاحبه Mitchell Anicas.</p>
]]></description><guid isPermaLink="false">148</guid><pubDate>Sun, 29 Nov 2015 22:12:24 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x633;&#x62A;&#x62E;&#x62F;&#x645; Nagios 4 &#x644;&#x645;&#x631;&#x627;&#x642;&#x628;&#x629; &#x62E;&#x648;&#x627;&#x62F;&#x64A;&#x645; Ubuntu 14.04</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-nagios-4-%D9%84%D9%85%D8%B1%D8%A7%D9%82%D8%A8%D8%A9-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-ubuntu-1404-r145/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_11/nagios-ubuntu.png.22b3bcac369955c2cee511207a93e792.png" /></p>

<p id="مقدمة">يتناول هذا الدرس تثبيت <strong>Nagios 4</strong>، وهو نظام مراقبة شائع ومفتوح المصدر، على Ubuntu 14.04. يغطي الدرس إعدادات أساسية لتتمكن من مراقبة موارد المضيفات Hosts في واجهة ويب. سنستخدم أيضا المشغل عن بعد لملحقات Nagios (يعرف بـ NRPE وهو اختصار لـNagios Remote Plugin Executor) الذي سيثبت ليكون وكيلا Agent على المضيفات البعيدة من أجل مراقبة مواردها المحلية.</p><p style="text-align: center;"><a href="https://academy.hsoub.com/uploads/monthly_2015_11/nagios-ubuntu.png.67002b649d8562b28a92b1c051de77c5.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="8094" src="https://academy.hsoub.com/uploads/monthly_2015_11/nagios-ubuntu.thumb.png.d30c3ea37f591f96c0bc22ed2a160b9a.png" class="ipsImage ipsImage_thumbnailed" alt="nagios-ubuntu.thumb.png.d30c3ea37f591f96"></a></p><p>يفيد Nagios كثيرا في جرد الخواديم والتأكد من أن الخدمات الحرجة نشطة وتعمل. استخدام نظام للمراقبة، مثل Nagios، جزء مهم من أي <a href="https://academy.hsoub.com/search/?tags=production+deployment+101">بيئة خواديم موجهة للإنتاج</a>.</p><h2 id="المتطلبات">المتطلبات</h2><p>يتطلب اتباع الخطوات المشروحة في هذا الدرس امتلاك امتيازات المستخدم الأعلى (<code>root</code>) على خادوم Ubuntu 14.04 الذي سيشغل Nagios. من المستحسن استخدام حساب عادي بصلاحيات إدارية؛ لمعرفة كيفية إعداده راجع الخطوات من 1 إلى 3 في الدرس التالي: <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D9%84%D8%A7%D8%A8%D8%AA%D8%AF%D8%A7%D8%A6%D9%8A-%D9%84%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r4/">الإعداد الابتدائي لخادوم أوبنتو 14.04</a>.</p><p>سنحتاج أيضا إلى حزمة برمجيات LAMP. يشرح الدرس التالي كيفية إعدادها: <a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81-%D8%AA%D9%8F%D8%AB%D8%A8%D9%91%D9%90%D8%AA-%D8%AD%D9%90%D8%B2%D9%85-mysql%D8%8C-apache%D8%8C-linux-lamp-%D9%88php-%D8%B9%D9%84%D9%89-ubuntu-1404-r27/">كيف تُثبِّت حِزم MySQL، Apache، Linux :LAMP وPHP على Ubuntu 14.04</a>.</p><p>نفترض في المقال أن الخواديم توجد في شبكة محلية. أبدل جميع الإحالات إلى العناوين المحلية بعناوين IP عمومية إن كانت الخواديم التي تعدها لا توجد في نفس الشبكة المحلية.</p><p>نبدأ بالخطوة اﻷولى وهي تثبيت Nagios 4.</p><h2 id="تثبيت-nagios-4">تثبيت Nagios 4</h2><p>تغطي هذه الفقرة كيفية تثبيت Nagios 4 على خادوم المراقبة. لن تحتاج لإعادة تنفيذ الأوامر المذكورة هنا على خواديم أخرى.</p><h3 id="إنشاء-مستخدم-nagios-ومجموعته">إنشاء مستخدم Nagios ومجموعته</h3><p>يجب أن ننشئ مستخدما ومجموعة تشغِّل عملية Nagios. أنشئ حساب مستخدم باسم <code>nagios</code> ومجموعة مستخدمين باسم <code>nagcmd</code> ثم أضف المستخدم للمجموعة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo useradd nagios
sudo groupadd nagcmd
sudo usermod -a -G nagcmd nagios</pre><h3 id="تثبيت-الارتباطات-المطلوبة-لبناء-nagios-4-من-المصدر">تثبيت الارتباطات المطلوبة لبناء Nagios 4 من المصدر</h3><p>يحتاج بناء Nagios 4 من المصدر، وهو ما سنفعله في هذا الدرس، إلى تثبيت بعض مكتبات التطوير التي تتيح بناء البرنامج. سنستغل الفرصة أيضا لتثبيت <code>apache2-utils</code> الذي سنستخدمه لإعداد واجهة الويب الخاصة بـNagios.</p><p>نبدأ بتحديث قائمة الحزم:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo apt-get update</pre><p>ثم نثبت الحزم المطلوبة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo apt-get install build-essential libgd2-xpm-dev openssl libssl-dev xinetd apache2-utils unzip</pre><p>ننتقل لتثبيت Nagios.</p><h3 id="تثبيت-nagios-core">تثبيت Nagios Core</h3><p>نزل الشفرة المصدرية لآخر إصدار مستقر من Nagios Core. اذهب إلى <a rel="external nofollow" href="http://www.nagios.org/download/core-stay-informed">صفحة تنزيلات Nagios</a> وانقر على الرابط <strong>Skip to download</strong> (تجاوز إلى التنزيل) الموجود أسفل الاستمارة. انسخ رابط آخر إصدار مستقر لتتمكن من تنزيله على خادوم Nagios.</p><p>آخر إصدار وقت كتابة المقال هو <code>4.1.1</code>؛ نزله إلى مجلدك الشخصي على خادوم المراقبة باستخدام <code>curl</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">cd ~
curl -L -O https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.1.1.tar.gz</pre><p>استخرج الملف المضغوط:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">tar xvf nagios-4.1.1.tar.gz</pre><p>ثم انتقل إلى المجلد المستخرج:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">cd nagios-4.1.1</pre><p>يجب إعداد Nagios قبل بنائه. من أجل إعداد Nagios لاستخدام postfix (الذي يمكن تثبيته ب<code>apt-get</code>) أضف <span style="font-family:courier new,courier,monospace;"><code>with-mail=/usr/sbin/sendmail</code><span style="line-height: 24.8889px;">--</span></span> للأمر التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">./configure --with-nagios-group=nagios --with-command-group=nagcmd </pre><p>ثم نجمع Nagios بالأمر:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">make all</pre><p>يمكننا الآن استخدام اﻷوامر التالي لتثبيت Nagios، سكربتات بدء التشغيل وأمثلة لملفات الإعداد:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo make install
sudo make install-commandmode
sudo make install-init
sudo make install-config
sudo /usr/bin/install -c -m 644 sample-config/httpd.conf /etc/apache2/sites-available/nagios.conf
</pre><p>تجب إضافة حساب خادوم الويب <code>www-data</code> إلى المجموعة <code>nagcmd</code> لنتمكن من تنفيذ أوامر على Nagios من واجهة الويب:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo usermod -G nagcmd www-data</pre><h3 id="تثبيت-ملحقات-nagios">تثبيت ملحقات Nagios</h3><p>تجد آخر الإصدارات من ملحقات Nagios على الرابط التالي: <a rel="external nofollow" href="http://nagios-plugins.org/download/?C=M;O=D">تنزيل ملحقات Nagios</a>. انسخ عنوان رابط آخر إصدار حتى يمكنك تنزيله على خادوم Nagios.</p><p>آخر إصدار أثناء كتابة هذا المقال هو 2.1.1. نزله إلى مجلدك الشخصي على الخادوم باستخدام <code>curl</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">cd ~
curl -L -O http://nagios-plugins.org/download/nagios-plugins-2.1.1.tar.gz</pre><p>استخر أرشيف ملحقات Nagios بالأمر التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">tar xvf nagios-plugins-2.1.1.tar.gz</pre><p>ثم انتقل إلى المجلد المستخرَج:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">cd nagios-plugins-2.1.1</pre><p>يجب إعداد ملحقات Nagios قبل بنائها، نستخدم الأمر التالي لهذا الغرض:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">./configure --with-nagios-user=nagios --with-nagios-group=nagios --with-openssl</pre><p>نبني ملحقات Nagios:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">make</pre><p>ثم نثبتها بالأمر:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo make install</pre><h3 id="تثبيت-nrpe-المشغل-عن-بعد-لملحقات-nagios">تثبيت NRPE (المشغل عن بعد لملحقات Nagios)</h3><p>اعثر على الشفرة المصدرية لآخر إصدار مستقر من NRPE على <a rel="external nofollow" href="http://sourceforge.net/projects/nagios/files/nrpe-2.x/">صفحة تنزيلات NRPE</a>. نزل آخر إصدار على خادوم Nagios.</p><p>آخر إصدار وقت كتابة هذا الدرس هو 2.15. نزله إلى مجلدك الشخصي على خادوم Nagios باستخدام أمر <code>curl</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">cd ~
curl -L -O http://downloads.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.15/nrpe-2.15.tar.gz
</pre><p>استخرج أرشيف NRPE بالأمر التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">tar xvf nrpe-2.15.tar.gz</pre><p>ثم انتقل إلى المجلد المستخرج:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">cd nrpe-2.15</pre><p>نعدّ NRPE بالأوامر التالية:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">./configure --enable-command-args --with-nagios-user=nagios --with-nagios-group=nagios --with-ssl=/usr/bin/openssl --with-ssl-lib=/usr/lib/x86_64-linux-gnu</pre><p>نأتي الآن لبناء NRPE وتثبيته إضافة لتثبيت سكربت بدء التشغيل <code>xinetd</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">make all
sudo make install
sudo make install-xinetd
sudo make install-daemon-config</pre><p>افتح سكربت بدء التشغيل <code>xinetd</code> لتحريره:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/xinetd.d/nrpe</pre><p>غيّر سطر <code>only_from</code> بإضافة عنوان IP المحلي الخاص بخادوم Nagios في آخر السطر، كما في المثال التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">only_from = 127.0.0.1 10.132.224.168</pre><p>احفظ الملف ثم أغلقه. لن يُسمح، وفقا لهذا الإعداد، لغير خادوم Nagios بالتخاطب مع NRPE.</p><p>أعد تشغيل خدمة <code>xinetd</code> لبدء تشغيل NRPE:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service xinetd restart</pre><p>أكملنا الآن تثبيت Nagios 4، بقي إعداده.</p><h2 id="إعداد-nagios">إعداد Nagios</h2><p>سنضبط في هذه الفقرة الإعداد الابتدائي لـNagios. ستحتاج لهذا الضبط مرة واحدة على خادوم Nagios.</p><h3 id="تنظيم-إعدادات-nagios">تنظيم إعدادات Nagios</h3><p>افتح ملف الإعداد الرئيس لـNagios لتحريره:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /usr/local/nagios/etc/nagios.cfg</pre><p>ابحث عن السطر التالي وأزل علامة التعليق (<code>#</code>):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">#cfg_dir=/usr/local/nagios/etc/servers</pre><p>احفظ الملف ثم أغلقه.</p><p>الخطوة التالية هي إنشاء المجلد الذي سيخزن ملفات إعداد الخواديم التي ستراقبها؛ ملف لكل خادوم:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo mkdir /usr/local/nagios/etc/servers</pre><h3 id="إعداد-جهات-الاتصال-في-nagios">إعداد جهات الاتصال في Nagios</h3><p>افتح ملف الإعداد الخاص بجهات اتصال Nagios لتحريره:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /usr/local/nagios/etc/objects/contacts.cfg</pre><p>اعثر على تعليمة <code>email</code> وأبدل قيمتها لتصبح عنوانك البريدي الخاص:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">email     nagios@localhost      ; &lt;&lt;***** أبدل هذا العنوان بعنوانك البريدي ******</pre><p>احفظ الملف ثم أغلقه.</p><h3 id="إعداد-أمر-checknrpe">إعداد أمر check_nrpe</h3><p>نضيف أمرا جديدا إلى ملف إعداد Nagios، لذا سنفتح لتحريره:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /usr/local/nagios/etc/objects/commands.cfg</pre><p>أضف الأسطر التالية:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">define command{
  command_name check_nrpe
  command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}</pre><p>احفظ الملف ثم أغلقه. يتيح هذا الإعداد إمكانية استخدام الأمر <code>check_nrpe</code> في تعريف خدمات Nagios.</p><h3 id="إعداد-apache">إعداد Apache</h3><p>فعل وحدتيْ <code>rewrite</code> و<code>cgi</code> في Apache:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo a2enmod rewrite
sudo a2enmod cgi</pre><p>استخدم أمر <code>htpasswd</code> لإنشاء حساب مدير باسم <code>nagiosadmin</code> يمكنه الوصول إلى واجهة ويب Nagios:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin</pre><p>أدخل كلمة سر في المحث وتذكرها إذ ستحتاجها للوصول إلى واجهة ويب Nagios.</p><p>أنشئ وصلة رمزية Symbolic link لـ<code>nagios.conf</code> في مجلد <code>sites-enabled</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo ln -s /etc/apache2/sites-available/nagios.conf /etc/apache2/sites-enabled/</pre><p>أصبح Nagios جاهزا للتشغيل. نشغل Nagios ونعيد تشغيل Apache:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service nagios start
sudo service apache2 restart</pre><p>نفذ الأمر التالي إن أردت تفعيل تشغيل Nagios مع بدء تشغيل الخادوم:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo ln -s /etc/init.d/nagios /etc/rcS.d/S99nagios</pre><h3 id="إعداد-اختياري-تقييد-الوصول-بعنوان-ip">إعداد اختياري: تقييد الوصول بعنوان IP</h3><p>إن أردت قصر عناوين IP التي يمكن منها الوصول إلى واجهة ويب Nagios فينبغي تحرير ملف إعداد Apache:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/apache2/sites-available/nagios.conf</pre><p>اعثر على السطرين التاليين وأضف علامة <code>#</code> أمام كل واحد منهما لتعليقه:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Order allow,deny
Allow from all</pre><p>ثم انزع التعليق عن الأسطر التالية بحذف علامة <code>#</code> وأضف عناوين IP (أو مجالات عناوين) التي تريد السماح لها بالوصول إلى الواجهة إلى سطر <code>Allow from</code> مع الفصل بينها بمسافة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">#  Order deny,allow
#  Deny from all
#  Allow from 127.0.0.1</pre><p>تظهر هذه الأسطر مرتين في ملف الإعداد لذا يجب عليك إعادة الخطوات أعلاه مرتين.</p><p>احفظ الملف ثم أغلقه.</p><p>نعيد تشغيل Nagios وApache لاعتماد التغييرات:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service nagios restart
sudo service apache2 restart</pre><p>يعمل Nagios الآن، فلنحاول الولوج إليه.</p><h2 id="الوصول-إلى-واجهة-ويب-nagios">الوصول إلى واجهة ويب Nagios</h2><p>أدخل عنوان خادوم Nagios في المتصفح (ضع عنوان IP أو اسم المضيف المناسب مكان <code>nagios_server_public_ip</code>):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">http://nagios_server_public_ip/nagios</pre><p>ستحتاج لإدخال بيانات الولوج نظرا لأننا استخدمنا <code>htpasswd</code> أثناء إعداد Apache (اسم المستخدم <code>nagiosadmin</code> وكلمة السر التي اخترتها):</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/01_htpasswd_prompt.png.2bc79948b450ef29a2990fce20174094.png"><img data-fileid="7844" class="ipsImage ipsImage_thumbnailed" alt="01_htpasswd_prompt.thumb.png.014e0168e64" src="https://academy.hsoub.com/uploads/monthly_2015_11/01_htpasswd_prompt.thumb.png.014e0168e64f5a27f8bc3faa0ee6ff1d.png"></a></p><p>تظهر الصفحة الرئيسية الافتراضية لـNagios بعد الولوج. انقر على رابط المضيفات في القائمة الجانبية على اليسار لمعرفة المضيفات التي يراقبها Nagios:</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/02_hosts_link.png.9bd797cc9e48c82cec838822d8f43ce3.png"><img data-fileid="7845" class="ipsImage ipsImage_thumbnailed" alt="02_hosts_link.thumb.png.63068e79e52ea26c" src="https://academy.hsoub.com/uploads/monthly_2015_11/02_hosts_link.thumb.png.63068e79e52ea26cc1e57580f00baa05.png"></a></p><p>لا يراقب Nagios سوى مضيف واحد هو المضيف المحلي Localhost.</p><p>سنعد في ما يلي مضيفا آخر يراقبه Nagios.</p><h2 id="مراقبة-مضيف-بـnrpe">مراقبة مضيف بـNRPE</h2><p>سنرى في هذه الفقرة كيفية إضافة مضيف جديد إلى Nagios لتمكن بالتالي مراقبته. كرّر خطوات هذه الفقرة لكل خادوم تريد مراقبته.</p><p>نحدّث قائمة الحزم على الخادوم الذي نريد إضافته إلى Nagios:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo apt-get update</pre><p>ثم نثبت ملحقات Nagios وNRPE:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo apt-get install nagios-plugins nagios-nrpe-server</pre><h3 id="إعداد-المضيفات-المسموح-لها-بالوصول">إعداد المضيفات المسموح لها بالوصول</h3><p>نفتح ملف إعداد NRPE:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/nagios/nrpe.cfg</pre><p>اعثر على تعليمة <code>allowed_hosts</code> وأضف عنوان IP المحلي الخاص بخادوم Nagios إلى التعليمة كما في المثال التالي (انتبه للفاصلة):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">allowed_hosts=127.0.0.1,10.132.224.168</pre><p>احفظ الملف ثم أغلقه. يضبط الإعداد أعلاه NRPE لقبول الطلبات الواردة من خادوم Nagios عبر عنوانه المحلي.</p><h3 id="إعداد-أوامر-nrpe-المسموح-بها">إعداد أوامر NRPE المسموح بها</h3><p>استخدم الأمر التالي لمعرفة اسم جذر نظام الملفات (واحد من العناصر التي نريد مراقبتها):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">df -h /</pre><p>سنستخدم اسم نظام الملفات في ملف إعداد NRPE من أجل مراقبة استخدام القرص الصلب. افترح ملف <code>nrpe.cfg</code> لتحريره:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/nagios/nrpe.cfg</pre><p>يحوي ملف إعداد NRPE الكثير من التعليمات والأسطر، أغلبها معلَّق. توجد أسطر قليلة نحتاج للعثور عليها وتعديلها:</p><ul><li><strong><code>server_address</code></strong>: تحدَّد قيمتها بعنوان IP المحلي للمضيف.</li><li><strong><code>allowed_hosts</code></strong>: تحدَّد قيمتها بعنوان IP المحلي لخادوم Nagios.</li><li><strong><code>[command[check_hda1</code></strong>: أبدل <code>` باسم نظام الملفات (نتيجة أمر </code><span style="font-family:courier new,courier,monospace;">df</span> <code>أعلاه، مثلا </code><span style="font-family:courier new,courier,monospace;">dev/vda/</span>`).</li></ul><p>يجب أن تبدو الأسطر المذكورة على النحو التالي (استخدم القيم المناسبة):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">server_address=client_private_IP
allowed_hosts=nagios_server_private_IP
command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/vda</pre><p>توجد الكثير من الأوامر الأخرى المعرَّفة في هذا الملف. تعمل هذه الأوامر إذا أُعِدَّ Nagios لاستخدامها. انتبه إلى أن NRPE سينصت على المنفذ Port رقم <code>5666</code> لأن التعليمة <code>server_port=5666</code> مفعَّلة. إن كان يوجد جدار ناري Firewall على خادوم Nagios فتأكد من السماح للاتصالات بالمرور عبر المنفذ <code>5666</code>.</p><p>احفظ الملف ثم أغلقه.</p><h3 id="إعادة-تشغيل-nrpe">إعادة تشغيل NRPE</h3><p>أعد تشغيل NRPE لاعتماد التعديلات:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service nagios-nrpe-server restart</pre><p>تثبيت NRPE وإعداده على المضيف هو الخطوة الأولى لمراقبته. الخطوة الثانية هي إضافته إلى ملف إعداد Nagios لتبدأ المراقبة فعليا.</p><h3 id="إدراج-المضيف-إلى-إعداد-nagios">إدراج المضيف إلى إعداد Nagios</h3><p>أنشئ ملف إعداد ضمن مسار <code>/usr/local/nagios/etc/servers/</code> على خادوم Nagios لكل مضيف تريد مراقبته. أبدل <code>yourhost</code> باسم المضيف.</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /usr/local/nagios/etc/servers/yourhost.cfg</pre><p>أضف تعريف المضيف التالي؛ مع إبدال قيمة <code>host_name</code> باسم المضيف البعيد (<code>web-1</code> في المثال)، قيمة الكنية <code>alias</code> بوصف المضيف، وقيمة العنوان <code>address</code> بعنوان IP المحلي للمضيف البعيد:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">define host {
use                             linux-server
host_name                       yourhost
alias                           My first Apache server
address                         10.132.234.52
max_check_attempts              5
check_period                    24x7
notification_interval           30
notification_period             24x7
}</pre><p>يأمر الإعداد أعلاه Nagios بمراقبة ما إذا كان المضيف يعمل أم لا، لا غير. احفظ الملف ثم أغلقه وأعد تشغيل Nagios إن كان هذا كافيا بالنسبة لك؛ أما إذا كنت تريد مراقبة خدمات محدَّدة فواصل القراءة.</p><p>أضف تعريفات الخدمات التي تريد مراقبتها. في ما يلي أمثلة على مراقبة الخدمات؛ انتبه إلى أن قيمة <code>check_command</code> تحدد الخدمة المرادة مراقبتها والقيم التي تحدد حالة الخدمة:</p><ul><li><p>فحص الاتصال (أمر <code>ping</code>):</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint" style="text-align: justify;">define service {
  use generic-service
  host_name yourhost
  service_description PING
  check_command check_ping!100.0,20%!500.0,60%
}
</pre></li><li><p>خدمة SSH (إعطاء قيمة <code>0</code> لتعليمة <code>notifications_enabled</code> في تعريف الخدمة يعطل الإشعارات):</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint" style="text-align: left;">define service {
  use generic-service
  host_name yourhost
  service_description SSH
  check_command check_ssh
  notifications_enabled 0
}
</pre></li></ul><p>تأخذ التعليمة <code>use generic-service</code> قيم قالب للخدمات معرَّف افتراضيا باسم <code>generic-service</code>.</p><p>احفظ الملف ثم أغلقه. أعد تحميل إعداد Nagios لاعتماد التعديلات:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service nagios reload</pre><p>تأكد بعد الانتهاء من إعداد جميع المضيفات من الوصول إلى واجهة ويب Nagios وافحص صفحة الخدمات لرؤية كل المضيفات والخدمات المراقبة.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/03_services.png.4c64ec5f6135a581a09f57821e058966.png"><img data-fileid="7846" class="ipsImage ipsImage_thumbnailed" alt="03_services.thumb.png.b7afedc06ac6f734d1" src="https://academy.hsoub.com/uploads/monthly_2015_11/03_services.thumb.png.b7afedc06ac6f734d17638c08f756229.png"></a></p><h2 id="خاتمة">خاتمة</h2><p>الخطوة الموالية لإعداد خادوم المراقبة هي تحديد الخدمات الحرجة والأساسية بالنسبة لك لمراقبتها. قد ترغب أيضا في إعداد إشعارات؛ مثلا لتلقي بريد إلكتروني عندما تصل نسبة استخدام القرص الصلب إلى حدّ معيَّن، أو عندما يصبح خادوم موقع الويب خارج الخدمة. تساعد الإشعارات كثيرا في استباق حدوث المشاكل واتخاذ إجراءات للحؤول دونها.</p><p>ترجمة -وبتصرّف- لمقال <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-install-nagios-4-and-monitor-your-servers-on-ubuntu-14-04">How To Install Nagios 4 and Monitor Your Servers on Ubuntu 14.04</a> لصاحبه Mitchell Anicas.</p>
]]></description><guid isPermaLink="false">145</guid><pubDate>Sun, 29 Nov 2015 11:58:29 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x62A;&#x62B;&#x628;&#x64A;&#x62A; &#x634;&#x647;&#x627;&#x62F;&#x629; SSL &#x645;&#x646; &#x633;&#x644;&#x637;&#x629; &#x634;&#x647;&#x627;&#x62F;&#x627;&#x62A; &#x62A;&#x62C;&#x627;&#x631;&#x64A;&#x629;: &#x627;&#x644;&#x645;&#x641;&#x627;&#x647;&#x64A;&#x645; &#x627;&#x644;&#x623;&#x633;&#x627;&#x633;&#x64A;&#x629;</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%B4%D9%87%D8%A7%D8%AF%D8%A9-ssl-%D9%85%D9%86-%D8%B3%D9%84%D8%B7%D8%A9-%D8%B4%D9%87%D8%A7%D8%AF%D8%A7%D8%AA-%D8%AA%D8%AC%D8%A7%D8%B1%D9%8A%D8%A9-%D8%A7%D9%84%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-r146/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_11/setup-ssl.png.c97624afe9f19118d9b1ce5db10ed71c.png" /></p>

<p dir="rtl">سنتعلّم في هذا الدّرس المفاهيم الأساسيّة التي نحتاجها قبل الحصول على شهادة SSL من سلطة شهادات تجاريّة Commercial Certificate Authority CA، تسمح شهادات SSL لخواديم الويب بتشفير حركة مرور بياناتها traffic وتُوفِّر آليّة للتحقّق من هويّات الخواديم من أجل الزوّار، إنّ الميزة الأساسيّة لشراء شهادة SSL من سلطة شهادات تجاريّة (CA) موثوقة عن الشهادات المُوقَّعة ذاتيًّا self-signed أنّه لن يتم عرض تحذير مُخيف للزوّار حول عدم القدرة على التحقّق من هويّة موقعنا.</p><p dir="rtl" style="text-align: center;"><a href="https://academy.hsoub.com/uploads/monthly_2015_11/setup-ssl.png.38674335d71c22a7c8207fb2f8274ab4.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="7929" src="https://academy.hsoub.com/uploads/monthly_2015_11/setup-ssl.thumb.png.986d54fd77f0fc6427074a6d335f590b.png" class="ipsImage ipsImage_thumbnailed" alt="setup-ssl.thumb.png.986d54fd77f0fc642707"></a></p><p dir="rtl">يغطّي هذا الدرس المتطلبات الأساسيّة التي يجب التأكد منها قبل الحصول على شهادة SSL، ويشرح الأنواع المختلفة للشهادات.</p><h2 dir="rtl">المتطلبات الأساسية</h2><p dir="rtl">هنالك العديد من المتطلبات التي يجب التأكد منها قبل محاولة الحصول على شهادة SSL من سلطة شهادات تجاريّة، سيغطي هذا القسم الأمور التي نحتاجها ليتم إصدار شهادة SSL لنا من معظم سلطات الشهادات التجارية.</p><h3 dir="rtl">المال</h3><p dir="rtl">يجب علينا شراء شهادات SSL الصادرة عن سلطات الشهادات التجاريّة، تتضمّن البدائل المجانيّة لها الشهادات المُوقَّعة ذاتيًّا self-signed أو شهادات StartSSL، ومع ذلك فإنّ الشهادات المُوقَّعة ذاتيًّا غير موثوقة من قبل أيّة برمجيات، ولا يُمكِن استخدام شهادات StartSSL لأغراض تجاريّة.</p><h3 dir="rtl">اسم نطاق Domain مسجل</h3><p dir="rtl">ينبغي قبل الحصول على شهادة SSL أن نملك اسم نطاق مُسجَّل والذي نرغب باستخدام الشهادة معه، إن كُنّا لا نمتلك اسم نطاق مُسجَّل فبإمكاننا تسجيله باستخدام أحد مُسجِّلات اسم النطاق المتوفِّرة (مثل Namecheap، GoDaddy، إلخ..).</p><h3 dir="rtl">حقوق التحقق من النطاق</h3><p dir="rtl">يجب من أجل العمليّة الأساسيّة للتحقّق من النطاق أن نملك نفاذًا إلى أحد عناوين البريد الإلكتروني على تسجيل WHOIS لنطاقنا أو إلى عنوان بريد إلكتروني من نمط مُدير admin على النطاق نفسه، تقوم سلطات الشهادات التي تُصدِر شهادات SSL نموذجيًّا بالتحقّق من التحكم بالنطاق عن طريق إرسال بريد إلكتروني للتحقّق إلى أحد عناوين البريد الإلكتروني على تسجيل WHOIS لنطاقنا، أو إلى عنوان بريد إلكتروني من نمط مدير عام على النطاق ذاته، توفّر بعض سلطات الشهادات طرق بديلة للتحقّق من النطاق، مثل DNS أو التحقّق المعتمد على HTTP والتي هي مواضيع خارج نطاق درسنا.</p><p dir="rtl">إن كنت ترغب في إصدار شهادة SSL مع تحقّق من المنظّمة (Organization Validation (OV أو تحقّق مُوسَّع (Extended Validation (EV فيجب عليك تزويد سلطات الشهادات بأوراقك لتأسيس هوية قانونيّة لمالك الموقع من بين الأشياء الأخرى.</p><h3 dir="rtl">خادوم الويب</h3><p dir="rtl">سنحتاج بالإضافة للنقاط المذكورة سابقًا إلى خادوم ويب لتثبيت شهادة SSL عليه، وهو الخادوم القابل للوصول إليه عبر اسم النطاق الذي سنصدر شهادة SSL له، سيكون نموذجيًّا خادوم Apache HTTP، Nginx، HAProxy، أو Varnish، إن كنت تحتاج المساعدة في إعداد خادوم ويب قابل للوصول من خلال اسم النطاق المُسجَّل لديك فقم باتباع الخطوات التالية:</p><ul dir="rtl"><li>إعداد خادوم ويب من اختيارك، على سبيل المثال خادوم (LEMP (Nginx أو (LAMP (Apache.</li><li>إعداد النطاق ليستخدم أسماء الخواديم nameservers الملائمة.</li><li>إضافة تسجيلات DNS records لخادوم الويب إلى أسماء الخواديم لديك.</li></ul><h2 dir="rtl">اختيار سلطة الشهادات</h2><p dir="rtl">إن لم تكن متأكّدًا من سلطة الشهادات التي تريد استخدامها فهنالك القليل من العوامل المهمّة التي يجب أن تأخذها بعين الاعتبار، وكنظرة عامّة فإنّ الشيء الأكثر أهمية أن تكون سلطة الشهادات التي تختارها تعطيك الميزات التي تريدها بالسعر الذي يناسبك، يُركّز هذا القسم بشكل أكبر على الميزات التي يجب أن يعلم بها مشترو شهادات SSL أكثر من الأسعار.</p><h3 dir="rtl">عضويات برنامج الشهادات الجذرية Root</h3><p dir="rtl">إنّ النقطة الأهم هي أن تكون سلطة الشهادات التي نختارها عضوًا في برامج الشهادات الجذريّة لأنظمة التشغيل ومتصفحات الويب الأكثر استخدامًا، أي بمعنى أن تكون سلطة شهادات موثوقة وشهادتها الجذريّة موثوقة من قبل معظم المتصفّحات والبرمجيات الأخرى، فإن كانت شهادة SSL لموقعنا مُوقَّعة من قبل سلطة شهادات موثوقة فستعتبر هويتها صالحة من قبل البرمجيّات التي تثق بسلطة الشهادات، وهي على النقيض تمامًا من شهادات SSL المُوقَّعة ذاتيًّا والتي تُزوّدنا أيضًا بقدرات التشفير ولكنّها مصحوبة بتحذيرات التحقّق من الهوية التي لا تسر معظم زوّار موقعنا.</p><p dir="rtl">إنّ أغلب سلطات الشهادات التي سنصادفها هي عضو من برامج الشهادات الجذريّة الشائعة، وستكون متوافقة مع 99% من المتصفحات، ولكن لن يضرّنا أن نتحقّق من ذلك قبل شراء الشهادة، تزوّدنا شركة Apple على سبيل المثال بلائحة من شهادات SSL الجذريّة الموثوقة لأجل IOS8 هنا.</p><h3 dir="rtl">أنواع الشهادات</h3><p dir="rtl">يجب أن نتأكّد من اختيار سلطة شهادات تزوّدنا بنوع الشهادة الذي نريده، تُقدّم العديد من سلطات الشهادات أشكال مختلفة من أنواع الشهادات في إطار مجموعة من الأسماء والأسعار والتي كثيرًا ما تكون مربكة، وهذا وصف مختصر لكل نوع:</p><ul dir="rtl"><li><strong>نطاق مُفرَد Single Domain</strong>: يُستخدَم من أجل النطاق المُفرَد، مثل example.com، نلاحظ أنّه لا يتم تضمين النطاقات الفرعيّة subdomains مثل www.example.com</li><li><strong>Wildcard</strong>: تُستخدَم من أجل النطاق وأي نطاقات فرعيّة له، على سبيل المثال يُمكِن استخدام شهادة wildcard لِـ *.example.com أيضًا من أجل www.example.com وstore.example.com</li><li><strong>النطاقات المُتعدّدة Multiple Domain</strong>: وهي معروفة باسم شهادة SAN أو UC، ويمكن استخدامها مع النطاقات المُتعدّدة والنطاقات الفرعيّة التي تتم إضافتها إلى حقل الاسم البديل للموضوع Subject Alternative Name، فعلى سبيل المثال يُمكِن استخدام شهادة نطاقات متعدّدة مُفرَدة مع example.com، www.example.com، و example.net</li></ul><p dir="rtl">وبالإضافة لأنواع الشهادات المذكورة آنفًا تُوجَد مستويات مختلفة من التحقّق التي توفّرها سلطات الشهادات، وسنتحدّث عنها هنا:</p><ul dir="rtl"><li><strong>التحقّق من النطاق (Domain Validation (DV</strong>: يتم إصدار شهادات DV بعد أن تتحقّق سلطة الشهادات أنّ طالب الشهادة يملك أو يتحكّم بالنطاق المطلوب.</li><li><strong>التحقّق من المُنظّمة (Organization Validation (OV</strong>: يُمكِن إصدار شهادات OV فقط بعد أن تتحقّق سلطة الشهادات من الهوية القانونية لطالب الشهادة.</li><li><strong>التحقّق المُوسَّع (Extended Validation (EV</strong>: يُمكِن إصدار شهادات EV فقط بعد أن تتحقّق سلطة الشهادات من الهوية القانونيّة لطالب الشهادة مع عدّة أشياء أخرى وفق مجموعة صارمة من الإرشادات، إنّ الغرض من هذا النوع من الشهادات هو توفير ضمان إضافي عن قانونيّة هوية مُنظّمتك بالنسبة لزوّار موقعك، يُمكِن أن تكون شهادات EV مُفردة أو متعدّدة النطاقات ولكن لا يمكن أن تكون wildcard.</li></ul><h3 dir="rtl">ميزات إضافية</h3><p dir="rtl">توفّر العديد من سلطات الشهادات مجموعة كبيرة ومتنوعة من الميزات الإضافيّة لتمييز نفسها عن بقيّة بائعي شهادات SSL، بعض هذه الميزات قد توفّر عليك المال، لذا من المهم أن تعرف احتياجاتك مقابل العروض قبل أن تقوم بالشراء، على سبيل المثال تشمل الميزات التي يجب البحث عنها إعادة إصدار شهادة مجانيّة أو شهادة بسعر شهادة نطاق مُفرَد وتعمل من أجل www. والاسم الأساسي للنطاق، مثل www.example.com مع شهادة SAN من example.com</p><h2 dir="rtl">الخاتمة</h2><p dir="rtl">تعلّمنا في هذا الدّرس المفاهيم الأساسيّة للحصول على شهادات SSL من سلطة شهادات تجاريّة، والمتطلّبات الأساسيّة التي نحتاجها قبل شرائها، وتحدّثنا عن العوامل التي يجب أن نأخذها بعين الاعتبار عند اختيار سلطة شهادات تجاريّة.</p><p dir="rtl">ترجمة -وبتصرّف- لـ <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-install-an-ssl-certificate-from-a-commercial-certificate-authority">How To Install an SSL Certificate from a Commercial Certificate Authority</a> لصاحبه Mitchell Anicas.</p>
]]></description><guid isPermaLink="false">146</guid><pubDate>Wed, 25 Nov 2015 21:24:10 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x62B;&#x628;&#x62A; &#x62E;&#x627;&#x62F;&#x648;&#x645; Bacula &#x644;&#x644;&#x646;&#x633;&#x62E; &#x627;&#x644;&#x627;&#x62D;&#x62A;&#x64A;&#x627;&#x637;&#x64A; &#x639;&#x644;&#x649; Ubuntu 14.04</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81-%D8%AA%D8%AB%D8%A8%D8%AA-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-bacula-%D9%84%D9%84%D9%86%D8%B3%D8%AE-%D8%A7%D9%84%D8%A7%D8%AD%D8%AA%D9%8A%D8%A7%D8%B7%D9%8A-%D8%B9%D9%84%D9%89-ubuntu-1404-r144/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_11/bacula-ubuntu.png.3aa5c426c7f29dc103cbee556f9ca0f6.png" /></p>

<p id="مقدمة"><strong>Bacula</strong> هو برنامج مفتوح المصدر للنسخ الاحتياطي في الشبكة؛ يمكّن من إنشاء نسخ احتياطية Backups من نظام التشغيل واستعادة البيانات في حال حصول مشكل. يتميز Bacula بالمرونة والمتانة، الأمر الذي يجعل منه مناسبا للنسخ الاحتياطي في حالات كثيرة؛ على الرغم من أن إعداده مرهق قليلا. يعد نظام النسخ الاحتياطي جزءا مهما في أغلب البنى التحتية للخواديم؛ نظرا لكون إعادة البيانات (إرجاعها) عنصرا أساسيا في أغلب <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D8%AA%D8%AE%D8%B7%D9%8A%D8%B7-%D9%84%D8%A7%D8%B3%D8%AA%D8%B1%D8%AF%D8%A7%D8%AF-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D9%88%D9%8A%D8%A8-%D8%B6%D9%85%D9%86-%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A5%D9%86%D8%AA%D8%A7%D8%AC-r135/">خطط استعادة الأنظمة</a>.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/bacula-ubuntu.png.70aada69787066dd7fd70792d3ad2f9f.png"><img data-fileid="7797" class="ipsImage ipsImage_thumbnailed" alt="bacula-ubuntu.thumb.png.14bf1741777c897f" src="https://academy.hsoub.com/uploads/monthly_2015_11/bacula-ubuntu.thumb.png.14bf1741777c897f8d3cdaac737fdc45.png"></a></p><p>سنشرح في هذا الدرس كيفية تثبيت عناصر الخادوم في Bacula على خادوم Ubuntu 14.04 وضبطها. سنعد Bacula لإنشاء شغل أسبوعي job ينشئ نسخة احتياطية محلية (أي على المضيف Host الذي يعمل عليه Bacula). لا يفرض Bacula نسخ البيانات محليَّا، إلا أننا بهذه الطريقة نوفر نقطة انطلاق جيدة لإنشاء نسخ احتياطية من خواديم أخرى يثبَّت عليها عميل Client لـ Bacula ويُضبط الاتصال بينه والخادوم.</p><h2 id="المتطلبات">المتطلبات</h2><p>تتطلب خطوات المقال صلاحيات وصول المستخدم الأعلى (<code>sudo</code>) على خادوم Ubuntu 14.04. سيحتاج الخادوم أيضا لمساحة قرص صلب كافية لتخزين جميع النسخ الاحتياطية التي تخطط للإبقاء عليها ضمن حيز زمني محدَّد.</p><p>سنعد Bacula لاستخدام اسم نطاق معرَّف بالكامل Fully Qualified Domain Name, FQDN (راجع مقال <a href="https://academy.hsoub.com/devops/servers/%D9%85%D9%82%D8%AF%D9%91%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D9%85%D9%8F%D8%B5%D8%B7%D9%8E%D9%84%D8%AD%D8%A7%D8%AA-%D9%88%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%88%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D9%86%D8%B8%D8%A7%D9%85-%D8%A3%D8%B3%D9%85%D8%A7%D8%A1-%D8%A7%D9%84%D9%86%D8%B7%D8%A7%D9%82%D8%A7%D8%AA-r5/">مقدّمة إلى مُصطَلحات وعناصر ومفاهيم نظام أسماء النطاقات</a> للمزيد عن اسم النطاق المعرَّف بالكامل)، على سبيل المثال <code>bacula.private.example.com</code>. استخدم عناوين IP المناسبة إن لم يكن لديك نظام لإدارة النطاقات. أبدل معلومات الاتصال بالشبكة الموجودة في هذا الدرس بعناوين شبكة يمكن لخواديمك الوصول إليها (عناوين IP أو أنفاق شبكات خاصة افتراضية)</p><p>نبدأ بعرض عام للعناصر المكوِّنة لـ Bacula.</p><h2 id="نظرة-عامة-على-عناصر-bacula">نظرة عامة على عناصر Bacula</h2><p>يتبع Bacula نموذج خادوم-عميل Server-client في النسخ الاحتياطي، ويتكون من عناصر برمجية مختلفة. سنركز في ما يلي على جزأيْ الخادوم والعميل بدلا من الحديث عن كل عنصر لوحده. إلا أنه يبقى من الأهمية بمكان أخذ معرفة سطحية بالعناصر المكونة للتطبيق.</p><p>يتكون خادوم Bacula (نشير إليه في بعض الأحيان بـ”خادوم النسخ الاحتياطي”) من العناصر التالية:</p><ul><li>مدير Bacula (يُشار إليه بـDIR): وهو البرنامج الذي يتحكم في عمليات النسخ الاحتياطي والإعادة التي تنفذها خدمتا File وStorage.</li><li>خدمة التخزين Storage (يُشار إليها بـSD): برنامج يقرأ من أجهزة التخزين المستخدمة للنسخ الاحتياطي ويكتب فيها.</li><li>برنامج الفهرس Catalog: خدمات تحتفظ بقاعدة بيانات للملفات المنسوخة احتياطا. تُستخدم قاعدة بيانات مثل MySQL أو PostgreSQL لهذا الغرض.</li><li>وحدة تحكم Bacula: واجهة بسطر أوامر يتفاعل بواسطتها مسؤول النسخ الاحتياطي مع مدير Bacula ويتحكم فيه.</li></ul><p><strong>ملحوظة:</strong> ليس مفروضا تواجدُ جميع العناصر المكونة لخادوم Bacula على نفس الخادوم الحسي؛ إلا أنها جميعها تعمل معا لتوفير وظيفة خادوم النسخ الاحتياطي.</p><p>يشغِّل عميلُ Bacula (أي الخادوم الذي نريد أخذ نسخ احتياطية منه) خدمة File (يُشار إليها بـFD). هذا العنصر عبارة عن برنامج يتيح لخادوم Bacula (مدير Bacula تحديدا) الوصول إلى البيانات التي ستُنسَخ. نسمي الخواديم التي نريد أخذ نسخ منها “عملاء النسخ الاحتياطي” أو “العملاء”.</p><p>سنعدّ مثل ما أشرنا في المقدمة، خادوم النسخ الاحتياطي لإنشاء نسخة احتياطية من نظام ملفاته الخاص؛ وهو ما يعني أن خادوم النسخ الاحتياطي سيكون أيضا عميل نسخ احتياطي وبالتالي سيشغل خدمة File.</p><p>نبدأ بالتثبيت.</p><h2 id="تثبيت-mysql">تثبيت MySQL</h2><p>يستخدم Bacula قاعدة بيانات SQL مثل MySQL وPostgreSQL لإدارة الفهرس. سنستخدم MySQL في هذا الدرس.</p><p>نبدأ بتحديث الحزم:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">$ sudo apt-get update</pre><p>ثم نثبت خادوم MySQL:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">$ sudo apt-get install mysql-server</pre><p>سيُطلَب منك إدخال كلمة سر خاصة بالحساب الإداري <code>root</code> لـMySQL. أدخل كلمة سر ثم أكدها. ستحتاج لكلمة السر هذه أثناء تثبيت Bacula.</p><h2 id="تثبيت-bacula">تثبيت Bacula</h2><p>ننفذ الأمر التالي لتثبيت العناصر المكونة لخادوم Bacula وعميله:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">$ sudo apt-get install bacula-server bacula-client</pre><p>سيُطلب منك إدخال معلومات ستُستخدم لإعداد Postfix الذي يستخدمه Bacula:</p><ul><li>النوع العام لإعداد البريد General Type of Mail Configuration: اختر <code>Internet Site</code>.</li><li>اسم نظام البريد: أدخل اسم النطاق الكامل لخادومك أو اسم المضيف.</li></ul><p>في الخطوة الموالية تُطلب معلومات تستخدم لإعداد قاعدة بيانات Bacula:</p><ul><li>اختر <code>Yes</code> بالنسبة لخيار <code>Configure database for bacula-director-mysql with dbconfig-common</code>.</li><li>أدخل كلمة سر الحساب الإداري لـMySQL ثم أكدها (خيار <code>Password of the database's administrative user</code>).</li><li>أدخل كلمة سر جديدة وأكدها عند خيار <code>MySQL application password for bacula-director-mysql</code> أو اتركها فارغة لتوليد كلمة سر عشوائية.</li></ul><p>الخطوة الأخيرة في عملية التثبيت هي تحديث أذون السكربت الذي يستخدمه Bacula أثناء شغل فهرس النسخ الاحتياطي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">$ sudo chmod 755 /etc/bacula/scripts/delete_catalog_backup</pre><p>ننتقل الآن، بعد تثبيت الخادوم والعميل الخاصين بـBacula إلى إنشاء مجلدات النسخ الاحتياطي والإعادة.</p><h2 id="إنشاء-مجلدات-النسخ-الاحتياطي-والإعادة">إنشاء مجلدات النسخ الاحتياطي والإعادة</h2><p>يحتاج Bacula إلى مجلد للنسخ الاحتياطي يخزِّن فيه الأرشيف، ومجلد للإعادة يضع فيه الملفات المُعادة. تأكد من إنشاء هذه المجلدات على تجزئة بمساحة كافية. ننشئ مجلدين جديدين:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">$ sudo mkdir -p /bacula/backup /bacula/restore</pre><p>نعدّل أذون الملف لكي يقتصر إذن الوصول للمجلدات على عمليّة bacula (والمستخدم الأعلى):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">$ sudo chown -R bacula:bacula /bacula
$ sudo chmod -R 700 /bacula</pre><p>بهذا نكون جاهزين لإعداد مدير Bacula.</p><h2 id="إعداد-مدير-bacula">إعداد مدير Bacula</h2><p>يتكون Bacula من عناصر عدة يجب إعداد كل واحد منها على حدة ليعمل بطريقة صحيحة. توجد جميع ملفات الإعداد في المجلَّد <code>etc/bacula/</code>.</p><p>نبدأ بمدير Bacula.</p><p>افتح ملف إعداد المدير لتحريره:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">$ sudo nano /etc/bacula/bacula-dir.conf</pre><h3 id="إعداد-الأشغال-المحلية">إعداد الأشغال المحلية</h3><p>يُستخدَم شغل Bacula لـتنفيذ إجراءات النسخ الاحتياطي والإعادة. تعرِّف موارد الشغل تفاصيل ما يفعله شغلٌ مّا. تتضمن تفاصيل الشغل اسم العميل، مجموعة الملفات FileSet المُراد نسخها أو إعادتها وأمورا أخرى.</p><p>سنعد هنا الأشغال التي سنستخدمها لنسخ نظام الملفات المحلي.</p><p>ابحث في ملف <code>bacula-dir.conf</code> عن مورد الشغل ذي الاسم <code>BackupClient1</code>. غير قيمة <code>Name</code> لتصبح <code>BackupLocalFiles</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Job {
  Name = "BackupLocalFiles"
  JobDefs = "DefaultJob"
}</pre><p>ابحث الآن عن مورد الشغل <code>RestoreFiles</code>. يجب أن تعدِّل قيمتين في هذا المورد: غير قيمة <code>Name</code> لتصبح <code>RestoreLocalFiles</code> وقيمة <code>Where</code> لتصبح <code>bacula/restore/</code>. يبدو الملف بعد التعديل على النحو التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Job {
  Name = "RestoreLocalFiles"
  Type = Restore
  Client=BackupServer-fd
  FileSet="Full Set"
  Storage = File
  Pool = Default
  Messages = Standard
  Where = /bacula/restore
}</pre><p>تعد هذه التعليمات شغل <code>RestoreLocalFiles</code> لإعادة الملفات إلى المجلَّد <code>bacula/restore/</code> الذي أنشأناه سابقا.</p><h3 id="إعداد-مجموعة-الملفات">إعداد مجموعة الملفات</h3><p>تعيّن مجموعة ملفات Bacula - كما يشير الاسم - مجموعة ملفات أو مجلدات للتضمين أو الإبعاد من النسخ الاحتياطية.</p><p>ابحث عن مجموعة ملفات <code>FileSet</code> باسم <code>Full Set</code> (توجد تحت التعليق <code># List of files to be backed up</code> أي قائمة جميع الملفات المراد نسخها). سنجري ثلاثة تعديلات:(1) إضافة خيار استخدام <code>gzip</code> لضغط النسخ الاحتياطية، (2) تغيير الملفات المضمّنة من <code>usr/sbin/</code> إلى <code>/</code> و(3) تغيير الملفات المبعدة وإضافة المسار <code>bacula/</code>. يبدو المورد بعد نزع التعليقات على النحو التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">FileSet {
  Name = "Full Set"
  Include {
    Options {
      signature = MD5
      compression = GZIP
    }    
    File = /
  }
  Exclude {
    File = /var/lib/bacula
    File = /bacula
    File = /proc
    File = /tmp
    File = /.journal
    File = /.fsck
 }
}</pre><p>أولا، تفعِّل التعليمات استخدام <code>gzip</code> لضغط الملفات أثناء إنشاء النسخ الاحتياطية؛ ثم تضيف الجذر <code>/</code> إلى الملفات المُراد نسخها (أي جميع ملفات التجزئة). وأخيرا تبعد المجلّد <code>bacula/</code> من النسخة الاحتياطية لكي لا نعيد نسخ النسخ الاحتياطية السابقة والملفات المُعادة.</p><p><strong>ملحوظة:</strong> إن رغبت في إضافة تجزئات مركَّبة Mounted partitions في <code>/</code> إلى مجموعة الملفات فيجب إضافة تعليمة <code>File</code> لكل واحدة منها.</p><p>تذكر أن النسخ الاحتياطية ستحتاج، عند استخدام مجموعات ملفات كبيرة مثل <code>Full Set</code> في أشغال النسخ الاحتياطي، مساحة أكبر على القرص الصلب مما لو كان اختيار ملفات النسخ أكثر تحديدا. على سبيل المثال، إن كان لديك مخطّط إعادة Recovery plan يحدد الحزم البرمجية الواجب تثبيتها والأماكن التي يجب وضع الملفات المعادة فيها؛ فإن مجموعة ملفات لا تتضمن سوى ملفات الإعداد المخصَّص وقواعد البيانات تكفي لاحتياجاتك ولا تستخدم سوى جزء يسير من القرص الصلب لتخزين أرشيف النسخ الاحتياطية.</p><h3 id="إعداد-الاتصال-الخاص-بخدمة-التخزين-storage">إعداد الاتصال الخاص بخدمة التخزين Storage</h3><p>يعرّف مورد Storage في ملف إعداد المدير خدمة التخزين التي يجب على مدير Bacula الاتصال بها. سنضبُط خدمة التخزين في ما بعد.</p><p>اعثُر على مورد Storage وأبدل قيمة <code>Address</code> (أي <code>localhost</code>) باسم النطاق الكامل FQDN المحلي (أو عنوان IP المحلي) لخادوم النسخ الاحتياطي. يبدو الملف بعد التعديل كالتالي (أبدل :</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Storage {
   Name = File
   # Do not use "localhost" here
   Address = backup_server_private_FQDN                # N.B. Use a fully qualified name here
   SDPort = 9103
   Password = "ITXAsuVLi1LZaSfihQ6Q6yUCYMUssdmu_"
   Device = FileStorage
   Media Type = File
}
</pre><p>سنعد خدمة التخزين للإنصات لواجهة الشبكة المحلية حتى يتسنى للعملاء الاتصال بها، لذا من المهم إعداد المورد لاستخدام العنوان المحلي لخادوم النسخ الاحتياطي.</p><h3 id="إعداد-مجمع-تخزين-storage-pool">إعداد مجمع تخزين Storage pool</h3><p>يعرف مورد Pool وسائط التخزين التي سيخزن عليها Bacula النسخ الاحتياطية. سنتعامل مع ملفات كما لو كانت تجزئات للتخزين ثم نحدث اللصيقة Label لتوصيف النسخ الاحتياطية المحلية.</p><p>ابحث عن مورد <code>Pool</code> باسم <code>File</code> (توجد تحت التعليق <code># File Pool definition</code>) وأضف سطرا لتحديد صيغة اللصيقة. يبدو المورد، بعد التعديل، على النحو التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint"># File Pool definition
Pool {
   Name = File
   Pool Type = Backup
   Label Format = Local-
   Recycle = yes                       # Bacula can automatically recycle Volumes
   AutoPrune = yes                     # Prune expired volumes
   Volume Retention = 365 days         # one year
   Maximum Volume Bytes = 50G          # Limit Volume size to something reasonable
   Maximum Volumes = 100               # Limit number of Volumes in Pool
}</pre><p>احفظ الملف ثم أغلقه. بهذا يكتمل إعداد مدير Bacula.</p><h3 id="التحقق-من-إعدادات-مدير-bacula">التحقق من إعدادات مدير Bacula</h3><p>نتحقق من عدم وجود أخطاء صياغة في ملف إعداد المدير DIR:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">$ sudo bacula-dir -tc /etc/bacula/bacula-dir.conf</pre><p>إن لم تظهر رسائل خطأ فملف الإعداد نظيف من أخطاء الصياغة.</p><p>ننتقل لإعداد خدمة التخزين SD.</p><h2 id="إعداد-خدمة-التخزين">إعداد خدمة التخزين</h2><p>نحتاج لإعداد خدمة التخزين حتى يعرف خادوم Bacula أين يخزّن النسخ الاحتياطية.</p><p>افتح ملف إعداد التخزين لتحريره:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">$ sudo nano /etc/bacula/bacula-sd.conf</pre><h3 id="إعداد-مورد-storage">إعداد مورد Storage</h3><p>اعثر على مورد Storage في ملف الإعداد الذي فتحته للتو. يعرّف هذا المورد العنوان الذي تنصت خدمة التخزين للاتصالات القادمة منه. أضف معطى SDAddress وحدد قيمته بالنطاق الكامل (أو عنوان IP) المحلي لخادوم النسخ الاحتياطي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Storage {                             # definition of myself
  Name = BackupServer-sd
  SDPort = 9103                  # Director's port
  WorkingDirectory = "/var/lib/bacula"
  Pid Directory = "/var/run/bacula"
  Maximum Concurrent Jobs = 20
  SDAddress = backup_server_private_FQDN
}</pre><h3 id="إعداد-وسيط-التخزين">إعداد وسيط التخزين</h3><p>اعثر على مورد <code>Device</code> باسم <code>FileStorage</code> وحدث قيمة <code>Archive Device</code> لتوافق مجلد النسخ الاحتياطي لديك:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Device {
  Name = FileStorage
  Media Type = File
  Archive Device = /bacula/backup 
  LabelMedia = yes;                   # lets Bacula label unlabeled media
  Random Access = Yes;
  AutomaticMount = yes;               # when device opened, read it
  RemovableMedia = no;
  AlwaysOpen = no;
}</pre><p>احفظ الملف ثم أغلقه.</p><h3 id="التحقق-من-إعداد-خدمة-التخزين">التحقق من إعداد خدمة التخزين</h3><p>ننفذ الأمر التالي للتحقق من عدم وجود أخطاء صياغة في ملف الإعداد الخاص بخدمة التخزين:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">$ sudo bacula-sd -tc /etc/bacula/bacula-sd.conf</pre><p>إن لم تظهر رسائل خطأ فملف الإعداد نظيف من أخطاء الصياغة.</p><p>أكملنا إعداد Bacula وأصبحنا جاهزين لإعادة تشغيل عناصر خادوم Bacula.</p><h2 id="إعادة-تشغيل-مدير-bacula-وخدمة-التخزين">إعادة تشغيل مدير Bacula وخدمة التخزين</h2><p>نعيد تشغيل مدير Bacula وخدمة التخزين لاعتماد تعديلات الإعدادات:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">$ sudo service bacula-director restart
$ sudo service bacula-sd restart</pre><p>نجرب، بعد إعادة تشغيل الخدمتين، عمل خادوم Bacula بإنشاء شغل نسخ احتياطي.</p><h2 id="اختبار-شغل-للنسخ-الاحتياطي">اختبار شغل للنسخ الاحتياطي</h2><p>نستخدم وحدة تحكم Bacula لتشغيل أول شغل للنسخ الاحتياطي؛ إن عمل دون مشاكل فسنتأكد أن Bacula مضبوط بطريقة صحيحة.</p><p>ادخل إلى وحدة التحكم بتنفيذ الأمر التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">$ sudo bconsole</pre><p>ستُنقَل إلى محثّ Prompt وحدة تحكم Bacula المُشار إليه ب<code>*</code>.</p><h3 id="إنشاء-لصيقة">إنشاء لصيقة</h3><p>ابدأ بتنفيذ أمر <code>label</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">* label</pre><p>سيُطلب منك إدخال اسم للتجزئة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Enter new Volume name:
MyVolume</pre><p>ثم اختر مجمع التخزين الذي تريد أن يستخدم للنسخ الاحتياطية. سنختار <code>File</code> الذي أعددناه سابقا بإدخال الرقم 2:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Select the Pool (1-3):
2</pre><h3 id="التشغيل-اليدوي-لشغل-نسخ-احتياطي">التشغيل اليدوي لشغل نسخ احتياطي</h3><p>أعطينا Bacula المعلومات الكافية ليعرف كيف يخزن بيانات النسخ الاحتياطية، ويمكن بالتالي تشغيل النسخ الاحتياطي لمعرفة ما إذا كان يعمل بطريقة صحيحة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">* run</pre><p>سيطلب منك اختيار الشغل الذي تريد تشغيله. نريد تشغيل <code>BackupLocalFiles</code> لذا سنختار <code>1</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Select Job resource (1-3):
1</pre><p>راجع التفاصيل في محث التأكيد <code>Run Backup job</code> ثم اختر <code>Yes</code> للتشغيل:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">* yes</pre><h3 id="فحص-الرسائل-والحالة">فحص الرسائل والحالة</h3><p>سيخبرك Bacula بعد تشغيل شغل للنسخ الاحتياطي أن لديك رسائل، وهي مخرجات ولّدتها الأشغال الجارية. افحص الرسائل بتنفيذ الأمر:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">* messages</pre><p>يجب أن تظهر رسالة <code>No prior Full backup Job record found</code> (أي لم يُعثر على سجل لنسخة احتياطية كاملة سابقة) وأخرى تخبرك ببدء الشغل. ستظهر رسائل خطأ في حال وجود مشاكل مع تلميحات لأسبابها، لماذا لم ينفَّذ الشغل مثلا.</p><p>توجد طريقة أخرى لمعرفة حالة الشغل وهي فحص حالة المدير. لاستعمال هذه الطريقة أدخل اﻷمر التالي في محث وحدة التحكم <code>bconsole</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">* status director</pre><p>إن كان كل شيء جرى على ما يرام فسترى أن الشغل يعمل. ستظهر مخرجات تشبه التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Running Jobs:
Console connected at 09-Apr-15 12:16
JobId Level   Name                       Status
======================================================================
3 Full    BackupLocalFiles.2015-04-09_12.31.41_06 is running
====</pre><p>ستنتقل وحدة التحكم إلى فقرة <code>Terminated Jobs</code> (أشغال مكتملة) من تقرير الحالة عند انتهاء تنفيذ الشغل. تظهر المخرجات بما يشبه التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Terminated Jobs:
JobId  Level    Files      Bytes   Status   Finished        Name
====================================================================
3  Full    161,124    877.5 M  OK       09-Apr-15 12:34 BackupLocalFiles</pre><p>تشير الحالة <code>OK</code> إلى أن شغل النسخ الاحتياطي عمل دون مشاكل.</p><p>الخطوة التالية هي اختبار شغل الإعادة.</p><h2 id="اختبار-شغل-الإعادة">اختبار شغل الإعادة</h2><p>من المهم بعد إنشاء النسخ الاحتياطية اختبار إمكانية إعادتها على نحو سليم. يمكن أمر <code>restore</code> من إعادة الملفات التي نسخناها احتياطا.</p><h3 id="تنفيذ-الشغل-restore-all">تنفيذ الشغل Restore All</h3><p>سنعيد جميع الملفات الموجودة في آخر نسخة احتياطية، لذا نستخدم الأمر:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">* restore all</pre><p>ستظهر قائمة بها خيارات متعددة تستخدم لتعريف أي مجموعة نسخ احتياطية نعيد الملفات منها. بما أنه لا توجد لدينا سوى نسخة واحدة فسنحدد الخيار 5 <code>Select the most recent backup</code> (اختر النسخة الاحتياطية الأحدث):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Select item (1-13):
5</pre><p>بما أنه لا يوجد سوى عميل واحد وهو خادوم Bacula فسيُختار.</p><p>المحث التالي يسأل عن مجموعة الملفات التي تريد استخدامها. اختر <code>Full Set</code> أي الرقم 2:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Select FileSet resource (1-2):
2</pre><p>سيُحيلك الخيار إلى شجرة افتراضية للملفات يوجد بها تخطيط كامل للمجلد الذي نسخته احتياطا. تسمح هذه الواجهة التي تشبه <code>Shell</code> بتحديد الملفات المرادة إعادتها أو نزع تحديدها.</p><p>بما أننا نفذنا أمر <code>restore all</code> (إعادة الجميع) فإن كل ملف في المخطّط الشجري محدَّد لإعادته. تسبق علامة <code>*</code> الملفات المحدّدة.</p><p>إن أردت تخصيص الاختيار فيمكن التنقل في قائمة الملفات باستخدام الأمرين <code>ls</code> و<code>cd</code>، تحديد الملفات ب<code>mark</code> ونزع تحديدها ب<code>unmark</code>. تحصل على قائمة بجميع الأوامر المتاحة عند تنفيذ الأمر <code>help</code> (مساعدة) في وحدة التحكم.</p><p>لبدء عملية الإعادة، بعد الانتهاء من تحديد الملفات، نفذ الأمر:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">* done</pre><p>أكد رغبتك في تنفيذ شغل الإعادة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">OK to run? (yes/mod/no):
yes</pre><h3 id="فحص-الرسائل-والحالة-1">فحص الرسائل والحالة</h3><p>ندقق، مثل ما فعلنا مع شغل النسخ الاحتياطي، في رسائل مدير Bacula وحالته بعد تنفيذ شغل الإعادة. افحص الرسائل بتنفيذ:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">* messages</pre><p>يجب أن تظهر رسالة تفيد ببدء شغل الإعادة أو أنه اكتمل مع حالة <code>OK</code> دلالةً على نجاح العملية. ستظهر رسائل خطأ في حال وجود مشاكل مع تلميحات لأسبابها. يمكن أيضا فحص حالة المدير:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">* status director</pre><p>نفذ الأمر <code>exit</code> للخروج من وحدة تحكم Bacula بعد الانتهاء من إعادة الملفات:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">* exit</pre><h3 id="التحقق-من-الإعادة">التحقق من إعادة الملفات</h3><p>يمكن بالنظر إلى المجلد <code>bacula/restore/</code> (عرّفناه ضمن شغل <code>RestoreLocalFiles</code> في إعداد مدير Bacula) التحقق من أن شغل الإعادة أرجع فعلا الملفات المحدَّدة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">$ sudo ls -la /bacula/restore</pre><p>يجب أن تظهر الملفات المُعادة في جذر نظام الملفات مع إبعاد الملفات والمجلدات الموجودة في فقرة <code>Exclude</code> من شغل <code>RestoreLocalFiles</code>. يجب أن تنسخ الملفات المعادة من النسخ الاحتياطية، عند إرجاع بيانات مفقودة، إلى أماكنها المناسبة (وضع ملفات الإعداد مثلا في المجلد المناسب حسب البرنامج أو التطبيق).</p><h3 id="حذف-الملفات-المعادة">حذف الملفات المعادة</h3><p>نفذ الأمر التالي إن أردت حذف الملفات المعادة، لإخلاء مساحة في القرص الصلب:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">$ sudo -u root bash -c "rm -rf /bacula/restore/*"</pre><p>يجب تنفيذ أمر <code>rm</code> بصلاحيات <code>root</code> إذ أن الكثير من الملفات المعادة يمتلكها المستخدم الأعلى.</p><h2 id="خاتمة">خاتمة</h2><p>يكون لديك باتباع الخطوات المشروحة في هذا المقال إعداد أساسي لـBacula يمكن من نسخ نظام الملفات المحلي وإعادته. الخطوة الموالية هي إضافة خواديم عميلة لتتمكن من إرجاع بياناتها في حال فقدان ملفات من النظام.</p><p>ترجمة -وبتصرف- للمقال <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-install-bacula-server-on-ubuntu-14-04">How To Install Bacula Server on Ubuntu 14.04</a> لصاحبه Mitchell Anicas.</p>
]]></description><guid isPermaLink="false">144</guid><pubDate>Mon, 23 Nov 2015 22:19:00 +0000</pubDate></item><item><title>&#x625;&#x639;&#x62F;&#x627;&#x62F; &#x646;&#x638;&#x627;&#x645; &#x645;&#x631;&#x643;&#x632;&#x64A; &#x644;&#x633;&#x62C;&#x644;&#x627;&#x62A; &#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A; &#x627;&#x644;&#x648;&#x64A;&#x628; &#x641;&#x64A; &#x628;&#x64A;&#x626;&#x629; &#x625;&#x646;&#x62A;&#x627;&#x62C;</title><link>https://academy.hsoub.com/devops/servers/%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D9%86%D8%B8%D8%A7%D9%85-%D9%85%D8%B1%D9%83%D8%B2%D9%8A-%D9%84%D8%B3%D8%AC%D9%84%D8%A7%D8%AA-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%81%D9%8A-%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A5%D9%86%D8%AA%D8%A7%D8%AC-r141/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_11/building-for-production-5_(1).png.249c902162bd3e1ad12e467a3c5832b8.png" /></p>

<p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/building-for-production-5_(1).png.2ddcf83e78f98d6d6b0dbf72ee99f965.png"><img data-fileid="7380" class="ipsImage ipsImage_thumbnailed" alt="building-for-production-5_(1).thumb.png." src="https://academy.hsoub.com/uploads/monthly_2015_11/building-for-production-5_(1).thumb.png.8b7260e7f3218d950b3cbadc3e1c4321.png"></a></p><p id="مقدمة">يمكننا الآن، بعد إكمال إعداد بيئة الإنتاج في <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%B1%D8%A7%D9%82%D8%A8%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D9%85%D9%88%D8%AC%D9%87%D8%A9-%D9%84%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%A7%D8%AC-r139/">الدرس السابق</a>، البدء في إعداد نظام مركزي للسجلات؛ وهو وسيلة رائعة لجمع سجلات الخواديم ومعاينتها. لا يعدّ إعداد نظام سجلات دقيق، على العموم، في نفس أهمية توفر نظامي نسخ احتياطي ومراقبة فعالين؛ إلا أنه يمكن أن يكون مفيدا جدا عند البحث في اتجهات استخدام التطبيق أو أثناء محاولة تحديد المشاكل التي يعاني منها التطبيق.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/01_centralized_logging.png.a00659d251fd7347da52c79dd7027228.png"><img data-fileid="7286" class="ipsImage ipsImage_thumbnailed" alt="01_centralized_logging.thumb.png.2b6d4a3" src="https://academy.hsoub.com/uploads/monthly_2015_11/01_centralized_logging.thumb.png.2b6d4a329b6c22aa225087fb4df869c3.png"></a></p><p>سنعد في هذا الدليل حزمة برامج ELK، ونعني بها Logstash، Elasticsearch وKibana؛ ثم نعد مختلف الخواديم المكونة لبيئة الإنتاج حتى ترسل السجلات المناسبة إلى خادوم السجلات. سنعد أيضا مُرشِحات Filters في Logstash من أجل تجزئة السجلات وهيكلتها وهو ما يسهِّل عملية البحث في السجلات وترشيحها ثم استخدام Kibana لمعاينتها.</p><h2 id="المتطلبات">المتطلبات</h2><p>يجب، إن أردت الوصول إلى لوحة المراقبة عبر نطاق خاص مثل <code>logging.example.com</code>، إنشاء سجل من نوع <code>A</code> ضمن إعدادات النطاق يحيل إلى عنوان IP العمومي الخاص بخادوم السجلات. أو يمكنك بدلا من ذلك الوصول إلى لوحة التسجيلات باستخدام عنوان الخادوم العمومي. يُنصح بإعداد خادوم السجلات لاستخدام <code>HTTPS</code> وتقييد الوصول إليه بوضعه في شبكة خاصة افتراضية.</p><h2 id="تثبيت-حزمة-elk-على-خادوم-السجلات">تثبيت حزمة ELK على خادوم السجلات</h2><p>اضبط حزمة ELK على خادوم السجلات باتباع خطوات درس <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-4-on-ubuntu-14-04">كيف تثبت Logstash، Elasticsearch وKibana 4 على خادوم Ubuntu 14.04</a>. تأكد من اتباع الخيار رقم 2 في فقرة <strong>توليد شهادات SSL</strong>.</p><p>توقف عند الوصول إلى فقرة <strong>ضبط معيد توجيه Logstash</strong>.</p><h2 id="إعداد-معيدي-توجيه-logstash-على-العملاء">إعداد معيدي توجيه Logstash على العملاء</h2><p>اضبط معيد توجيه Logstash (مُرسِل للسجلات) على الخواديم العميلة (مثلا <code>db1</code>، <code>app2</code>، <code>app1</code> و<code>lb1</code>) باتباع فقرة <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-install-elasticsearch-logstash-and-kibana-4-on-ubuntu-14-04#set-up-logstash-forwarder-%28add-client-servers%29">ضبط معيد توجيه Logstash</a> في درس ELK.</p><p>سيمكنك بعد إكمال الإعداد الدخولُ إلى Kibana عبر العنوان العمومي لخادوم السجلات وعرض سجلات النظام الخاصة بخواديمك.</p><h2 id="تحديد-السجلات-المراد-جمعها">تحديد السجلات المراد جمعها</h2><p>تتيح برامج ELK الكثير من السجلات لجمعها، حسب نوعية البرامج المثبتة على الخواديم وإعدادها. سنجمع، في مثالنا، السجلات التالية:</p><ul><li>سجل الاستعلامات Queries البطيئة في MySQL (الخادوم <code>db1</code>).</li><li>سجلات الأخطاء والوصول في Apache (على الخادومين <code>app1</code> و<code>app2</code>).</li><li>سجلات HAProxy (خادوم توزيع الحمل <code>lb1</code>).</li></ul><p>اخترنا هذه السجلات بالضبط لأن بإمكانها توفير معلومات مفيدة أثناء استكشاف الأخطاء وإصلاحها أو عند محاولة تحديد توجهات المستخدمين. يمكن أن يكون لدى خادومك سجلات أخرى مهمة، حسب إعداداتك.</p><h2 id="إعداد-سجلات-mysql">إعداد سجلات MySQL</h2><p>يحفظ MySQL الاستعلامات البطيئة في سجل على المسار <code>var/log/mysql/mysql-slow/</code>. يتضمن السجل الاستعلامات التي أخذت وقتا طويلا للتنفيذ؛ يمكن أن يساعد تحديد هذه الاستعلامات في تحسين التطبيق والبحث عن علله وإصلاحها.</p><h3 id="تفعيل-تسجيل-الاستعلامات-البطيئة-في-mysql">تفعيل تسجيل الاستعلامات البطيئة في MySQL</h3><p>تسجيل الاستعلامات البطيئة في MySQL غير مفعَّل في الإعدادات الافتراضية؛ لذا سنحتاج لتفعيله.</p><p>افتح ملف إعدادات MySQL لتحريره:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/mysql/my.cnf</pre><p>ابحث عن التعليمة <code>log_slow_queries</code> وانزع علامة التعليق <code>#</code> الموجودة أمامها ليصبح السطر على النحو التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">log_slow_queries        = /var/log/mysql/mysql-slow.log</pre><p>احفظ الملف ثم أغلقه. تجب إعادة تشغيل MySQL لاعتماد التغييرات:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service mysql restart</pre><p>سيبدأ MySQL الآن في تسجيل الاستعلامات التي تأخذ وقتا طويلا للتنفيذ. ملف السجل يوجد على المسار المحدّد في الإعداد.</p><h3 id="إرسال-ملفات-سجلات-mysql">إرسال ملفات سجلات MySQL</h3><p>يجب إعداد معيد التوجيه في Logstash لإرسال سجلات الاستعلامات البطيئة إلى خادوم السجلات. حرر ملف إعداد معيد التوجيه على خادوم قاعدة البيانات <code>db1</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/logstash-forwarder.conf</pre><p>أضف الأسطر التالية في آخر فقرة <code>files</code> لإرسال الاستعلامات البطيئة إلى خادوم السجلات وتحديد نوع السجل ب <code>mysql-slow</code></p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">,
{
  "paths": [
     "/var/log/mysql/mysql-slow.log"
  ],
  "fields": { "type": "mysql-slow" }
}
</pre><p>احفظ الملف ثم أغلقه. تعد التعليمات السابقة معيد توجيه Logstash لإرسال سجلات الاستعلامات البطيئة إلى خادوم السجلات وتعليمها ب<code>mysql-slow</code>. سنستخدم نوع السجل لاحقا في الترشيح.</p><p>أعد تشغيل معيد التوجيه للبدء في إرسال السجلات:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service logstash-forwarder restart</pre><h3 id="مرماز-codec-المدخلات-متعددة-الأسطر">مرماز Codec المدخلات متعددة الأسطر</h3><p>سنحتاج لتفعيل مرماز تعدد الأسطر في Logstash لمعالجة سجلات الاستعلامات البطيئة في MySQL التي تأتي على أسطر متعددة. افتح ملف الإعدادات الذي يعرِّف مدخل Lumberjack على خادوم <code>logging</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/logstash/conf.d/01-lumberjack-input.conf</pre><p>أضف الأسطر التالية إلى تعريف <code>lumberjack</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">codec =&gt; multiline {
  pattern =&gt; "^# User@Host:"
  negate =&gt; true
  what =&gt; previous
}</pre><p>احفظ الملف ثم أغلقه. تعد التعليمات أعلاه Logstash لاستخدام معالج السجلات متعددة الأسطر عند العثور على سجلات تحتوي على النمط Pattern المُحدَّد (أي تلك التي تبدأ ب <code># User@Host: </code>).</p><p>في ما يلي سنضبط مرشح Logstash لسجلات MySQL.</p><h3 id="مرشح-سجلات-mysql">مرشح سجلات MySQL</h3><p>افتح ملفا جديدا على خادوم السجلات <code>logging</code> لإضافة مرشحات لسجل MySQL. سنسمي الملف <code>11-mysql.conf</code> لكي يُقرأ بعد إعداد مدخلات Logstash (موجودة في ملف <code>01-lumberjack-input.conf</code>):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/logstash/conf.d/11-mysql.conf</pre><p>أضف تعريف المرشح التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">filter {
   # يسجل المستخدم واختياريا اسم المستضيف وعنوان IP
   if [type] == "mysql-slow" {
      grok {
        match =&gt; [ "message", "^# User@Host: %{USER:user}(?:\[[^\]]+\])?\s+@\s+%{HOST:host}?\s+\[%{IP:ip}?\]" ]
      }
   # يسجل مدة تنفيذ الاستعلام، مدة قفل السطر في قاعدة البيانات، الأسطر المُرجعة في النتيجة والأسطر المفحوصة. 

     grok {
       match =&gt; [ "message", "^# Query_time: %{NUMBER:duration:float}\s+Lock_time: %{NUMBER:lock_wait:float} Rows_sent: %{NUMBER:results:int} \s*Rows_examined: %{NUMBER:scanned:int}"]
     }
   # يسجل وقت حدوث الاستعلام
      grok {
         match =&gt; [ "message", "^SET timestamp=%{NUMBER:timestamp};" ]
      }
    # يستخرج الوقت اعتمادا على وقت الاستعلام بدلا من وقت إدراج العنصر في السجلات

      date {
         match =&gt; [ "timestamp", "UNIX" ]
      }
    # يحذف حقل الختم الزمني من السجل نظرا لتسجيل وقت الحدث (الاستعلام)
      mutate {
         remove_field =&gt; "timestamp"
      }
   }
}
</pre><p>احفظ الملف ثم أغلقه. تعد التعليمات Logstash لترشيح السجلات من نوع <code>mysql-slow</code> باستخدام أنماط <code>Grok</code> المحددة في تعليمات <code>match</code>. راجع التعليقا فوق كل تعليمة لأخذ نبذة عن عملها.</p><p>لكي تبدأ هذه المرشحات عملها يجب أن نعيد تشغيل Logstash:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service logstash restart</pre><p>يجب التأكد في هذه المرحلة من أن Logstash يعمل بطريقة صحيحة؛ إذ أن أخطاء الإعداد قد تتسبب في إخفاق إعادة تشغيله.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/02_kibana.png.d7addde8bb630a566f4a3de722e9d412.png"><img data-fileid="7282" class="ipsImage ipsImage_thumbnailed" alt="02_kibana.thumb.png.6851398a43bbbd021b81" src="https://academy.hsoub.com/uploads/monthly_2015_11/02_kibana.thumb.png.6851398a43bbbd021b81b6053db5e3d8.png"></a></p><p>يجب أن تتأكد أيضا أن Kibana قادر على رؤية سجلات MySQL المرشحة.</p><h2 id="سجلات-apache">سجلات Apache</h2><p>توجد سجلات Apache عادة على المسار <code>var/log/apache2/</code> باسم <code>access.log</code> و <code>error.log</code>. يتيح لك جمع هذه السجلات معرفة عناوين IP التي تتصل بخواديمك، طلبات هذه العناوين ونوعية المتصفحات ونظم التشغيل المستخدمة في الاتصال؛ بالإضافة إلى الأخطاء التي يبلغ عنها Apache.</p><h3 id="إرسال-سجلات-apache">إرسال سجلات Apache</h3><p>نضبط معيد توجيه Logstash لإرسال سجلات الوصول والأخطاء في Apache إلى خادوم <code>logging</code>.</p><p>نفذ الأمر التالي على كل واحد من خادومي التطبيق، <code>app1</code> و<code>app2</code> لفتح ملف إعاد الخاص بمعيد توجيه Logstash:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/logstash-forwarder.conf</pre><p>أضف ما يلي ضمن فقؤة <code>files</code> تحت التعليمات الموجودة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">,
{
   "paths": [
       "/var/log/apache2/access.log"
    ],
   "fields": { "type": "apache-access" }
},
{
   "paths": [
      "/var/log/apache2/error.log"
    ],
    "fields": { "type": "apache-error" }
}
</pre><p>احفظ الملف ثم أغلقه. تعد هذه التعليمات معيد توجيه Logstash لإرسال سجلات الوصول والأخطاء في Apache إلى خادوم السجلات، ثم تعليم كل سجل بنوعه (أي <code>apache-access</code> بالنسبة للوصول و<code>apache-error</code> بالنسبة للأخطاء).</p><p>أعد تشغيل معيد التوجيه للبدء في إرسال السجلات:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service logstash-forwarder restart</pre><p>إذا تركنا الإعداد الحالي فستُظهر كل سجلات Apache عنوان IP الخاص لخادوم HAProxy بوصفه عنوان المصدر. يعود السبب في ذلك إلى أن الخادوم الوسيط <code>lb1</code> هو الوسيلة الوحيدة للوصول إلى خواديم التطبيق من الإنترنت. يمكن تغيير هذا الأمر بإعداد الصيغة الافتراضية لسجل Apache بحيث يستخدم الرأسيات <code>X-Forwarded-For</code> التي يرسلها HAProxy.</p><p>افتح ملف إعداد Apache على كل واحد من خادومي التطبيقات:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/apache2/apache2.conf</pre><p>ابحث عن سطر يظهر على النحو التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">[Label apache2.conf — Original "combined" LogFormat]
LogFormat "%h %l %u %t \"%r\" %&gt;s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
</pre><p>أبدل:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint"> h% ب%{X-Forwarded-For}i </pre><p>لكي تصبح هيئة السطر كالتالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">[Label apache2.conf — Updated "combined" LogFormat]
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %&gt;s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
</pre><p>احفظ الملف ثم أغلقه. بهذا نكون أعددنا سجلات Apache لتضمين عنوان IP المصدر الفعلي بدلا من عنوان IP الخاص لخادوم توزيع الحمل.</p><p>أعد تشغيل Apache لاعتماد التغييرات:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service apache2 restart</pre><p>نحن الآن جاهزون لإضافة مرشحات لسجلات Apache في Logstash.</p><h3 id="مرشحات-سجلات-mysql">مرشحات سجلات MySQL</h3><p>ننشئ ملف إعداد جديدا على خادوم السجلات <code>logging</code> من أجل إضافة مرشحات لسجل Apache إلى Logstash. سنسميه <code>12-apache.conf</code> لكي يقرأه Logstash بعد ملف إعداد المُدخلات (أي ملف <code>01-lumberjack-input.conf</code>):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/logstash/conf.d/12-apache.conf</pre><p>أضف تعريفات المرشحات التالية:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">filter {
   if [type] == "apache-access" {
     grok {
       match =&gt; { "message" =&gt; "%{COMBINEDAPACHELOG}" }
     }
   }
}
filter {
   if [type] == "apache-error" {
     grok {
         match =&gt; { "message" =&gt; "\[(?&lt;timestamp&gt;%{DAY:day} %{MONTH:month} %{MONTHDAY} %{TIME} %{YEAR})\] \[%{DATA:severity}\] \[pid %{NUMBER:pid}\] \[client %{IPORHOST:clientip}:%{POSINT:clientport}] %{GREEDYDATA:error_message}" }
     }
  }
}
</pre><p>احفظ الملف ثم أغلقه. تعد هذه التعليمات Logstash لاستخدام مرشحات <code>Grok</code> لتحليل سجلات الوصول والأخطاء في Apache. يعرف كل مرشح صيغة السجلات التي يتعامل معها ضمن تعليمة <code>match</code> الموجودة في المرشح الموافق لنوع السجل في الاسم. يُستخدم مرشح <code>Grok</code> يوفره Logstash لتحليل سجلات الوصول إلى Apache اعتمادا على الصيغة الافتراضية لهذه السجلات؛ بينما كتبنا مرشح <code>Grok</code> خاص لتحليل الصيغة الافتراضية لسجل الأخطاء في Apache.</p><p>نعيد تشغيل Logstash لكي تبدأ المرشحات الجديدة عملها:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service logstash restart</pre><p>يجب التأكد في هذه المرحلة من أن Logstash يعمل بطريقة صحيحة؛ إذ أن أخطاء الإعداد قد تتسبب في إخفاق إعادة تشغيله. يجب أن تتأكد أيضا أن Kibana قادر على رؤية سجلات Apache المرشحة.</p><h2 id="سجلات-haproxy">سجلات HAProxy</h2><p>يسمح جمع سجلات موزع الحمل HAProxy (توجد عادة في الملف <code>var/log/haproxy.log/</code>) بمعرفة عناوين IP التي تتصل بخادوم توزيع الحمل، ماذا تطلب، خادوم التطبيق الذي يجيب على الطلب، ومعلومات مفصَّلة أخرى عن الاتصال.</p><h3 id="إرسال-ملفات-السجلات-الخاصة-بhaproxy">إرسال ملفات السجلات الخاصة بHAProxy</h3><p>نضبط معيد توجيه Logstash لإرسال سجلات HAProxy إلى خادوم السجلات بنفس طريقة الإعداد التي اتبعناها مع الخواديم السابقة. افتح الملف التالي على خادوم توزيع الحمل <code>lb1</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/logstash-forwarder.conf</pre><p>أضف الأسطر التالية إلى فقرة <code>files</code> تحت التعليمات الموجودة سلف. ترسل التعليمات الجديدة سجلات HAProxy إلى خادوم Logstash وتحدد نوعها بـ <code>haproxy-log</code>.</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">,
{
    "paths": [
       "/var/log/haproxy.log"
     ],
    "fields": { "type": "haproxy-log" }
}
</pre><p>احفظ الملف ثم أغلقه. تعد التعليمات أعلاه Logstash لإرسال سجلات HAProxy مع تحديد نوعها ب<code>haproxy-log</code>. يستخدَم النوع في ما بعد لترشيح السجلات.</p><p>أعد تشغيل معيد توجيه في Logstash للبدء في إرسال السجلات:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service logstash-forwarder restart</pre><h3 id="مرشح-سجلات-haproxy">مرشح سجلات HAProxy</h3><p>افتح ملفا جديدا على خادوم <code>logging</code> لإضافة مرشح سجلات HAProxy إلى Logstash. سنسمي الملف الجديد <code>13-haproxy.conf</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/logstash/conf.d/13-haproxy.conf</pre><p>أضف تعريف المرشح التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">filter {
    if [type] == "haproxy-log" {
      grok {
         match =&gt; { "message" =&gt; "%{SYSLOGTIMESTAMP:timestamp} %{HOSTNAME:hostname} %{SYSLOGPROG}: %{IPORHOST:clientip}:%{POSINT:clientport} \[%{MONTHDAY}[./-]%{MONTH}[./-]%{YEAR}:%{TIME}\] %{NOTSPACE:frontend_name} %{NOTSPACE:backend_name}/%{NOTSPACE:server_name} %{INT:time_request}/%{INT:time_queue}/%{INT:time_backend_connect}/%{INT:time_backend_response}/%{NOTSPACE:time_duration} %{INT:http_status_code} %{NOTSPACE:bytes_read} %{DATA:captured_request_cookie} %{DATA:captured_response_cookie} %{NOTSPACE:termination_state} %{INT:actconn}/%{INT:feconn}/%{INT:beconn}/%{INT:srvconn}/%{NOTSPACE:retries} %{INT:srv_queue}/%{INT:backend_queue} "(%{WORD:http_verb} %{URIPATHPARAM:http_request} HTTP/%{NUMBER:http_version})|&lt;BADREQ&gt;|(%{WORD:http_verb} (%{URIPROTO:http_proto}://))"'}
    }
   }
}
</pre><p>احفظ الملف ثم أغلقه. تعد التعليمة Logstash لترشيح السجلات من نوع <code>haproxy-log</code> باستخدام نمط <code>Grok</code> المعيَّن، والذي يحلل السجلات لمطابقتها مع الصيغة الافتراضية لسجلات HAProxy.</p><p>أعد تشغيل Logstash لاعتماد المرشح:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service logstash restart</pre><p>يجب التأكد بعد تنفيذ الأمر أن Logstash يعمل بطريقة صحيحة؛ إذ أن أخطاء الإعداد قد تتسبب في إخفاق إعادة تشغيله.</p><h2 id="إعداد-المعاينة-باستخدام-kibana">إعداد المعاينة باستخدام Kibana</h2><p>يمكن البدء باستخدام Kibana لمعاينة السجلات التي جمعناها من مختلف الخواديم. يسعادك المقال التالي في البدء باستخدام Kibana: <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-use-kibana-dashboards-and-visualizations">كيف تستخدم لوحات القيادة والمعاينة في Kibana</a></p><p>بعد التأقلم مع Kibana جرب درس <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-map-user-location-with-geoip-and-elk-elasticsearch-logstash-and-kibana">كيف تظهر مواقع المستخدمين على خريطة باستخدام GeoIP وELK</a> لمعاينة أكثر تقدما.</p><h2 id="خاتمة">خاتمة</h2><p>إن اتبّعت الخطوات المشروحة في هذا الدليل فستحصل على بيئة إنتاج مثل تلك التي وصفناها في الجزء الأول <a href="https://academy.hsoub.com/devops/servers/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B9%D8%A7%D9%85%D8%A9-%D8%B9%D9%84%D9%89-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D9%85%D9%88%D8%AC%D9%91%D9%8E%D9%87%D8%A9-%D9%84%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%A7%D8%AC-r131/">نظرة عامة على إنشاء تطبيقات موجهة لبيئة الإنتاج</a> من الدليل.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/03_Production_server_setup.png.5372a6fcab2d9d8b430539326cbf87a5.png"><img data-fileid="7284" class="ipsImage ipsImage_thumbnailed" alt="03_Production_server_setup.thumb.png.968" src="https://academy.hsoub.com/uploads/monthly_2015_11/03_Production_server_setup.thumb.png.968e353153ce783cfb028a46ede1bee2.png"></a></p><p>ترجمة - وبتصرف - لمقال <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/building-for-production-web-applications-centralized-logging">Building for Production: Web Applications — Centralized Logging</a>  لصاحبه Mitchell Anicas.</p>
]]></description><guid isPermaLink="false">141</guid><pubDate>Thu, 19 Nov 2015 20:30:41 +0000</pubDate></item><item><title>&#x645;&#x631;&#x627;&#x642;&#x628;&#x629; &#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A; &#x627;&#x644;&#x648;&#x64A;&#x628; &#x627;&#x644;&#x645;&#x648;&#x62C;&#x647;&#x629; &#x644;&#x628;&#x64A;&#x626;&#x629; &#x627;&#x644;&#x625;&#x646;&#x62A;&#x627;&#x62C;</title><link>https://academy.hsoub.com/devops/servers/%D9%85%D8%B1%D8%A7%D9%82%D8%A8%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D9%85%D9%88%D8%AC%D9%87%D8%A9-%D9%84%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%A7%D8%AC-r139/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_11/building-for-production-6.png.0308b031b106eaea4fef346ee7614839.png" /></p>

<p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/building-for-production-6.png.6237de8f13b56be8836343e427ba4201.png"><img data-fileid="7381" class="ipsImage ipsImage_thumbnailed" alt="building-for-production-6.thumb.png.c7f6" src="https://academy.hsoub.com/uploads/monthly_2015_11/building-for-production-6.thumb.png.c7f608881205d28bc25b7e0b40ca9290.png"></a></p><p id="مقدمة">أكملنا في الأجزاء السابقة من <a href="https://academy.hsoub.com/search/?tags=production+deployment+101">هذه السّلسلة</a> إعداد <a href="https://academy.hsoub.com/devops/servers/%D9%86%D8%B4%D8%B1-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D9%85%D9%88%D9%91%D9%8E%D8%AC%D9%87%D8%A9-%D9%84%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%A7%D8%AC-r132/">خواديم التطبيقات</a>، <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D8%AA%D8%AE%D8%B7%D9%8A%D8%B7-%D9%84%D8%A7%D8%B3%D8%AA%D8%B1%D8%AF%D8%A7%D8%AF-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D9%88%D9%8A%D8%A8-%D8%B6%D9%85%D9%86-%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A5%D9%86%D8%AA%D8%A7%D8%AC-r135/">خطط الاسترداد</a>، و<a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D9%86%D8%B3%D8%AE-%D8%A7%D9%84%D8%A7%D8%AD%D8%AA%D9%8A%D8%A7%D8%B7%D9%8A-%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D9%85%D9%88%D8%AC%D9%87%D8%A9-%D9%84%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%A7%D8%AC-r138/">آليات النسخ الاحتياطي</a>. سنضبط في هذا الدرس إعداد المراقبة Monitoring لكي نكون على اطّلاع في أية لحظة بحالة عمل الخواديم والخدمات. تتيح برامج المراقبة مثل Nagios، <a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-icinga-%D9%84%D9%85%D8%B1%D8%A7%D9%82%D8%A8%D8%A9-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85%D9%83-%D9%88%D8%AE%D8%AF%D9%85%D8%A7%D8%AA%D9%83-%D8%B9%D9%84%D9%89-ubuntu-1404-r102/">Icinga</a> وZabbix إمكانية إنشاء لوحات قيادة Dashboards وإشعارات تريك عناصر الإعداد التي تحتاج لاهتمام خاص. الهدف هو اكتشاف المشاكل والبدء في إصلاحها قبل أن تؤثر على المستخدمين النهائيين للتطبيق.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/01_monitoring.png.6d03b3462a3ce556c3f57720f23a3972.png"><img data-fileid="7153" class="ipsImage ipsImage_thumbnailed" alt="01_monitoring.thumb.png.56932a9b84e204f4" src="https://academy.hsoub.com/uploads/monthly_2015_11/01_monitoring.thumb.png.56932a9b84e204f435ee0660ca13f3bf.png"></a></p><p>سنعد في هذا الدرس المراقبة باستخدام Nagios 4 ونثبت عملاء NRPE (إضافة تتيح تنفيذ أوامر Nagios على أجهزة أخرى) على الخواديم التي تكون التطبيق.</p><p>سنعد المراقبة على كل واحد من الخواديم لمعرفة هل الخادوم نشط وما إذا كانت العملية الرئيسة عليه (على سبيل المثال MySQL، Apache أو HAProxy) تعمل أم لا. لا يشمل هذا الدرس كل جوانب المراقبة، لذا قد تحتاج لإجراء فحوص إضافية لا يتناولها هذا الدّرس؛ إلا أنه يبقى نقطة جيدة للبدء.</p><h2 id="المتطلبات">المتطلبات</h2><p>أنشئ، إن أردت الوصول إلى لوحة المراقبة عبر نطاق خاص مثل <code>monitoring.example.com</code>، سجلا من نوع <code>A</code> يحيل إلى عنوان IP العمومي الخاص بخادوم المراقبة. أو يمكنك بدلا من ذلك الوصول إلى لوحة القيادة في خادوم المراقبة باستخدام عنوانه العمومي. يُنصح بإعداد خادوم المراقبة لاستخدام <code>HTTPS</code> وتقييد الوصول إليه بوضعه في شبكة خاصة افتراضية.</p><h2 id="تثبيت-nagios-على-خادوم-المراقبة">تثبيت Nagios على خادوم المراقبة</h2><p>اضبط Nagios على خادوم المراقبة باتباع الدرس التالي: <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-install-nagios-4-and-monitor-your-servers-on-ubuntu-14-04">كيف تستخدم Nagios 4 لمراقبة خواديم Ubuntu 14.04</a>. إن رغبت في استخدام Icinga الذي هو اشتقاق من Nagios فدرس <a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-icinga-%D9%84%D9%85%D8%B1%D8%A7%D9%82%D8%A8%D8%A9-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85%D9%83-%D9%88%D8%AE%D8%AF%D9%85%D8%A7%D8%AA%D9%83-%D8%B9%D9%84%D9%89-ubuntu-1404-r102/">كيف تستخدم Icinga لمراقبة خواديمك وخدماتك على Ubuntu 14.04</a> يشرح الطريقة.</p><p>توقف عند فقرة <strong>مراقبة مستضيف Ubuntu بواسطة عملاء NRPE</strong>.</p><h3 id="إضافة-الخواديم-إلى-nagios">إضافة الخواديم إلى Nagios</h3><p>طبق خطوات فقرة <strong>مراقبة مستضيف Ubuntu بواسطة عملاء NRPE</strong> من درس Nagios السابق على كل واحد من الخواديم (<code>app2</code>،<code>app1</code>، <code>db1</code> و<code>lb1</code>).</p><p>تأكد من إضافة عنوان IP الخادوم أو اسم مستضيفه الخاص إلى <code>allowed_hosts</code> في ملف إعداد NRPE.</p><p>يجب أن يكون لديك بعد الانتهاء من إضافة المستضيفات ملف منفصل لكل خادوم: <code>app2.cfg</code>،<code>app1.cfg</code>،<code>db1.cfg</code>، و<code>lb1.cfg</code>. يتضمن كل ملف تعريف المستضيف الذي يحيل إلى اسمه وعنوانه (قد يكون العنوان اسم المستضيف أو عنوان IP الخاص بالخادوم).</p><h3 id="إعداد-المستضيف-ومراقبة-الخدمة">إعداد المستضيف ومراقبة الخدمة</h3><p>نبدأ بإعداد لائحة لما نريد مراقبته على كل خادوم. نراقب، على كل خادوم، الخدمات التالية:</p><ul><li>Ping.</li><li>SSH.</li><li>الحمل الجاري Current Load.</li><li>المستخدمون الحاليون Current users.</li><li>المساحة المستخدمة من القرص الصلب Disk Utilization.</li></ul><h3 id="تعريف-الخدمات-المشتركة">تعريف الخدمات المشتركة</h3><p>أعددنا Nagios في الدرس المُشار إليه سابقا ليرقُب الملفات الموجودة في المجلد <code>usr/local/nagios/etc/servers/</code>. سننشئ ملف إعداد Nagios للخدمات المشتركة التي نريد مراقبته؛ نسمي الملف <code>common.cfg</code>.</p><p>افتح أولا ملف الإعداد لتحريره:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /usr/local/nagios/etc/servers/common.cfg</pre><p>أضف تعريفات الخدمات التالية، مع تحديد قيمة <code>host_name</code> (أسماء المستضيفات الخاصة بالخواديم، عُرِّفت سابقا ضمن ملفات <code>app2.cfg</code>،<code>app1.cfg</code>،<code>db1.cfg</code>، و<code>lb1.cfg</code>):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">define service {
use                             generic-service
host_name                       <span style="color:#FF8C00;">db1</span>,<span style="color:#FF8C00;">app1</span>,<span style="color:#FF8C00;">app2</span>,<span style="color:#FF8C00;">lb1</span>
service_description             PING
check_command                   check_ping!100.0,20%!500.0,60%
}

define service {
use                             generic-service
host_name                       <span style="color:#FF8C00;">db1</span>,<span style="color:#FF8C00;">app1</span>,<span style="color:#FF8C00;">app2</span>,<span style="color:#FF8C00;">lb1</span>
service_description             SSH
check_command                   check_ssh
notifications_enabled           0
}

define service {
use                             generic-service
host_name                       <span style="color:#FF8C00;">db1</span>,<span style="color:#FF8C00;">app1</span>,<span style="color:#FF8C00;">app2</span>,<span style="color:#FFA500;">lb1</span>
service_description             Current Load
check_command                   check_nrpe!check_load
}

define service {
use                             generic-service
host_name                       <span style="color:#FF8C00;">db1</span>,<span style="color:#FF8C00;">app1</span>,<span style="color:#FF8C00;">app2</span>,<span style="color:#FF8C00;">lb1</span>
service_description             Current Users
check_command                   check_nrpe!check_users
}

define service{
use                             generic-service
host_name                       <span style="color:#FF8C00;">db1</span>,<span style="color:#FF8C00;">app1</span>,<span style="color:#FF8C00;">app2</span>,<span style="color:#FF8C00;">lb1</span>
service_description             Disk Utilization
check_command                   check_nrpe!check_hda1
}
</pre><p>احفظ الملف ثم أغلقه.</p><p>بالإمكان الآن الانتقال لتعريف الخدمات الخاصة بكل خادوم. نبدأ بخادوم قاعدة البيانات.</p><h3 id="تعريف-عملية-mysql">تعريف عملية MySQL</h3><h4 id="إنشاء-أمر-nrpe-على-العميل">إنشاء أمر NRPE (على العميل)</h4><p>سنضبط أمر NRPE جديدا على خادوم قاعدة البيانات، <code>db1</code>. افتح ملف إعداد NRPE جديدا، <code>commands.cfg</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/nagios/nrpe.d/commands.cfg</pre><p>أضف تعريف الأمر التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">command[check_mysqld]=/usr/lib/nagios/plugins/check_procs -c 1: -C <span style="color:#FF8C00;">mysqld</span></pre><p>احفظ الملف ثم أغلقه. يتيح الأمر لـNRPE فحص عملية Process باسم <code>mysqld</code> والإبلاغ عن حالة حرجة Critical status إن كان هناك أقل من عملية واحدة نشطة بهذا الاسم.</p><p>أعد تحميل إعداد NRPE:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service nagios-nrpe-server reload</pre><h4 id="إنشاء-تعريف-الخدمة-على-الخادوم">إنشاء تعريف الخدمة (على الخادوم)</h4><p>نحتاج لتعريف خدمة جديدة على خادوم <code>monitoring</code> (خادوم المراقبة) لاستخدام NRPE لتشغيل أمر <code>check_mysqld</code> السابق. افتح الملف الذي يعرف مستضيف قاعدة البيانات، <code>db1.cfg</code> في مثالنا:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /usr/local/nagios/etc/servers/<span style="color:#FF8C00;">db1</span>.cfg</pre><p>أضف تعريف الخدمة التالي في آخر الملف (تأكد من أن قيمة <code>host_name</code> تطابق اسم تعريف المستضيف):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">define service {
use                             generic-service
host_name                      <span style="color:#FF8C00;"> db1</span>
service_description             Check MySQL Process
check_command                   check_nrpe!check_mysqld
}</pre><p>احفظ الملف ثم أغلقه. يُعد تعريف الخدمة أعلاه Nagios لاستخدام NRPE لتنفيذ أمر <code>check_mysqld</code> على خادوم قاعدة البيانات.</p><p>تجب إعادة تحميل Nagios لاعتماد التغييرات. إلا أننا سننتقل أولا لمراقبة عملية Apache أولا.</p><h3 id="تعريف-عملية-apache">تعريف عملية Apache</h3><h4 id="إنشاء-أمر-nrpe-على-العميل-1">إنشاء أمر NRPE (على العميل)</h4><p>نضبط أمر NRPE جديدا على كلٍّ من خادومي التطبيق:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/nagios/nrpe.d/commands.cfg</pre><p>ثم نضيف تعريف الأمر التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">command[check_apache2]=/usr/lib/nagios/plugins/check_procs -c 1: -w 3: -C <span style="color:#FF8C00;">apache2</span></pre><p>احفظ الملف ثم أغلقه. يسمح الأمر لNRPE بالتحقق من وجود عملية باسم <code>apache2</code> والإبلاغ عن حالة حرجة إن لم توجد عملية بهذا الاسم وإصدار تحذير إن وجدت أقل من ثلاث عمليات.</p><p>نعيد تحميل إعداد NRPE:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service nagios-nrpe-server reload</pre><p>تأكد من تنفيذ الخطوات على جميع خواديم التطبيقات.</p><h4 id="إنشاء-تعريف-الخدمة-على-الخادوم-1">إنشاء تعريف الخدمة (على الخادوم)</h4><p>نحتاج تعريف خدمة جديدة تستخدم أمر <code>check_apache2</code> على خادوم المراقبة <code>monitoring</code>. افتح الملف الذي يعرف مستضيف التطبيق (يوجد في حالتنا اثنان: <code>app1</code> و<code>app2</code>):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /usr/local/nagios/etc/servers/<span style="color:#FF8C00;">app1</span>.cfg</pre><p>أضف تعريف الخدمة التالي في آخر الملف (تأكد من أن قيمة <code>host_name</code> تطابق اسم تعريف المستضيف):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">define service {
use                             generic-service
host_name                       <span style="color:#FF8C00;">app1</span>
service_description             Check Apache2 Process
check_command                   check_nrpe!check_apache2
}</pre><p>احفظ الملف ثم أغلقه. يعد تعريف الخدمة Nagios لاستخدام NRPE لتنفيذ أمر <code>check_apache2</code> على خادوم التطبيق. تأكد من تكرار الخطوة على كل واحد من خواديم التطبيقات.</p><h3 id="تعريف-عملية-haproxy">تعريف عملية HAProxy</h3><h4 id="إنشاء-أمر-nrpe-على-العميل-2">إنشاء أمر NRPE (على العميل)</h4><p>نعد أمر NRPE على خادوم توزيع الحمل <code>lb1</code> بنفس طريقة إعداده في الخواديم السابقة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/nagios/nrpe.d/commands.cfg</pre><p>ونضيف تعريف الأمر التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">command[check_haproxy]=/usr/lib/nagios/plugins/check_procs -c 1: -C <span style="color:#FF8C00;">haproxy</span></pre><p>احفظ الملف ثم أغلقه. يعد تعريف الخدمة السابق NRPE للتحقق من عملية باسم <code>haproxy</code> ثم الإبلاغ عن حالة حرجة إن كان عدد العمليات بهذا الاسم أصغر من 1.</p><p>نعيد تحميل إعداداتت NRPE:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service nagios-nrpe-server reload</pre><h4 id="إنشاء-تعريف-الخدمة-على-الخادوم-2">إنشاء تعريف الخدمة (على الخادوم)</h4><p>نضيف تعريف خدمة جديدا على خادوم <code>monitoring</code> ليستخدم أمر <code>check_haproxy</code>؛ بنفس الطريقة المشروحة سابقا.</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /usr/local/nagios/etc/servers/<span style="color:#FF8C00;">lb1</span>.cfg</pre><p>نضيف التعريف التالي في نهاية الملف:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">define service {
use                             generic-service
host_name                       <span style="color:#FF8C00;">lb1</span>
service_description             Check HAProxy Process
check_command                   check_nrpe!check_haproxy
}</pre><p>يعد التعريف Nagios لاستخدام NRPE في تنفيذ الأمر <code>check_haproxy</code> على خادوم توزيع الحمل.</p><p>تجب إعادة تحميل Nagios من أجل اعتماد التعديلات.</p><h3 id="إعادة-تحميل-nagios">إعادة تحميل Nagios</h3><p>نعيد تحميل Nagios عبر تنفيذ الأمر التالي من أجل اعتماد التعديلات السابقة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service nagios reload</pre><p>إن لم توجد أخطاء في صياغة الأوامر والتعريفات فيُعاد تحميل Nagios دون مشاكل.</p><h2 id="التحقق-من-خدمات-nagios">التحقق من خدمات Nagios</h2><p>يجب أن نتأكد من أن Nagios يراقب جميع الخواديم والخدمات التي عرفناها. ادخل إلى خادوم Nagios باستخدام اسم المستضيف العمومي أو عنوان IP (مثلا <code><a rel="external nofollow" href="http://monitoring.example.com/nagios">http://monitoring.example.com/nagios</a></code>؛ أدخِل بيانات الدخول التي أعددتها أثناء تثبيت Nagios. انقر رابط الخدمات Services في القائمة الجانبية؛ يجب أن تظهر لديك صفحة تشبه ما يلي:</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/02_services.png.3712047169cb2ae2ad8f39f95cf8b663.png"><img data-fileid="7154" class="ipsImage ipsImage_thumbnailed" alt="02_services.thumb.png.38fff1db874497897f" src="https://academy.hsoub.com/uploads/monthly_2015_11/02_services.thumb.png.38fff1db874497897fece0e0b1a69e37.png"></a></p><p>الوضعية المثالية هي أن تكون كل المستضيفات والخدمات على حالة <code>OK</code>. يمكن أن نرى في لقطة الشاشة السابقة وجود مشكلة في خادوم التطبيق <code>app2</code>؛ ويرجع ذلك إلى أنه كان مطفأ في أغلب فحوص الحالة الأخيرة. إن وجدت خدمات بحالة مغايرة ل<code>OK</code> فأصلحها؛ وإن كانت جميع الخدمات بحالة جيدة فراجع إعدادات Nagios بحثا عن أخطاء ربما تكون أدت لإبلاغ غير صحيح عن حالة الخدمات.</p><h2 id="اعتبارات-أخرى">اعتبارات أخرى</h2><p>قد ترغب في إنشاء خطة استرداد لخادوم المراقبة، ملفات الإعداد الواجب نسخها إن أردت ذلك توجد في المجلد <code>usr/local/nagios/etc/</code>. يمكن أيضا أن تعدّ Nagios لمراقبة خدمات أخرى مثل البريد الإلكتروني.</p><h2 id="خاتمة">خاتمة</h2><p>يمكّن خادوم المراقبة من الحصول على حالة الخدمات والخواديم بمجرد إلقاء نظرة على لوحة المراقبة. يساعد خادوم المراقبة، عند حدوث مشاكل، في تحديد الخادوم والخدمة التي لا تعمل بطريقة صحيحة وهو ما يعينك في تخفيض زمن توقف Downtime الخاص التطبيق.</p><p>في الجزء الموالي من الدليل سنعرض لكيفية إعداد سجلات مركزية لتطبيقات الويب في بيئة الإنتاج.</p><p>ترجمة -وبتصرّف- لمقال <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/building-for-production-web-applications-monitoring">Building for Production: Web Applications — Monitoring</a> لصاحبه Mitchell Anicas.</p>
]]></description><guid isPermaLink="false">139</guid><pubDate>Wed, 18 Nov 2015 10:24:22 +0000</pubDate></item><item><title>&#x627;&#x644;&#x646;&#x633;&#x62E; &#x627;&#x644;&#x627;&#x62D;&#x62A;&#x64A;&#x627;&#x637;&#x64A; &#x644;&#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A; &#x627;&#x644;&#x648;&#x64A;&#x628; &#x627;&#x644;&#x645;&#x648;&#x62C;&#x647;&#x629; &#x644;&#x628;&#x64A;&#x626;&#x629; &#x627;&#x644;&#x625;&#x646;&#x62A;&#x627;&#x62C;</title><link>https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D9%86%D8%B3%D8%AE-%D8%A7%D9%84%D8%A7%D8%AD%D8%AA%D9%8A%D8%A7%D8%B7%D9%8A-%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D9%85%D9%88%D8%AC%D9%87%D8%A9-%D9%84%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%A7%D8%AC-r138/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_11/building-for-production-4.png.d9dd3f07dfd7073fc14f9295b814d371.png" /></p>

<p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/building-for-production-4.png.cccfa7cd2aea58b7c70cb3001a4ce69b.png"><img data-fileid="7379" class="ipsImage ipsImage_thumbnailed" alt="building-for-production-4.thumb.png.1ef8" src="https://academy.hsoub.com/uploads/monthly_2015_11/building-for-production-4.thumb.png.1ef86b3d23cced7e1723e32670930723.png"></a></p><p id="مقدمة">تحتاج خطط الاسترداد التي أعددناها في <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D8%AA%D8%AE%D8%B7%D9%8A%D8%B7-%D9%84%D8%A7%D8%B3%D8%AA%D8%B1%D8%AF%D8%A7%D8%AF-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D9%88%D9%8A%D8%A8-%D8%B6%D9%85%D9%86-%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A5%D9%86%D8%AA%D8%A7%D8%AC-r135/">الجزء السابق</a> إلى نظام للنسخ الاحتياطي. سنركز في هذا المقال على نظام النسخ الاحتياطي Bacula. يتيح Bacula تحكّمًا تامًا في ما تريد نسخه أو استعادته على المستوى الفردي للملفات؛ كما يسمح بجدولة النسخ الاحتياطي والاستعادة وفقا لما تراه أفضل بالنسبة لك.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/01_backup_system.png.decd5fd757c1ca3a4ad36db39f498572.png"><img data-fileid="7102" class="ipsImage ipsImage_thumbnailed" alt="01_backup_system.thumb.png.5909dce1ff3fc" src="https://academy.hsoub.com/uploads/monthly_2015_11/01_backup_system.thumb.png.5909dce1ff3fcc171f3feaa83379ad4c.png"></a></p><p>سنُعدّ Bacula في هذا الجزء لتخزين نسخ احتياطية يوميا. تحوي النسخُ الملفاتِ الضروريةَ من الخواديم التي تكون التطبيق (<code>app2</code>، <code>app1</code>، <code>db1</code> و<code>lb1</code>). حددنا في الجزء السابق الملفات التي نريد نسخها احتياطيا. يُريك هذا المقال كيفية استخدام Bacula لإنشاء نسخ احتياطية من حزمة برمجيات LAMP (أي MySQL، Apache، Linux وPHP). سنستعمل أيضا Percona XtraBackup لإنشاء نسخ احتياطية ساخنة Hot backups من قاعدة بيانات MySQL. ثم - في الأخير - نستخدم <code>rsync</code> لنسخ الملفات التي أنشأها Bacula على خادوم يوجد في موقع جغرافي آخر؛ أي أنه ستكون لدينا نسختان احتياطيتان، واحدة موجودة في نفس مركز بيانات الذي توجد به بيئة الإنتاج والأخرى في موقع ناء. سنضيف خادومين إلى الخواديم الموجودة سلفا: <code>backups</code> و<code>remotebackups</code>؛ الأخير يوجد في مركز بيانات ناء.</p><p><strong>ملحوظة:</strong> نعني بالنسخ الاحتياطي الساخن - أو الديناميكي - أخذ نسخة من قاعدة البيانات وهي في حالة نشاط؛ مما يعني أنه قد يحصل تعديل عليها أثناء عملية النسخ. يقابل النسخَ الساخن النسخُ البارد Cold backup والذي توقف فيه قاعدة البيانات عن العمل، ثم تؤخذ نسخة منها قبل أن يُعاد تشغيلها.</p><h2 id="تثبيت-bacula-على-خادوم-النسخ-الاحتياطية">تثبيت Bacula على خادوم النسخ الاحتياطية</h2><p>اضبط Bacula على خادوم <code>backups</code> باتباع خطوات الدرس التالي: <a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81-%D8%AA%D8%AB%D8%A8%D8%AA-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-bacula-%D8%B9%D9%84%D9%89-ubuntu-1404-r144/">كيف تثبت خادوم Bacula على Ubuntu 14.04</a>.</p><p>ثم اتبع فقرة <strong>تنظيم إعداد مدير Bacula (الخادوم)</strong> في مقال <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14-04-server-with-bacula#organize-bacula-director-configuration-%28server%29">كيف تنسخ احتياطيا خادوم Ubuntu 14.04 باستخدام Bacula</a>. ستحتاج لاسم المدير Director name عند إعداد عملاء Bacula على الخواديم التي تريد نسخها احتياطيا. توقف عند الوصول إلى فقرة <strong>تثبيت عميل Bacula وإعداده</strong>.</p><h2 id="تثبيت-عميل-bacula-على-كل-خادوم">تثبيت عميل Bacula على كل خادوم</h2><p>ثبت عميل Bacula على كل واحد من الخواديم التي تريد نسخها احتياطيا (<code>app2</code>، <code>app1</code>، <code>db1</code> و<code>lb1</code>) باتباع فقرة <strong>تثبيت عميل Bacula وإعداده</strong> من درس <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14-04-server-with-bacula#install-and-configure-bacula-client">كيف تنسخ احتياطيا خادوم Ubuntu 14.04 باستخدام Bacula</a>. توقف عند الوصول إلى فقرة <strong>إضافة مجموعة ملفات FileSets (الخادوم)</strong>.</p><p>يرجى الانتباه إلى أنك ستحتاج اسم FileDaemon (جنيّ الملفات، يكون عادة اسم المستضيف مضافا إليه “fd-“) وكلمة سر المدير Director (كلمة السر التي سيستخدمها خادوم Bacula للاتصال بكل واحد من العملاء). توجد القيمتان ضمن ملف <code>bacula-fd.conf</code> الموجود على كل خادوم.</p><h2 id="إضافة-عملاء-bacula-إلى-خادوم-النسخ-الاحتياطي">إضافة عملاء Bacula إلى خادوم النسخ الاحتياطي</h2><p>أضف، إلى خادوم Bacula (أي <code>backups</code>)، موردَ عميل Client resource لكل واحد من الخواديم التي ثبت عليها عميل Bacula. يُضاف مورد العميل إلى الملف <code>etc/bacula/conf.d/clients.conf/</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/bacula/conf.d/clients.conf</pre><p>في ما يلي مثال على تعريف مورد العميل بالنسبة لخادوم قاعدة البيانات <code>db1</code>. يجب أن توافق قيمة <code>Name</code> اسم المورد <code>FileDaemon</code> الموجود على الخادوم العميل. نفس الشيء بالنسبة ل<code>Password</code> التي يجب أن توافق قيمة <code>Password</code> ضمن مورد <code>Director</code> على الخادوم العميل. توجد هذه القيم في ملف <code>etc/bacula/bacula-fd.conf/</code> على كل واحد من عملء Bacula.</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Client {
  Name = db1-fd
  Address = db1.nyc3.example.com
  FDPort = 9102
  Catalog = MyCatalog
  Password = "PDL47XPnjI0QzRpZVJKCDJ_xqlMOp4k46"          # كلمة سر العميل
  File Retention = 30 days            # 30 يوما
  Job Retention = 6 months            # 6 أشهر
  AutoPrune = yes                     # التخلص من الأشغال/الملفات منتهية الصلاحية
}</pre><p>أنشئ بنفس الطريقة مورد عميل لكل واحد من الخواديم العميلة لخادوم Bacula. يجب بانتهاء الإعداد في المثال أن تكون لدينا أربعة موارد عملاء: <code>app2-fd</code>، <code>app1-fd</code>، <code>db1-fd</code> و<code>lb1-fd</code>. تضبط هذه الإعدادات الخادوم <code>backups</code> ليكون قادرا على الاتصال بعميل Bacula الموجود على كل خادوم.</p><p>احفظ الملف ثم أغلقه.</p><p>يمكن الحصول على تفاصيل أكثر بمراجعة فقرة <strong>تثبيت عميل Bacula وإعداده</strong> في درس <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14-04-server-with-bacula#install-and-configure-bacula-client">كيف تنسخ احتياطيا خادوم Ubuntu 14.04 باستخدام Bacula</a>.</p><h2 id="إنشاء-نسخ-احتياطية-ساخنة-من-قاعدة-البيانات">إنشاء نسخ احتياطية ساخنة من قاعدة البيانات</h2><p>يجب إيلاء اهتمام خاص لنسخ قاعدة البيانات الاحتياطية، من أجل إنشاء نسخ احتياطية متناسقة وقابلة للاستخدام. توجد طريقة سهلة وفعالة لإنشاء نسخ احتياطية ساخنة لقاعدة بيانات MySQL وهي استخدام Percona XtraBackup.</p><h3 id="تثبيت-percona-xtrabackup">تثبيت Percona XtraBackup</h3><p>ثبت Percona XtraBackup واضبطه على خادوم قاعدة البيانات <code>db1</code> باتباع خطوات الدرس <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona-xtrabackup-on-ubuntu-14-04">كيف تستخدم Percona XtraBackup لإنشاء نسخ احتياطية فورية من قواعد بيانات MySQL على Ubuntu 14.04</a>. توقف عند الوصول إلى فقرة <strong>إنشاء نسخة احتياطية كاملة فوريا</strong>.</p><h3 id="إنشاء-سكربت-xtrabackup">إنشاء سكربت XtraBackup</h3><p>Percona XtraBackup جاهز الآن لإنشاء نسخ احتياطية ساخنة من قاعدة بيانات MySQL. سيحتفظ Bacula بهذه النسخ؛ إلا أنه يجب أولا إيجاد طريقة لجدولة النسخ الساخنة.<br>نستخدم <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81-%D8%AA%D8%AC%D8%AF%D9%88%D9%84-%D9%85%D9%87%D8%A7%D9%85%D9%83-%D8%A7%D9%84%D8%B1%D9%88%D8%AA%D9%8A%D9%86%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D8%AF%D8%A7%D8%AA%D9%8A-cron-%D9%88-anacron-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r82/"><code>cron</code></a> لهذه المهمة.</p><p>أنشئ سكربت Bash في <code>usr/local/bin/</code> وسمه <code>run_extra_backup.sh</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /usr/local/bin/run_xtrabackup.sh</pre><p>أضف السكربت التالي إلى الملف الذي أنشأته للتو (تأكد من إدراج اسم المستخدم وكلمة السر الذين استعملتهما عند تثبيت XtraBackup):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">#!/bin/bash

# pre xtrabackup
chown -R mysql: /var/lib/mysql
find /var/lib/mysql -type d -exec chmod 770 "{}" \;

# delete existing full backup
rm -r /data/backups/full

# xtrabackup create backup
innobackupex --user=bkpuser  --password=bkppassword --no-timestamp /data/backups/full

# xtrabackup prepare backup
innobackupex --apply-log /data/backups/full</pre><p>احفظ الملف ثم أغلقه. سيؤدي تنفيذ هذا الملف بصلاحيات الحساب الإداري إلى حذف نسخة XtraBackup الاحتياطية الموجودة ضمن مسار <code>data/backups/full/</code> وإنشاء نسخة احتياطية كاملة جديدة.</p><p>توجد تفاصيل أكثر عن النسخ الاحتياطية باستخدام XtraBackup ضمن فقرة <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona-xtrabackup-on-ubuntu-14-04">إنشاء نسخة احتياطية كاملة ساخنة</a> في درس XtraBackup.</p><p>اجعل السكربت قابلا للتنفيذ:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo chmod +x /usr/local/bin/run_xtrabackup.sh</pre><p>يجب تنفيذ سكربت XtraBackup وإكماله قبل أن يحاول Bacula أخذ نسخة احتياطية من خادوم قاعدة البيانات، وذلك من أجل نسخ قاعدة البيانات بطريقة صحيحة. يمكن إعداد شغل Job في Bacula للتعامل مع السكربت على أنه “سكربت لما قبل النسخ الاحتياطي”؛ إلا أننا سنختار هنا استخدام شغل <code>cron</code> توخيا للسهولة.</p><p>أنشئ ملف إعداد ل<code>cron</code> (تُضاف الملفات الموجودة ضمن المجلد <code>etc/cron.d/</code> إلى جدول <code>cron</code> الخاص بالمستخدم الجذر):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/cron.d/xtrabackup</pre><p>أضف شغل <code>cron</code> التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">30 22    * * *   root    /usr/local/bin/run_xtrabackup.sh</pre><p>يُجدول هذا الشغل السكربت ليعمل بصلاحيات الجذر كل يوم عند الساعة العاشرة والنصف مساء (22:30). اخترنا هذا الوقت لأن Bacula مُجدول حاليا ليأخذ نسخا احتياطية يوميا عند الساعة الحادية عشرة مساء وخمس دقائق (23:05). سنناقش هذا الخيار في ما بعد. يعطينا فارق الجدولة هذا 35 دقيقة ليكتمل عمل سكربت XtraBackup.</p><p>اكتمل الآن إعداد النسخ الاحتياطي الساخن لقاعدة البيانات. ننتقل لمجموعات ملفات FileSets النسخة الاحتياطية لBacula.</p><h2 id="إعداد-مجموعة-ملفات-filesets-في-bacula">إعداد مجموعة ملفات FileSets في Bacula</h2><p>سننشئ نسخا احتياطية من الملفات المحدَّدة ضمن مجموعة الملفات المربوطة بأشغال النسخ الاحتياطي التي ستُنفَّذ. ستغطي هذه الفقرة إنشاء مجموعة ملفات تحوي النسخ الاحتياطية الضرورية المحدّدة في خطط الاسترداد. يمكن إيجاد تفاصيل أكثر عن إضافة مجموعة ملفات إلى Bacula تحت فقرة <strong>إضافة مجموعة ملفات FileSets (الخادوم)</strong> في درس Bacula.</p><p>افتح ملف <code>filesets.conf</code> الموجود على خادوم النسخ الاحتياطي <code>backups</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/bacula/conf.d/filesets.conf</pre><h3 id="مجموعة-الملفات-الخاصة-بخادوم-قاعدة-البيانات">مجموعة الملفات الخاصة بخادوم قاعدة البيانات</h3><p>تتضمن النسخ الاحتياطية المطلوبة من خادوم قاعدة البيانات، وفقا لخطة استرداد قاعدة البيانات:</p><ul><li>قاعدة بيانات MySQL: ينشئ سكربت XtraBackup نسخة احتياطية من قاعدة البيانات يوميا عند الساعة <code>22:30</code> ويضعها في المجلد <code>data/backups/full/</code>.</li><li>ملف إعداد MySQL الموجود في المجلد <code>etc/mysql/</code>.</li></ul><p>سنضمِّن أيضا سكربت <code>usr/local/bin/run_xtrabackup.sh/</code> وملف <code>cron</code> المتعلق به.</p><p>نضيف اعتمادا على ما سبق مجموعة ملفات باسم <code>MySQL Database</code> إلى إعداد Bacula:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">FileSet {
  Name = "MySQL Database"
  Include {
    Options {
      signature = MD5
      compression = GZIP
    }
    File = <span style="color:#FF8C00;">/data/backups</span>
    File = <span style="color:#FF8C00;">/etc/mysql/my.cnf</span>
    File = <span style="color:#FF8C00;">/usr/local/bin/run_xtrabackup.sh</span>
    File = <span style="color:#FF8C00;">/etc/cron.d/xtrabackup</span>
  }
  Exclude {
    File = /data/backups/exclude
  }
}
</pre><p>ننتقل الآن إلى مجموعة ملفات التطبيق.</p><h3 id="مجموعة-الملفات-الخاصة-بخادوم-التطبيق">مجموعة الملفات الخاصة بخادوم التطبيق</h3><p>تتضمن النسخ الاحتياطية المطلوبة من خادوم التطبيق وفقا لخطة استرداد هذا الأخير:</p><ul><li>ملفات التطبيق الموجودة - في مثالنا - على المسار <code>var/www/html/</code>.</li></ul><p>نضيف اعتمادا على هذه المعلومة مجموعة ملفات <code>Apache DocumentRoot</code> إلى ملف إعداد Bacula:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">FileSet {
   Name = "Apache DocumentRoot"
   Include {
    Options {
      signature = MD5
      compression = GZIP
    }
    File = <span style="color:#FF8C00;">/var/www/html</span>
  }
  Exclude {
    File = /var/www/html/exclude
  }
}
</pre><p>يمكن أيضا أن تضيف ملف الإعداد الخاص بمنافذ Apache، إلا أنه يمكن تغيير هذا الملف بسهولة عند الحاجة.</p><h3 id="مجموعة-الملفات-الخاصة-بخادوم-توزيع-الحمل">مجموعة الملفات الخاصة بخادوم توزيع الحمل</h3><p>الطريقة المتَّبعة هي نفسها. نحدد الملفات المطلوب نسخها ثم ننشئ مجموعة ملفات في Bacula اعتمادا عليها.</p><p>الملفات المطلوبة:</p><ul><li>ملف PEM الخاص بشهادة SSL والملفات المتعلقة بها، توجد هذه الملفات على مسار <code>root/certs/</code> في مثالنا.</li><li>ملف إعداد HAProxy: يوجد في مجلد <code>etc/haproxy</code>.</li></ul><p>سنضيف هذه الملفات إلى مجموعة <code>Apache DocumentRoot</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">FileSet {
  Name = "Apache DocumentRoot"
  Include {
    Options {
      signature = MD5
      compression = GZIP
    }
    File = /var/www/html
    File = <span style="color:#FF8C00;">/root/certs</span>
    File = <span style="color:#FF8C00;">/etc/haproxy</span>
  }
  Exclude {
    File = /var/www/html/exclude
    File = /root/exclude
  }
}</pre><p>احفظ الملف ثم أغلقه.</p><p>بهذا نكمل إعداد مجموعات الملفات. ننتقل لإعداد أشغال Bacula التي ستستخدم هذه المجموعات.</p><h2 id="إنشاء-أشغال-النسخ-الاحتياطي-في-bacula">إنشاء أشغال النسخ الاحتياطي في Bacula</h2><p>مهمة الأشغال في Bacula هي إنشاء نسخ احتياطية من الخواديم. أنشئ ملف <code>jobs.conf</code> في المسار <code>etc/bacula/conf.d/</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">&gt;sudo nano /etc/bacula/conf.d/jobs.conf</pre><h3 id="شغل-النسخ-الاحتياطي-لخادوم-قاعدة-البيانات">شغل النسخ الاحتياطي لخادوم قاعدة البيانات</h3><p>سننشئ شغل نسخ احتياطي جديدا لخادوم قاعدة البيانات باسم <code>Backup db1</code>. من المهم هنا تحديد الاسم الصحيح للعميل <code>db1-fd</code> واسم مجموعة الملفات <code>MySQL Database</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Job {
  Name = "Backup db1"
  JobDefs = "DefaultJob"
  Client = db1-fd
  Pool = RemoteFile
  FileSet="MySQL Database"
}</pre><h3 id="أشغال-النسخ-الاحتياطي-لخواديم-التطبيقات">أشغال النسخ الاحتياطي لخواديم التطبيقات</h3><p>سننشئ شغل نسخ احتياطي لكل من خادومي التطبيق، <code>Backup app1</code> للخادوم <code>app1</code> و<code>Backup app2</code> ل<code>app2</code>. من المهم، مثل ما فعلنا مع خادوم قاعدة البيانات، تحديد الأسماء الصحيحة للعملاء (<code>app1-fd</code> و<code>app2-fd</code>) ومجموعة الملفات (<code>Apache DocumentRoot</code>).</p><p>بالنسبة للخادوم <code>app1</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Job {
  Name = "Backup app1"
  JobDefs = "DefaultJob"
  Client = app1-fd
  Pool = RemoteFile
  FileSet="Apache DocumentRoot"
}
</pre><p>وبالنسبة للخادوم <code>app2</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Job {
   Name = "Backup app2"
   JobDefs = "DefaultJob"
   Client = app2-fd
   Pool = RemoteFile
   FileSet="Apache DocumentRoot"
}</pre><h3 id="شغل-النسخ-الاحتياطي-لخادوم-توزيع-الحمل">شغل النسخ الاحتياطي لخادوم توزيع الحمل</h3><p>نتبع نفس مبدأ الخطوات السابقة لإنشاء شغل جديد ونسميه <code>Backup lb1</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Job {
  Name = "Backup lb1"
  JobDefs = "DefaultJob"
  Client = lb1-fd
  Pool = RemoteFile
  FileSet="SSL Certs and HAProxy Config"
}</pre><p>احفظ الملف ثم أغلقه.</p><h2 id="إعادة-تشغيل-مدير-bacula">إعادة تشغيل مدير Bacula</h2><p>أعد تشغيل Bacula على خادوم النسخ الاحتياطي لاعتماد التغييرات التي أجريناها في الفقرات السابقة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service bacula-director restart</pre><p>يجب أن تختبر، بالوصول إلى هذه النقطة، اتصالات عملاء Bacula وأشغال النسخ الاحتياطي. يغطى مقال <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-back-up-an-ubuntu-14-04-server-with-bacula">كيف تنسخ احتياطيا خادوم Ubuntu 14.04 باستخدام Bacula</a> هذين الجانبين. يُرجى ملاحظة أنه لاستعادة قاعدة بيانات MySQL ستحتاج لاتباع خطوة <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona-xtrabackup-on-ubuntu-14-04#perform-backup-restoration">الاستعادة من نسخة احتياطية</a> ضمن درس Percona XtraBackup.</p><h2 id="مراجعة-جدول-النسخ-الاحتياطي">مراجعة جدول النسخ الاحتياطي</h2><p>يمكن تنظيم جدول النسخ الاحتياطي في Bacula بالتعديل على إعداد مدير Bacula (الملف <code>etc/bacula/bacula-dir.conf/</code>). تستخدم جميع الأشغال التي أنشأناها تعريف الشغل <code>DefaultJob</code> الذي يستخدم جدولةً بدورة أسبوعية تعرَّف على النحو التالي:</p><ul><li>نسخة احتياطية كاملة Full backup في أول يوم أحد من الشهر عند الساعة 23:05.</li><li>نسخ احتياطية تفاضلية Differential backups في أيام الأحد المتبقية عند الساعة 23:05.</li><li>نسخ احتياطية تزايدية Incremental backups في باقي الأيام، من الإثنين إلى السبت عند الساعة 23:05.</li></ul><p>يمكنك التأكد من طريقة الجدولة وفحص حالة المدير في وحدة تحكم Bacula. يجب أن يظهر جميع الأشغال المُجدولة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Scheduled Jobs:
Level          Type     Pri  Scheduled          Name               Volume
===================================================================================
Incremental    Backup    10  20-May-15 23:05    BackupLocalFiles   MyVolume
Incremental    Backup    10  20-May-15 23:05    Backup lb1         Remote-0002
Incremental    Backup    10  20-May-15 23:05    Backup app2        Remote-0002
Incremental    Backup    10  20-May-15 23:05    Backup app1        Remote-0002
Incremental    Backup    10  20-May-15 23:05    Backup db1         Remote-0002</pre><p>سيكون من الجيد ضبط جدولة النسخ في خواديم التطبيقات بحيث يحدُث في نفس الوقت الذي ينسَخ فيه سكربت XtraBackup قاعدة البيانات (22:30)؛ وهو ما سيحول دون أن تكون نسخ خواديم التطبيقات غير متجانسة مع نسخة قاعدة البيانات.</p><h2 id="إعداد-نسخ-احتياطية-نائية">إعداد نسخ احتياطية نائية</h2><p>يمكننا الآن إعداد خادوم ناء نحفظ فيه النسخ الاحتياطية التي أنشأها Bacula (إضافة إلى حفظها على خادوم Bacula). يجب أن يكون هذا الخادوم في موقع جغرافي منفصل لكي يمكنك الحصول على النسخ الاحتياطية الهامة إن حدث مشكل مزمن في مركز البيانات الذي توجد فيه بيئة الإنتاج. اخترنا <code>SF01</code> في المثال موقعا لخادوم <code>remotebackups</code>.</p><p>سنشرح طريقة سهلة لإرسال النسخ الاحتياطية من خادوم <code>backups</code> إلى خادوم <code>remotebackups</code> باستخدام مفاتيح SSH، أداة <code>rsync</code> و<code>cron</code>.</p><p>أنشئ حسابا على خادوم <code>remotebackups</code> لاستخدامه في الولوج عبر <code>rsync</code>. ثم أنشئ باستخدام الحساب الجذر زوج مفاتيح SSH لا يحتاج لكلمة سر على خادوم <code>backups</code>. ثبت المفتاح العمومي على الحساب الذي أنشأته للتو على خادوم <code>remotebackups</code>؛ الطريقة مشروحة في مقال <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-ssh-%D8%A7%D9%84%D8%B9%D9%85%D9%84%D8%A7%D8%A1-%D9%88%D8%A7%D9%84%D9%85%D9%81%D8%A7%D8%AA%D9%8A%D8%AD-r55/">العمل مع خواديم SSH: العملاء والمفاتيح</a></p><p>اكتب، على خادوم <code>backups</code> أمر <code>rsync</code> ينسخ الملفات الموجودة على مسار <code>bacula/backup/</code> إلى مكان يوجد على خادوم <code>remotebackups</code>. يغطي درس <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%AA%D8%AE%D8%AF%D9%90%D9%85-rsync-%D9%84%D9%85%D8%B2%D8%A7%D9%85%D9%86%D8%A9-%D9%85%D8%AC%D9%84%D9%91%D8%AF%D8%A7%D8%AA-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AC%D9%87%D8%A7%D8%B2-%D8%A7%D9%84%D9%85%D8%AD%D9%84%D9%91%D9%8A-%D9%88%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%88%D9%85-r50/">كيف تستخدِم Rsync لمزامنة مجلّدات بين الجهاز المحلّي والخادوم</a> طريقة استخدام <code>rsync</code>. الشكل العام للأمر سيكون على النحو التالي (<code>remoteuser</code> الحساب على الخادوم البعيد، <code>remotebackups_public_hostname_or_IP</code> اسم المستضيف أو عنوان IP العمومي الخاص بالخادوم البعيد، و<code>path/to/remote/backup/</code> مسار مجلد النسخ الاحتياطي على الخادوم البعيد):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">rsync -az /bacula/backup remoteuser@remotebackups_public_hostname_or_IP:/path/to/remote/backup</pre><p>أضف الأمر لسكربت، مثلا: <code>usr/local/bin/rsync_backups.sh/</code> واجعله قابلا للتنفيذ. وأخيرا، اضبط شغل <code>cron</code> ينفذ سكربت <code>rsync_backups.sh</code> بصلاحيات <code>root</code> بعد إكمال أشغال Bacula. تمكن مراجعة درس <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81-%D8%AA%D8%AC%D8%AF%D9%88%D9%84-%D9%85%D9%87%D8%A7%D9%85%D9%83-%D8%A7%D9%84%D8%B1%D9%88%D8%AA%D9%8A%D9%86%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D8%AF%D8%A7%D8%AA%D9%8A-cron-%D9%88-anacron-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r82/">كيف تجدول مهامك الروتينية باستخدام أداتي Cron و Anacron في لينكس</a> لمزيد من التفاصيل عن عمل <code>cron</code>.</p><p>تأكد بعد ضبط كل هذه الإعدادات من وجود نسخ احتياطية على خادوم <code>remotebackups</code> في اليوم الموالي.</p><h2 id="اعتبارات-أخرى">اعتبارات أخرى</h2><p>لم نتحدث في ما سبق عن متطلبات القرص الصلب من ناحية التخزين. يجب أن تراجع مساحة التخزين التي تستخدمها نسخك الاحتياطية ثم تعيد النظر في إعداد النسخ الاحتياطي وجدولته وفقا لاحتياجاتك والموارد المتوفرة لديك.</p><p>يمكن أن تحتاج أيضا إلى إعداد نسخ احتياطية لخواديم أخرى غير خواديم التطبيق. على سبيل المثل خادوما المراقبة والسجلات بعد إكمال إعدادهما.</p><h2 id="خاتمة">خاتمة</h2><p>يجب أن تكون لديك الآن نسخ احتياطية يومية من خواديم التطبيق في بيئة الإنتاج، ونسخ منها على خادوم بعيد. تحقق من إمكانية استعادة الملفات وأضف خطوات استعادة البيانات إلى خطط الاسترداد.</p><p>ترجمة -وبتصرّف- لمقال <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/building-for-production-web-applications-backups">Building for Production: Web Applications — Backups</a> لصاحبه Mitchell Anicas.</p>
]]></description><guid isPermaLink="false">138</guid><pubDate>Tue, 17 Nov 2015 10:06:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62A;&#x62E;&#x637;&#x64A;&#x637; &#x644;&#x627;&#x633;&#x62A;&#x631;&#x62F;&#x627;&#x62F; &#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A; &#x648;&#x64A;&#x628; &#x636;&#x645;&#x646; &#x628;&#x64A;&#x626;&#x629; &#x625;&#x646;&#x62A;&#x627;&#x62C;</title><link>https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D8%AA%D8%AE%D8%B7%D9%8A%D8%B7-%D9%84%D8%A7%D8%B3%D8%AA%D8%B1%D8%AF%D8%A7%D8%AF-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D9%88%D9%8A%D8%A8-%D8%B6%D9%85%D9%86-%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A5%D9%86%D8%AA%D8%A7%D8%AC-r135/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_11/building-for-production-3.png.8eb7aa59b168159a63c4b3304ce3ce52.png" /></p>

<p id="مقدمة">أكملنا في <a href="https://academy.hsoub.com/devops/servers/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B9%D8%A7%D9%85%D8%A9-%D8%B9%D9%84%D9%89-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D9%85%D9%88%D8%AC%D9%91%D9%8E%D9%87%D8%A9-%D9%84%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%A7%D8%AC-r131/">الجزء السابق من هذه السّلسلة</a> إعداد التطبيق المثال؛ يجب علينا الآن تصميم خطة استرداد Recovery plan. خطة الاسترداد (أو الاستعادة) عبارة عن مجموعة موثقة من العمليات التي يجب تنفيذها لتصحيح إعدادات بيئة العمل بعد حدوث مشاكل مزمنة أو عند حصول أخطاء إدارية. يساعد إنشاء خطة استرداد أيضا على تحديد العناصر والبيانات الأساسية ضمن إعدادات خادوم التطبيق.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/building-for-production-3.png.550f0315f266a2f401efa02b007cfb4b.png"><img data-fileid="7378" class="ipsImage ipsImage_thumbnailed" alt="building-for-production-3.thumb.png.fdaf" src="https://academy.hsoub.com/uploads/monthly_2015_11/building-for-production-3.thumb.png.fdaf06e0772f53c9ab1a5959bc40de26.png"></a></p><p>يمكن أن تتمثل خطة استرداد قاعدية من إخفاق بيئة العمل في لائحة بالخطوات الواجب اتباعها لإنجاز النشر الابتدائي للخادوم؛ إلى جانب عمليات إضافية لاستعادة بيانات التطبيق من النسخ الاحتياطية. للحصول على خطة استرداد أفضل يجب، إضافة للتوثيق الجيد، استغلال سكربتات النشر وأدوات إدارة الإعدادات مثل <a href="https://academy.hsoub.com/devops/deployment/chef/">Chef</a>، Ansible و<a href="https://academy.hsoub.com/devops/deployment/puppet/">Puppet</a>؛ للمساعدة في أتممة وتسريع الاسترداد.</p><p><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/01_recovery_plans.png.c51517a4c6355da63fcd7698b3343188.png"><img data-fileid="6905" class="ipsImage ipsImage_thumbnailed" alt="01_recovery_plans.thumb.png.76876306fac0" src="https://academy.hsoub.com/uploads/monthly_2015_11/01_recovery_plans.thumb.png.76876306fac0d39a5c2cbdba629c1aa4.png"></a></p><p>سنوضح في هذا الجزء من السّلسلة كيفية إنشاء خطة استرداد قاعدية لتطبيق ووردبريس الذي أعددناه. سيساعدك الشرح في البدء بتصميم خطة استرداد خاصة بك حتى ولو كانت احتياجاتك مختلفة.</p><h2 id="متطلبات-خطة-الاسترداد">متطلبات خطة الاسترداد</h2><p>مطلبنا الأساسي هو إمكانية استرداد بيئة العمل بعد فقدان واحد من الخواديم المكوّنة لها، واستعادة وظيفة التطبيق وبياناته؛ إلى حد زمني مقبول. سننشئ جردًا لإعدادات كل خادوم نحدد من خلاله البيانات التي نحتاج لنسخ احتياطية منها؛ ثم نكتب خطة استرداد اعتمادا على ما يوجد في الخادوم. يجب أن نتحقق بعد تنفيذ أي واحدة من خطط الاسترداد أن التطبيق استُرِدّ بطريقة صحيحة.</p><p>سنخرج بخطة استرداد لكل نوع من الخواديم التي يتكون منها التطبيق:</p><ul><li>خادوم قاعدة البيانات.</li><li>خواديم التطبيق.</li><li>خادوم توزيع الحمل.</li></ul><p>نبدأ بخادوم قاعدة البيانات.</p><h2 id="خادوم-قاعدة-البيانات">خادوم قاعدة البيانات</h2><p>بإعادة تتبع خطواتنا (وإعادة النظر في الدرس السابق) نجد أن خادوم قاعدة البيانات أنشئ وفقا للخطوات التالية:</p><ul><li>تثبيت MySQL.</li><li>إعداد MySQL.</li><li>إعادة تشغيل MySQL.</li><li>إنشاء قاعدة البيانات والمستخدمين.</li></ul><h3 id="خطة-استرداد-خادوم-قاعدة-البيانات">خطة استرداد خادوم قاعدة البيانات</h3><p>نعرف، بالنظر لطريقة إنشاء خادوم قاعدة البيانات، أنه تمكن إعادة إنشائه من الصفر ما عدا محتوى قاعدة البيانات. تُخزَّن أغلب بيانات تطبيق ووردبريس (التدوينات مثلا) في قاعدة البيانات. يعني هذا أنه يجب علينا الاحتفاظ بنسخة احتياطية من قاعدة البيانات إن أردنا توفير القدرة على استرداد خادوم قاعدة البيانات. سنحتفظ أيضا بنسخ احتياطية من ملف إعدادات MySQL الذي غيرنا فيه قليلا.</p><p>في ما يلي ملخَّص لخطة الاسترداد الخاصة بخادوم قاعدة البيانات:</p><blockquote><blockquote class="ipsQuote" data-cite="اقتباس" data-ipsquote=""><p>النسخ الاحتياطية الضرورية:</p><ul><li>قاعدة بيانات MySQL.</li><li>ملف إعداد MySQL.</li></ul><p>خطوات الاسترداد:</p><ul><li>تثبيت MySQL.</li><li>استعادة ملف إعداد MySQL وتحديث عنوان IP الإنصات في حال تغيّره.</li><li>استعادة قاعدة البيانات.</li><li>إعادة تشغيل MySQL.</li></ul></blockquote></blockquote><p>يجب الآن التدرب على تنفيذ خطة الاستعادة هذه، والتأكد من الاحتفاظ بالنسخ الاحتياطية الضرورية.</p><h2 id="خواديم-التطبيق">خواديم التطبيق</h2><p>نعرف بالنظر في طريقة إنشاء خواديم التطبيق (ومراجعة الدرس السابق)؛ أنّ الخطوات المتَّبعة كانت على النحو التالي:</p><ul><li>تثبيت كل من PHP وApache وإعدادهما.</li><li>تنزيل التطبيق (ووردبريس) وإعداده.</li><li>نسخ ملفات التطبيق إلى جذر المستند Document root.</li><li>تكرار ملفات التطبيق على جميع خواديم التطبيق.</li></ul><h3 id="خطة-الاسترداد-لخادوم-التطبيق">خطة الاسترداد لخادوم التطبيق</h3><p>تمكن إعادة إنشاء خادوم التطبيق من الصفر، ما عدا ملفات التطبيق. تتضمن ملفات التطبيق في المثال ملفات إعداد ووردبريس (التي تحتوي على معلومات الاتصال بقاعدة البيانات)، إضافات ووردبريس المثّبَّتة، والملفات المحمَّلة. أي أنه يجب علينا الاحتفاظ بنسخة احتياطية من ملفات التطبيق إن أردنا إمكانية استرداد خادوم التطبيق.</p><p>أعددنا الخواديم بحيث تُكرَّر الملفات على خواديم التطبيق؛ يعني هذا أننا لا نحتاج لاستعادة البيانات من النسخ الاحتياطية إلا إذا أخفقت خواديم التطبيق جميعها أو تلَفتْ البيانات بطريقة أو بأخرى. إن بقي خادوم تطبيق واحد على الأقل يعمل جيدا، مع ملفات التطبيق الصحيحة؛ فإن إعادة ضبط تكرار الملفات مرة أخرى سيعيد الملفات الصحيحة إلى خادوم التطبيق الجديد.</p><p>في ما يلي ملخَّص لخطة الاسترداد الخاصة بخواديم التطبيقات، اعتمادا على الجرد أعلاه:</p><blockquote><blockquote class="ipsQuote" data-cite="اقتباس" data-ipsquote=""><p>النسخ الاحتياطية المطلوبة:</p><ul><li>ملفات التطبيق (<code>/var/www/html/</code> في المثال).</li></ul><p>خطوات الاسترداد:</p><ul><li>تثبيت PHP وApache وإعدادهما.</li><li>تكرار ملفات التطبيق على الخادوم الجديد انطلاقا من الخواديم العاملة.</li><li>إن لم يمكن تكرار الملفات (أي أن جميع خواديم التطبيق خارج الخدمة)؛ أعدها من النسخ الاحتياطية.</li></ul></blockquote></blockquote><p>اكتمل إعداد خطة الاسترداد لخواديم التطبيق. يجب الآن التدرب على تنفيذ خطة الاسترداد، والتأكد من الاحتفاظ بالنسخ الاحتياطية الضرورية.</p><h2 id="خادوم-توزيع-الحمل">خادوم توزيع الحمل</h2><p>المبدأ هو نفسه، ننظر إلى خطوات إنشاء موزع الحمل في الدرس السابق؛ فنخرج بالتالي:</p><ul><li>الحصول على شهادة SSL والملفات المتعلقة بها.</li><li>تثبيت HAProxy.</li><li>إعداد HAProxy.</li><li>إعادة تشغيل HAProxy.</li></ul><h3 id="خطة-الاسترداد-لخادوم-توزيع-الحمل">خطة الاسترداد لخادوم توزيع الحمل</h3><p>نعرف من الخطوات أعلاه، أنه تمكن إعادة إنشاء موزع الحمل انطلاقا من صفر، ما عدا الملفات المتعلقة بشهادة SSL. يعني هذا أنه يتوجب علينا الاحتفاظ بنسخ احتياطية من الملفات المتعلقة بشهادة SSL إن أردنا توفير القابلية لاسترداد خادوم توزيع الحمل. سنضيف أيضا ملف إعداد HAProxy ضمن النسخ الاحتياطية.</p><p>نضع - مثل ما فعلنا مع العناصر السابقة، ملخصا لخطة الاسترداد الخاصة بخادوم توزيع الحمل:</p><blockquote><blockquote class="ipsQuote" data-cite="اقتباس" data-ipsquote=""><p>النسخ الاحتياطية المطلوبة:</p><ul><li>شهادة SSL (ملف PEM) والملفات المتعلقة بها.</li><li>ملف إعداد HAProxy.</li></ul><p>خطوات الاسترداد</p><ul><li>استعادة ملفات شهادة SSL.</li><li>تثبيت HAProxy.</li><li>استعادة ملف إعداد HAProxy.</li><li>إعادة تشغيل HAProxy.</li></ul></blockquote></blockquote><p>اكتمل إعداد خطة الاسترداد لخادوم توزيع الحمل. يجب الآن التدرب على تنفيذ خطة الاسترداد، والتأكد من الاحتفاظ بالنسخ الاحتياطية الضرورية.</p><h2 id="اعتبارات-أخرى">اعتبارات أخرى</h2><p>إن تطلب استرداد أحد العناصر إعادة ضبط عنصر آخر (تغير عنوان IP الخاص بخادوم قاعدة البيانات مثلا)؛ فعليك التأكد من إدراج الخطوات الضرورية في خطط الاسترداد.</p><p>ستحتاج أيضا لكتابة خطط استرداد للعناصر الأخرى المكوِّنة للتطبيق مثل خادوم النطاقات؛ وكذلك جميع العناصر التي يمكن أن تضيفها في المستقبل مثل خواديم النسخ الاحتياطي، المراقبة والسجلات. يجب، مع تطور إعداداتك، إعادة النظر في خطط الاستعادة الموجودة وإجراء التغييرات اللّازمة.</p><p>لم نتطرق لحد الساعة إلى كيفية إنشاء ثم استعادة النسخ الاحتياطية؛ لذا سنحتاج للنظر في هذه التفاصيل لاحقا. سيكون النسخ الاحتياطي موضوع الجزء الموالي من هذا الدليل.</p><h2 id="خاتمة">خاتمة</h2><p>يجب الاحتفاظ بخطط الاستعادة الخاصة بالخواديم المختلفة في مكان آمن يمكن لمن أراد تنفيذ الخطوات الموجودة فيها الوصولُ إليه. احتفظ بها في مكان منفصل تماما عن بيئة العمل.</p><p>ترجمة -وبتصرّف- لمقال <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/building-for-production-web-applications-recovery-planning">Building for Production: Web Applications — Recovery Planning</a> لصاحبه Mitchell Anicas.</p><p>حقوق الصورة البارزة: <a rel="external nofollow" target="_blank" href="http://www.freepik.com/free-vector/mobile-app-development_796126.htm">Designed by Freepik</a>.</p>
]]></description><guid isPermaLink="false">135</guid><pubDate>Sun, 15 Nov 2015 18:50:00 +0000</pubDate></item><item><title>&#x646;&#x634;&#x631; &#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A; &#x627;&#x644;&#x648;&#x64A;&#x628; &#x627;&#x644;&#x645;&#x648;&#x62C;&#x647;&#x629; &#x644;&#x628;&#x64A;&#x626;&#x629; &#x627;&#x644;&#x625;&#x646;&#x62A;&#x627;&#x62C;</title><link>https://academy.hsoub.com/devops/servers/%D9%86%D8%B4%D8%B1-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D9%85%D9%88%D8%AC%D9%87%D8%A9-%D9%84%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%A7%D8%AC-r132/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_11/building-for-production.png.23c0dd138ecf2f6bbbd55d34a0ca6425.png" /></p>

<p id="مقدمة">هذا الدّرس هو الجزء الثّاني من سلسلة من 6 دروس حول "<a href="https://academy.hsoub.com/search/?tags=production+deployment+101">نظرة عامة على إنشاء تطبيقات موجهة لبيئة الإنتاج</a>". إذا لم تقرأ <a href="https://academy.hsoub.com/devops/servers/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B9%D8%A7%D9%85%D8%A9-%D8%B9%D9%84%D9%89-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D9%85%D9%88%D8%AC%D9%87%D8%A9-%D9%84%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%A7%D8%AC-r131/">الدّرس الأول</a> فألق نظرة عليه قبل أن تواصل القراءة.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/building-for-production.png.30ea9b854c05760d709f54367e97ebfa.png"><img data-fileid="7285" class="ipsImage ipsImage_thumbnailed" alt="building-for-production.thumb.png.a229f2" src="https://academy.hsoub.com/uploads/monthly_2015_11/building-for-production.thumb.png.a229f27bf0225cacc1a219e1bfaf56f9.png"></a></p><p>سنعدّ في هذا الجزء من السّلسلة تطبيق PHP الذي اخترناه مثالا (ووردبريس) إضافة إلى خادوم أسماء نطاقات DNS خاص.</p><p>سيستعمل مستخدمو التطبيق اسمَ النطاق للوصول إليه؛ عبر العنوان <code><a rel="external nofollow" href="https://www.example.com">https://www.example.com</a></code> على سبيل المثال. يحيل العنوان إلى موزع الحِمل الذي سيعمل وسيطا عكسيا Reverse proxy لخواديم التطبيق التي تتصل بدورها بخادوم قاعدة البيانات. يمكِّننا استخدامُ نظام أسماء نطاقات خاصة Private DNS من الإشارة إلى عناوين الخواديم ضمن الشبكة الداخلية بأسماء المستضيفات الخاصة بها مما يسهل من عملية إعداد الخواديم.</p><p>سنعد العناصر للتوّ التي أشرنا إليها على ستة خواديم، طبقا للترتيب التالي:</p><ol><li>نظام أسماء نطاقات خاصة (المستضيفان <code>ns1</code> و<code>ns2</code>).</li><li>خادوم قاعدة البيانات (<code>db1</code>).</li><li>خواديم التطبيق (<code>app1</code> و<code>app2</code>).</li><li>موزع حمل (<code>lb1</code>).</li></ol><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" style="line-height: 24.8889px; text-align: center;" href="https://academy.hsoub.com/uploads/monthly_2015_11/01_Production_server_setup.png.c441de41d276939b90a6ea4966f2a12f.png"><img data-fileid="6786" class="ipsImage ipsImage_thumbnailed" alt="01_Production_server_setup.thumb.png.ea6" src="https://academy.hsoub.com/uploads/monthly_2015_11/01_Production_server_setup.thumb.png.ea6e7f9c79ddc2f64d14dcfbdb90e09e.png"></a></p><p>فلنبدأ بإعداد النطاقات.</p><h2 id="خواديم-النطاقات-الداخلية">خواديم النطاقات الداخلية</h2><p>يساعد استخدام أسماء نطاقات بدلا من عناوين IP في التعرف على الخواديم التي نعمل عليها، كما أنه ضروري حال إدارة الكثير من الخواديم؛ إذ يمكّن من إحلال خادوم مكان آخر بمجرد تحديث سجلات النطاق (ضمن ملف وحيد) بدلا من من تحديث عناوين IP ضمن الكثير من ملفات الإعداد. سنعدّ نظام نطاقات للإحالة إلى عناوين الشبكة الداخلية التي توجد بها الخواديم بدلا من عناوين IP.</p><p>سنشير إلى كل عنوان في الشبكة الداخلية بمستضيف ضمن النطاق الفرعي<span style="font-family:courier new,courier,monospace;"> <code>nyc3.example.com</code></span>. سيكون عنوان خادوم قاعدة البيانات ضمن الشبكة الداخلية - على سبيل المثال - <code>db1.nyc3.example.com</code>؛ وهو ما ستترجمه خواديم النطاقات إلى عنوان IP داخلي (خاص). تنبغي الإشارة إلى أن اختيار اسم النطاق الفرعي <code>nyc3.example.com</code> اعتباطي. في العادة يُستخدم اسم الموقع الجغرافي للنطاق الفرعي؛ في مثالنا، تشير <code>nyc3</code> إلى أن الخواديم تتواجد في مركز البيانات <code>NYC3</code>، و<code>example.com</code> إلى اسم النطاق الخاص بالتطبيق.</p><p>ستحصل على خادومي BIND هما <code>ns1</code> و<code>ns2</code>. أضف عناوين IP الخاصة بجميع الخواديم التي تخطط لإعدادها إن كنت تعرفها سلفًا، وإلا أضف سجلات النطاق بالتزامن مع إنشاء الخواديم.</p><p>ننتقل لإعداد خادوم قاعدة البيانات.</p><h2 id="إعداد-خادوم-قاعدة-البيانات">إعداد خادوم قاعدة البيانات</h2><p>نريد - طبقا للخطة - توزيع الحمل بين خواديم التطبيقات؛ أي تلك التي تشغِّل PHP وApache، لذا سنفْصِل قاعدة البيانات عن خواديم التطبيق لجعلها على خادوم خاص بها. من المهم جدا فصل قاعدة البيانات عن التطبيق في حال أردنا إمكانية التوسع أفقيا Horizontally Scaling (إضافة خواديم جديدة لتعمل مع تلك الموجودة) في تطبيقات PHP.</p><p>تغطي هذه الفقرة كل الخطوات الضرورية لإعداد خادوم قاعدة البيانات، لكن يمكنك معرفة المزيد عن إعداد قاعدة بيانات MySQL بعيدة بقراءة مقال <a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D9%82%D8%A7%D8%B9%D8%AF%D8%A9-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A8%D8%B9%D9%8A%D8%AF%D8%A9-%D9%84%D8%AA%D8%AD%D8%B3%D9%8A%D9%86-%D8%A3%D8%AF%D8%A7%D8%A1-%D9%85%D9%88%D9%82%D8%B9-%D9%8A%D8%B3%D8%AA%D8%AE%D8%AF%D9%90%D9%85-mysql-r9/"> كيفية إعداد قاعدة بيانات بعيدة لتحسين أداء موقع يستخدِم MySQL</a>.</p><h3 id="تثبيت-mysql">تثبيت MySQL</h3><p>نفذ الأمرين التاليين على خادوم قاعدة البيانات (<code>db1</code>) لتثبيت خادوم MySQL:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo apt-get update
sudo apt-get -y install mysql-server</pre><p>أدخل كلمة السر التي تريد استخدامها للحساب الإداري في MySQL عندما يُطلب منك ذلك.</p><p>نفذ:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo mysql_install_db
sudo mysql_secure_installation</pre><p>ستحتاج لإدخال كلمة سر المستخدِم الإداري التي اخترتها عند تثبيت خادوم MySQL؛ بعدها سيسألك إن كنت تريد تغيير كلمة السر هذه، اضغط زر<strong> <code>N</code></strong> إذا كنت لا تريد تغييرها. بالنسبة لبقية الأسئلة اضغط زر <code>Enter</code> لتأكيد الاختيارات الافتراضية.</p><h3 id="إعداد-mysql-لاستخدام-واجهة-الشبكة-الداخلية">إعداد MySQL لاستخدام واجهة الشبكة الداخلية</h3><p>افتح ملف إعداد MySQL عبر الأمر التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/mysql/my.cnf</pre><p>ابحث عن <code>bind-address</code> وحدد قيمة المتغير بعنوان IP قاعدة البيانات ضمن الشبكة الداخلية:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">bind-address            = <span style="color:#A52A2A;">db1.nyc3.example.com</span></pre><p>احفظ الملف ثم أغلقه.</p><p>أعد تشغيل MySQL:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service mysql restart</pre><h3 id="اضبط-قاعدة-البيانات-ومستخدميها">ضبط قاعدة البيانات ومستخدميها</h3><p>نحتاج الآن لإنشاء قاعدة بيانات والمستخدمين الذين ستتصل خواديم التطبيقات عن طريقهم إلى قاعدة البيانات. استخدم الأمر التالي للدخول إلى سطر أوامر MySQL:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">mysql -u root -p</pre><p>أدخل كلمة السر عندما تُطلب.</p><p>أنشئ قاعدة بيانات بتنفيذ الأمر التالي في سطر أوامر MySQL:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">CREATE DATABASE <span style="color:#800000;">app</span>;</pre><p>يرفق خادوم MySQL كل مستخدم بالخواديم التي يمكنه منها الاتصال بقاعدة بيانات. يوجد في مثالنا خادوما تطبيق يتصلان بقاعدة البيانات؛ لذا سننشئ مستخدما لكل واحد منهما. أنشئ مستخدما في قاعدة البيانات باسم<span style="font-family:courier new,courier,monospace;"> <code>appuser</code></span> يمكنه الاتصال من العناوين الداخلية لخواديم التطبيقات (أي <code>app1</code> و<code>app2</code>). يجب استخدام نفس كلمة السر للمستخدمَيْن (اختر كلمة سر واكتبها مكان <code>password</code> في الأمرين أدناه):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">CREATE USER '<span style="color:#800000;">appuser</span>'@'<span style="color:#800000;">app1.nyc3.example.com</span>' IDENTIFIED BY '<span style="color:#800000;">password</span>';
CREATE USER '<span style="color:#800000;">appuser</span>'@'<span style="color:#800000;">app2.nyc3.example.com</span>' IDENTIFIED BY '<span style="color:#800000;">password</span>';</pre><p>سنضبط في ما بعد امتيازات المستخدم <code>appuser</code>، نكتفي الآن بإعطائه تحكما كاملا على قاعدة البيانات <code>app</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">GRANT ALL PRIVILEGES ON <span style="color:#800000;">app</span>.* TO '<span style="color:#800000;">appuser</span>'@'<span style="color:#800000;">app1.nyc3.example.com</span>';
GRANT ALL PRIVILEGES ON <span style="color:#800000;">app</span>.* TO '<span style="color:#800000;">appuser</span>'@'<span style="color:#800000;">app2.nyc3.example.com</span>';
FLUSH PRIVILEGES;</pre><p>تضمن الامتيازات الممتدة أن سكربت تثبيت التطبيق سيتمكن من تثبيته على قاعدة البيانات. إن كان لديك أكثر من خادومي تطبيقات، فيجب أن تنشئ حسابات المستخدمين الآن بنفس الكيفية.</p><p>للخروج من سطر أوامر MySQL:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">exit</pre><p>اكتمل الآن إعداد خادوم قاعدة البيانات. ننتقل لإعداد خواديم التطبيقات.</p><h2 id="إعداد-خواديم-التطبيقات">إعداد خواديم التطبيقات</h2><p>تتصل خواديم التطبيق بخادوم قاعدة البيانات. اخترنا ووردبريس للتمثيل في هذا الدليل، وهو تطبيق PHP يعمل على خادوم ويب مثل Apache أو Nginx. سنضبط خادومين متطابقين لتوزيع الحِمل بينهما. تغطّي هذه الفقرة الخطوات الضرورية لإعداد خواديم التطبيق، لكن الموضوع مشروح بتفاصيل أكثر في مقال <a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D9%82%D8%A7%D8%B9%D8%AF%D8%A9-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A8%D8%B9%D9%8A%D8%AF%D8%A9-%D9%84%D8%AA%D8%AD%D8%B3%D9%8A%D9%86-%D8%A3%D8%AF%D8%A7%D8%A1-%D9%85%D9%88%D9%82%D8%B9-%D9%8A%D8%B3%D8%AA%D8%AE%D8%AF%D9%90%D9%85-mysql-r9/"> كيفية إعداد قاعدة بيانات بعيدة لتحسين أداء موقع يستخدِم MySQL</a> انطلاقا من فقرة <strong>إعداد خادوم الويب</strong>.</p><h3 id="تثبيت-apache-وphp">تثبيت Apache وPHP</h3><p>نفذ الأوامر التالية على كل واحد من الخادومين <code>app1</code>و<code>app2</code> لتثبيت Apache وPHP:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo apt-get update
sudo apt-get -y install apache2 php5-mysql php5 libapache2-mod-php5 php5-mcrypt</pre><h3 id="إعداد-apache">إعداد Apache</h3><p>سنستخدم HAProxy على خادوم موزع الحمل للتعامل مع الاتصال عبر <code>SSL</code>، مما يعني أننا لا نريد أن يتصل المستخدمون بخادوميْ التطبيقات مباشرة. سنربط Apache بعنوان الشبكة الداخلية الخاص بكل واحد من الخادومين.</p><p>نفّذ الأمر التالي على كل من الخادومين، <code>app1 </code>و<code>app2</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/apache2/ports.conf</pre><p>ابحث عن السطر الذي توجد فيه العبارة <code>Listen 80</code> وأضف عنوان خادوم التطبيق الخاص إليها، على النحو التالي (أبدل <code>private_IP</code> بعنوان IP الخاص بك):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Listen <span style="color:#800000;">private_IP</span>:80</pre><p>احفظ الملف ثم أغلقه. يجعل هذا الإعداد خادوم Apache يُنصت لعناوين الشبكة الداخلية فقط؛ ممايعني أنه لا يمكن الوصول إليه عبر عنوان IP العمومي أو اسم المستضيف.</p><p>أعد تشغيل Apache لأخذ التغيير في الحسبان:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service apache2 restart</pre><p>لا يمكن - وفق الإعداد الحالي - الوصول مباشرة إلى خادوم Apache؛ إذ تقتصر الاتصالات التي يقبلها على تلك القادمة من الشبكة الداخلية. سنعدّ - بعد قليل - موزع الحمل لإرسال الطلبات إلى الخواديم.</p><h3 id="تنزيل-التطبيق-وإعداده">تنزيل التطبيق وإعداده</h3><p>اخترنا في هذه السّلسلة ووردبريس مثالا للتطبيق. إن كنت تستخدم تطبيق PHP مغايرا فيجب عليك تنزيله وعمل الإعدادات اللازمة (معلومات الاتصال بقاعدة البيانات على سبيل المثال)؛ ثم انتقل إلى الفقرة الموالية.</p><p>نزل أرشيف ووردبريس على خادوم التطبيق الأول، <code>app1</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">cd ~
wget http://wordpress.org/latest.tar.gz</pre><p>فك ضغط الأرشيف واستخرج ملفات ووردبريس:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">tar xvf latest.tar.gz</pre><p>انتقل إلى مجلّد ووردبريس المُستخرَج:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">cd wordpress</pre><p>يحتاج ووردبريس إلى مجلّد لوضع الملفات التي يحملها فيه؛ فلننشئ هذا المجلّد (wp-content/uploads):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">ode&gt;mkdir wp-content/uploads</pre><p>سنستخدم ملف إعداد ووردبريس النموذجي قالبا للإعداد:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">cp wp-config-sample.php wp-config.php</pre><p>افتح الملف الإعداد من أجل تحريره:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">nano wp-config.php</pre><p>اضبط اتصال ووردبريس بقاعدة البيانات بتحرير المعلومات الميَّزة في الأسطر التالية:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">/** The name of the database for WordPress */
define('DB_NAME', '<span style="color:#800000;">app</span>');

/** MySQL database username */
define('DB_USER', '<span style="color:#800000;">appuser</span>');

/** MySQL database password */
define('DB_PASSWORD', '<span style="color:#800000;">password</span>');

/** MySQL hostname */
define('DB_HOST', '<span style="color:#800000;">db1.nyc3.example..com</span>');</pre><p>نضيف الأسطر التالية إلى ملف إعداد ووردبريس لإخباره بأنه خلف وسيط عكسي يستخدم SSL (موزع الحمل يستخدم TLS/SSL للتعميّة):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">define('FORCE_SSL_ADMIN', true);
  if ($_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')
     $_SERVER['HTTPS']='on';</pre><p>احفظ الملف ثم أغلقه.</p><p>تبقّى الآن نقلُ ملفات ووردبريس إلى مجلد يمكن لخادوم الويب الوصول إليه من أجل خدمة الزوار.</p><h3 id="نقل-ملفات-التطبيق-إلى-جذر-المستند-document-root">نقل ملفات التطبيق إلى جذر المستند Document Root</h3><p>نحتاج الآن، بعد إعداد التطبيق، لنقل ملفات ووردبريس إلى جذر المستند في Apache حيث يمكن لخادوم الويب الوصول إليها وتقديمها لزوار الموقع. جذر المستند الافتراضي في Apache هو المسار <span style="font-family:courier new,courier,monospace;"><code>var/www/html/</code></span> وهو ما سنستخدمه في مثالنا.</p><p>احذف أولا ملف <code>index.html</code> الافتراضي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo rm /var/www/html/index.html</pre><p>استخدم <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%AA%D8%AE%D8%AF%D9%90%D9%85-rsync-%D9%84%D9%85%D8%B2%D8%A7%D9%85%D9%86%D8%A9-%D9%85%D8%AC%D9%84%D9%91%D8%AF%D8%A7%D8%AA-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AC%D9%87%D8%A7%D8%B2-%D8%A7%D9%84%D9%85%D8%AD%D9%84%D9%91%D9%8A-%D9%88%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%88%D9%85-r50/">أداة <code>rsync</code></a> لنسخ ملفات ووردبريس إلى المجلد <code>var/www/html/</code> اجعل <code>www-data</code> (الحساب الذي يشتغل به خادوم ويب Apache) مالكَ هذا المجلّد:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo rsync -avP ~/wordpress/ /var/www/html
sudo chgrp -R www-data /var/www/html/*</pre><p>أصبح خادوم التطبيق الأول <code>app1</code> جاهزا؛ سنعد الآن خادوم التطبيق الآخر.</p><h2 id="تكرار-ملفات-التطبيق-على-الخواديم-الأخرى">تكرار ملفات التطبيق على الخواديم الأخرى</h2><p>يتوجب إعداد آلية لتكرار الملفات الموجودة في جذر المستند لخادوم الويب على مختلف الخواديم المكوِّنة للتطبيق؛ من أجل إبقاء ملفات التطبيق متجانسة عبر الخواديم. في حالة ووردبريس فإن استخدام واجهة الويب لتحميل الملفات وتثبيت الإضافات سيجعلها موجودة فقط على الخادوم الذي عالج الطلب. إن لم تكرَّر الملفات على جميع الخواديم فسيرى بعض زوار الموقع صفحات بصور ناقصة وإضافات مكسورة. إن كنت تستخدم تطبيقا آخر غير ووردبريس لا يحفظ بياناته (الملفات المحمَّلة والإضافات المنزّلة مثلا) على خادوم التطبيق فيمكنك الاكتفاء بنقل الملفات إلى الخادوم يدويا مرة واحدة. في هذه الحالة استخدم أداة <code>rsync</code> لنقل ملفات التطبيق من الخادوم <code>app1</code> إلى الخادوم <code>app2</code>.</p><p>يمكن استخدام GlusterFS لإنشاء تجزئة قرص مكرَّرة من الملفات الضرورية. الطريقة مشروحة في فقرة <strong>مزامنة الملفات في تطبيقات الويب</strong> ضمن مقال <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-use-haproxy-as-a-layer-4-load-balancer-for-wordpress-application-servers-on-ubuntu-14-04#synchronize-web-application-files">كيف تستخدم HAProxy لتوزيع الحمل بين خواديم تطبيق ووردبريس</a>. اتبع الخطوات (تجاوز فقرة إعداد ملفات المستضيف لأن خادوم النطاقات لدينا يتولى المهمة) ثم اضبُط تكرار الملفات بين <code>app1</code> و<code>app2</code>.</p><p>بعد الانتهاء من إعداد تكرار الملفات بين الخواديم نكون على استعداد لتجهيز موزِّع الحمل.</p><h2 id="إعداد-موزع-الحمل">إعداد موزع الحمل</h2><p>اخترنا HAProxy موزعا للحمل؛ وسيعمل وسيطا عكسيا لخواديم التطبيق. سيصل المستخدمون إلى التطبيق عبر عنوان شبيه ب<code><a rel="external nofollow" href="https://www.example.com">https://www.example.com</a></code> بعد المرور بموزع الحمل. تشرح هذه الفقرة الخطوات الضرورية لإعداد خادوم موزِّع للحمل/</p><h3 id="نسخ-شهادة-ssl">نسخ شهادة SSL</h3><p>نفذ الخطوات التالية على خادوم موزع الحمل، <code>lb1</code>.</p><p>ضع شهادة SSL (أحد متطلبات <a href="https://academy.hsoub.com/devops/servers/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B9%D8%A7%D9%85%D8%A9-%D8%B9%D9%84%D9%89-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D9%85%D9%88%D8%AC%D9%91%D9%8E%D9%87%D8%A9-%D9%84%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%A7%D8%AC-r131/">الجزء الأول</a> من السّلسلة) ومفتاح الشهادة، إضافة لأي شهادات من سلطة وسيطة ضمن ملف <code>pem.</code> واحد (نفترض أن شهادات SSL موجودة في المجلّد <code>root/certs/</code>):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">cd /root/certs
cat www.example.com.crt CAintermediate.ca-bundle www.example.com.key &gt; www.example.com.pem</pre><p>ثم انسخ ملف <code>pem</code> إلى المجلّد <code>etc/ssl/private/</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo cp www.example.com.pem /etc/ssl/private/</pre><p>سيستخدم HAProxy هذا الملف لإنهاء SSL.</p><h3 id="تثبيت-haproxy">تثبيت HAProxy</h3><p>نفذ الأوامر التالية على خادوم موزع الحمل، <code>lb1</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo add-apt-repository ppa:vbernat/haproxy-1.5
sudo apt-get update
sudo apt-get -y install haproxy</pre><h3 id="إعداد-haproxy">إعداد HAProxy</h3><p>نحتاج لضبط إعداداتٍ عامة في HAProxy إضافة لإنهاء SSL والنهايات الخلفية Backend والأمامية Frontend المناسبة لجعله يعمل مع خواديم التطبيق.</p><p>افتح ملف إعداد HAProxy لتحريره:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/haproxy/haproxy.cfg</pre><h3 id="خيارات-عامة-في-إعداد-haproxy">خيارات عامة في إعداد HAProxy</h3><p>أول ما يجب فعله هو تحديد قيمة معقولة للحد الأعلى لعدد الاتصالات <code>maxconn</code>. يحدد هذا المتغير عدد الاتصالات الأكبر التي يسمح بها HAProxy في نفس الوقت؛ وهو ما قد يؤثر على جودة الخدمة ويحول دون انهيار خادوم الويب عند محاولته الإجابة على الكثير من الطلبات. يجب أن تبحث وتجرب قيما عدة لإيجاد تلك المناسبة لبيئة عملك. أضف السطر التالي إلى ملف إعداد HAProxy (اخترنا القيمة 2048):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">maxconn <span style="color:#800000;">2048</span></pre><p>أضف السطر التالي لضبط الحجم الأكبر للذاكرة المؤقتة لتخزين مفاتيح التعمية:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">tune.ssl.default-dh-param <span style="color:#800000;">2048</span></pre><p>أضف السطرين التاليين ضمن مقطع <code>defaults</code> مباشرة بعد السطر الذي توجد به <code>mode http</code>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">option forwardfor
option http-server-close</pre><p>تفعل الأسطر التالية إذا أضيفت ضمن مقطع <code>defaults</code> صفحة إحصاءات HAProxy (أبدل <code>user</code> و<code>password</code> بقيم آمنة):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">stats enable
stats uri /<span style="color:#800000;">stats</span>
stats realm Haproxy\ Statistics
stats auth <span style="color:#800000;">user</span>:<span style="color:#800000;">password</span></pre><p>يمكن بعد التفعيل عرض إحصاءات HAProxy بالذهاب إلى الصفحة التالية <code><a rel="external nofollow" href="https://www.example.com/stats">https://www.example.com/stats</a></code>.</p><p>لم ننته بعد من ملف إعدادات HAProxy، سنضبط في ما يلي إعدادات الوسيط.</p><h3 id="إعداد-الوسيط-في-haproxy">إعداد الوسيط في HAProxy</h3><p>نبدأ بإضافة نهاية أمامية للتعامل مع اتصالات HTTP الواردة. نضيف في نهاية ملف الإعداد نهاية أمامية باسم <code>www-http</code> عبر الأسطر التالية:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">frontend www-http
  bind <span style="color:#800000;">www.example.com</span>:80
  reqadd X-Forwarded-Proto:\ http
  default_backend app-backend</pre><p>الهدف من هذا الإعداد هو قبول اتصالات HTTP من أجل توجيهها عبر اتصال HTTPS.</p><p>ثم نضيف نهاية أمامية للتعامل مع اتصالات HTTPS، تأكد من تحديد ملف <code>pem</code> المناسب.</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">frontend www-https
  bind <span style="color:#800000;">www.example.com</span>:443 ssl crt /etc/ssl/private/<span style="color:#800000;">www.example.com</span>.pem
  reqadd X-Forwarded-Proto:\ https
  default_backend app-backend</pre><p>نستكمل الإعداد بضبط النهاية الخلفية:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">backend app-backend
  redirect scheme https if !{ ssl_fc }
  server app1 <span style="color:#800000;">app1.nyc3.example.com</span>:80 check
  server app2 <span style="color:#800000;">app2.nyc3.example.com</span>:80 check</pre><p>تحدد النهاية الخلفية خواديم التطبيقات التي يوزَّع بينها الحمل. يطلب السطر:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">redirect scheme https if !{ ssl_fc } </pre><p>توجيه اتصالات HTTP إلى HTTPS.</p><p>احفظ ملف <code>haproxy.cfg</code> ثم أغلقه. HAProxy جاهز الآن لبدء العمل؛ لكن سنفعل أولا السجلات Logs.</p><h3 id="تفعيل-سجلات-haproxy">تفعيل سجلات HAProxy</h3><p>افتح ملف <code>rsyslog</code> للتحرير:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nano /etc/rsyslog.conf</pre><p>ابحث عن الأسطر التالية وانزع علامة التعليق من أجل تفعيل بروتوكول UDP عند استقبال سجلات النظام Syslog. تبدو الأسطر كما يلي بعد نزع علامة التعليق:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 127.0.0.1</pre><p>أعد تشغيل خدمة <code>rsyslog</code> لتفعيل الإعداد الجديد:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service rsyslog restart</pre><p>سجل HAProxy مفعَّل الآن وسيُنشأ ملف <code>var/log/haproxy.log/</code> فور بدء عمل HAProxy.</p><h3 id="إعادة-تشغيل-haproxy">إعادة تشغيل HAProxy</h3><p>أعد تشغيل HAProxy لأخذ التعديلات في الحسبان.</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service haproxy restart</pre><p>اكتمل الآن إعداد موزع الحِمل، ننتقل لتثبيت التطبيق (ووردبريس).</p><h3 id="تثبيت-ووردبريس">تثبيت ووردبريس</h3><p>سيتوجب علينا - قبل البدء في استخدام ووردبريس - تشغيل سكربت التثبيت الذي يهيئ قاعدة البيانات ليستخدمها ووردبريس. أدخل إلى العنوان التالي في المتصفح:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">https://<span style="color:#800000;">www.example.com</span>/wp-admin/install.php</pre><p>ستظهر شاشة تثبيت ووردبريس. املأء الحقول بما يناسب ثم انقر على زر التثبيت.</p><p>بعد انتهاء تثبيت ووردبريس يصبح التطبيق جاهزا للعمل.</p><h2 id="خاتمة">خاتمة</h2><p>اكتمل الآن إعداد الخواديم المكوِّنة للتطبيق، وهذا الأخير جاهز للاستخدام. يمكنك الدخول بحساب المدير كما يمكن لزوار موقعك الوصول إليه عبر HTTPS عند استخدام اسم النطاق المناسب.</p><p>تأكد قبل الانتقال إلى الجزء الموالي من الدليل أن التطبيق يعمل بطريقة صحيحة.</p><p>ترجمة -وبتصرّف- لمقال <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/building-for-production-web-applications-deploying">Building for Production: Web Applications — Deploying</a> لصاحبه Mitchell Anicas.</p><p><span style="line-height: 22.4px;">حقوق الصورة البارزة: </span><a rel="external nofollow" target="_blank" style="line-height: 22.4px;" href="http://www.freepik.com/free-vector/mobile-app-development_796126.htm">Designed by Freepik</a><span style="line-height: 22.4px;">.</span></p>
]]></description><guid isPermaLink="false">132</guid><pubDate>Sat, 14 Nov 2015 11:33:00 +0000</pubDate></item><item><title>&#x646;&#x638;&#x631;&#x629; &#x639;&#x627;&#x645;&#x629; &#x639;&#x644;&#x649; &#x625;&#x646;&#x634;&#x627;&#x621; &#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A; &#x645;&#x648;&#x62C;&#x647;&#x629; &#x644;&#x628;&#x64A;&#x626;&#x629; &#x627;&#x644;&#x625;&#x646;&#x62A;&#x627;&#x62C;</title><link>https://academy.hsoub.com/devops/servers/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B9%D8%A7%D9%85%D8%A9-%D8%B9%D9%84%D9%89-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D9%85%D9%88%D8%AC%D9%87%D8%A9-%D9%84%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%A7%D8%AC-r131/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_11/intro-to-deployment.png.d6833e9041509ae7f758bc868f4c6fa7.png" /></p>

<p id="مقدمة">يعرض هذا الدّرس والذي يُعتبر الأول من <a href="https://academy.hsoub.com/search/?tags=production+deployment+101">سلسلة ذات ستة أجزاء</a> كيفية إعداد بنية تحتية لتطبيق مكوَّن من خواديم عدة، انطلاقا من الصفر. سيحتوي الإعداد النهائي على آليات للنسخ الاحتياطي Backup، المراقبة Monitoring، نُظُم مركزية للسجلات Centralized logging مما يعزز من إمكانية تشخيص المشاكل واستعادة إعدادات التطبيق عند الحاجة. الهدف الأسمى هو إنشاء نظام إدارة قائم بذاته، والتعريف بأهم المفاهيم والاعتبارات العملية التي ينبغي التنبه لها عند إعداد خادوم موجَّه للإنتاج Production server.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/intro-to-deployment.png.2a25ced8a8e1485bd0bf4e0a725bb3dd.png"><img data-fileid="7081" class="ipsImage ipsImage_thumbnailed" alt="intro-to-deployment.thumb.png.2e511f4c8f" src="https://academy.hsoub.com/uploads/monthly_2015_11/intro-to-deployment.thumb.png.2e511f4c8f5674a1458c3ef6886a60c1.png"></a></p><p><strong>ملحوظة: </strong>توجد -عادة- أثناء تطوير وإعداد البرامج بيئة إنتاج وبيئة اختبار (أو أكثر). في بيئة الاختبار يستخدم قليلون التطبيق، ويكون المستخدمون في هذه الحالة غالبا مطورين يبحثون عن علل لترقيعها. في الجانب الآخر فإن التطبيق في بيئة الإنتاج يستخدمه المستهدَفون الحقيقيون بالمنتَج (التطبيق)؛ لذا يجب أن يعمل بكفاءة وسلاسة.</p><p>قراءة الدّرس التالي وفهمه سيساعدك في المضي قدما مع هذا الدّرس:</p><ul><li><a href="https://academy.hsoub.com/devops/servers/%D8%AE%D9%85%D8%B3%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF%D8%A7%D8%AA-%D8%B4%D8%A7%D8%A6%D8%B9%D8%A9-%D9%84%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r8/">خمسة إعدادات شائعة لتطبيقات الوب</a>.</li></ul><p>يقدم المقال خطوطا عريضة لإعداد تطبيق موجَّه للإنتاج، بينما يوضح هذا الدّرس كيفية التخطيط لتطبيق نموذجي وإعداده من البداية إلى النهاية. المأمول هو أن يساعدك الدرس في التخطيط لإعداد خادومك الخاص ثم تنفيذ الإعداد حتى ولو كنت تشغِّل حزمة تطبيقات مختلفة تماما. يحيل الدّرس في أحيان كثيرة، نظرا لأنه يغطي مواضيع مختلفة من إدارة النظم، إلى شروحات مفصلة ضمن مقالات أخرى تقدم معلومات إضافية.</p><h2 id="الهدف">الهدف</h2><p>سنحصل بنهاية مجموعة المقالات هذه على خادوم إنتاج معدّ لتشغيل تطبيق PHP، ووردبريس على سبيل المثال، يمكن الوصول إليه عبر العنوان <a rel="external nofollow" href="https://www.example.com/">https://www.example.com/</a>. سنعدّ أيضا خواديم إضافية لدعم خواديم التطبيق في بيئة الإنتاج. سيبدو الإعداد النهائي على النحو التالي (لا تظهر خواديم نظام إدارة النطاقات DNS الداخلية ولا النسخ الاحتياطية البعيدة في الصورة أدناه):</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/01_Production_server_setup.png.4e14f06bcc1030340a214f84b0209e69.png"><img data-fileid="6774" class="ipsImage ipsImage_thumbnailed" alt="01_Production_server_setup.thumb.png.324" src="https://academy.hsoub.com/uploads/monthly_2015_11/01_Production_server_setup.thumb.png.324a5198fab6a947ec5f5c6804f031db.png"></a></p><p>نعُدُّ الخواديم الموجودة في مربع <strong>التطبيق</strong> ضرورية ليعمل التطبيق على النحو المرجو. تعمل العناصر المتبقية - النسخ الاحتياطية، المراقبة، والسجلات - بجانب خطة الاستعادة وخادوم النسخ الاحتياطي البعيد؛ على دعم خادوم الإنتاج. سنثبت كل عنصر على خادوم Ubuntu 14.04 منفصل ضمن نفس الحيز الجغرافي مع تفعيل التشبيك الخاص Private networking. نستخدم أسماء المستضيفات Hostnames لتمييز الخواديم المكوِّنة للتطبيق:</p><ul><li><code>lb1</code>: موزع الحمل HAProxy، يمكن الوصول إليه عبر العنوان <a rel="external nofollow" href="https://www.example.com/">https://www.example.com/</a>.</li><li><code>app1</code>: خادوم تطبيقات Apache و PHP.</li><li><code>app2</code>: خادوم تطبيقات Apache و PHP.</li><li><code>db1</code>: خادوم لقاعدة بيانات MySQL.</li></ul><p>من المهم التنبيه إلى أنه تم اختيار هذا النوع من الإعداد لتوضيح كيف يمكن لعناصر تطبيق أن تُنشأ على خواديم عدة؛ يجب أن يُخصَّص إعداد تطبيقك بناء على احتياجاتك.﻿ توجد نقطة إخفاق Point of failure وحيدة في هذا الإعداد، ويمكن التغلب عليها بتركيب موزع حمل إضافي (وخادوم DNS دوري) و<a href="https://academy.hsoub.com/devops/servers/%D8%AE%D9%85%D8%B3%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF%D8%A7%D8%AA-%D8%B4%D8%A7%D8%A6%D8%B9%D8%A9-%D9%84%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r8/">مضاعفة قاعدة البيانات</a>؛ وهو ما لن تطرق إليه في هذا الدرس.</p><p>نميز العناصر الداعمة للتطبيق بأسماء المستضيفات التالية:</p><ul><li>النسخ الاحتياطية <code>backups</code>: خادوم النسخ الاحتياطي Bacula.</li><li>المراقبة <code>monitoring</code>: خادوم Nagios.</li><li>السجلات <code>logging</code>: سجلات مركزية باستخدام حزمة برمجيات مكونة من Kibana (ELK)، Logstash و Elasticsearch.</li></ul><p>توجد عناصر أخرى لا تظهر في الصورة، وهي:</p><ul><li><code>ns1</code>: وهو خادومنا الرئيس لنظام أسماء النطاقات. نستخدم Bind لهذا الغرض.</li><li><code>ns2</code>: وهو الخادوم الثانوي لنظام أسماء النطاقات. نستخدم Bind.</li><li><code>remotebackups</code>: خادوم بعيد يوجد في منطقة جغرافية أخرى نحفظ عليه نسخ Bacula الاحتياطية احترازا من كارثة تحل بمركز البيانات الذي يوجد فيه التطبيق.</li></ul><p>يمكنك أيضا استخدام عنوان IP عائم Floating IP؛ وهو عبارة عن عنوان IP ثابت يُتاح للعموم الوصول إليه ويمكن توجيهه إلى أحد خواديمك الافتراضية أو بنيتك التحتية المكرَّرة Redundant ثم إطلاق موقعك أو خدمتك باستخدام عنوان IP عمومي وحيد. يمكن بعدها إعادة توجيه العنوان العائم إلى خادوم جديد من أجل بيئة إنتاج أكثر مرونة وأسرع تجاوبا. سنضع أيضا خطط استعادة لكلٍّ من العناصر المكونة للتطبيق.</p><p>ستكون لدينا، عند بلوغ الهدف النهائي، عشرة خواديم. سننشئها كلَّها في نفس الوقت لتسهيل بعض الأمور مثل إعداد النطاقات؛ ولكن يمكنك إنشاؤها الواحد تلو الآخر حسب الحاجة.</p><h3 id="شبكة-خاصة-افتراضية-virtual-private-network-اختياري">شبكة خاصة افتراضية Virtual Private Network (اختياري)</h3><p>إذا أردت تأمين اتصالات الشبكة بين خواديمك فيجب عليك إعداد شبكة خاصة افتراضية VPN. يصبح تأمين نقل البيانات عبر الشبكة بتعميتها Encryption أكثر أهمية إذا كانت البيانات تمر عبر الإنترنت. من منافع استخدام شبكة خاصة افتراضية التحقق من هوية المستضيفات بالاستيثاق منها؛ وهو ما يحمي من المصادر التي لا يُرخص لها الوصول للخدمات.</p><p>إذا كنت تبحث عن أداة مفتوحة المصدر فيمكنك استخدام <code>OpenVPN</code> واتباع خطوات درس <a href="https://academy.hsoub.com/devops/servers/%D8%AF%D9%84%D9%8A%D9%84%D9%83-%D9%84%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-openvpn-%D8%B9%D9%84%D9%89-ubuntu-r57/"> دليلك لكيفية إعداد خادوم OpenVPN على Ubuntu</a> لإعداده.</p><h2 id="المتطلبات">المتطلبات</h2><p>يتوجب أن يكون لدى كل خادوم أوبنتو 14.04 حساب مستخدم بصلاحيات إدارية غير المستخدم الجذر؛ يمكن إعداد مستخدم لهذا الغرض باتّباع الخطوات المشروحة في مقال <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D9%84%D8%A7%D8%A8%D8%AA%D8%AF%D8%A7%D8%A6%D9%8A-%D9%84%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r4">الإعداد الابتدائي لخادوم أوبنتو 14.04</a>. سننفّذ كل الأوامر باستخدام هذا الحساب.</p><p>سنفترض أيضا أن لديك معرفة بالمفاهيم الأساسية للأمان في لينكس. إذا رغبت في درس تمهيدي حول الموضوع فيمكن الاطلاع على مقال <a href="https://academy.hsoub.com/devops/linux/7-%D8%AA%D8%AF%D8%A7%D8%A8%D9%8A%D8%B1-%D8%A3%D9%85%D9%86%D9%8A%D9%91%D8%A9-%D9%84%D8%AD%D9%85%D8%A7%D9%8A%D8%A9-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85%D9%83-r60">7 تدابير أمنيّة لحماية خواديمك</a>.</p><h3 id="اسم-نطاق">اسم نطاق</h3><p>نفترض في هذا المقال أن الوصول إلى التطبيق يكون عبر اسم نطاق، <code>example.com</code> مثلا. إنْ لم يكن لديك اسم نطاق فبالإمكان شراء واحد من أحد مسجلي أسماء النطاقات Domain name registrar.</p><p>نحتاج اسم النّطاق ليس فقط لتسهيل الوصول إلى الموقع (مقارنة بعنوان IP المكون من أرقام فقط) بل أيضا للحصول على فوائد التحقق من الهوية والنطاق؛ وهو ما يتيح إمكانية الاستفادة من شهادات SSL التي تعمّي البيانات المنقولة بين التطبيق ومستخدميه.</p><h3 id="شهادة-ssl">شهادة SSL</h3><p>يعمل بروتوكول TLS/SSL على تعميّة البيانات والتحقق من نطاقها أثناء الاتصال بين التطبيق ومستخدميه؛ لذا سنستخدم شهادة SSL لإضافة هذا الإعداد. في المثال نريد أن يصل المستخدمون إلى الموقع عبر العنوان <code>www.example.com</code> وهي القيمة التي سنحددها في الاسم الشّائع للشهادة Common Name (أو ما يُعرف اختصارًا بـ <span style="line-height: 11.2px;">CN</span>). سنثبت الشهادة على خادومHAProxy (المُسمّى<font face="monospace"> </font><span style="font-family: monospace; line-height: 11.2px;">lb1</span>) وهو ما يعني أنه من الأفضل توليد مفاتيح الشهادة وطلب توقيع الشهادة Certificate Signing Request CSR على هذا الخادوم.</p><p>إذا احتجت للتحقق من الهوية فستحتاج لشراء شهادة SSL. توجد الكثير من سلطات الشهادات Certificate Authorities التجارية التي يمكن شراء شهادة SSL منها. كما توجد إمكانية لاستخدام شهادة مجانية من StartSSL</p><p>يتوفر أيضا حل بديل يتمثل في التوقيع الذاتي لشهادة SSL بتنفيذ الأمر التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ~/www.example.com.key -out ~/www.example.com.crt</pre><h3 id="الخطوات-المتبعة-للوصول-إلى-الهدف">الخطوات المتبعة للوصول إلى الهدف</h3><p>عرضنا في الفقرات السابقة نظرة عامة على إعداد تطبيقنا الموجَّه للإنتاج، ننتقل الآن لإنشاء خطة عامة نسير وفقها لتحقيق هدفنا. العناصر الأهم هي تلك التي يتكون منها التطبيق؛ لذا يجب أن نشغلها مبكرا. لكن نظرا لأننا نخطط لاستخدام عنونة تعتمد على أسماء النطاقات للاتصالات ضمن الشبكة الخاصة فيجب أن نعد نظام أسماء النطاقات أولا. سنعدّ، بعد الانتهاء من ضبط إعداد النطاقات، الخواديم التي تكون التطبيق من أجل أن يكون جاهزا للتشغيل.</p><p>يحتاج التطبيق إلى أن تكون قاعدة بيانات مهيَّأة سلفا، كما يتطلب موزع الحِمل أن يكون التطبيق جاهزا. انطلاقا من هذه الاعتبارات فإن إعداد العناصر سيكون حسب الترتيب التالي:</p><ol><li>خادوم قاعدة البيانات.</li><li>خواديم التطبيق.</li><li>موزع الحمل.</li></ol><p>سيمكننا - بعد إكمال الخطوات السالفة الذكر من أجل إعداد التطبيق - استنباطُ خطة للاستعادة اعتمادا على سيناريوهات عدة. ستكون خطة الاستعادة أساسية في التخطيط لآليات النسخ الاحتياطي.</p><p>بعد خطة الاستعادة يأتي دور إعداد النسخ الاحتياطي ثم بعد استكماله يمكن ضبط نظام المراقبة من أجل التأكد من أن جميع الخواديم وكل الخدمات في وضعيةِ عمل مقبولة. ثم نأتي للخطوة الأخيرة وهي إنشاء نظام مركزي لتخزين السجلات مما يسمح بعرضها عند الحاجة، تشخيص المشاكل عند حدوثها وتحليلها لتحديد أنواع الاستخدام وطبيعته.</p><h2 id="خاتمة">خاتمة</h2><p>خطة العمل جاهزة الآن مما يعني أننا جاهزون للبدء في تنفيذ إعدادات التطبيق. ينبغي تذكر أن هذا الإعداد، رغم أنه يعمل على النحو المراد، يبقى مثالا يجب أن تستطيع التقاط معلومات مفيدة منه ثم استخدام ما تعلمته لتحسين إعداد تطبيقك الخاص.</p><p>ترجمة -وبتصرّف- لمقال <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/building-for-production-web-applications-overview">Building for Production: Web Applications — Overview</a> لصاحبه Mitchell Anicas.</p><p>حقوق الصورة البارزة: <a rel="external nofollow" href="http://www.freepik.com/free-vector/mobile-app-development_796126.htm">Designed by Freepik</a>.</p>
]]></description><guid isPermaLink="false">131</guid><pubDate>Mon, 09 Nov 2015 22:21:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x62B;&#x628;&#x62A; HHVM &#x648;&#x62A;&#x639;&#x62F;&#x647; &#x644;&#x64A;&#x639;&#x645;&#x644; &#x645;&#x639; &#x62E;&#x627;&#x62F;&#x648;&#x645; Nginx &#x639;&#x644;&#x649; &#x646;&#x638;&#x627;&#x645; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648; 14.04</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81-%D8%AA%D8%AB%D8%A8%D8%AA-hhvm-%D9%88%D8%AA%D8%B9%D8%AF%D9%87-%D9%84%D9%8A%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-nginx-%D8%B9%D9%84%D9%89-%D9%86%D8%B8%D8%A7%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r134/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_11/hhvm-nginx.png.6f36d995f4a37dd903541841edc4b64a.png" /></p>

<p dir="rtl"><strong>HHVM</strong> هي آلة افتراضية مفتوحة المصدر لتنفيذ الشيفرة المكتوبة بلغتي PHP وHACK. تُطور HHVM وتدعمها فيس بوك، الأمر الذي لفت الانتباه إليها كثيرا في الآونة الأخيرة.</p><p dir="rtl" style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/hhvm-nginx.png.e5068ef6d4389ae8604313f9bd3a095b.png"><img data-fileid="6891" class="ipsImage ipsImage_thumbnailed" alt="hhvm-nginx.thumb.png.7669c86f132ffd7a4fa" src="https://academy.hsoub.com/uploads/monthly_2015_11/hhvm-nginx.thumb.png.7669c86f132ffd7a4fa48ce348814a57.png"></a></p><p dir="rtl">تختلف HHVM عن باقي محركات PHP لأنها تتبع منهج "الترجمة فقط في الوقت المناسب" JIT. HHVM تترجم الشيفرة PHP إلى شيفرة ثنائية وسيطة intermediate byte code ثم بعد ذلك إلى شيفرة بلغة الآلة x64 machine instructions قبيل وقت التنفيذ، هذا الأمر يسمح بكثير من التحسين وسرعة في الأداء مقارنة بالطرق التي تتبعها محركات PHP الأخرى.</p><p dir="rtl">HHVM قوية وسريعة ، ولكنها -مقارنة بمحركات PHP الأخرى- تتطلب موارد أكثر من ذاكرة الوصول العشوائي RAM والمعالج CPU، مثلها مثل الآلات الافتراضية الأخرى (JVM مثلا).</p><p dir="rtl">في هذه المقالة سوف نبين لك كيف تثبت HHVM وتدمجه مع Nginx.</p><h1 dir="rtl">المتطلبات الأساسية</h1><p dir="rtl">قد تم اختبار هذا الدرس على أوبنتو 14.04 . طريقة التثبيت الموصوفة في هذه المقالة والإعدادات المشروحة فيها ستكون هي نفسها في كل أنظمة التشغيل إلا بعض الأوامر ومسارات ملفات الإعداد.</p><p dir="rtl">من أجل إتمام هذا الدرس وتطبيقه لا بد لك من الأمور التالية:</p><ol dir="rtl"><li>نظام أوبنتو 14.04 مع ذاكرة وصول عشوائي RAM لا تقل عن 1 جيجا.</li><li>مستخدم عادي له صلاحيات sudo.</li><li>خادوم Nginx مثبت على النظام.</li></ol><p dir="rtl">كل الأوامر في هذا الدرس ينبغي أن تنفذ بصلاحيات المستخدم العادي، وفي حال كانت صلاحيات الجذر مطلوبة فسيُسبق الأمر بالكلمة <span style="font-family:courier new,courier,monospace;">sudo</span> .</p><p dir="rtl">في حال استخدمت أوبنتو 14.04 فإن له مستودعا رسميا يدعم HHVM، ومن أجل إضافة هذا المستودع يجب عليك استيراد المفتاح العام GnuPG بالأمر التالي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449</pre><p>بعد هذا يمكنك تثبيت مستودع HHVM بكل أمان بالأمر التالي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo add-apt-repository "deb http://dl.hhvm.com/ubuntu $(lsb_release -sc) main"</pre><p dir="rtl">بعد إضافة المستودع يجب عليك تحديث قاعدة بيانات الحزم حتى تنضاف إليها حزم المستودع الجديد وذلك يكون بالأمر التالي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get update</pre><p dir="rtl">وأخيرا يمكنك تثبيت HHVM بالأمر التالي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get install hhvm</pre><p dir="rtl">الأمر السابق يقوم بتثبيت HHVM وتشغيلها في الوقت نفسه ، ولكي نجعل التشغيل تلقائيا مع تشغيل النظام فلابد لنا من تنفيذ الأمر:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo update-rc.d hhvm defaults</pre><h1 dir="rtl">الإعدادات</h1><p dir="rtl">يأتي مع HHVM سكريبت يجعل دمجها مع خادوم Nginx أسهل. ونحن نفترض أنك ثبتّ خادوم Nginx بالطريقة الافتراضية، وعليه يمكنك تنفيذ السكريبت من غير أي مدخلات بالأمر التالي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo /usr/share/hhvm/install_fastcgi.sh</pre><p dir="rtl">عند تنفيذ هذا السكريبت يقوم بإضافة ملف الإعدادات <span style="font-family:courier new,courier,monospace;">etc/nginx/hhvm.conf/ </span>إلى الملف الافتراضي لإعدادات Nginx server block ألا وهو الملف <span style="font-family:courier new,courier,monospace;">etc/nginx/sites-enabled/default/</span><span style="font-family:arial,helvetica,sans-serif;">، هذا السكربت يعمل فقط مع</span><font face="Noto Naskh Arabic, serif"> ا</font>لإعدادت الإفتراضية لخادوم Nginx بدون أي تغييرات في FastCGI.</p><p dir="rtl">إذا كنت قد غير في إعدادات Nginx server block وإعدادات FastCGI كما هو الشأن في PHP-FPM فيجب عليك استبدال الإعدادات الجديدة بالقديمة يدويا وذلك بالتعديل على الملف <span style="font-family:courier new,courier,monospace;">etc/nginx/sites-enabled/default/</span>:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">location ~ \.(hh|php)$ {
    fastcgi_keep_conn on;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
}</pre><p dir="rtl">تعني الأسطر السابقة أنه على Nginx أن يعالج أي ملف مطلوب ينتهي باللاحقة <span style="font-family:courier new,courier,monospace;">php.</span> أو <span style="font-family:courier new,courier,monospace;">hh.</span> الخاصة بلغة hack، ويجب عليك بعدئذ إعادة تشغيل الخادوم Nginx من أجل تفعيل التغييرات:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo service nginx restart</pre><p dir="rtl">وأيضا يفترض هذا السكريبت أنك لم تغير إعدادات HHVM التي تجعل الخدمة قابلة للوصول إليها عبر العنوان <span style="font-family:courier new,courier,monospace;">127.0.0.1:9000</span>، هذه الإعدادات تأتي افتراضيا في الملف <span style="font-family:courier new,courier,monospace;">etc/hhvm/server.ini/</span> الذي محتواه:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">; php options

pid = /var/run/hhvm/pid

; hhvm specific

hhvm.server.port = 9000
hhvm.server.type = fastcgi
hhvm.server.default_document = index.php
hhvm.log.use_log_file = true
hhvm.log.file = /var/log/hhvm/error.log
hhvm.repo.central.path = /var/run/hhvm/hhvm.hhbc</pre><p dir="rtl">ولعلك لاحظت في هذه الإعدادات لـ HHVM المتغير <span style="font-family:courier new,courier,monospace;">hhvm.server.port</span> الذي يحدد أن هذه HHVM سوف تستمع على منفذ البروتوكول TCP 9000، وعلى الهوست المحلي localhost ما لم يتم تغيير ذلك.</p><p dir="rtl">يفترض ب HHVM أن تعمل في بيئات ذات عبء ثقيل ، لذلك فإن التغيير الأول الذي ينبغي عليك فعله هو تغيير طريقة الاستماع من المنفذ TCP إلى المقبس socket ، هذا سيستهلك موارد أقل من الذاكرة العشوائية والمعالج في حال التواصل بين الخادوم Nginx والآلة الافتراضية HHVM.</p><p dir="rtl">لكي تغير تلك الإعدادات افتح الملف <span style="font-family:courier new,courier,monospace;">etc/hhvm/server.ini/</span> بأي محرر نصوص مفضل لديك مثل vim :</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo vim /etc/hhvm/server.ini</pre><p dir="rtl"><a rel="external nofollow" name="_GoBack"></a> ثم احذف السطر الذي يبدأ بـ <span style="font-family:courier new,courier,monospace;">hhvm.server.port</span>، وضع في مكانه السطر التالي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">hhvm.server.file_socket=/var/run/hhvm/hhvm.sock</pre><p dir="rtl">احفظ الإعدادات ثم أعد تشغيل HHVM بالأمر:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo service hhvm restart</pre><p dir="rtl">بعد ذلك يجب عليك أن تجعل الخادوم Nginx يأخذ بعين الاعتبار التغييرات السابقة وذلك بتعديل الملف <span style="font-family:courier new,courier,monospace;">etc/nginx/hhvm.conf/:</span></p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo vim /etc/nginx/hhvm.conf</pre><p dir="rtl">في هذا الملف تأكد أن الموجه <span style="font-family:courier new,courier,monospace;">fastcgi_pass</span> يشير إلى مقبس HHVM وأنه يظهر بالشكل التالي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">fastcgi_pass unix:/var/run/hhvm/hhvm.sock;</pre><p dir="rtl">ثم بعد ذلك يجب عليك أن تعيد تشغيل الخادوم Nginx حتى يتم تفعيل تلك التغييرات ، من أجل ذلك نفذ الأمر:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo service nginx restart</pre><p>يمكن للسكريبت <span style="font-family:courier new,courier,monospace;">usr/share/hhvm/install_fastcgi.sh/</span> أن يوفر عليك بعض الوقت، ولكن هناك أشياء لابد عليك من فعلها بنفسك لا سيما فيما يخص Nginx server blocks ، مثال على ذلك أن الإعدادات الافتراضية لـ Nginx server blocks إذا طلب منه صفحة index فإنه يفتح فقط الملفين <span style="font-family:courier new,courier,monospace;">index.html</span> و <span style="font-family:courier new,courier,monospace;">index.htm</span> عندما يكون سرد المجلدات ممنوعا، هذا أحد الأشياء التي يجب عليك تغييرها لكي يضاف <span style="font-family:courier new,courier,monospace;">index.php</span> إلى الملفات التي يفتحها الخادوم عند طلب index.</p><p dir="rtl">لفعل ذلك افتح ملفات إعدادات server block بمحررك المفضل:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo vim /etc/nginx/sites-enabled/default</pre><p dir="rtl">ثم اذهب إلى الجزء المخصص للخادوم ثم أضف <span style="font-family:courier new,courier,monospace;">index.php</span> حيث يوجد ملفات index ، سيظهر ذلك الجزء بالشكل التالي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">index index.html index.htm index.php;</pre><p dir="rtl">مرة اخرى أعد تشغيل خادوم Nginx ليتم تفعيل هذه الإعدادات:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo service nginx restart</pre><h2 dir="rtl">اختبار وتعديل HHVM</h2><p dir="rtl">أول اختبار يمكنه أداؤه هو بواجهة أوامر PHP (cli) <span style="font-family:courier new,courier,monospace;">/usr/bin/php</span> التي تشير إلى <span style="font-family:courier new,courier,monospace;">etc/alternatives/php/</span>، والتي هي أيضا تشير إلى الملف التنفيذي <span style="font-family:courier new,courier,monospace;">usr/bin/hhvm/</span> الخاص بـ HHVM، نفذ الأمر:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">/usr/bin/php --version</pre><p dir="rtl">عندما تنفذ هذا الأمر فإنه ينبغي أن ترى رقم إصدار HHVM ومعلومات أخرى كهذا:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">HipHop VM 3.8.1 (rel)
Compiler: tags/HHVM-3.8.1-0-g3006bc45691762b5409fc3a510a43093968e9660
Repo schema: 253b3802ce1bcd19e378634342fc9c245ac76c33</pre><p dir="rtl">إذا كنت قد ثبتّ PHP من قبل فربما ظهر لك معلومات النسخة القديمة من PHP، من أجل تغيير ذلك وجعله يشير إلى HHVM نفذ هذا الأمر:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo /usr/bin/update-alternatives --install /usr/bin/php php /usr/bin/hhvm 60</pre><p dir="rtl">بعد ذلك يمكنك استعمال الدالة <span style="font-family:courier new,courier,monospace;">()phpinfo</span> من أجل إظهار إعدادات وخواص الـ HHVM، لفعل ذلك أنشئ ملفا اسمه <span style="font-family:courier new,courier,monospace;">info.php </span>في المجلد الافتراضي لخادوم الويب Nginx والذي هو <span style="font-family:courier new,courier,monospace;">usr/share/nginx/html/</span> باستخدام محررك المفضل:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo vim /usr/share/nginx/html/info.php</pre><p dir="rtl">ثم أضف فيه الأسطر التالية:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">&lt;?php

phpinfo();

?&gt;</pre><p dir="rtl">إنه من المنصوح به لدى الخبراء أن تجعل كل ملفات الويب التي يشغلها الخادوم Nginx مملوكة للمستخدم الخاص به <span style="font-family:courier new,courier,monospace;">www-data</span>.</p><p dir="rtl">قم بعمل ذلك بالأمر التالي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo chown www-data: /usr/share/nginx/html/info.php</pre><p dir="rtl">الآن جرب الدخول إلى هذا الملف الذي أنشأته عبر هذا الرابط: <a rel="external nofollow" href="http://your_server_ip/info.php">http://your_server_ip/info.php</a>.</p><p dir="rtl">يجب عليك استبدال <span style="font-family:courier new,courier,monospace;">your_server_ip</span> بـ IP خادومك، والنتيجة ستكون في متصفحك هكذا:</p><p dir="rtl" style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_11/php-hhvm.png.ee4dc7eecf9cf1ad72609d3a09d0587e.png"><img data-fileid="6888" class="ipsImage ipsImage_thumbnailed" alt="php-hhvm.thumb.png.ce52527691e0d82fef24b" src="https://academy.hsoub.com/uploads/monthly_2015_11/php-hhvm.thumb.png.ce52527691e0d82fef24b362644eb8e4.png"></a></p><p dir="rtl">إذا لم يظهر لك مثل هذه الصورة فتأكد أنك اتبعت الخطوات السابقة بطريقة صحيحة ، ثم تفقد ملف أخطاء الخادوم Nginx الذي مساره <span style="font-family:courier new,courier,monospace;">var/log/nginx/error.log/</span> وملف HHVM الذي مساره <span style="font-family:courier new,courier,monospace;">var/log/hhvm/error.log/</span>.</p><p dir="rtl">ارجع الآن إلى متصفحك وأعد النظر تر أن هذه البيانات التي أظهرتها الدالة <span style="font-family: 'courier new', courier, monospace; line-height: 24.8889px;">()phpinfo</span> هي نفسها التي تظهر مع محركات PHP الأخرى غير أن كل المتغيرات كانت مسبوقة بـ hhvm.</p><p dir="rtl">عند استكشاف المتغيرات ستلحظ أن الحد الأقصى للذاكرة المسموحة هو 17179869184 بايت أي ما يقارب 17 غيغابايت، وهذا بالتأكيد سوف يقتل النظام إذا كان لا يملك سوى القليل من ذاكرة الوصول العشوائي ويجعلها لا تستجيب، لذلك يجب عليك أن تخفض ذلك الحد إلى قيمة هي أقل من سعة الذاكرة العشوائية لكي نضمن أن أي خدمة أخرى لن تتأثر بنقص في موارد النظام.</p><p dir="rtl">كمثال عام، إذا كان نظامك يملك ذاكرة بسعة 2 جيغا فإنه ينبغي عليك تخفيض الحد الأقصى لـ HHVM إلى ما يقارب 1.2 جيغا. لفعل ذلك عدّل الملف <span style="font-family:courier new,courier,monospace;">etc/hhvm/php.ini/</span> بمحررك المفضل:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo vim /etc/hhvm/php.ini</pre><p dir="rtl">ثم أضف المتغير الجديد بعد القسم <span style="font-family:courier new,courier,monospace;">; php options</span></p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">memory_limit = 1200M</pre><p dir="rtl">بالطريقة نفسها يمكنك تغيير أي شيء تريده في إعدادات PHP ، فقط تأكد دائما أن تعيد تشغيل HHVM بعد انتهائك من التغييرات بالأمر:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo service hhvm restart</pre><p dir="rtl">بعد كل ذلك يمكنك إجراء اختبار أكثر تعقيدا مع تطبيق ويب مشهور. من المهم أن تعرف أن HHVM ليس متوافقا مائة بالمائة مع PHP المعتاد ولا مع جميع أطر PHP الأكثر الشعبية. وقد أظهرت اختباراتنا خلال وقت كتابة هذا المقال أن العديد من تطبيقات PHP على شبكة الإنترنت مثل ووردبريس تعمل بشكل جيد. ومع ذلك فإن أطر <a rel="external nofollow" href="http://hhvm.com/frameworks/">العمل المدعومة</a> محدودة العدد.</p><p dir="rtl">عندما تقوم بالاختبار مع تطبيق ويب حقيقي فإنه لا شيء يخص HHVM يجب فعله، التثبيت والإعدادات هي نفسها كما هو الشأن في LEMP القياسية، وذلك لأن HHVM تأتي مجمعة بوحدات PHP القياسية ، وذلك يجعلها أكثر توافقية مع تطبيقات وأطر PHP.</p><p dir="rtl">مع ذلك وفي بعض الحالات النادرة قد تحتاج لتثبيت وحدة إضافية لـ HHVM. على سبيل المثال إذا كنت تستخدم PostgreSQL بمثابة خادوم قاعدة البيانات فسوف تحتاج إلى وحدة pgsql. في مثل هذه الحالات راجع <a rel="external nofollow" href="http://docs.hhvm.com/manual/en/index.php">الوثائق الرسمية لـ </a><a rel="external nofollow" href="http://docs.hhvm.com/manual/en/index.php">HHVM</a>.</p><h1 dir="rtl">الخلاصة</h1><p dir="rtl">كما رأيت في هذا المقال فإن <strong>HHVM</strong> سهلٌ تثبيتها سهل إعدادها سهل دمجها مع خادوم الويب Nginx. فإن كان لديك ما يكفي من الموارد فينبغي أن تجربها ثم ترى كيف يعمل منهج JIT الذي تتبعه HHVM من حيث الأداء والاستقرار. لابد من سبب وجيه لموقع مثل فايس بوك بوظائفه المعقدة وحركة بيانات لا مثيل لها أن تثق به. وأما المواقع الصغيرة التي لها حركة بيانات أقل فأولى لها أن تختار حلولا أقل استهلاكا للذاكرة مثل <strong>PHP-FPM</strong>، فإنه بالتأكيد أفضل خيار.</p><p dir="rtl">مقال مترجم من <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-install-hhvm-with-nginx-on-ubuntu-14-04">How To Install HHVM with Nginx on Ubuntu 14.04</a> للكاتب Anatoliy Dimitrov.</p>
]]></description><guid isPermaLink="false">134</guid><pubDate>Sat, 07 Nov 2015 11:44:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x627;&#x633;&#x62A;&#x643;&#x634;&#x627;&#x641; &#x648;&#x625;&#x635;&#x644;&#x627;&#x62D; &#x631;&#x645;&#x648;&#x632; &#x623;&#x62E;&#x637;&#x627;&#x621; HTTP &#x627;&#x644;&#x634;&#x627;&#x626;&#x639;&#x629;</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D9%83%D8%B4%D8%A7%D9%81-%D9%88%D8%A5%D8%B5%D9%84%D8%A7%D8%AD-%D8%B1%D9%85%D9%88%D8%B2-%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-http-%D8%A7%D9%84%D8%B4%D8%A7%D8%A6%D8%B9%D8%A9-r116/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_10/http-error-codes_(1).png.1548bb0ad124752ccea0624ef79e2d2b.png" /></p>

<div id="wmd-preview-section-18"><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_10/http-error-codes_(1).png.56ef1941c4e14d4a7b56f46c94768fb9.png"><img data-fileid="5603" class="ipsImage ipsImage_thumbnailed" alt="http-error-codes_(1).thumb.png.678748fb8" src="https://academy.hsoub.com/uploads/monthly_2015_10/http-error-codes_(1).thumb.png.678748fb85a4fcd5a58ba3991a54be25.png"></a></p><p id="مقدمة">عند الاتصال بخادوم ويب أو تطبيق، يتم الردّ على كلّ طلب HTTP يتمّ استقباله من طرف الخادوم برمز حالة HTTP أو “HTTP status codes”. رموز حالة HTTP هي عبارة عن رموز مكوّنة من 3 أرقام يتم تصنيفها إلى 5 أصناف مختلفة. يمكن أن يتمّ التعرّف على صنف رمز الحالة بسرعة عبر الرقم الأوّل منه: </p><ul><li><strong>1xx</strong>: معلومة </li><li><strong>2xx</strong>: نجاح </li><li><strong>3xx</strong>: إعادة توجيه </li><li><strong>4xx</strong>: خطأ من طرف جهاز العميل </li><li><strong>5xx</strong>: خطأ من طرف الخادوم</li></ul><p>يركّز هذا الدرس على استكشاف أبرز رموز أخطاء HTTP التي قد تصادفك مثل <strong>4xx</strong> <strong>و5xx</strong> وإصلاحها. من منظور مدير النظام، هناك العديد من الحالات التي قد تجعل خادوم الويب يجيب طلبًا معيّنًا برمز خطأ معيّن، سنقوم بتغطية أكثر الأسباب الشائعة التي تؤدي إلى ذلك بالإضافة إلى حلولها.</p></div><div id="wmd-preview-section-19"><h2 id="لمحة-عامة-عن-أخطاء-العميل-والخادوم">لمحة عامة عن أخطاء العميل والخادوم</h2><p>أخطاء العميل، أو رموز حالة HTTP من <strong>400</strong> إلى <strong>499</strong>، هي نتيجة لطلبات HTTP تمّ إرسالها بواسطة جهاز مستخدم (مثل متصفح ويب أو أيّ عميل HTTP آخر), صحيح أنّ هذا النوع من الأخطاء مرتبط بالعميل، إلّا أنّه سيكون من المفيد معرفة رمز الخطأ الذي يصادف المستخدم للتحقق مما إذا كان يمكن إصلاح المشكلة من إعدادات الخادوم.</p><p>يتم إرجاع أخطاء الخادوم أو بالأحرى رموز حالة HTTP من <strong>500</strong> إلى <strong>599</strong> بواسطة خادوم الويب عندما يكتشف حصول مشكلة، وإلّا فإنّه لن يكون قادرًا على معالجة الطلب.</p></div><div id="wmd-preview-section-20"><h2 id="نصائح-عامة-عن-اكتشاف-الأخطاء-وإصلاحها">نصائح عامة عن اكتشاف الأخطاء وإصلاحها</h2><ul><li>عند استخدام متصفّح ويب لاختبار خادوم ويب، قم بتحديث المتصفّح بعد تطبيق التغييرات على الخادوم.</li><li>تحقق من سجلات الخادوم للمزيد من التفاصيل عن كيفية قيام الخادوم بمعالجة الطلبات. كمثال، تُنتِج خواديم الويب مثل Apache وNginx ملفّين اثنين يدعيان <span style="font-family:courier new,courier,monospace;">access.log</span> و<span style="font-family:courier new,courier,monospace;">error.log</span> يمكن أن يتم فحصهما للحصول على المعلومات منهما.</li><li>تذكّر أنّ تعريفات رموز حالة HTTP هي جزء من معيار مُضمَّن من قبل التطبيق الذي يخدم الطلبات. هذا يعني أنّ رمز الحالة الذي يتم إرجاعه إليك يعتمد على كيفية معالجة برنامج الخادوم لخطأ معيّن. سيفيدك هذا الدرس عمومًا لتوجيهك في المسار الصحيح بخصوص ذلك.</li></ul><p>الآن وبعد أن امتلكت فهمًا جيدًا لرموز حالة HTTP، سنلقي نظرةً على الأخطاء الشائعة التي قد تصافدك.</p></div><div id="wmd-preview-section-21"><h2 id="400-bad-request">400 Bad Request</h2><p>رمز الحالة <strong>400</strong>، أو خطأ Bad Request، يعني أنّ طلب الـHTTP الذي تمّ إرساله إلى الخادوم كان يحوي دوالًا ومُعامِلات غير صحيحة.</p><p>إليك بعض الأمثلة التي قد يطرأ فيها خطأ Bad Request والذي رقمه 400: </p><ul><li>كعكة المستخدم (Cookie) المرتبطة بالموقع تالفة، مسح خبيئة المتصفّح والكعكات قد يحلّ هذه المشكلة. </li><li>طلب تالف بسبب متصفّح ويب سيء وقديم مثلًا. </li><li>طلب تالف بسبب خطأٍ بشري مثل عند تشكيل طلبات HTTP بشكلٍ يدوي (مثل استعمال curl بطريقة غير صحيحة).</li></ul></div><div id="wmd-preview-section-22"><h2 id="401-unauthorized">401 Unauthorized</h2><p>رمز الحالة <strong>401</strong>، أو خطأ Unauthorized أو عدم التصريح يعني أنّ المستخدم يحاول الوصول إلى صفحة أو مادّة غير مخوّل له بالوصول إليها أو لم يتم السماح له بذلك بشكلٍ صحيح. يعني هذا أنّه يجب على المستخدم توفير بيانات الدخول ليتمكّن من رؤية البيانات والموارد المحمية.</p><p>كمثال، إذا حاول مستخدم الوصول إلى صفحة محمية باستيثاق HTTP، كما في درسنا <a href="https://academy.hsoub.com/devops/web-servers/nginx/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D8%B3%D8%AA%D9%8A%D8%AB%D8%A7%D9%82-http-%D9%85%D8%B9-nginx-%D8%B9%D9%84%D9%89-ubuntu-1404-r95/">كيفية إعداد استيثاق http مع nginx على 14.04 ubuntu</a>، ففي هذه الحالة، سيتلقّى المستخدم رمز الحالة "401" إلى أن يقوم بتوفير اسم مستخدم وكلمة مرور (تلك الموجودة في ملفّ <span style="font-family:courier new,courier,monospace;">htpasswd.</span>) لخادوم الويب.</p></div><div id="wmd-preview-section-23"><h2 id="403-forbidden">403 Forbidden</h2><p>رمز الحالة <strong>403</strong>، أو خطأ Forbidden أو "محظور"، يعني أنّ المستخدم قام بطلبٍ خاطئ إلّا أنّ الخادوم يرفض تنفيذه على كلّ حال بسبب عدم توفّر الصلاحيات الكافية للوصول إلى الصفحة المطلوبة. إذا كنت تواجه خطأ 403 بشكلٍ غير متوقّع، فهناك بضع أسباب يمكن أن نشرحها هنا.</p></div><div id="wmd-preview-section-24"><h3 id="صلاحيات-الملفات">صلاحيات الملفات</h3><p>تطرأ أخطاء <strong>403</strong> عادةً عندما يكون المستخدم الذي يشغّل عملية خادوم الويب لا يمتلك الصلاحيات الكافية لقراءة الملفّ الذي تمّ طلبه.</p><p>لإعطاء مثال عن الكشف عن هذا الخطأ وإصلاحه، افترض حصول الوضع التالي:</p><ul><li>يحاول المستخدم الوصول إلى ملفّ الفهرس الخاصّ بالخادوم من <a rel="external nofollow" href="http://example.com/index.html">http://example.com/index.html</a></li><li>عملية تشغيل خادوم الويب مملوكة للمستخدم <span style="font-family:courier new,courier,monospace;">www-data</span></li><li>يوجد ملفّ الفهرس على الخادوم بالمسار <span style="font-family:courier new,courier,monospace;">usr/share/nginx/html/index.html/</span></li></ul><p>إذا كان المستخدم يحصل على خطأ 403، فتأكّد أنّ المستخدم <span style="font-family:courier new,courier,monospace;">www-data</span> يمتلك الصلاحيات الكافية لقراءة ذلك الملفّ. يعني هذا عادةً أنّه يجب ضبط صلاحيات "الآخرين" أو الـ"Others" إلى السماح بالقراءة ليتم حلّ المشكلة، هناك عدّة طرق لتنفيذ هذا، ولكنّ هذا الأمر سيعمل في هذه الحالة:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo chmod o=r /usr/share/nginx/html/index.html
</pre></div><div id="wmd-preview-section-25"><h3 id="htaccess">htaccess.</h3><p>سببٌ آخر قد يكون وراء خطأ <strong>403</strong> وغالبًا ما يحصل عن غير قصد، هو الاستخدام الخاطئ لملفّ <span style="font-family:courier new,courier,monospace;">htaccess.</span>، يمكن أن يتمّ استخدام ملفّ <span style="font-family: 'courier new', courier, monospace; line-height: 22.4px;">htaccess.</span> لمنع الوصول إلى صفحاتٍ أو موارد معيّنة من قبل عناوين IP محددة أو نطاقات، استخدام هذا الملفّ بشكلٍ غير صحيح قد يكون المشكلة مثلًا.</p><p>إذا كان المستخدم يحصل على خطأ 403 بشكلٍ غير متوقع، فتأكّد من أنّ ملفّ الـ<span style="font-family: 'courier new', courier, monospace; line-height: 22.4px;">htaccess.</span> الخاصّ بك ليس المسؤول عن ذلك.</p></div><div id="wmd-preview-section-26"><h3 id="ملف-الفهرس-غير-موجود">ملف الفهرس غير موجود</h3><p>إذا كان المستخدم يحاول الوصول إلى مجلّد لا يمتلك بداخله ملفّ فهرس افتراضيًا، ولم يكن خيار السماح بسرد محتويات المجلّدات مفعّلًا، فإنّ خادوم الويب سيُرجع خطأ حظر 403. كمثال، إذا كان المستخدم يحاول الوصول إلى <a rel="external nofollow" href="http://example.com/emptydir/">http://example.com/emptydir</a> ولم يكن هناك ملفّ فهرس في المجلّد <span style="font-family:courier new,courier,monospace;">emptydir</span> على الخادوم، فإنّه سيتم إرجاع رمز حالة 403.</p><p>إذا كنت تريد تفعيل خيار سرد محتويات المجلّدات في حال عدم وجود ملفّ فهرس بداخلها، فيمكنك القيام بذلك من إعدادات خادوم الويب الخاصّ بك.</p></div><div id="wmd-preview-section-27"><h2 id="404-not-found">404 Not Found</h2><p>رمز الحالة <strong>404</strong>، أو خطأ Not Found، يعني أنّ المستخدم كان قادرًا على التواصل مع الخادوم إلّا أنّه لم يتمكن من إيجاد الملفّ المطلوب أو الصفحة المنشودة.</p><p>يمكن أن تطرأ أخطاء 404 في الكثير من الحالات. إذا كان المستخدم يتلقّى خطأ 404 بشكلٍ غير متوقّع، فإليك بعض الأسئلة التي يجب أن تسألها للمساعدة في تفحّص المشكلة وإصلاحها: </p><ul><li>هل الرابط الذي وجّهَ المستخدم إلى خادمك يحتوي على خطأ بالكتابة؟ </li><li>هل قام المستخدم بكتابة العنوان الخاطئ؟ </li><li>هل الملفّ موجود في المسار الحالي للخادوم؟ وهل تمّ نقله أو نقل الصفحة المطلوبة إلى مكانٍ آخر أو حذفها من الخادوم؟ </li><li>هل تمّ ضبط إعدادات الخادوم إلى مسار الجذر الرئيسي المطلوب؟ </li><li>هل المستخدم الذي يملك العملية المُشغّلة لخادوم الويب يمتلك الصلاحيات اللازمة للوصول إلى المسار الذي يحوي الملفّ بداخله؟ (تلميح: تتطلب المجلّدات صلاحيات القراءة والتنفيذ لتستطيع الوصول إليها). </li><li>هل يتمّ الوصول إلى الملفّ أو الصفحة عبر وصلة رمزية (symbolic link)؟ إذا كان الأمر كذلك، فتحقق من أن خادوم الويب مضبوط ليتبع الوصلات الرمزية.</li></ul></div><div id="wmd-preview-section-28"><h2 id="500-internal-server-error">500 Internal Server Error</h2><p>رمز الحالة <strong>500</strong>، أو 500 Internal Server Error يعني أنّ الخادوم غير قادر على معالجة الطلب لسببٍ مجهول. أحيانًا سيظهر هذا الرمز عندما تكون أخطاء 5xx أكثر عرضةً لتكون هي سبب المشكلة.</p><p>عادةً ما يكون أبرز سببٍ مسبب لهذا الخطأ هو وجود مشكلة في إعدادات الخادوم (مثل ملفّ <span style="font-family: 'courier new', courier, monospace; line-height: 22.4px;">htaccess.</span> تالف) أو حزم ناقصة (مثل محاولة تنفيذ سكربت PHP دون وجود حزمة PHP مثبّتة بشكلٍ صحيح على الخادوم).</p></div><div id="wmd-preview-section-29"><h2 id="502-bad-gateway">502 Bad Gateway</h2><p>رمز الحالة <strong>502</strong>، أو 502 Bad Gateway، يعني أنّ الخادوم هو عبارة عن خادوم بوّابة أو وسيط (proxy)، وأنّه لا يتلقّى ردًا صحيحًا من خواديم الواجهة الخلفية (backend servers) التي يجب أن تقوم بمعالجة الطلب.</p><p>إذا كان الخادوم المطلوب هو عبارة عن خادوم وسيط عكسي (reverse proxy server)، مثل موازِن للحِمل، فإليك بعض الأمور التي يمكنك التحقق منها:</p><ul><li>أنّ خواديم الواجهة الخلفية (حيث يتم توجيه طلبات HTTP) تعمل بشكلٍ صحيح. </li><li>أنّ الخادوم العكسي مضبوط بشكلٍ صحيح، مع تحديد الخواديم الصحيحة للواجهة الخلفية. </li><li>أنّ اتصال الشبكة بين خواديم الواجهة الخلفية وبين خادوم الوسيط العكسي يعمل بشكلٍ جيّد. إذا كان بإمكان الخواديم أن تتواصل عن طريق منافذ أخرى، فتأكّد أنّ الجدار الناري يسمح بمرور التدفّق (Traffic) بينها. </li><li>إذا كان تطبيق الويب الخاصّ بك مضبوطًا للاستماع إلى socket، فتأكّد أنّ الـsocket موجودة في المسار الحالي وأنّها تمتلك الصلاحيات الكافية.</li></ul></div><div id="wmd-preview-section-30"><h2 id="503-service-unavailable">503 Service Unavailable</h2><p>رمز الحالة <strong>503</strong>، أو خطأ Service Unavailable، يعني أنّ الخادوم قد تحمّل فوق طاقته أو أنّه تحت الصيانة، يوحي هذا الخطأ أنّ الخدمة يجب أن تعود إلى العمل في وقتٍ ما من الزمن.</p><p>إذا لم يكن الخادوم تحت الصيانة، يمكن لهذا أن يشير إلى أنّ الخادوم لا يملك الموارد الكافية من المعالج والذاكرة العشوائية لمعالجة جميع الطلبات الواردة، أو أنّ خادوم الويب يحتاج إلى أنّ يتم إعداده ليسمح بالمزيد من المستخدمين والعمليات.</p></div><div id="wmd-preview-section-31"><h2 id="504-gateway-timeout">504 Gateway Timeout</h2><p>رمز الحالة <strong>504</strong>، أو خطأ Gateway Timeout، يعني أنّ الخادوم هو عبارة عن خادوم بوّابة أو خادوم وسيط (proxy)، وأنّه لا يتلقّى ردًا من خواديم الواجهة الخلفية في فترة الوقت المسموح بها.</p><p>يمكن لهذا الخطأ عادةً أن يحصل في الحالات التالية: </p><ul><li>اتصال الشبكة بين الخواديم ضعيف. </li><li>خواديم الواجهة الخلفية التي تقوم بتنفيذ الطلب بطيئة جدًا، بسبب الأداء الضعيف. </li><li>فترة المهلة لخادوم البوابة أو الوسيط قصيرة جدًا.</li></ul></div><div id="wmd-preview-section-32"><h2 id="الخاتمة">الخاتمة</h2><p>يجب أن تكون قد صرتَ الآن مُدركًا لأبرز رموز أخطاء HTTP وأبرز الحلول المتوفّرة لهذه الأخطاء، يجب أن تمتلك أساسياتٍ جيّدة لاكتشاف الأخطاء وإصلاحها على خواديم الويب الخاصّة بك أو تطبيقاتك.</p><p>ترجمة -وبتصرف- للمقال <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-troubleshoot-common-http-error-codes">How To Troubleshoot Common HTTP Error Codes</a> لصاحبه Mitchell Anicas.</p></div>
]]></description><guid isPermaLink="false">116</guid><pubDate>Tue, 06 Oct 2015 21:48:41 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x627;&#x62E;&#x62A;&#x64A;&#x627;&#x631; &#x627;&#x633;&#x62A;&#x631;&#x627;&#x62A;&#x64A;&#x62C;&#x64A;&#x629; &#x641;&#x639;&#x627;&#x644;&#x629; &#x644;&#x644;&#x646;&#x633;&#x62E; &#x627;&#x644;&#x627;&#x62D;&#x62A;&#x64A;&#x627;&#x637;&#x64A; &#x644;&#x644;&#x62E;&#x627;&#x62F;&#x648;&#x645; &#x627;&#x644;&#x62E;&#x627;&#x635; &#x627;&#x644;&#x627;&#x641;&#x62A;&#x631;&#x627;&#x636;&#x64A; VPS</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-%D8%A7%D8%B3%D8%AA%D8%B1%D8%A7%D8%AA%D9%8A%D8%AC%D9%8A%D8%A9-%D9%81%D8%B9%D8%A7%D9%84%D8%A9-%D9%84%D9%84%D9%86%D8%B3%D8%AE-%D8%A7%D9%84%D8%A7%D8%AD%D8%AA%D9%8A%D8%A7%D8%B7%D9%8A-%D9%84%D9%84%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D8%A7%D9%84%D8%AE%D8%A7%D8%B5-%D8%A7%D9%84%D8%A7%D9%81%D8%AA%D8%B1%D8%A7%D8%B6%D9%8A-vps-r108/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_09/vps-backup.png.1ba1f2b68f6f83ee0cf57fc88f76ddfb.png" /></p>

<p>إنّ أحد أهم الاعتبارات التي يجب أخذها بالحسبان عند تخزين عملنا وبياناتنا في بيئة رقميّة هو كيفيّة التّأكّد من أنّ المعلومات الخاصّة بنا ستكون متاحة في حال وجود مشكلة، قد يعني هذا أشياء مختلفة بالنظر إلى التطبيقات التي نستخدمها، مدى أهميّة الحصول على فشل فوري ونوعية المشاكل التي نتوقّعها.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_09/vps-backup.png.a7dc440fddc10ad5b02eab7eb229ebde.png"><img data-fileid="5089" class="ipsImage ipsImage_thumbnailed" alt="vps-backup.thumb.png.06d26227662ce76140e" src="https://academy.hsoub.com/uploads/monthly_2015_09/vps-backup.thumb.png.06d26227662ce76140e27b2a12a85f09.png"></a></p><p>سنقوم في هذا الدّرس بمناقشة بعض الطرق المختلفة لتوفير النسخ الاحتياطي ووفرة البيانات data redundancy، ولأنّ حالات الاستخدام المختلفة تتطلّب حلولًا مختلفة فلن نكون قادرين على إعطاء إجابة تناسب جميع الحالات، ولكن سنتعلّم ما هو الشيء المهم في حالات مختلفة وما هو التّنفيذ implementation (أو التّنفيذات implementations) الأكثر مُلاءَمة لهذه العمليّة.</p><p>سنناقش في هذا الدرس الحلول المختلفة التي يُمكننا استخدامها للنسخ الاحتياطي والمزايا النسبيّة لكلّ واحدة منها بحيث نستطيع اختيار الخطّة التي تناسب البيئة التي نعمل عليها.</p><h2>ما الفرق بين وفرة البيانات Redundancy والنسخ الاحتياطي Backing Up؟</h2><p>غالبًا ما نجد تداخل في معظم الحالات بين المصطلحين وفرة البيانات redundant والنسخ الاحتياطي backup، وهما مفهومان مميّزان مرتبطان ببعضهما ولكنّهما مختلفان، وبعض الحلول تُوفِّرهما معًا.</p><h3>1. وفرة البيانات Redundancy</h3><p>تعني وفرة البيانات وجود تجاوز للفشل failover فوري في حال وجود مشكلة في النّظام، والمقصود من تجاوز الفشل أنّه في حال أصبحت مجموعة من البيانات غير متوفّرة فسيتمّ استبدالها فورًا بنسخة كاملة لتحلّ محلّها، وينتج عن هذا زمن إيقاف تشغيل down time غير مُلاحظ تقريبًا ويستطيع التطبيق أو الموقع مواصلة تخديم الطلبات وكأنّ شيئًا لم يكن، وفي هذه الأثناء يملك مدير النظام الفرصة لإصلاح المشكلة وإعادة النظام إلى الحالة التي يعمل فيها بشكل تام.</p><p>وبينما يبدو هذا وكأنّه حل رائع لتخديم النسخ الاحتياطي فإنّ هذا في الحقيقة فكرة خاطئة خطيرة، فلا تُزوِّدنا وفرة البيانات بحماية ضدّ الفشل الذي يؤثر على كامل الآلة أو النّظام، على سبيل المثال إن كُنّا نملك mirrored RAID مضبوط (مثل RAID1) فستكون بياناتنا متوافرة فيه وفي حال فشل أحد الأقراص سيبقى الآخر متوافرًا، ولكن إن فشلت الآلة نفسها فقد نفقد جميع البيانات الخاصّة بنا.</p><p>ومن مساوئ هذا النوع من الإعداد أنّ كل عمليّة يتمّ تنفيذها على كل نسخة من البيانات، ويتضمّن هذا العمليّات الخبيثة malicious أو التي تمّت بغير قصد، يُمكّننا حل النّسخ الاحتياطي الصحيح الاستعادة من نقطة سابقة حيث كانت البيانات معروفة بكونها بحالة جيّدة.</p><h3>2. النسخ الاحتياطي Backup</h3><p>كما أشرنا سابقًا فإنّه من المُحتّم علينا الحفاظ على نُسَخ احتياطيّة تعمل بشكل جيّد لبياناتنا الهامّة، واعتمادًا على الموقف فقد يعني هذا النسخ الاحتياطي للتطبيق أو لمعلومات المستخدمين أو حتى لكامل الموقع أو الآلة، والفكرة من وراء النُسَخ الاحتياطيّة أنّه في حال حدوث فقدان في النّظام أو الآلة أو البيانات فإنّنا نستطيع استعادة restore، إعادة نشر redeploy، أو الوصول إلى بياناتنا، قد تتطلّب الاستعادة من نسخة احتياطيّة زمن إيقاف تشغيل، ولكن يوجد فرق بين البدء من نقطة في اليوم السابق والبدء من الصفر، أي شيء لا نستطيع تحمل خسارته -بالتعريف- يجب علينا عمل نسخة احتياطية له.</p><p>ومن حيث الأساليب يوجد عدد قليل من المستويات المختلفة للنُسَخ الاحتياطيّة يُمكن تصنيفها إلى عدّة طبقات بحسب الحاجة إلى حساب أنواع مختلفة من المشاكل، على سبيل المثال ربّما نقوم بالنسخ الاحتياطي لملف الإعدادات configuration file قبل تعديله وذلك لكي نستطيع العودة بسهولة إلى الإعدادات القديمة قبل أن تنشأ المشكلة، يكون هذا مثالي للتغيرات الصغيرة التي نستطيع مراقبتها بشكل فعال، ولكن هذا الإعداد سيفشل على نحو بائس في حال فشل القرص أو أي شيء أكثر تعقيدًا، ينبغي علينا أيضًا الحصول على نُسَخ احتياطيّة بشكل منتظم وتلقائي إلى موقع بعيد remote location.</p><p>النُّسَخ الاحتياطيّة بحد ذاتها لا تزوّدنا بتجاوز الفشل تلقائيًا، وهذا يعني أنّ الفشل لن يُكلّفنا خسارة أيّة معلومات (على اعتبار أنّ النُسَخ الاحتياطيّة التي نملكها حديثة 100%)، ولكن قد يُكلفنا زمن تشغيل Uptime، وهذا هو أحد الأسباب التي تجعلنا نستخدم وفرة البيانات والنَسخ الاحتياطي جنبًا إلى جنب بدلًا من أن تُلغي كلّ واحدة منهما الأخرى.</p><h2>النسخ الاحتياطي على مستوى الملف File-Level Backup</h2><p>إنّ النَسخ الاحتياطي على مستوى الملف هو واحد من أشيع أشكال النَسخ الاحتياطي، يستخدم هذا النّوع من النَّسخ الاحتياطي أدوات النسخ الاعتياديّة الموجودة مع النّظام لنقل الملفات إلى موقع أو جهاز آخر.</p><h3>1. كيفية استخدام الأمر <code>cp</code></h3><p>أبسط أشكال النَّسخ الاحتياطي لآلة تعمل بنظام لينِكس مثل الـ VPS هي عن طريق الأمر <code>cp</code>، ينسخ هذا الأمر ببساطة الملفات من موقع محلّي local إلى موقع آخر، ونستطيع على حاسوب محلّي وصْل mount قُرص قابل للإزالة وبعدها نسخ الملفات إليه:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">mount /dev/sdc /mnt/my-backup
cp -a /etc/* /mnt/my-backup
umount /dev/sdc</pre><p>يقوم هذا المثال بوصْل قرص قابل للإزالة ومن ثُمّ ينسخ الدّليل <code>etc/</code> إلى القرص، وبعدها يقوم بإلغاء وصْل unmount القرص، والذي يُمكننا تخزينه في مكان آخر.</p><h3>2. كيفية استخدام الأمر <code>Rsync</code></h3><p>إنّ الأمر <code>rsync</code> هو بديل أفضل للأمر <code>cp</code>، حيث يُمكّننا من إجراء نُسَخ احتياطيّة محليّة مع قَدْر أكبر من المرونة، نستطيع تنفيذ نفس العمليّات السابقة باستخدام <code>rsync</code> عن طريق الأوامر التالية:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">mount /dev/sdc /mnt/my-backup
rsync -azvP /etc/* /mnt/my-backup
umount /dev/sdc</pre><p>وفي حين أنّ هذا يبدو بسيطًا حتى هذه النقطة، إلّا أنّنا سندرك بسرعة أنّ النَّسخ الاحتياطي على نظام ملفّات محلّي مرهق ومُعقّد، حيث يجب علينا فيزيائيًا وصْل وفصْل قرص النَسخ الاحتياطي ونقله إلى مكان آخر إن أردنا الحفاظ على المعلومات في حال حدوث سرقة أو حريق، نستطيع تحقيق الكثير من نفس المزايا باستخدام النَسخ الاحتياطي عبر الشبكة.</p><p>يستطيع الأمر <code>Rsync</code> تنفيذ نُسخ احتياطيّة عن بُعد remote بنفس السهولة التي يستطيع القيام بها بنُسخ احتياطيّة محليّة، يجب علينا فقط استخدام صيغة بديلة، سيعمل هذا الأمر على أي مُضيف host نستطيع الدخول إليه عن طريق SSH طالما أنّ <code>rsync</code> مُثبّت لدى الطرفين:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">rsync -azvP /etc/* username@remote_host:/backup/</pre><p>سيقوم هذا الأمر بالنسخ الاحتياطي للدليل <code>etc/</code> الموجود على الجّهاز المحلّي إلى دليل على <code>remote_host</code> موجود في <code>backup/</code>.<br>سينجح هذا الأمر إن كُنّا نملك صلاحيات للكتابة على هذا الدّليل وتوجد مساحة كافية.</p><p>للمزيد من المعلومات حول <a rel="external nofollow" href="https://www.digitalocean.com/community/articles/how-to-use-rsync-to-sync-local-and-remote-directories-on-a-vps">كيفيّة استخدام rsync للنّسخ الاحتياطي</a> اضغط هنا.</p><h3>3. كيفية استخدام أدوات أخرى للنسخ الاحتياطي</h3><p>بالرغم من بساطة الأمرين <code>cp</code> و <code>rsync</code> وإمكانيّة استخدامهما بسهولة إلّا أنّهما ليسا دومًا الحل المثالي، لجعل النُسخ الاحتياطية مُؤتمتة نحتاج لوضع هاتين الأداتين ضمن Script وكتابة أي شيفرة ضرورية من أجل الدوران والجماليّات الأخرى.<br>لحسن الحظ توجد بعض الأدوات المساعدة التي تقوم بتنفيذ إجراءات مُعقّدة أكثر للنسخ الاحتياطي ببساطة.</p><h3>Bacula</h3><p>إنّ أداة Bacula هي حل مُركّب ومرن يُعزّز نموذج خادوم عميل للنسخ الاحتياطي للمضيفين hosts، تفصل Bacula بين أفكار العملاء، أماكن النسخ الاحتياطي والإدارة directors (المُكوِّن الذي يُنسّق النسخ الاحتياطي الفعلي)، وتقوم أيضًا بضبط كل مهمّة نسخ احتياطي ضمن وحدة تدعى الوظيفة job.</p><p>يسمح لنا هذا بتضبيط configuration مُحبّب ومرن بشدّة، نستطيع النسخ الاحتياطي للعديد من العملاء إلى جهاز تخزين وحيد، عميل واحد إلى عدّة أجهزة تخزين، وتعديل مُخطط النسخ الاحتياطي بسرعة وسهولة عن طريق إضافة عُقَد أو ضبط تفاصيلهم، تعمل هذه الأداة بشكل جيّد عبر بيئة تحتوي على شبكة، وهي قابلة للتوسيع وتقسيمها إلى وحدات، مما يجعلها رائعة للنسخ الاحتياطي لموقع أو تطبيق مُوزَّع عبر عدّة أجهزة.</p><p>لكي تتعلّم المزيد حول <a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81-%D8%AA%D8%AB%D8%A8%D8%AA-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-bacula-%D8%B9%D9%84%D9%89-ubuntu-1404-r144/">كيفيّة تضبيط خادوم Bacula للنسخ الاحتياطي</a> و<a rel="external nofollow" href="https://www.digitalocean.com/community/articles/how-to-configure-remote-backups-using-bacula-in-an-ubuntu-12-04-vps">كيفيّة النسخ الاحتياطي للأنظمة عن بعد باستخدام Bacula</a>، قم بزيارة هذه الروابط.</p><h3>BackupPC</h3><p>من الحلول الشائعة الأخرى هي أداة BackupPC، يُمكن استخدام هذه الأداة للنسخ الاحتياطي لأنظمة لينِكس وويندوز بسهولة، يتم تنصيبها على جهاز أو VPS والذي سيعمل كخادوم للنسخ الاحتياطي، وبعدها يسحب الخادوم البيانات من عملائه باستخدام طرق نقل الملفّات المُعتادة.</p><p>يُقدّم هذا الإعداد ميزة تنصيب جميع الحِزَم packages المتعلّقة بذلك على جهاز مركزي واحد، والتضبيط الوحيد الذي نحتاجه هو السماح لخادوم النسخ الاحتياطي بالوصول عبر SSH، يُمكن بسهولة إعداد هذا، وباستخدام DigitalOcean نستطيع تضمين مفاتيح SSH لخادوم BackupPC إلى العملاء بينما نقوم بالنشر، يسمح لنا هذا بضبط النسخ الاحتياطيّة من خادوم النسخ الاحتياطي بسهولة ونشر بيئات الإنتاج الخاصّة بنا بشكل نظيف بدون أيّة برمجيّات إضافيّة.</p><p>لكي تتعلّم <a rel="external nofollow" href="https://www.digitalocean.com/community/articles/how-to-use-backuppc-to-create-a-backup-server-on-an-ubuntu-12-04-vps">كيفيّة تثبيت واستخدام BackupPC على خادوم</a>، اضغط هنا.</p><h3>Duplicity</h3><p>Duplicity هي بديل رائع للأدوات التقليديّة، الميّزة الأساسيّة للتفاضل في Duplicity هي أنها تستخدم تعمية GPG encryption لنقل وتخزين البيانات، ولهذا بعض الفوائد الرائعة.<br>إنّ الفائدة الواضحة من استخدام تشفير GPG للنسخ الاحتياطي للملفّات هي أنّه لا يتم تخزين البيانات بشكل نص مُجرَّد plain text.</p><p>الشّخص الوحيد الذي يستطيع فكّ تعمية decrypt البيانات هو من يملك مفتاح GPG key، يُوفِّر هذا درجة من الحماية لتعويض تضخّم التدابير الأمنية اللازمة عندما يتم تخزين البيانات في مواقع مُتعدّدة.<br>الفائدة الأخرى التي قد لا تكون واضحة بشكل فوري للأشخاص الذين لا يستخدمون GPG عادةً هي أنّه يتمّ التّحقّق من كل عمليّة نقل لتكون دقيقة تمامًا، تفرض GPG فحص تلبيد Hash صارم للتأكّد من عدم وجود ضياع في البيانات أثناء النقل، ويعني هذا أنّه عندما يحين الوقت لاستعادة البيانات من النُسخة الاحتياطيّة سنكون أقل عُرضة للوقوع في مشاكل تَلَف الملفات.</p><p>لكي تتعلّم <a rel="external nofollow" href="https://www.digitalocean.com/community/articles/how-to-use-duplicity-with-gpg-to-securely-automate-backups-on-ubuntu">كيفيّة تمكين النُسخ المُشفّرة باستخدام GPG في Duplicity</a>، اتبع هذا الرابط.</p><h2>النسخ الاحتياطي على مستوى الكتلة Block-Level Backups</h2><p>إنّ النسخ الاحتياطي على مستوى الكُتلة هو أقل شيوعًا من النسخ الاحتياطي على مستوى الملف ولكنّه بديل هام له، يُعرف أيضًا هذا النمط من النسخ الاحتياطي بالتصوير imaging لأنّه من المُمكن استخدامه لاستنساخ duplicate واستعادة كامل الأجهزة.</p><p>يسمح النسخ الاحتياطي على مستوى الكُتلة بالنسخ على مستوى أعمق من الملف، فبينما يقوم النسخ الاحتياطي على مستوى الملف بنسخ الملف1، الملف2، والملف3 إلى موقع نسخ احتياطي، يقوم النسخ الاحتياطي على مستوى الكُتلة بنسخ كامل الكُتلة Block التي تحتوي على هذه الملفات، ولتفسير المفهوم بطريقة أخرى يمُكننا القول أنّ النسخ الاحتياطي على مستوى الكتلة ينسخ المعلومات بِت bit تلو الآخر، فهو لا يهتم بالملفات المُجرّدة التي قد تُمثّلها هذه البتّات bits (ولكن سيتم نقل الملفّات بشكل كامل خلال هذه العمليّة).</p><p>إنّ إحدى الفوائد من النسخ الاحتياطي على مستوى الكتلة أنّه عادة ما يكون أسرع، وبينما يقوم النسخ الاحتياطي على مستوى الملف بالبدء بعمليّة نقل جديدة لكل ملف مُنفصل، يقوم النسخ الاحتياطي على مستوى الكُتلة بنقل الكُتَل والتي عادةً ما تكون أكبر حجمًا، وهذا يعني الحاجة للبدء بعمليّات نقل أقل لإتمام النسخ.</p><h3>استخدام الأداة dd لتنفيذ عمليات النسخ الاحتياطي على مستوى الكتلة</h3><p>إنّ أبسط طريقة لتنفيذ عمليّات النسخ الاحتياطي على مستوى الكُتلة هي باستخدام الأداة <span style="font-family:courier new,courier,monospace;">dd</span>، هذه البرمجيّة مرنة جدًا وتتيح لنا نسخ المعلومات بِت تلو الآخر إلى مكان جديد، ويعني هذا أنّنا نستطيع النسخ الاحتياطي لقسم partition أو قرص disk إلى ملف واحد أو إلى جهاز raw device بدون أي خطوات تمهيدية.</p><p>أبسط طريقة للنسخ الاحتياطي لقسم أو قرص هي استخدام <span style="font-family:courier new,courier,monospace;">dd</span> كما يلي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">dd if=/path/of/original/device of=/path/to/place/backup</pre><p>في هذه الحالة تُحدّد <span style="font-family:courier new,courier,monospace;">=</span><code>if </code>جهاز الدخل input أو موقع، تُشير <span style="font-family:courier new,courier,monospace;">=<code>of</code></span> إلى ملف الخرج output أو موقع، من الهام جدًا تذكّر هذا الفرق، لأنّه من البديهي مسح قرص كامل إن تمّ عكسهما.</p><p>إن كُنّا نرغب بالنسخ الاحتياطي لقسم يحتوي على مُستنداتنا الموجودة في <code>dev/sda3/</code> نستطيع إنشاء ملف صورة كما يلي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">dd if=/dev/sda3 of=~/documents.img</pre><p>تُوجد العديد من الحلول الأخرى للنسخ الاحتياطي على مستوى الكتلة متوفّرة على أجهزة لينِكس، ولكنّنا لن نناقشهم هنا.</p><h2>إصدارات النسخ الاحتياطية</h2><p>إنّ أحد أهم الأسباب الرئيسيّة للنسخ الاحتياطي للبيانات هو القدرة على استعادة إصدار سابق من ملف أو مجموعة ملفّات في حال حدوث تغيير غير مرغوب أو حذف، وبينما تُزوّدنا جميع آليات النسخ الاحتياطي المذكورة حتى الآن بهذا إلى حدّ ما، نستطيع تنفيذ نظام أكثر قوّة باستخدام أدوات إضافيّة.</p><p>الطريقة اليدويّة لإنجاز هذا هي إنشاء ملف نسخة احتياطية قبل التعديل كما يلي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">cp file1 file1.bak
nano file1</pre><p>نستطيع أيضًا أتمتة هذه العمليّة عن طريق إنشاء ملفّات مخفيّة ذات ختم زمني timestamped في كل مرّة نقوم فيها بتعديل ملف عن طريق المُحرّر، على سبيل المثال نستطيع وضع ما يلي في ملف<span style="font-family:courier new,courier,monospace;"> <code>bashrc./~</code></span> :</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">nano() { cp $1 .${1}.`date +%y-%m-%d_%H.%M.%S`.bak; /usr/bin/nano $1; }</pre><p>عندما نستدعي الآن الأمر <code>nano</code> سيقوم تلقائيًا بإنشاء نُسَخ احتياطيّة.</p><p>يُوفّر لنا هذا مستوى مُعيَّن من النسخ الاحتياطي، ولكنّها طريقة هشّة جدًّا وقد تملأ القرص بسرعة إن كُنّا نُعدِّل الملفّات كثيرًا، لذلك هي ليست حلًّا رائعًا وربما ينتهي بنا الأمر أسوأ من القيام بالنسخ اليدوي للملفات التي نريد تحريرها.</p><p>ومن البدائل التي تقوم بحل العديد من المشاكل المُتأصّلة في هذا التصميم هو استخدام <code>git</code>، والتي هي تحديدًا نظام تحكّم بالإصدار، وبالرغم أنّ هذا قد يكون غير واضح نستطيع استخدام <code>git</code> للتحكّم بأي ملف تقريبًا.</p><p>نستطيع إنشاء مستودع git repository في الدليل الرئيسي فورًا، ببساطة عن طريق كتابة ما يلي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">cd ~
git init</pre><p>ربّما نحتاج هنا إلى تطويع tweak الإعدادات لاستثناء بعض الملفات، ولكن بشكل عام يقوم بإنشاء إصدارات بشكل فوري، بإمكاننا بعدها إضافة محتويات الدليل الخاص بنا وتضمين الملفّات عن طريق ما يلي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">git add .
git commit -m "Initializing home directory"</pre><p>نستطيع ببساطة الانتقال إلى موقع بعيد remote location نظام <code>git</code> المُضمَّن أيضًا:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">git remote add backup_server git://backup_server/path/to/project
git push backup_server master</pre><p>إنّ هذا النظام ليس رائعًا للنسخ الاحتياطي من تلقاء نفسه، ولكن بجمعه مع نظام نسخ احتياطي آخر يتمكّن هذا النمط من التحكّم بالإصدار من تزويدنا بتحكّم جيّد ومُحبّب بشدّة بالتغيرات التي نقوم بها.</p><p>للتعلّم أكثر حول <a rel="external nofollow" href="https://www.digitalocean.com/community/articles/how-to-use-git-effectively">كيفيّة استخدام git</a> و<a rel="external nofollow" href="http://gitolite.com/articles/backup-and-sync-with-git.html">كيف نستطيع استخدام git لإصدار الملفّات العاديّة</a>، تحقّق من هذه الروابط.</p><h2>النسخ الاحتياطي على مستوى VPS، ومزود DigitalOcean كنموذج</h2><p>في حين أنّه من المهم إدارة النُسخ الاحتياطيّة بأنفسنا، تُزوّدنا خدمة DigitalOcean مثلا ببعض الآليات لإكمال النسخ الاحتياطيّة الخاصّة بنا.<br>نمتلك دالّة للنسخ الاحتياطي تقوم بانتظام بعمل نُسَخ احتياطيّة تلقائيّة من أجل droplets (مصطلح مقابل لـ VPS على DigitalOcean) التي تُمكّن هذه الخدمة، نستطيع تشغيلها خلال إنشاء droplet عن طريق اختيار صندوق التأشير "تمكين النُسَخ الاحتياطيّة" "Enable Backups":</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_09/do_backup.png.06453e6540b868423ebd2d7fa9881c46.png"><img data-fileid="5077" class="ipsImage ipsImage_thumbnailed" alt="do_backup.thumb.png.e15298bdc87e39d6d202" src="https://academy.hsoub.com/uploads/monthly_2015_09/do_backup.thumb.png.e15298bdc87e39d6d202fd7c34e2eb20.png"></a></p><p>سيقوم هذا بأخذ نُسخة احتياطيّة لكامل صورة الـ VPS، وهذا يعني أنّنا نستطيع بسهولة إعادة النشر من النُسخة الاحتياطيّة أو استخدامها كأساس للـ droplets الجديدة.</p><p>ولأخذ صورة لمرّة واحدة عن النظام لدينا نستطيع إنشاء لقطات snapshots، والتي تعمل بصورة مشابهة للنُسَخ الاحتياطيّة ولكنّها غير مؤتمتة، نستطيع إنشاءَها عن طريق الذهاب إلى droplet لدينا واختيار "Snapshots" من القائمة العلويّة:</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_09/do_snapshot.png.660043409da9ba19ffd8b847ba206665.png"><img data-fileid="5076" class="ipsImage ipsImage_thumbnailed" alt="do_snapshot.thumb.png.7866ed308e354ca2cd" src="https://academy.hsoub.com/uploads/monthly_2015_09/do_snapshot.thumb.png.7866ed308e354ca2cdc3e44606661a73.png"></a></p><p>ترجمة -وبتصرّف- للمقال <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-choose-an-effective-backup-strategy-for-your-vps">How To Choose an Effective Backup Strategy for your VPS</a> لصاحبه Justin Ellingwood.</p><p>حقوق الصورة البارزة: <a rel="external nofollow" href="http://www.freepik.com/free-vector/data-encryption_768925.htm">Designed by Freepik</a>.</p>
]]></description><guid isPermaLink="false">108</guid><pubDate>Wed, 23 Sep 2015 21:33:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x633;&#x62A;&#x62E;&#x62F;&#x645; Icinga &#x644;&#x645;&#x631;&#x627;&#x642;&#x628;&#x629; &#x62E;&#x648;&#x627;&#x62F;&#x64A;&#x645;&#x643; &#x648;&#x62E;&#x62F;&#x645;&#x627;&#x62A;&#x643; &#x639;&#x644;&#x649; Ubuntu 14.04</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-icinga-%D9%84%D9%85%D8%B1%D8%A7%D9%82%D8%A8%D8%A9-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85%D9%83-%D9%88%D8%AE%D8%AF%D9%85%D8%A7%D8%AA%D9%83-%D8%B9%D9%84%D9%89-ubuntu-1404-r102/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_08/icinga.png.6b5bb60a2b227a13f7c219a79f8ef38a.png" /></p>

<p>في هذا الدرس، سنشرح طريقة تثبيت Icinga على <span style="line-height: 22.3999996185303px;">Ubuntu 14.04</span>. نظام المراقبة Icinga هو نظام مفتوح المصدر لمراقبة الخواديم والخدمات. سنغطّي بعض الإعدادات الأساسية التي ستجعلك قادرًا على مراقبة خدمات الشبكة وموارد الجهاز المستضيف عبر واجهة الويب. سنستخدم أيضًا مشغّل ملحق Nagios البعيد (NRPE - Nagios Remote Plugin Executor)، والذي سيتم تثبيته كعميل (agent) على أنظمة بعيدة (remote systems) لمراقبة مواردها المحلّية (استخدام الأقراص، عدد المستخدمين المسجّلين للدخول.. إلخ).</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_08/icinga.png.a86254141bc87a804f1c864805776a56.png"><img data-fileid="4037" class="ipsImage ipsImage_thumbnailed" alt="icinga.thumb.png.3611aeb8d71d11edb6ac191" src="https://academy.hsoub.com/uploads/monthly_2015_08/icinga.thumb.png.3611aeb8d71d11edb6ac191f1b7e7b4b.png"></a></p><p>Icinga هو عبارة عن تطبيق مراقبة أنظمة شهير ومفتوح المصدر يعمل على مراقبة الأجهزة المستضيفة والخدمات، ويقوم أيضًا بتنبيهك دوريًا عن حالتها. Icinga هو عبارة عن اشتقاق (Fork) من Nagios، لذا فهما متوافقان مع بعضهما البعض ويتشاركان بالعديد من الأمور، وقد اكتسب Icinga شعبيةً بسبب عملية تطويره الأكثر سرعةً مقارنةً بـNagios.</p><h2>المتطلبات</h2><p>لإكمال هذا الدرس، ستحتاج إلى إمكانية استخدام صلاحيات الجذر على خادوم Ubuntu 14.04. يمكن العثور على إرشادات إعداد هذه الصلاحيات من <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D9%84%D8%A7%D8%A8%D8%AA%D8%AF%D8%A7%D8%A6%D9%8A-%D9%84%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r4/">هنا</a>.</p><p>أيضًا، إذا كنتَ تريد إعداد ميّزة التنبيه عبر البريد الإلكتروني، فستحتاج إلى القيام بإعداد Postfix بطريقةٍ صحيحة. يمكن العثور على إرشادات القيام بذلك من <a href="https://academy.hsoub.com/devops/web-servers/mail-servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D8%A8%D8%B1%D9%8A%D8%AF-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-postfix%D8%8C-dovecot%D8%8C-mysql-%D9%88-spamassasin-r59/">هنا</a>. يتم تثبيت Postfix مع حزم Icinga، ولكن يمكن إعداده لاحقًا بعد أن يتم تثبيت Icinga.</p><h2>تثبيت Icinga</h2><p>سينقوم بتثبيت Icinga باستخدام الحزم. أيضًا، سنقوم باستخدام MySQL كقاعدة بيانات.</p><p>قم بتطبيق الأمر التالي لإضافة مستودع Icinga إلى مدير الحزم الخاصّ بك:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo add-apt-repository ppa:formorer/icinga</pre><p>ثمّ قم بتحديث قاعدة الحزم الخاصّة بك:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo apt update</pre><p>والآن قم بتثبيت Icinga وMySQL عبر الأمر:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo apt install icinga icinga-doc icinga-idoutils mysql-server libdbd-mysql mysql-client</pre><p>سيتم سؤالك عن أكثر من شيء أثناء عملية التثبيت. إليك قائمة بالأمور التي سيتم سؤالك عنها وكيف يجب أن تجاوب عليها:</p><ul><li><strong>إعداد MySQL</strong>: قم بإدخال كلمة مستخدم جذر جديدة لـMySQL.</li><li><strong>إعداد Postfix</strong>: اختر "Internet Site".</li><li><strong>إعداد Postfix</strong>: قم بإدخال نطاقك المؤهّل الذي تستعمله (example.com مثلًا).</li><li><strong>إعداد icinga-cgi</strong>: قم بإدخال كلمة مرور للمستخدم "icingaadmin" (ستحتاجها لتسجيل الدخول إلى لوحة التحكّم لاحقًا).</li><li><strong>إعداد icinga-common</strong>: اختر "No" لتفعيل الأوامر الخارجية.</li><li><strong>إعداد icinga-idoutils</strong>: اختر "Yes" لإعداد قاعدة بيانات لـicinga-idoutils باستخدام dbconfig-common.</li><li><strong>إعداد icinga-idoutils</strong>: اختر "mysql" كنوع قاعدة البيانات.</li><li><strong>إعداد icinga-idoutils</strong>: أدخل كلمة مرور المستخدم الجذر (root) الخاصّ بقاعدة البيانات (التي قمتَ بإدخالها أولًا).</li><li><strong>إعداد icinga-idoutils</strong>: قم بإدخال كلمة مرور جديدة لمستخدم قاعدة البيانات الخاصّة بـicinga-idoutils.</li></ul><p>هكذا يكون تثبيت Icinga مكتملًا، ولكننا مانزال بحاجة إلى إعداد بضع أمور قبل أن نتمكّن من تشغيله. لاحظ أنّ خادوم Apache وPostfix قد تمّ تثبيتهما تلقائيًا أثناء تثبيت Icinga كاعتماديات.</p><p>قم بإضافة المستخدم الرئيسي لخادوم Apache والذي يدعى <span style="font-family:courier new,courier,monospace;">www-data</span> إلى مجموعة nagios:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo usermod -a -G nagios www-data</pre><p>قم بتفعيل عفريت <span style="font-family:courier new,courier,monospace;">ido2db</span> لكي يبدأ عند الإقلاع، والذي يقوم بتخزين أحداث وإعدادات Icinga في قاعدة البيانات. لتعديل إعدادات Icinga الافتراضية:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo vi /etc/default/icinga</pre><p>قم بتغيير قيمة IDO2DB إلى <strong><em>yes</em></strong> لتبدو بالشكل التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">IDO2DB=yes</pre><p>احفظ الملفّ واخرج، وقم بإعادة تشغيل خدمة ID02DB:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service ido2db start</pre><p>قم بتفغيل وحدة idomod عبر نسخ ملفّ عيّنة <span style="font-family:courier new,courier,monospace;">idoutils.cfg</span> إلى مجلّد إعدادات Icinga الحالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo cp /usr/share/doc/icinga-idoutils/examples/idoutils.cfg-sample /etc/icinga/modules/idoutils.cfg</pre><p>والآن أصبح Icinga مضبوطًا وجاهزًا للبدء:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service icinga restart</pre><p>والآن فلنجرّب واجهة Icinga الرسومية.</p><h2>الوصول إلى واجهة Icinga الرسومية</h2><p>اذهب إلى <a rel="external nofollow" href="http://yourhost/icinga">http://yourhost/icinga</a> ، وقم بتسجيل الدخول باستخدام مستخدم icingaadmin وكلمة المرور الخاصّة به اللذان قمت بإعدادهما مسبقًا.</p><p>يجب أن ترى أنّه Icinga يقوم حاليًا بمراقبة مستضيفٍ واحدٍ فقط هو localhost (خادومك الحالي) و7 خدمات كالتالي:</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_08/001.png.da00f2da7e1cfa1c1d02f4669f2280f5.png"><img data-fileid="3999" class="ipsImage ipsImage_thumbnailed" alt="001.thumb.png.65227c222095ab6996b6544a93" src="https://academy.hsoub.com/uploads/monthly_2015_08/001.thumb.png.65227c222095ab6996b6544a93533fb1.png"></a></p><p>يعرض الصفّ الأوّل أنّ المستضيف الوحيد الذي يتم مراقبته حاليًا فعّال، ويظهر الصفّ السفلي أنّه هناك 7 خدمات يتم مراقبتها حاليًا وتعمل بشكلٍ جيّد.</p><p>إذا كانت حالة localhost هي "Down"، فحينها ربّما تحتاج إلى تغيير صلاحيات الأمر ping الخاصّ بك. شغّل الأمر التالي للسماح للمستخدم nagios باستخدام الأمر ping:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo chmod u+s `which ping`</pre><h2>طرق المراقبة بواسطة Icinga</h2><p>هناك طريقتان رئيسيتان لمراقبة المستضيفين والخدمات بواسطة Icinga:</p><ol><li>مراقبة "الخدمات العموميّة المتوفّرة".</li><li>المراقبة عبر عميل مثبّت على جهاز مستضيف (host) بعيد لجمع وإرسال البيانات إلى Icinga.</li></ol><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_08/002.png.576ca548b1e83b6a99fa4415982f28a4.png"><img data-fileid="4000" class="ipsImage ipsImage_thumbnailed" alt="002.thumb.png.787f4b6e325676dddb9d00c606" src="https://academy.hsoub.com/uploads/monthly_2015_08/002.thumb.png.787f4b6e325676dddb9d00c6060fb5f1.png"></a></p><p>عند استخدام الطريقة الأولى، تشير الخدمات العمومية العامّة إلى الخدمات التي يمكن الوصول إليها عبر الشبكة المحلّية أو الإنترنت. الأمثلة الأكثر شيوعًا لذلك هي HTTP, البريد، SSH وICMP Ping. هذه الطريقة مفيدة لمراقبة الأنظمة التي لا يمكنك (أو لا تريد) تثبيت عميل (agent) عليها، وأيضًا لمراقبة واجهات الشبكة المقابلة للمستخدم.</p><p>لتضمين الطريقة الثانية، سنقوم بتثبيت NRPE كعميل خاصّ بنا على المستضيفين البعيدين (remote hosts) لمراقبة مواردهم المحلّية. سيسمح هذا لـIcinga بمراقبة أشياء مثل استخدام القرص، العمليات التي تعمل حاليًا وأمورٍ أخرى بالنظام لا يمكن للطريقة الأولى مراقبتها.</p><h2>الطريقة 1: مراقبة الخدمات العمومية المتوفرة</h2><p>بسبب أنّ الطريقة الأولى تقوم ببساطة بمراقبة الخدمات المُشغّلة حاليًا، فإنّ إعداد هذه الطريقة سيكون بأكمله على خادوم Icinga. يمكن مراقبة العديد من الأشياء باستخدام هذه الطريقة، لذا سنوضّح كيفية مراقبة واجهة عمومية (public interface) لخادوم ويب.</p><p>أنشئ ملفًّا باسم المستضيف الخاصّ بك، باستخدام هذا الأمر (استبدل yourhost باسم المستضيف عندك):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo vi /etc/icinga/objects/yourhost.cfg</pre><p>الآن قم بإضافة السطور التالية، حيث ستستبدل host_name باسم المستضيف الخاصّ بك (في كلا المكانين)، alias بوصف للمستضيف و address بعنوان الـIP العمومي الخاصّ بالمستضيف:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">define host {
        use                     generic-host
        host_name               web-1
        alias                   A Web Server
        address                 107.170.xxx.xxx
}

define service {
        use                     generic-service
        host_name               web-1
        service_description     HTTP
        check_command           check_http
}</pre><p>احفظ الملفّ واخرج، وقم بإعادة تحميل إعدادات خدمة Icinga لكيّ تأخذ التغييرات مجراها:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service icinga reload</pre><h2>الطريقة 2: المراقبة باستعمال عميل (Agent)</h2><p>كما ذكرنا سابقًا، سنستخدم NRPE كعميلنا الافتراضي لجلب البيانات من مستضيفٍ بعيد إلى Icinga. هذا يعني أنّه يجب تثبيت NRPE على جميع الأجهزة والخواديم المستضيفة التي سيتم مراقبتها باستخدام هذه الطريقة، وسيجب أيضًا إعداد خادوم Icinga ليستقبل البيانات من كلّ الأجهزة المستضيفة (hosts).</p><p>فلنقم بتثبيت NRPE.</p><h3>تثبيت NRPE على مستضيف بعيد</h3><p>قم بتطبيق الأمر التالي على الخادوم الذي تريد أن يتم مراقبته لتحديث قاعدة بيانات الحزم:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo apt update</pre><p>والآن قم بتثبيت NRPE وملحقات Nagios:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo apt install nagios-plugins nagios-nrpe-server</pre><p>ابحث عن اسم نظام ملفّات الجذر الخاصّ بك (لأنّه واحدٌ من الأشياء التي نريد مراقبتها):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">df -h /</pre><p>سنستخدم اسم نظام الملفّات في إعدادات NRPE لمراقبة استخدام القرص الصلب (سيكون غالبًا<span style="font-family:courier new,courier,monospace;"> /dev/vda/</span>). الآن قم بفتح ملفّ <span style="font-family:courier new,courier,monospace;">nrpe.cfg</span> للتعديل:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo vi /etc/nagios/nrpe.cfg</pre><p>ملفّ إعدادات NRPE طويلٌ جدًا ومليء بالتعليقات. هناك القليل من السطور التي يجب عليك تعديلها فقط:</p><ul><li><strong>server_address</strong>: قم بتغييره إلى عنوان الـIP الخاصّ لهذا المستضيف.</li><li><strong>allowed_hosts</strong>: قم بتعيين هذا إلى عنوان الـIP الخاصّ لخادوم Icinga الخاصّ بك.</li><li><strong>[command[check_hda1</strong>: غيّر <span style="font-family:courier new,courier,monospace;">dev/hda1/</span> إلى اسم نظام الملفّات الجذر الخاصّ بك الذي حصلت عليه من الخطوة السابقة.</li></ul><p>يجب أن تبدو السطور الثلاثة كشيءٍ مشابه للتالي بعد التعديل:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">server_address=client_private_IP
allowed_hosts=nagios_server_private_IP
command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/vda</pre><p>لاحظ أنّه هناك العديد من الأوامر الأخرى المعرّفة في هذا الملفّ التي سيتم تشغيلها في حال ما إذا تمّ ضبط Icinga ليستعملها. لاحظ كذلك أنّ NRPE سيعمل على المنفذ 5666 لأنّ الخيار server_port مضبوط على القيمة 5666. إذا كنتَ تمتلك أيّ جدارٍ ناري يمنع ذلك المنفذ، فيجب عليك فتحه لخادوم Icinga.</p><p>احفظ الملفّ واخرج، وقم بإعادة تشغيل NRPE ليتم تطبيق التغييرات:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service nagios-nrpe-server restart</pre><p>بمجرّد ما أن تنتهي من تثبيت وإعداد NRPE على أجهزة المستضيفين التي تريد مراقبتها، سيجب عليك إضافة هؤلاء المستضيفين (hosts) إلى إعدادات خادوم Icinga الخاصّ بك قبل أن يبدأ بمراقبتهم.</p><h3>إضافة مستضيف بعيد إلى إعدادات خادوم Icinga</h3><p>على خادوم Icinga الخاصّ بك، قم بإنشاء ملفّ إعداداتٍ جديد لكلّ واحدٍ من الأجهزة المستضيفة البعيدة التي تريد مراقبتها في <span style="font-family:courier new,courier,monospace;">etc/icinga/objects/ </span>واستبدل yourhost باسم المستضيف الذي تريده:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo vi /etc/icinga/objects/yourhost.cfg</pre><p>قم بإضافة تعريف المستضيف التالي إلى الملفّ، واستبدل قيمة host_name باسم المستضيف البعيد الخاصّ بك (استعملتُ wordpress-1 في مثالي)، قيمة alias بوصف للمستضيف وقيمة address بعنوان الـIP الخاصّ للمستضيف البعيد:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">define host {
        use                     generic-host
        host_name               wordpress-1
        alias                   My first wordpress server
        address                 10.128.xxx.xxx
        }</pre><p>ثمّ قم بإضافة أيّ واحدٍ من أقسام الخدمات التي تريد مراقبتها. لاحظ أنّ قيمة check_command تحدد مالذي سيتم مراقبته. إليك بعض الأمثلة على ما يمكنك إضافته إلى ملفّ الإعدادات الخاصّ بالمستضيف البعيد الخاصّ بك:</p><p><strong>Ping:</strong></p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">define service {
        use                             generic-service
        host_name                       wordpress-1
        service_description             PING
        check_command                   check_ping!100.0,20%!500.0,60%
        }</pre><p><strong>SSH</strong> (عند تعيين notifications_enabled إلى 0 فإنّه يتم تعطيل التنبيهات للخدمة)</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">define service {
        use                             generic-service
        host_name                       wordpress-1
        service_description             SSH
        check_command                   check_ssh
        notifications_enabled           0
        }</pre><p><strong>الحمل(Load)</strong>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">define service {
        use                             generic-service
        host_name                       wordpress-1
        service_description             Current Load
        check_command                   check_load!5.0!4.0!3.0!10.0!6.0!4.0
        }</pre><p><strong>المستخدمون الحاليون</strong>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">define service {
        use                             generic-service
        host_name                       wordpress-1
        service_description             Current Users
        check_command                   check_users!20!50
        }</pre><p><strong>مساحة القرص</strong>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">define service {
        use                             generic-service
        host_name                       wordpress-1
        service_description             Disk Space
        check_command                   check_all_disks!20%!10%
        }</pre><p>إذا كنت تتسائل عن معنى <span style="font-family:courier new,courier,monospace;">use generic-service</span>، فهي عبارة عن خيار يقوم ببساطة بجلب قِيَم قالب خدمة يدعى "generic-service" المعرّف افتراضيًا.</p><p>الآن احفظ الملفّ واخرج. وقم بإعادة تحميل إعدادات Icinga:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service icinga reload</pre><h2>مثال على واجهة المستخدم</h2><p>بعد ضبط إعدادات المراقبة على بعض أجهزة المستضيفين بواحدٍ من الطرق المتوفّرة، اذهب إلى واجهة الويب الخاصّة بـIcinga على <a rel="external nofollow" href="http://youricingaserver.com/icinga">http://youricingaserver.com/icinga</a> وأدخل اسم المستخدم وكلمة المرور اللذين أدخلتهما أثناء التثبيت. واضغط على رابط "Service Link". يجب أن ترى قائمة بجميع الخدمات التي قمتَ بتجهيزها ليتم مراقبتها حاليًا.</p><p>كمثال، إليك مستضيفين اثنين يتم مراقبتهما باستخدام ملفّات الإعدادات التي وصفناها بالأعلى. يتم مراقبة خدمة web-1HTTP عبر منفذ HTTP العادي الخاصّ بها، وهي حاليًا تخبرنا أنّ كلّ شيءٍ يعمل بشكلٍ جيّد، وwordpress-1 يخبرنا أيضًا أنّ جميع خدماته التي نراقبها تعمل بشكلٍ جيّد حاليًا.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_08/003.png.8ba4330b5db0eba6aa556ffbc59243d2.png"><img data-fileid="4001" class="ipsImage ipsImage_thumbnailed" alt="003.thumb.png.5d67d6bba1065fc49decc50ea2" src="https://academy.hsoub.com/uploads/monthly_2015_08/003.thumb.png.5d67d6bba1065fc49decc50ea27e394b.png"></a></p><p>يمتلك Icinga الكثير من المزايا، يمكنك تصفّح واجهة الويب لاستكشاف المزيد عن المستضيفين والخدمات التي تراقبها.</p><h2>الخاتمة</h2><p>الآن وبعد أن صرتَ قادرًا على مراقبة الخواديم التي تريدها والخدمات التي تحددها، ربّما تريد إمضاء المزيد من الوقت في استكشاف الخدمات المهمّة بالنسبة لك والتي تريد مراقبتها. ربّما تودّ أيضًا إعداد التنبيهات عبر البريد الإلكتروني في حال امتلاء القرصّ الصلب الخاصّ بك مثلًا أو تعطّل موقعك الرئيسي، لكي تتمكن من حلّ المشاكل فورًا أو قبل حصولها حتّى.</p><p>ترجمة -وبتصرف- للمقال: <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-use-icinga-to-monitor-your-servers-and-services-on-ubuntu-14-04">How To Use Icinga To Monitor Your Servers and Services On Ubuntu 14.04</a> لصاحبه: Mitchell Anicas.</p><p>حقوق الصورة البارزة: <a href="http://www.freepik.com/free-vector/office-working-documnts-infography_715196.htm" rel="external nofollow">Designed by Freepik</a>.</p>
]]></description><guid isPermaLink="false">102</guid><pubDate>Mon, 24 Aug 2015 13:28:02 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x62E;&#x62A;&#x627;&#x631; "&#x62E;&#x637;&#x629; &#x627;&#x644;&#x648;&#x641;&#x631;&#x629;" &#x644;&#x636;&#x645;&#x627;&#x646; &#x646;&#x633;&#x628;&#x629; &#x625;&#x62A;&#x627;&#x62D;&#x629; &#x623;&#x639;&#x644;&#x649; (high availability) &#x644;&#x62E;&#x627;&#x62F;&#x648;&#x645;&#x643;</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81-%D8%AA%D8%AE%D8%AA%D8%A7%D8%B1-%D8%AE%D8%B7%D8%A9-%D8%A7%D9%84%D9%88%D9%81%D8%B1%D8%A9-%D9%84%D8%B6%D9%85%D8%A7%D9%86-%D9%86%D8%B3%D8%A8%D8%A9-%D8%A5%D8%AA%D8%A7%D8%AD%D8%A9-%D8%A3%D8%B9%D9%84%D9%89-high-availability-%D9%84%D8%AE%D8%A7%D8%AF%D9%88%D9%85%D9%83-r100/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_08/high-availibility_(1).png.638fbc888f0c4ab47636c420213521b1.png" /></p>

<p>سنشرح اليوم فكرة التوفّر أو تكرار البيانات (redundancy). البيانات المُكررة ليست نسخةً احتياطية، بل هي بيانات يمكن أن تساعدك على تجاوز عمليات فشل الأقراص (disks fail) في حال ما إذا تعذّر عليك الوصول إلى بيانات الأقراص الصلبة عبر الطريقة الأساسية التي تستعملها.</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_08/high-availibility_(1).png.b6b53779151d84ff50f7829b00eda400.png"><img data-fileid="3990" class="ipsImage ipsImage_thumbnailed" alt="high-availibility_(1).thumb.png.5ce0715e" src="https://academy.hsoub.com/uploads/monthly_2015_08/high-availibility_(1).thumb.png.5ce0715e801837f4722475974800fe85.png"></a></p><p>تعتمد طريقة تشغيل النسخ المتماثل (replication) على نظامك على كيفية استعمالك لبياناتك، الأخطاء التي تريد تجنّبها وكيفيّة تفاعل زوّارك مع خادومك.</p><h2>الوفرة العالية عبر RAID</h2><p>ربّما يكون أشهر أنواع النسخ المتماثل (replication) هو تقنية RAID. ترمز RAID إلى "مصفوفة تكرار الأقراص المستقلة - Redundant Array of Independent Disks". يعني هذا أنّه وفي غالب الأحيان، تعمل الأقراص كمرايا (mirrors) لبعضها البعض.</p><p>التطبيق الأكثر شيوعًا لتقنية RAID هو مصفوفة RAID 1. يقوم هذا النوع من المصفوفات بتمرير (mirror) قرصٍ صلب ما على قرصٍ صلبٍ آخر. يعني أنّه وفي حال فشل القرص الصلب الأوّل، فسيبقى القرص الصلب الثاني موجودًا للخدمة وكتابة البيانات. يسرّع هذا النوع من المصفوفات عملية القراءة من الأقراص بسبب توفّر البيانات في أكثر من مكان وبالتالي يستطيع النظام قراءتها من أيّ موقعٍ يريد من الموقعين المتوفّرين.</p><p>هذا المثال أيضًا هو مثالٌ جيّد لتوضيح السبب الذي من أجله تكون تقنية مثل RAID، أو عملية تكرار البيانات (redundancy) عمومًا مختلفة عن عملية النسخ الاحتياطي (backup). إذا قمتَ بحذف ملفّ ما فقد تمّ حذفه بالفعل ولن تتمكن من استرجاعه. يتم تطبيق التغييرات على جميع الأقراص مباشرةً بالوقت نفسه لضمان المزامنة بينها.</p><p>يتم تطبيق تقنية RAID في المستوى المنخفض (low-level)، هذا يعني أنّك لن تستطيع التحكّم بتقنية RAID وخصائصها أو تضمينها على خادومك الافتراضي الخاصّ على شركة DigitalOcean مثلا، إن كان خادومك على مزود آخر، فراجع دليل المساعدة الخاص بالمزود.</p><h2>تكرار البيانات على مستوى الكتل Block-Level</h2><p>من الطرق الأخرى للقيام بعملية تكرار البيانات (Redundancy) هي عبر تمرير هيكلة الكُتَل (Blocks) بالكامل. <strong>DRBD</strong> أو "جهاز الكُتَل المكررة الموزّع - Distributed Replicated Block Device"، هو عبارة عن طريقة يمكن تطبيقها للقيام بعملية تكرار البيانات على امتداد أجهزة الكُتَل (Block Devices).</p><p>قد يبدو هذا مشابهًا لمصفوفة RAID التي تستعمل المرايا، وفي بعض الأحيان، هي كذلك بالفعل. لكنّ الفرق هو في المكان الذي تتم فيه عملية النسخ المتماثل. في RAID، تتم عمليّة تكرار البيانات على مستوى أقل من مستوى تطبيقات النظام. تدير بطاقة RAID أو برمجيّة RAID الأقراص الصلبة الفيزيائية بنفسها وتقوم في النهاية بتقديم قرصٍ واحد ليتم قراءة البيانات منه.</p><p>DRBD على الجانب الآخر، مُعدّة بطريقة مختلفة تماًمًا. في DRBD، يتم تمرير محتويات كلّ خادوم بالكامل إلى خادومٍ آخر. يتم تمرير واجهة التطبيقات كذلك. هذا يعني أنّه يمكن التعامل مع فشل التطبيقات بسهولة بسبب وجود آلة أخرى منفصلة تمامًا عن الخادوم الرئيسي تحوي على نفس محتويات الخادوم الرئيسي. إذا فشل خادومك الأوّل مثلًا بسبب مشاكل بالطاقة، فسيتم تشغيل خادومك الثاني ليقوم بنفس المهام.</p><h2>النسخ المتماثل في SQL</h2><p>إذا كانت بياناتك المهمّة مخزّنة في قاعدة بيانات SQL (مثل MySQL ،MariaDB ،PostgreSQL، ..)، فيمكنك الاستفادة من بعض مزايا النسخ التكراري أو النسخ المتماثل المضمّنة بالفعل. يمكن لهذه المزايا أن توفّر لك نظام استرجاع في حال تعطّل نظامك الرئيسي.</p><h3>النسخ المتماثل بـ Master-Slave</h3><p>النوع الأساسي للنسخ التكراري أو المتماثل (replication) الخاصّ بـSQL هو إعداد Master-Slave. في هذا السيناريو، تمتلك خادوم قاعدة بيانات رئيسي، والذي يتم الإشارة إليه باسم السيّد أو "Master". هذا الخادوم هو المسؤول عن تنفيذ جميع مهام الكتابة والتحديثات. يتم نسخ البيانات من هذا الخادوم بشكلٍ مستمر إلى الخادوم الفرعي أو "slave". يمكن أيضًا القراءة من هذا الخادوم، ولكن لا يمكن الكتابة عليه.</p><p>يسمح لك هذا التثبيت بتوزيع البيانات على امتداد أجهزة متعددة، والذي يمكنه تحسين أداء تطبيقك بشكل ملحوظ.</p><p>في حين أنّ تحسين الأداء هذا يعتبر ميّزة مهمّة، واحدٌ من الأسباب الرئيسية التي قد تودّ من أجلها إعداد نسخٍ تكراري باستخدام Master-Slave هو لمعالجة الأعطاب ومشاكل الفشل. إذا أصبح خادومك الرئيسي غير متوفّر، فيمكنك القراءة من خادومك الفرعي. أيضًا من الممكن أن تقوم بتحويل الخادوم الفرعي إلى خادوم رئيسي في حال ما إذا كان خادومك الرئيسي معطّلًا لفترة معيّنة من الوقت.</p><p>نسخ Master-Slave المتماثل في الواقع هو مكان من الأماكن التي يمكننا أن نلاحظ فيها تكامل عمليتيّ النسخ الاحتياطي والنسخ المتماثل. في إعداد master-slave، يمكنك نسخ البيانات بشكلٍ متماثل من الخادوم السيّد أو الرئيسي إلى الخادوم الفرعي. يمكنك بعدها تعطيل النسخ المتماثل بشكلٍ مؤقّت لمعرفة حالة المعلومات وصيانتها على الخادوم الفرعي. من هنا، يمكنك عمل نسخة احتياطية من قاعدة البيانات باستخدام أيّ أداة نسخ احتياطي تريدها.</p><p>يمكنك قراءة المزيد عن: <a rel="external nofollow" href="https://www.digitalocean.com/community/articles/how-to-set-up-master-slave-replication-in-mysql">إعداد النسخ المتماثل بـMaster-Slave لـMySQL</a> أو <a rel="external nofollow" href="https://www.digitalocean.com/community/articles/how-to-set-up-master-slave-replication-on-postgresql-on-an-ubuntu-12-04-vps">إعداد النسخ المتماثل بـMaster-Slave لـPostgreSQL</a>.</p><h3>النسخ المتماثل بـMaster-Master</h3><p>النوع الثاني من النسخ المتماثل يدعى "Master-Master" أو من خادومٍ رئيسي إلى خادومٍ رئيسي آخر. يسمح هذا الإعداد لكلا الخادومين بامتلاك الميّزات "الرئيسية". يعني هذا أنّه يمكن لكلا الخادومين أن يقبلا الكتابة والتحديثات ونقل التغييرات إلى الخادوم الآخر. يرث هذا الإعداد مزايا إعداد master-slave، ولكنّه يستفيد أيضًا من التحسّن بأداء الكتابة على الأقراص إذا كانت طريقة الكتابة موزّعة بشكلٍ جيّدة عبر آلية موازنة حملٍ جيّدة.</p><p>هذا يعني أيضًا أنّه في حال تعطّل خادومٍ ما، سيبقى الآخر عامِلًا وقادرًا على استقبال الطلبات وخدمة الزوّار. صحيحٌ أنّ عملية الإعداد ستكون أكثر تعقيدًا هنا، ولكنّ عملية الاسترجاع في هذه الحالة هي أقل تعقيدًا من حالة الاسترجاع من الفشل في إعداد master-slave، لأنّه لا حاجة إلى نقل قاعدة البيانات من الخادوم الفرعي إلى الخادوم الرئيسي.</p><p>يمكن أيضًا دمج هذا الإعداد مع آلية نسخٍ احتياطي إذا قمت بتعطيل واحدٍ من الخواديم الرئيسية. يجب أن تقوم بإعداد قاعدة بيانات ثابتة للنسخ الاحتياطي لتعمل بشكلٍ صحيح، لذا يجب عليك أن تتأكّد من أنّه لا يتم كتابة أو تعديل أيّ بيانات إلى حين انتهاء عملية النسخ الاحتياطي.</p><p>يمكنك قراءة المزيد عن: <a rel="external nofollow" href="https://www.digitalocean.com/community/articles/how-to-set-up-mysql-master-master-replication">النسح المتماثل كـmaster-master</a>.</p><h2>التوزيع كبديل للنسخ لتكرار البيانات</h2><p>تعرض الأنظمة الموزّعة العديد من المزايا مقارنةً بتضبيطات تكرار البيانات التقليدية.</p><p>شرحنا مراحل RAID الممررة عبر المرايا أعلاه (RAID 1). هناك مرحلة أخرى شائعة الاستخدام في RAID وهي RAID 5. تقوم هذه المرحلة بتوزيع البيانات على امتداد عددٍ من الأجهزة وتقوم أيضًا بكتابة بياناتٍ مساوية على امتداد كلّ جهاز. يعني هذا أنّه يمكن إعادة بناء أيّ نوع من الإجراءات (Transactions) عبر جمع المعلومات الموزّعة بشكلٍ متساوٍ من الأجهزة الأخرى في حال تعطّل جهازٍ ما.</p><p>يوفّر هذا طريقةً مختلفة لتوزيع البيانات عبر مختلف الأقراص، ويمكنه معالجة فشل واحدٍ من الأقراص كذلك.</p><p>لا يجب أن تتم الأنظمة الموزّعة على صعيد العتاد (hardware) فقط. هناك أيضًا عدّة قواعد بيانات وحلول برمجية أخرى مصممة للتعامل مع البيانات الموزّعة كميّزة أساسية لها.</p><p>من الأمثلة على هذا هو Riak، Riak هو عبارة عن قاعدة بيانات موزّعة. عُقَد Riak متطابقة جميعًا. لا يوجد أيّ علاقة master-slave بين الأجزاء المختلفة. تتم عملية النسخ المتماثل على الكائنات المخزّنة في قاعدة البيانات تلقائيًا، لذا فهناك عملية نسخ متماثل تلقيدية في هذا الجانب.</p><p>على كلّ حال، لا تقوم كلّ عقدة بتخزين قاعدة البيانات بأكملها داخلها، بل يتم توزيع البيانات على جميع العقد بطريقة مشابهة. يتم وضع الكائنات التي تمّ نسخها بشكلٍ متماثل على عقدٍ مختلفة للسماح بالتوفّر العالي في حال حصول أعطاب على مستوى العتاد.</p><p>مثالٌ آخر قائم على هذا المبدأ المُضمّن في قاعدة بيانات هو Cassandra. وهو مبني على نفس المبادئ الموجود في Riak، ولكنّها مضمّنة بطريقة مختلفة.</p><h2>خاتمة</h2><p>كما يمكنك أن ترى، هناك العديد من الخيارات المتوفّرة للنسخ المتماثل أو النسخ التكراري، كلّ واحدٍ منه يمتلك إيجابياتٍ وسلبيات. يعتمد الأمر بشكلٍ أساسي على المشاكل التي تحاول تجنّبها وماهيّة أجزاء النظام التي لا تريد أن تكون خارج الخدمة بتاتًا. خليطٌ من هذه التقنيات سيكون دومًا خيارًا أأمن وأكثر شمولية.</p><p>يجب أيضًا أن تكون قادرًا على أن ترى الآن أن إعداد النسخ المتماثل ليس بديلًا عن النسخ الاحتياطي.</p><p>للتطبيقات التي يكون فيها توافق البيانات والوصول أمرًا أساسيًا، سيكون النسخ الاحتياطي والنسخ المتماثل تقنيتين لا تقدرّان بثمن. تضمينٌ صحيح لهاتين التقنيتين سيضمن لك أنّ منتجك سيكون دومًا متوفرًا للمستخدمين وأنّ البيانات لن تضيع منك.</p><p>ترجمة -وبتصرف- للمقال: <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-choose-a-redundancy-plan-to-ensure-high-availability">How To Choose a Redundancy Plan To Ensure High Availability</a> لصاحبه: Justin Ellingwood.</p><p>حقوق الصورة البارزة: <a href="http://www.freepik.com/free-vector/social-network-concept_794502.htm" rel="external nofollow">Designed by Freepik</a>.</p>
]]></description><guid isPermaLink="false">100</guid><pubDate>Tue, 18 Aug 2015 09:08:25 +0000</pubDate></item><item><title>&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; Tripwire &#x644;&#x627;&#x643;&#x62A;&#x634;&#x627;&#x641; &#x627;&#x62E;&#x62A;&#x631;&#x627;&#x642;&#x627;&#x62A; &#x627;&#x644;&#x62E;&#x627;&#x62F;&#x648;&#x645; &#x639;&#x644;&#x649; &#x62A;&#x648;&#x632;&#x64A;&#x639;&#x629; Ubuntu</title><link>https://academy.hsoub.com/devops/servers/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-tripwire-%D9%84%D8%A7%D9%83%D8%AA%D8%B4%D8%A7%D9%81-%D8%A7%D8%AE%D8%AA%D8%B1%D8%A7%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D8%B9%D9%84%D9%89-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9%D8%A9-ubuntu-r94/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_08/tripwire.png.124f8b26fbc8ebb9e3965b83722bbf0a.png" /></p>

<p id="مقدمة">الحماية هي مشكلة كبيرة في غاية الأهمّية عند الحديث عن الخواديم على الشبكة. صحيح أنه يمكن إعداد الجدران النارية، <a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81-%D9%8A%D8%B9%D9%85%D9%84-fail2ban-%D8%B9%D9%84%D9%89-%D8%B2%D9%8A%D8%A7%D8%AF%D8%A9-%D8%AD%D9%85%D8%A7%D9%8A%D8%A9-%D8%AE%D8%A7%D8%AF%D9%88%D9%85%D9%83-r88/">سياسات fail2ban</a>، الخدمات الآمنة وتطبيق بعض التقييدات على تطبيقات الويب، إلّا أنّه من الصعب أن تتأكّد مما إذا قمتَ حقًا بمنع حصول كلّ الهجمات على خادومك أو صدّها.</p><p style="text-align: center;"><a href="https://academy.hsoub.com/uploads/monthly_2015_08/tripwire.png.061ca5ea316a1edca34feeaed2681e8a.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="3736" src="https://academy.hsoub.com/uploads/monthly_2015_08/tripwire.thumb.png.92bb82e6a2c0d48f9d74232aedb88c28.png" class="ipsImage ipsImage_thumbnailed" alt="tripwire.thumb.png.92bb82e6a2c0d48f9d742"></a></p><p>يعمل نظام اكتشاف الاختراق على جهاز المستضيف (HIDS - host-based intrusion detection system) عبر جمع التفاصيل عن نظام ملفّات حاسوبك وإعداداته. ثمّ يقوم بتخزين هذه المعلومات لديه ليستخدمها في مطابقة حالة النظام الحالية مع البيانات التي قام بجمعها بالسابق. إذا حصل أيّ تغيير بين حالة النظام الحالية وبين حالة النظام المخزّنة لدى HIDS، فتلك قد تكون إشارة إلى أنّه قد تمّ اختراق خادومك.</p><p>من أنظمة اكتشاف الاختراق الشهيرة على نظام لينكس هو تطبيق <span style="font-family:courier new,courier,monospace;">Tripwire</span>. وهو برنامج يمكنه تعقّب العديد من نقط بيانات نظام الملفّات بهدف اكتشاف ما إذا حصلت تغييرات غير متوقّعة عليها.</p><p>في هذا الدرس، سنشرح كيفية تثبيت وإعداد <span style="font-family:courier new,courier,monospace;">tripwire</span> على Ubuntu 12.04. بسبب طبيعة نظام اكتشاف الاختراقات، فمن المستحسن أن تقوم بتثبيت هذا النظام مباشرةً بعد إعداد خادومك، لكي يتمكّن النظام من الحصول على نسخةٍ نظيفة وآمنة بالأساس من خادومك.</p><h2 id="تثبيت-tripwire">تثبيت Tripwire</h2><p>لحسن الحظّ، يتوفّر <span style="font-family:courier new,courier,monospace;">tripwire</span> في المستودعات الافتراضية لتوزيعة Ubuntu، يمكن تثبيته عبر الأمر التالي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get update
sudo apt-get install tripwire</pre><p>أثناء عملية التثبيت، سيتم ضبط إعدادات العديد من الحزم الأخرى التي يعتمد عليها التطبيق في عمله.</p><p>أوّلًا، سيقوم بإعداد تطبيق البريد الذي يحتاجه كاعتمادية. إذا كنت تريد إعداد التنبيهات عبر البريد الإلكتروني، فاختر "internet site".</p><p>بعدها سيسألك عمّا إذا كنت تريد اختيار جمل المرور passphrases أثناء التثبيت، اختر Yes لكلا السؤالين. ثمّ سيسألك عمّا إذا كنت تريد إعادة بناء ملفّ الإعدادات، اختر yes. وأخيرًا، سيسألك سؤالًا مشابهًا عن ملفّ السياسة المتّبعة policy، اختر yes.</p><p>بعدها، سيطلب منك اختيار وتأكيد جُمَل مرور للموقع. يستخدم <span style="font-family:courier new,courier,monospace;">Tripwire</span> مفتاحين اثنين لتأمين ملفّات إعداداته:</p><ul><li><strong>مفتاح الموقع site key</strong>: يُستخدم هذا المفتاح لتأمين ملفّات الإعدادات. نحتاج إلى أن نضمن أنّ هذه الملفّات لن يتم تغييرها، وإلّا فلن نتمكّن من الوثوق بنظام اكتشاف الاختراقات بأكمله حينها. بما أنّ نفس ملفّات الغعدادات يمكن أن يتم استخدامها من قبل أكثر من خادوم، فإنّه بالإمكان استخدام هذا المفتاح على أكثر من خادوم.</li><li><strong>المفتاح المحلّي local key</strong>: يتم استخدام هذا المفتاح على كلّ آلة لتشغيل الملفّات الثنائية (binaries). وهو أمرٌ ضروري لضمان أنّ الملفّات الثنائية لن يتم تشغيلها دون موافقتنا.</li></ul><p>ستقوم أوّلًا باختيار وتأكيد جُملة مرور لمفتاح الموقع، ثمّ للمفتاح المحلّي. تأكّد من إدخال جمل قوّية.</p><h2 id="تحليل-قاعدة-البيانات">تحليل قاعدة البيانات</h2><p>بعد التثبيت، يجب أن تقوم بتحليل وإعداد تثبيتك. كما في معظم برامج الحماية، يأتي <span style="font-family:courier new,courier,monospace;">tripwire</span> مع إعدادت افتراضية عامّة مُقيّدة يمكن تعديلها لتناسب احتياجاتك.</p><p>أوّلًا، إذا لم تختر yes عندما سألك عن إنشاء ملفّ السياسة المتّبعة policy أثناء التثبيت، فإنّه يجب عليك فعل ذلك الآن عبر الأمر:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo twadmin --create-polfile /etc/tripwire/twpol.txt</pre><p>سيتم سؤالك بعدها عن جملة المرور التي اخترتها سابقًا.</p><p>يقوم هذا بإنشاء ملفّ سياسة مشفّر من الملفّ الموجود في المسار <span style="font-family:courier new,courier,monospace;">etc/tripwire/</span>، هذا الملفّ المشفّر هو ما يقرأه <span style="font-family:courier new,courier,monospace;">tripwire</span> حقا عند تنفيذ فحوصاته.</p><p>يمكننا الآن تحليل قاعدة البيانات التي سيستخدمها <span style="font-family:courier new,courier,monospace;">tripwire</span> للتحقق من نظامنا لاحقًا. تستخدم قاعدة البيانات هذه الملف الذي قمنا بإنشاءه للتو كما أنّها تقوم بالتحقق من النقاط المحددة بداخله.</p><p>بسبب أنّ هذا الملف ليس مجهّزا لنظامنا بعد، فسنحصل على الكثير من رسائل التحذير، الأخطاء وغيرها. سنستخدم هذه الرسائل كدليل لنقوم بضبط ملفّ إعدادتنا حاليًا.</p><p>للقيام بتحليل قاعدة البيانات، طبّق:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo tripwire --init</pre><p>يقوم هذا الأمر بإنشاء ملفّ قاعدة البيانات وطباعة الأشياء التي يجب علينا ضبطها في ملفّ إعداداتنا.</p><p>ولأننا نريد حفظ النتائج لنقوم بتحديد ما سنقوم بتعديله بالإعدادات، فيمكننا التقاط أيّ جزءٍ يقوم بذكر اسم ملف معيّن نريده من الخرج، ووضعه في مجلّد إعدادات <span style="font-family:courier new,courier,monospace;">tripwire</span>. يمكننا تشغيل عمليّة التحقق ووضع الملفّات التي تمّ سردها داخل ملف يدعى <span style="font-family:courier new,courier,monospace;">test_results</span> عن طريق الأمر:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo sh -c 'tripwire --check | grep Filename &gt; test_results'</pre><p>إذا فتحنا هذا الملف، فيجب أن نرى شيئا مثل:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">less /etc/tripwire/test_results

Filename: /etc/rc.boot
Filename: /root/mail
Filename: /root/Mail
Filename: /root/.xsession-errors
. . .
</pre><h2 id="إعداد-ملف-السياسة-المتبعة-لمطابقة-حالة-نظامك">إعداد ملف السياسة المتبعة لمطابقة حالة نظامك</h2><p>الآن وبعد أن صار لدينا قائمة بكل الملفّات التي تشكّل إعدادات <span style="font-family:courier new,courier,monospace;">tripwire</span>، يمكننا تعديل ملفّ السياسة policy file للتخلص من تلك الرسائل المزعجة التي تظهر لنا.</p><p>افتح ملف السياسة الصرف بمحرر النصوص الخاص بك وبصلاحيات الجذر:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo nano /etc/tripwire/twpol.txt</pre><p>ابحث عن عن جميع الملفّات الموجودة في ملف <span style="font-family:courier new,courier,monospace;">test_results</span>. قم بتعليق كل السطور التي تجدها منها (ضع إشارة # قبلها فقط).</p><p>في قسم "Boot Scripts"، يجب أن تقوم بتعليق السطر <span style="font-family:courier new,courier,monospace;">etc/rc.boot/ </span>لأنّه ليس موجودًا على نظام Ubuntu:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">(
  rulename = "Boot Scripts",
  severity = $(SIG_HI)
)
{
         /etc/init.d             -&gt; $(SEC_BIN) ;
         #/etc/rc.boot            -&gt; $(SEC_BIN) ;
         /etc/rcS.d              -&gt; $(SEC_BIN) ;
}
</pre><p>كان هناك العديد من الملفّات الموجودة بمسار <span style="font-family:courier new,courier,monospace;">root/</span> والتي كان يجب علي تعليقها على نظامي، قم بتعليق أي ملف غير متوفر على نظامك حاليًا:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">(
  rulename = "Root config files",
  severity = 100
)
{
        /root                           -&gt; $(SEC_CRIT) ; # Catch all additions to /root
        #/root/mail                     -&gt; $(SEC_CONFIG) ;
        #/root/Mail                     -&gt; $(SEC_CONFIG) ;
        #/root/.xsession-errors         -&gt; $(SEC_CONFIG) ;
        #/root/.xauth                   -&gt; $(SEC_CONFIG) ;
        #/root/.tcshrc                  -&gt; $(SEC_CONFIG) ;
        #/root/.sawfish                 -&gt; $(SEC_CONFIG) ;
        #/root/.pinerc                  -&gt; $(SEC_CONFIG) ;
        #/root/.mc                      -&gt; $(SEC_CONFIG) ;
        #/root/.gnome_private           -&gt; $(SEC_CONFIG) ;
        #/root/.gnome-desktop           -&gt; $(SEC_CONFIG) ;
        #/root/.gnome                   -&gt; $(SEC_CONFIG) ;
        #/root/.esd_auth                        -&gt; $(SEC_CONFIG) ;
        #/root/.elm                     -&gt; $(SEC_CONFIG) ;
        #/root/.cshrc                   -&gt; $(SEC_CONFIG) ;
        /root/.bashrc                   -&gt; $(SEC_CONFIG) ;
        #/root/.bash_profile            -&gt; $(SEC_CONFIG) ;
        #/root/.bash_logout             -&gt; $(SEC_CONFIG) ;
        /root/.bash_history             -&gt; $(SEC_CONFIG) ;
        #/root/.amandahosts             -&gt; $(SEC_CONFIG) ;
        #/root/.addressbook.lu          -&gt; $(SEC_CONFIG) ;
        #/root/.addressbook             -&gt; $(SEC_CONFIG) ;
        #/root/.Xresources              -&gt; $(SEC_CONFIG) ;
        #/root/.Xauthority              -&gt; $(SEC_CONFIG) -i ; # Changes Inode number on login
        #/root/.ICEauthority                -&gt; $(SEC_CONFIG) ;
}</pre><p>آخر جزءٍ من عملية التحقق الخاصّة بي كان يتذمّر من الملفّات الوصفية بنظام الملفّات <span style="font-family:courier new,courier,monospace;">proc/</span>. تتغير هذه الملفّات طوال الوقت، لذا فإنّها تقوم بإرجاع نتيجة موجبة طوال الوقت لنظام اكتشاف الاختراقات بعد أن تتغير.</p><p>في قسم "Devices &amp; Kernel information"، يمكنك أن ترى أن نظام الملفّات <span style="font-family:courier new,courier,monospace;">proc/ </span>مُعلّم ليتم التحقق منه:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">(
  rulename = "Devices &amp; Kernel information",
  severity = $(SIG_HI),
)
{
        /dev            -&gt; $(Device) ;
        /proc           -&gt; $(Device) ;
}</pre><p>ولكن هذا يقوم بالتحقق من كل الملفّات الموجودة ضمنه، ونحن لا نريد هذا. وعوضا عن ذلك، فسنقوم بحذف هذا الخيار، وإضافة الملفّات الفرعية الموجودة داخل نظام <span style="font-family:courier new,courier,monospace;">proc/</span> <em>والتي نريد التحقق منها</em> فقط:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">{
        /dev                    -&gt; $(Device) ;
        #/proc                  -&gt; $(Device) ;
        /proc/devices           -&gt; $(Device) ;
        /proc/net               -&gt; $(Device) ;
        /proc/tty               -&gt; $(Device) ;
        /proc/sys               -&gt; $(Device) ;
        /proc/cpuinfo           -&gt; $(Device) ;
        /proc/modules           -&gt; $(Device) ;
        /proc/mounts            -&gt; $(Device) ;
        /proc/dma               -&gt; $(Device) ;
        /proc/filesystems       -&gt; $(Device) ;
        /proc/interrupts        -&gt; $(Device) ;
        /proc/ioports           -&gt; $(Device) ;
        /proc/scsi              -&gt; $(Device) ;
        /proc/kcore             -&gt; $(Device) ;
        /proc/self              -&gt; $(Device) ;
        /proc/kmsg              -&gt; $(Device) ;
        /proc/stat              -&gt; $(Device) ;
        /proc/loadavg           -&gt; $(Device) ;
        /proc/uptime            -&gt; $(Device) ;
        /proc/locks             -&gt; $(Device) ;
        /proc/meminfo           -&gt; $(Device) ;
        /proc/misc              -&gt; $(Device) ;
}</pre><p>وبما أننا في هذا القسم من الملف، فنريدُ أيضًا عمل شيءٍ مع نظام الملفّات <span style="font-family:courier new,courier,monospace;">dev/pts/</span>. لن يتحقق <span style="font-family:courier new,courier,monospace;">Tripwire</span> من نظام الملفّات ذاك افتراضيًا لأنّه مضبوط لأن يتحقق من <span style="font-family:courier new,courier,monospace;">dev/ </span>فقط، بينما يعتبر <span style="font-family: 'courier new', courier, monospace; line-height: 22.3999996185303px;">dev/pts/</span> نظام ملفات منفصل، ولذلك لن يتم اعتباره في عملية التحقق. لجعل <span style="font-family:courier new,courier,monospace;">Tripwire</span> يتحقق من هذا النظام كذلك، يمكنك إضافته كالشكل التالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">{
        /dev                    -&gt; $(Device) ;
        /dev/pts                -&gt; $(Device) ;
        #/proc                  -&gt; $(Device) ;
        /proc/devices           -&gt; $(Device) ;
        /proc/net               -&gt; $(Device) ;
        /proc/tty               -&gt; $(Device) ;
        . . .</pre><p>الشيء الأخير الذي سنقوم بوضع إشارة تعليق قبله هما السطران <span style="font-family:courier new,courier,monospace;">var/run/</span> و <span style="font-family:courier new,courier,monospace;">var/lock/ </span>لكي لا يقوم نظامنا باعتبار التغييرات التي تجري على نظام الملفّات من طرف الخدمات:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">(
  rulename = "System boot changes",
  severity = $(SIG_HI)
)
{
        #/var/lock              -&gt; $(SEC_CONFIG) ;
        #/var/run               -&gt; $(SEC_CONFIG) ; # daemon PIDs
        /var/log                -&gt; $(SEC_CONFIG) ;
}</pre><p>احفظ الملف وأغلقه عندما تنتهي.</p><p>الآن وبعد أن قمنا بضبط ملفّنا، نحتاج إلى استخدامه عبر إعادة إنشاء ملف السياسة المشفّر الذي يستخدمه <span style="font-family:courier new,courier,monospace;">tripwire</span> في الواقع:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo twadmin -m P /etc/tripwire/twpol.txt</pre><p>بعد أن يتم إنشاؤه، يجب أن نقوم بإعادة تحليل قاعدة البيانات لتطبيق السياسة الجديدة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo tripwire --init

Please enter your local passphrase:
Parsing policy file: /etc/tripwire/tw.pol
Generating the database...
*** Processing Unix File System ***
Wrote database file: /var/lib/tripwire/tripit.twd
The database was successfully generated.</pre><p>يجب أن تختفي الآن جميع رسائل التحذيرات والأخطاء المزعجة التي رأيتها في البداية، إذا كان لا يزال هناك رسائل تحذير مثلا، فيجب أن تتابع تحرير ملف<span style="font-family:courier new,courier,monospace;"> etc/tripwire/twpol.txt/</span> إلى أن تختفي.</p><h2 id="اختبار-الإعدادات">اختبار الإعدادات</h2><p>إذا لم تشتكي عمليّة تحليل قاعدة البيانات من أي مشاكل أو أخطاء، فهذا يعني أن إعداداتك تطابق نظام الحالي في هذه النقطة. ولكننا سنقوم بعمل اختبار لرؤية ما يبدو عليه تقرير <span style="font-family:courier new,courier,monospace;">tripwire</span> إذا لم يكن هناك حقًا أيّ أخطاء.</p><p>الأمر الرئيسي للاختبار هو:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo tripwire --check</pre><p>يجب أن ترى تقريرًا يتم طباعته على شاشتك ليخبرك أنّه لا يوجد أيّ أخطاء أو تغييرات مُكتشفة على نظامك.</p><p>بمجرّد اكتمال هذه العملية، يمكنك أن تكون مطمئنا إلى أن إعداداتك تم ضبطها بالشكل الصحيح. يجب علينا تنظيف ملفّاتنا قليلًا لحذف المعلومات الحسّاسة من نظامنا.</p><p>يمكننا حذف ملف <span style="font-family:courier new,courier,monospace;">test_results</span> الذي قمنا بإنشائه:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo rm /etc/tripwire/test_results</pre><p>شيء آخر يمكننا القيام به هو إزالة ملف الإعدادات الصرف الغير مشفّر. يمكننا الآن القيام بهذا بشكل آمن لأنّه يمكن إعادة إنشائه إن أردنا مجددا من الملف المشفّر باستخدام جملة المرور الخاصّة بنا لاحقا.</p><p>كل ما علينا فعله لإعادة إنشاء ملف الإعدادات الصرف هو تمرير الملف المشفّر إلى <span style="font-family:courier new,courier,monospace;">twadmin</span>، بنفس الطريقة التي قمنا بإنشاء الإصدار المشفّر بداية. يجب علينا فقط تطبيق:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo sh -c 'twadmin --print-polfile &gt; /etc/tripwire/twpol.txt'</pre><p>اختر هذا الآن عبر نقل الإصدار النصّي إلى موقع النسخ الاحتياطي ثم حاول إعادة إنشائه:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo mv /etc/tripwire/twpol.txt /etc/tripwire/twpol.txt.bak
sudo sh -c 'twadmin --print-polfile &gt; /etc/tripwire/twpol.txt'</pre><p>إذا عمل بشكل صحيح، فيمكنك حينها حذف الملفّات الصرفة بشكل آمن الآن:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo rm /etc/tripwire/twpol.txt
sudo rm /etc/tripwire/twpol.txt.bak</pre><h2 id="إعداد-التنبيهات-عبر-البريد-الإلكتروني">إعداد التنبيهات عبر البريد الإلكتروني</h2><p>سنقوم بإعداد <span style="font-family:courier new,courier,monospace;">tripwire</span> ليتم تشغيله كل يوم وليتم أتمتة التنبيهات عبر البريد الإلكتروني فيه. خلال العملية، يمكننا أن نختبر كيفيّة تحديث قاعدة البيانات عندما نقوم بعمل تغييرا على نظامنا.</p><p>سنستخدم الأمر <span style="font-family:courier new,courier,monospace;">mail</span> لإرسال التنبيهات إلى عنوان بريدنا الإلكتروني. هذا الأمر غير مثبّت حاليا على نظامنا، لذلك يجب علينا تحميله من المستودعات الرسمية.</p><p>لتثبيته:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo apt-get install mailutils</pre><p>الآن وبعد أن تم تثبيت الأمر، فلنقم باختبار قدرة نظامنا على إرسال تقرير <span style="font-family:courier new,courier,monospace;">tripwire</span> عبر البريد الإلكتروني. سيحتوي هذا التقرير على رسائل التحذير والتغييرات الحاصلة مؤخّرًا على الخادوم، وبما أننا قمنا للتو بتثبيت برنامج جديد دون إخبار <span style="font-family:courier new,courier,monospace;">tripwire</span>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo tripwire --check | mail -s "Tripwire report for `uname -n`" your_email@domain.com</pre><p>يجب أن تتلقى تقريرا بعد فترة قصيرة في بريدك الإلكتروني عن البرنامج الجديد "mail" الذي تمّ تثبيته على النظام. هذا أمر جيّد، إنّه يعني أن <span style="font-family:courier new,courier,monospace;">tripwire</span> يقوم بمهمّته بمراقبة نظام ملفّاتنا وأنّ نظام التنبيهات عبر البريد الإلكتروني يعمل كذلك.</p><p>يجب علينا الآن تشغيل اختبار تحقق لتحديث قاعدة البيانات بعد أن قمنا بتثبيت برنامج جديد.</p><p>يمكننا فعل ذلك عبر:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo tripwire --check --interactive</pre><p>سيقوم هذا الأمر بتشغيل الاختبارات كالمعتاد، ولكن في النهاية، عوضًا عن أن يقوم بطباعة التقرير على الشاشة، سيتم نسخه إلى ملف نصّي وفتحه بواسطة محرر النصوص الافتراضي.</p><p>يحتوي هذا التقرير على الكثير من التفاصيل عن الملفّات التي تمّ تغييرها. في الواقع، على جهازي، كان الملفّ المُنشَئ يتكوّن من أكثر من 2275 سطر. هذه الكمّية من المعلومات مفيدة جدًا في حال حصول مشكلة حقيقية تتعلق بالحماية.</p><p>الجزء الأهم هو ببداية الملف. بعد القليل من المعلومات التقديمية، يجب أن ترى بضع سطور تحتوي صناديق اختيار لكل من الملفّات المُعدّلة أو المُضافة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">Rule Name: Other binaries (/usr/sbin)
Severity Level: 66
-------------------------------------------------------------------------------

Remove the "x" from the adjacent box to prevent updating the database
with the new values for this object.

Added:
[x] "/usr/sbin/maidag"

Modified:
[x] "/usr/sbin"
. . .</pre><p>تشير صناديق الاختيار هذه إلى أنّك تريد تحديث قاعدة البيانات للسماح بهذه التغييرات. يجب أن تبحث عن كل صندوق يحوي إشارة "x" بداخله وأن تتحقق من أن هذه التغييرات قد قمت بها أنت فعلا وأنّه لا بأس بها.</p><p>إذا لم تكن تريد لتغيير معيّن أن يبقى، يمكنك إزالة إشارة "x" من الصندوق ولن يتم تحديث ذلك الملفّ في قاعدة البيانات. سيسبب هذا أن يقوم <span style="font-family:courier new,courier,monospace;">tripwire</span> باعتبار الملفّ كملف تمّ تعديله دون أن يكون متوقعًا ذلك.</p><p>في هذه النقطة، سيسألك النظام عن جملة المرور التي اخترتها في البداية لكي يتمكّن <span style="font-family:courier new,courier,monospace;">tripwire</span> من تحديث ملفّات قاعدة البيانات الخاصّة به.</p><p>إذا قبلنا جميع التغييرات، وإذا قمنا بتشغيل هذا الأمر بعدها، فيجب أن يكون التقرير أقصر بكثير الآن وألّا يسرد أيّ تغييرات.</p><h2 id="أتمتة-tripwire-مع-cron">أتمتة Tripwire مع Cron</h2><p>الآن وبعد أن تحققنا من أن جميع وظائف النظام تعمل بشكل يدوي، يمكننا إعداد مهمّة <span style="font-family:courier new,courier,monospace;">cron</span> لتقوم بتنفيذ اختبار تحقق بواسطة <span style="font-family:courier new,courier,monospace;">tripwire</span> في كل صباح. يمكنك <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81-%D8%AA%D8%AC%D8%AF%D9%88%D9%84-%D9%85%D9%87%D8%A7%D9%85%D9%83-%D8%A7%D9%84%D8%B1%D9%88%D8%AA%D9%8A%D9%86%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D8%AF%D8%A7%D8%AA%D9%8A-cron-%D9%88-anacron-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r82/">الإطلاع على كيفية عمل cron من هنا</a>.</p><p>يمكننا استخدام <span style="font-family:courier new,courier,monospace;">crontab</span> الخاص بالمستخدم الجذر، لأنّ التعديلات على الـcronjob الخاصّة بالنظام قد يتم محوها في حال توفّر تحديث لحزمة cron.</p><p>للتحقق ما إذا كان المستخدم الجذر يمتلك بالفعل crontab:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo crontab -l</pre><p>إذا كان crontab موجودًا، فيجب عليك نقله عبر أنبوب (pipe) إلى ملف وأن تقوم بإرجاعه:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo sh -c 'crontab -l &gt; crontab.bad'</pre><p>بعدها، يمكننا تعديل الـcrontab عبر:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo crontab -e</pre><p>إذا كانت هذه مرّتك الأولى في تشغيل crontab، فسيسألك عن اسم محرر النصوص الذي تود استخدامه. إذا كنت لا تفضّل واحدًا على آخر، فيمكنك استخدام المحرر nano.</p><p>بعدها، سيتم نقلك إلى ملف حيث يمكنك أتمتة <span style="font-family:courier new,courier,monospace;">tripwire</span> من داخله. بما أننا سنقوم بتشغيل <span style="font-family:courier new,courier,monospace;">tripwire</span> كل يوم، فسنحتاج فقط إلى أن نقرر الوقت الذي نريد تشغيله فيه. بشكلٍ عام، يتم تشغيل الخدمات في أوقات بعيدة عن أوقات الذروة لألّا تكون مزعجة أثناء التنفيذ للخادوم في ساعات الذروة والضغط على الخادوم.</p><p>الصيغة التي نحتاج استخدامها هي <span style="font-family:courier new,courier,monospace;">min hour * * * command</span> والأمر الذي نريد استخدامه هو نفسه الذي استخدمناه في تقريرنا عبر البريد الإلكتروني سابقًا. لا نحتاج إلى استخدام sudo هذه المرّة بما أنّه سيتم تشغيل الأمر باسم المستخدم الجذر.</p><p>لتشغيل <span style="font-family:courier new,courier,monospace;">tripwire</span> بالساعة 3:30 صباحًا كلّ يوم، يمكننا وضع السطر التالي بملفّنا:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">30 3 * * * /usr/sbin/tripwire --check | mail -s "Tripwire report for `uname -n`" your_email@domain.com</pre><p>يمكنك تعديله حسب احتياجك.</p><h2 id="خاتمة">خاتمة</h2><p>يجب أن تمتلك الآن نظام اكتشاف اختراق مؤتمن يُرسِل لك التقارير يوميًا في حال حصول تغييرات على نظام الملفّات الخاصّ بك. يجب أن تقوم بمعاينة التقارير المُرسلة بصفة دورية وتقوم باتّخاذ إجراء حيالها إن احتجت ذلك، إمّا بتحديث قاعدة <span style="font-family:courier new,courier,monospace;">tripwire</span> بأنّ التغييرات لا بأس بها وأنّها من طرفك، وإمّا بالتحقيق بأي نشاط مشبوه.</p><p>ترجمة -وبتصرف- للمقال <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-use-tripwire-to-detect-server-intrusions-on-an-ubuntu-vps">How To Use Tripwire to Detect Server Intrusions on an Ubuntu VPS</a> لصاحبه Justin Ellingwoo.</p>
]]></description><guid isPermaLink="false">94</guid><pubDate>Sat, 08 Aug 2015 12:13:45 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x633;&#x62A;&#x62E;&#x62F;&#x645; Nmap &#x644;&#x641;&#x62D;&#x635; &#x627;&#x644;&#x645;&#x646;&#x627;&#x641;&#x630; &#x627;&#x644;&#x645;&#x641;&#x62A;&#x648;&#x62D;&#x629; &#x639;&#x644;&#x649; &#x62E;&#x627;&#x62F;&#x648;&#x645;&#x643;</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-nmap-%D9%84%D9%81%D8%AD%D8%B5-%D8%A7%D9%84%D9%85%D9%86%D8%A7%D9%81%D8%B0-%D8%A7%D9%84%D9%85%D9%81%D8%AA%D9%88%D8%AD%D8%A9-%D8%B9%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%88%D9%85%D9%83-r81/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_07/nmap.jpg.484109c290d925d3cdd0282c1644db5e.jpg" /></p>

<div id="wmd-preview-section-27"><p id="كيف-تستخدم-nmap-في-فحص-المنافذة-المفتوحة-على-خادومك">تُعتبر الشبكات موضوعًا واسع التفاصيل مليئًا بالتشعبات بالنسبة للعديد من مديري الأنظمة المبتدئين، فهناك الكثير من الأدوات والخدمات التي يجب الإلمام بها لفهم هذه المواضيع بشكل جيّد، كالطبقات Layers المختلفة للإتصال، الواجهات Interfaces، والبروتوكولات Protocols. </p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_07/nmap.jpg.2f9ba50c3908ea4055b3e8abc002a7dc.jpg"><img data-fileid="3182" class="ipsImage ipsImage_thumbnailed" alt="nmap.thumb.jpg.c1a130856e644d00e9c1dcbd5" src="https://academy.hsoub.com/uploads/monthly_2015_07/nmap.thumb.jpg.c1a130856e644d00e9c1dcbd58c618c0.jpg"></a></p><p>يُغطّي هذا الدرس مفهوم المنافذ Ports وكيفيّة استخدام برنامج Nmap للحصول على معلومات حول حالة منافذ الجهاز على الشبكة.</p></div><div id="wmd-preview-section-29"><h3 id="ملاحظة">ملاحظة</h3><p>يُغطّي هذا الدرس النسخة الرابعة من بروتوكول الإنترنت الآمن IPv4. في أنظمة غنو لينكس يُحفظ IPv6 بشكل منفصل عن IPv4، فعلى سبيل المثال تفحص الأداة Nmap عناوين IPv4 افتراضيًا، أما لفحص عناوين IPv6 فنحن نحتاج إلى تحديد الخيار المناسب (nmap -6). <br>إذا ضُبط خادومك لاستخدام IPv6، فلا تنسَ من فضلك تأمين واجهات شبكة كل من IPv4 و IPv6 بالأدوات المناسبة. لمزيد من المعلومات حول أدوات IPv6 يمكنك الرجوع إلى درس <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-configure-tools-to-use-ipv6-on-a-linux-vps">كيفية استخدام IPv6 في خواديم غنو لينكس</a></p></div><div id="wmd-preview-section-30"><h2 id="ما-هي-المنافذ">ما هي المنافذ؟</h2><p>يتألف نموذج OSI كما نعلم من سبع طبقات وتُعتبر طبقة النقل transport layer مسؤولة في المقام الأوّل عن الترابط ما بين الخدمات المختلفة و التطبيقات، وهي الطبقة التي ترتبط معها المنافذ بشكل رئيسي.</p></div><div id="wmd-preview-section-31"><h3 id="مصطلحات-المنافذ">مصطلحات المنافذ</h3><p>لنفهم عملية ضبط المنافذ بشكل جيّد نحتاج إلى بعض المعرفة بالمصطلحات المُستخدمة في هذا المجال؛ لذا نعرض هنا عدّة مصطلحات تساعدك في فهم المناقشة التي ستتلوها. </p><ul><li><strong>المنفذ Port</strong>: هو منطقة اتصال قابلة للعنونة، مُطبّقة داخل نظام التشغيل (ليست ماديّة)، تساعد على تمييز حركة البيانات المتجهة لمختلف التطبيقات والخدمات. </li><li><strong>مقابس الإنترنت Internet Sockets</strong>: هو ملف واصف يُحدّد عنوان IP ورقم المنفذ المرتبط به ونوع البروتوكول المستخدم في طبقة النقل لمعالجة البيانات. </li><li><strong>الربط أو التقييد Binding</strong>: هي العملية التي تحجز أو تحدّد مكانًا عندما يستعمل أحد التطبيقات أو الخدمات مقبس إنترنت للتعامل مع البيانات قيد الإرسال والاستقبال. </li><li><strong>الاستماع Listening</strong>: نقول عن خدمة ما أنها “تستمع” على منفذ، عندما يتم تقييد عنوان مركّب من منفذ/بروتوكول/عنوان IP من أجل انتظار الطلبات من عملاء الخدمة.  وعند استلام الطلب يُؤسّس اتصال مع العميل (عند الحاجة) باستخدام نفس المنفذ الذي يتم الاستماع إليه، حيث مقابس الإنترنت المستخدمة ترتبط بعنوان IP مُحدّد للعميل، وهذا لا يمنع الخادوم من الاستماع إلى طلبات العملاء الآخرين وتلبية طلباتهم في نفس الوقت. </li><li><strong>فحص المنفذ Port Scanning</strong>: هي العملية التي تسعى للاتصال مع عدد من المنافذ بشكل متعاقب، بغرض الحصول على معلومات حول ما هي المنافذ المفتوحة منها، وما هي الخدمات وأنظمة التشغيل التي تعمل ورائها.</li></ul></div><div id="wmd-preview-section-32"><h3 id="المنافذ-الشائعة">المنافذ الشائعة</h3><p>تُحدّد المنافذ بأرقام تقع ضمن المجال من 1 إلى 65535. </p><ul><li>العديد من المنافذ التي تقع تحت الرقم <strong>1024</strong> ترتبط مع الخدمات التي يعتبرها لينكس والأنظمة الشهبية بيونكس Unix-like حسّاسة أو خطرة لوظائف الشبكة الأساسيّة وتُسمى "بالمنافذ المعروفة"، لذا يتوجب عليك الحصول على صلاحيات الجذر root لتخصيص خدمات هذه المنافذ. </li><li> تُعتبر المنافذ التي تنتمي للمجال بين <strong>1024</strong> <strong>و49151</strong> مُسجّلة، وهذا يعني أنها قد تكون "محفوظة" (بالمعنى الواسع للكلمة) لخدمات معينة، يتم ذلك بتقديم طلب إلى هيئة IANA (الهيئة الدولية المسؤولة عن ذلك)، والتي لا تُطبقها بشكل صارم، وإنما يمكنها أن تعطي دليلًا عن الخدمات التي يمكن تشغيلها على منفذ معيّن. </li><li>أما المنافذ الواقعة في المجال بين <strong>49152</strong> <strong>و65535</strong> فتسمى بالمنافذ المتغيّرة وهي التي لا يمكن تسجيلها، وتُقترح للاستخدام الخاص. </li></ul><p>ونظرًا لوجود عدد كبير من المنافذ المتاحة، فلا ينبغي القلق حيال الغالبية العظمى من الخدمات التي تربط عادةً منافذ معيّنة. <br>بكل الأحوال هناك بعض الخدمات التي من الجيّد معرفة المنافذ التي ترتبط بها: </p><ul><li><strong>20</strong>: بيانات FTP </li><li><strong>21</strong>: منفذ تحكم FTP </li><li><strong>22</strong>: SSH </li><li><strong>23</strong>: Telnet. غير آمن، لا يُنصح باستخدامه </li><li><strong>25</strong>: SMTP </li><li><strong>43</strong>: بروتوكول WHOIS </li><li><strong>53</strong>: خدمات DNS </li><li><strong>67</strong>: منفذ خدمة DHCP </li><li><strong>68</strong>: منفذ عميل DHCP </li><li><strong>80</strong>: HTTP traffic. حركة الوِب العاديّة </li><li><strong>110</strong>: منفذ البريد POP3 </li><li><strong>113</strong>: Ident الخدمات الموثقّة على شبكات IRC </li><li><strong>143</strong>: منفذ البريد IMAP </li><li><strong>161</strong>: SNMP </li><li><strong>194</strong>: IRC </li><li><strong>389</strong>: منفذ LDAP </li><li><strong>443</strong>: HTTPS. حركة الوِب المُشفّرة </li><li><strong>587</strong>: SMTP. منفذ تسليم البريد </li><li><strong>631</strong>: منفذ خدمة الطباعة CUPS </li><li><strong>666</strong>: DOOM. منفذ ألعاب 3D </li></ul><p>هذه فقط بعض الخدمات الشائعة المرتبطة بمنافذ، ويمكنك دومًا أن تجد المنافذ المناسبة للتطبيقات التي ترغب بضبطها ضمن مستندات التوثيق الخاصة بكلّ منها. <br>معظم الخدمات يمكن ضبطها لتستعمل منافذ أخرى غير تلك الافتراضية، لكن ينبغي عليك التأكد دومًا أن كلًا من المخدّم والعميل قد ضُبطا لاستعمال ذات المنفذ. يمكنك الحصول على قائمة صغيرة ببعض المنافذ الشائعة من خلال الأمر: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">less /etc/services </pre><p>يطبع الأمر السابق قائمة بالمنافذ الشائعة والخدمات المرتبطة بها:</p><blockquote><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint"> … tcpmux 1/tcp # TCP port service multiplexer echo 7/tcp echo 7/udp discard 9/tcp sink null discard 9/udp sink null systat 11/tcp users daytime 13/tcp daytime 13/udp netstat 15/tcp qotd 17/tcp quote msp 18/tcp # message send protocol …</pre><p>وسنستعرض لاحقًا عند حديثنا عن nmap كيف يمكنك الحصول على قائمة شاملة بجميع المنافذ.</p></blockquote></div><div id="wmd-preview-section-33"><h2 id="كيفية-فحص-المنافذ-المفتوحة-على-جهازك">كيفية فحص المنافذ المفتوحة على جهازك</h2><p>هناك عدد من الأدوات التي يمكن استخدامها لفحص المنافذ المفتوحة. واحدة من هذه الأدوات تدعى netstat وهي تأتي بشكل افتراضي مع معظم توزيعات غنو لينكس. <br>يمكنك بسهولة استعراض الخدمات قيد التشغيل عبر تنفيذ الأمر التالي: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo netstat -plunt</pre><blockquote><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint"> Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 785/sshd tcp6 0 0 :::22 :::* LISTEN 785/sshd</pre><p>يعرض الخرج السابق منافذ ومقابس الإنترنت المُستمع عليها والمرتبطة مع خدمات وقوائم كلًا من بروتوكولي UDP وTCP .</p></blockquote></div><div id="wmd-preview-section-34"><h2 id="تركيب-nmap">تركيب Nmap</h2><p>يعتبر اختبار "قابلية الإصابة" جزءًا مُهمًا من عملية تأمين وحماية الشبكات، وهذا يعني أن تحاول التسلل إلى شبكتك الخاصة واكتشاف مواطن الضعف فيها بنفس الطريقة التي قد يتبعها مهاجم ما. <br>ومن بين كل الأدوات المتاحة لهذا الغرض، فإن nmap هي الأكثر شيوعًا وقوّة. لتثبيت nmap على دبيان أو Ubuntu والأنظمة المبنية عليهما: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get update 
sudo apt-get install nmap </pre><p>إحدى الفوائد الجانبية لتثبيت هذا التطبيق هي تحسين ملف تعيين mapping file المنافذ، والذي يضم قائمة أوسع بكثير من الارتباطات ما بين الخدمات والمنافذ. </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">less /usr/share/nmap/nmap-services</pre><blockquote><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint"> … tcpmux 1/tcp 0.001995 # TCP Port Service Multiplexer [rfc-1078] tcpmux 1/udp 0.001236 # TCP Port Service Multiplexer compressnet 2/tcp 0.000013 # Management Utility compressnet 2/udp 0.001845 # Management Utility compressnet 3/tcp 0.001242 # Compression Process compressnet 3/udp 0.001532 # Compression Process unknown 4/tcp 0.000477 rje 5/udp 0.000593 # Remote Job Entry unknown 6/tcp 0.000502 echo 7/tcp 0.004855 echo 7/udp 0.024679 echo 7/sctp 0.000000 …</pre><p>لا يُشكّل الخرج السابق سوء جزءًا بسيطًا جدًا من ما يقارب 20 ألف سطر، مزوّدة بحقول إضافيّة، كالعمود الثالث الذي يسرد التردد المفتوح للمنفذ كما هو أثناء إجراء البحث على الإنترنت.</p></blockquote></div><div id="wmd-preview-section-35"><h2 id="كيفية-فحص-المنافذ-باستخدام-nmap">كيفية فحص المنافذ باستخدام Nmap</h2><p>يمكن لـ nmap أن يكشف الكثير من المعلومات حول المضيفhost، لذا فإن استخدامه قد يجعل مديري الأنظمة يعتقدون أن شخصًا ما لديه نوايا خبيثة، لهذا السبب اختبر nmap فقط على الخوادم التي تملكها بالفعل أو التي يمكنك إخبار أصحابها بما تريد القيام به. <br>في الحالات الأخرى يمكنك استخدام خادوم scanme.nmap.org والذي يقدّمه فريق عمل nmap لأغراض الاختبار والتعلّم. <br>نبدأ الآن باستعراض بعض العمليات التي يمكنك القيام بها مع nmap، وسوف نستخدم أثناء ذلك صلاحيات الجذر root لتجب إرجاع نتائج جزئية مع بعض الاستفسارات. بعض الأوامر كذلك قد تستغرق وقتًا طويلًا لإكمالها. إجراء فحص لنظام تشغيل المُضيف: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo nmap -O remote_host </pre><p>إذا كنت قد حصلت على الرد "Note: Host seems down" في اختبار سابق فنحن بحاجة لتخطّي اكتشاف جزء من الشبكة وتحميل المضيف أونلاين، أضف هذا الخيار: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo nmap -PN remote_host </pre><p>تحديد نطاق باستخدام "-" لفحص عدد من المضيفين دفعةً واحدة: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo nmap -PN xxx.xxx.xxx.xxx-yyy </pre><p>فحص نطاق الشبكة للخدمات المتوفرة: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo nmap -sP network_address_range </pre><p><br>فحص من دون إجراء بحث DNS عكسي على عنوان IP محدد؛ وذلك بهدف تسريع النتائج في معظم الحالات: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo nmap -n remote_host </pre><p>فحص منفذ مُحدّد بدلًا من كافة المنافذ: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo nmap -p port_number remote_host </pre><p>لفحص اتصالات TCP مع منفذ مستهدف لدينا ثلاث طرق (موضحة في الأسفل)، نفّذ الأمر التالي: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo nmap -sT remote_host </pre><p>لفحص اتصالات UDP نفّذ: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo nmap -sU remote_host </pre><p>لفحص منافذ TCP و UDP المفتوحة: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo nmap -n -PN -sT -sU -p- remote_host </pre><p><br>يعتبر فحص SYN من أقوى الفحوص حيث يستغل الطريقة التي يؤسّس بها بروتوكول TCP اتصالًا فيرسل رزمة SYN تسمح بالاتصال مع النظام وعرض المعلومات أول بأول لبدء اتصال TCP، يرسل الجهاز رزمة packet "طلب تزامن" إلى الخادوم، فإذا كان المنفذ مفتوح ولا يوجد جداري ناري يمنع الاتصال حينها يُعيد الخادوم رزمة بـ"إقرار تزامن" synchronized acknowledgment، يعود الجهاز المرسل بإكمال العملية مرسلًا رزمة "إقرار" مجددًا إلى الخادوم، ويتم الاتصال. <br>أسلوب الـ "SYN" في الفحص، من الأكثر الأساليب استخدامًا ويسمى أيضًا فحص half-open لأنه لن يقوم بالاعتماد على النظام وإنشاء اتصال TCP بدلًا عن ذلك تقوم الأداة Nmap بإنشاء وإرسال رزمة لتتصل مع النظام، وفي حال الحصول على استجابة فهذا يعني أن المنفذ مفتوح: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo nmap -sS remote_host </pre><p>أسلوب آخر يمكن إتباعه للمزيد من التخفي وذلك بإرسال TCP غير صالحة، فإذا توافق المضيف مع مواصفات TCP فحينها سيرسل رزمة عائدة في حال كان المنفذ مُغلقًا. تعمل هذه الطريقة على الخوادم المُشغّلة بأنظمة غير مبنية على Windows. <br>يمكنك استخدام الخيارات "sF", "<span style="font-family:courier new,courier,monospace;">-sX-</span>" أو "<span style="font-family:courier new,courier,monospace;">sN-"</span> وجميعها ستعطينا الاستجابة المطلوبة: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo nmap -PN -p port_number -sN remote_host </pre><p>لمعرفة ما هو إصدار الخدمة التي تعمل على المُضيف يمكنك تجريب الأمر التالي، والذي يحاول تحديد الخدمة ورقم إصدارها باختبار استجابات مختلفة من الخادوم: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo nmap -PN -p port_number -sV remote_host </pre><p>هناك بالتأكيد عدد آخر كبير من تراكيب الأوامر والتي يمكنك استخدامها مع nmap، لكن يمكن لما سبق أن يشكّل بداية في استكشاف نقاط الضعف وقابلية الإصابة للشبكة الخاصة بك.</p></div><div id="wmd-preview-section-36"><h2 id="الخاتمة">الخاتمة</h2><p>إن فهم ضبط المنافذ واكتشاف المسارات المحتلمة للهجوم على خادومك هي مهارة أساسية و الخطوة الأولى فقط لتحقيق أمن المعلومات على خادومك الخاص. <br>اكتشاف المنافذ المفتوحة وطبيعة المعلومات التي يمكن الحصول عليها من الخدمات التي تقبل الاتصالات على هذه المنافذ يمنحك المعرفة التي تحتاجها لتأمين الخادوم الخاص بك، حتى المعلومات العرضية التي قد تتسرب من جهازك يمكن استخدامها من قبل المتطفلين في محاولة استغلال نقاط الضعف المعروفة أو تطوير أخرى جديدة، لذا فإنه كلما كان ما يمكن معرفته أقل كلما كان ذلك أفضل.</p><p>OSI Open Systems Interconnection Basic Reference Model أو النموذج المرجعي الأساسي لترابط الأنظمة المفتوحة، هو نموذج مرجعي وضعته منظمة المعايير الدولية ISO عام 1977 ليكون مرجعًا أو نموذجًا يشرح كيف يجب أن تُصمم البروتوكولات بطريقة معياريّة.</p></div>
]]></description><guid isPermaLink="false">81</guid><pubDate>Sun, 05 Jul 2015 18:04:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x64F;&#x62D;&#x645;&#x651;&#x644; &#x627;&#x644;&#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A; &#x648;&#x627;&#x644;&#x645;&#x62D;&#x62A;&#x648;&#x649; &#x625;&#x644;&#x649; &#x62E;&#x627;&#x62F;&#x648;&#x645; &#x644;&#x64A;&#x646;&#x643;&#x633; &#x627;&#x644;&#x62E;&#x627;&#x635; &#x628;&#x643;</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81-%D8%AA%D9%8F%D8%AD%D9%85%D9%91%D9%84-%D8%A7%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%A7%D9%84%D8%AE%D8%A7%D8%B5-%D8%A8%D9%83-r80/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_06/server-download-content.png.ee0cd98df79a19b424da85c7e480d247.png" /></p>

<div id="wmd-preview-section-23"><p id="كيف-تحمل-التطبيقات-والمحتوى-إلى-خادوم-لينكس-الخاص-بك">واحدة من الإمكانيات الأساسيّة التي يجب أن تتمتّع بها معظم خوادم الإنترنت؛ القدرة على استقبال وإرسال المعلومات إلى الأجهزة الأخرى المُتصلة بالشبكة، فعلى الرغم من أن الناس تنظر عمومًا إلى الخوادم باعتبارها منصات تزويد بالمحتوى، إلا أنها يجب أن تملك القدرة على استقبال المحتوى لأسبابٍ عديدة. </p><p style="text-align: center;"><a href="https://academy.hsoub.com/uploads/monthly_2015_06/server-download-content.png.4090efe3852dff4ed72e711be35c0859.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="3120" src="https://academy.hsoub.com/uploads/monthly_2015_06/server-download-content.thumb.png.cf5a585f69e27ac38a8c119cfcef623b.png" class="ipsImage ipsImage_thumbnailed" alt="server-download-content.thumb.png.cf5a58"></a><br>وفي حين أنّ معظم حزم البرامج في غنو لينكس متوفرة ضمن المستودعات الرسمية لكل توزيعة ويمكن تحميلها وتركيبها باستخدام أدوات مدراء الحزم المعروفة، إلا أنّ باقي أنواع الملفات والمعلومات تستخدم آليات مختلفة. نناقش في درسنا هذا بعضًا من الطرق الشائعة لتحميل الملفات والمعلومات إلى خادوم لينكس الخاص بك. <br>سوف نستخدم بشكل رئيسي خادوم يعمل بنظام Ubuntu 14.04 لتطبيق الأمثلة الواردة هنا، إلا أنه يمكنك المتابعة معنا بالتأكيد بغض النظر عن إصدار ونوع توزيعتك.</p></div><div id="wmd-preview-section-25"><h2 id="الحصول-على-البيانات-والتطبيقات-من-المستودعات">الحصول على البيانات والتطبيقات من المستودعات</h2><p>قد يكون استخدام المستودعات الرسميّة لجلب الحزم والتطبيقات إلى خادومك أكثر الطرق شيوعًا. <br>تُشير المستودعات في سياقنا هنا إلى عدّة أشياء مختلفة، فقد تُعبّر مثلًا عن المجموعات الكبيرة من التطبيقات المتوفرة بصيغة مُترجمة compiled جاهزة للتثبيت، والتي تمّ اختبارها وضبطها بحيث تناسب التوزيعة التي تستخدمها. إضافةً لذلك لدينا المستودعات المصدرية، والتي تحتوي على كافة الملفات الضروريّة لبناء تطبيق ما انطلاقًا من المصدر. <br>وسنتناول كلا النوعين من المستودعات فيما يلي.</p></div><div id="wmd-preview-section-26"><h2 id="تركيب-البرامج-من-المستودعات-العادية-لتوزيعتك">تركيب البرامج من المستودعات العاديّة لتوزيعتك</h2><p>الطريقة القياسيّة لتركيب البرامج في بيئة غنو لينكس هي استخدام مدير الحزم، والمُعدّ مسبقًا للاتصال مع مجموعة من الخوادم المُجهزّة بمستودعات تضم آلاف الحزم التي تمّ فحصها، تحزيمها، واختبار توافقها مع النظام. <br>تستخدم توزيعات غنو لينكس أنواعًا مختلفة من صيغ التحزيم ومدراء الحزم لإنجاز ذلك. <br>وتعتبر صيغة التحزيم <span style="font-family:courier new,courier,monospace;">deb.</span> الأكثر شهرةً، وهي الصيغة المُستخدمة في توزيعة دبيان و Ubuntu وعدد آخر من مشتقاتهما، ولدينا أيضًا صيغة التحزيم <span style="font-family:courier new,courier,monospace;">rpm.</span> والتي تُستخدم عادةً في توزيعة RedHat والتوزيعات المبنية عليها مثل CentOS و Fedora، أخيرًا هناك بعض التوزيعات التي تستخدم نظامًا ثالثًا أبسط مما سبق وهو صيغة التحزيم <span style="font-family:courier new,courier,monospace;">tar.xz.</span> كتوزيعة Arch Linux. <br>وفي العموم، فإن التوزيعات التي تستخدم التحزيم ذو اللاحقة <span style="font-family:courier new,courier,monospace;">deb.</span> تعتمد على مدير الحزم apt، بينما تعتمد التوزيعات التي تستخدم تحزيم <span style="font-family:courier new,courier,monospace;">rpm. </span>على مدير الحزم yam أو إصداره المُحدّث dnf. <br>وباعتبار أن Arch Linux تُحزّم البرامج بصيغة ثالثة، فإنها تملك كذلك مدير حزمها الخاص والذي يدعى pacman لإدارة عمليات التثبيت والحذف وما إلى هنالك، يمكنك قراءة المزيد عن كيفيّة استخدام pacman من خلال <a rel="external nofollow" href="https://wiki.archlinux.org/index.php/Pacman_(%D8%A7%D9%84%D8%B9%D8%B1%D8%A8%D9%8A%D8%A9)">صفحة الويكي</a> الخاصّة به في موسوعة Arch.</p></div><div id="wmd-preview-section-27"><h3 id="كيفية-استخدام-أرشيف-الحزم-الشخصي-ppa">كيفيّة استخدام أرشيف الحزم الشخصيّ PPA</h3><p>واحدة من الطرق الإضافيّة للحصول على البرامج والتطبيقات في الأجهزة العاملة بنظام Ubuntu هي استخدام أراشيف الحزم الشخصية أو ما يعرف بـ PPA، والتي تُكسب توزيعة Ubuntu مرونة جيّدة. <br>تشير الـ PPA بشكل أساسيّ إلى مستودع على الإنترنت، عادةً ما يشمل واحدة أو عددًا قليلًا من الحزم، و يدار بواسطة شخص أو فريق عمل مستقل عن قنوات Ubuntu الرسميّة، مما يزوّد المستخدمين بمصادر إضافيّة لمدير الحزم، بحيث تصبح التطبيقات المخزّنة ضمن هذه المستودعات متاحة للتركيب بشكل سلس إلى جانب الحزم الأخرى. <br>تتمتع أراشيف الحزم الشخصيّة بعددٍ من المميزات إذ تُمكّنك من الحصول على أحدث نسخ التطبيقات بين إصدارات Ubuntu الرسميّة كلّ ستّة أشهر، حيث عادةً ما يترك فريق Ubuntu مهمة تحديث نسخ البرامج الجديدة حتى موعد الإصدار القادم من التوزيعة، إضافةً إلى إتاحة الوصول لمجموعة أوسع من التطبيقات التي لا يقوم فريق Ubuntu الرسمي بتحزيمها أصلًا، فيما لو توفر فريق من المتطوعين الذين يتخذون على عاتقهم مهمة توفير هذه الحزم. <br>والميزة الأهم عن البناء من المصدر هي أن هذه الحزم تُدار بواسطة أدوات مدير الحزم التقليدي، وهذا يشمل إمكانية استقبالها للتحديثات بشكل دوري ودمجها مع نظام التحزيم العام، الأمر الذي يسهّل عليك عددًا من المهام كحل مشاكل الاعتماديات. <br>وفي المقابل هناك بعض المساوئ التي تعتري هذا الأسلوب بطبيعة الحال، أحدها أنك ستضع الكثير من الثقة في مشرفي ومطوري مستودعات PPA. فبينما هناك أسباب وجيهة لمنح منتجي Ubuntu هذه الثقة، فإنه يتوجب عليك أن تسائل نفسك فيما إذا كانت مستودعات PPA تُقدَّم من قِبل جهة جديرة بالثقة. فحتى لو لم يملك المطورون أغراضًا خبيثة، فقد لا يدركون بالشكل المثالي المحاذير الأمنيّة مما قد يُسبّب مخاطر جديّة عن غير قصد. <br>أمرٌ آخر يجب أن تحتفظ به في ذهنك، ألا وهو فترة حياة مستودعات PPA، إذ عليك أن تملك خطّة عمل فيما لو توقّف الدعم فجأةً عن هذه المستودعات من قبل المصدر، ثم هل تملك الوقت لمراقبة الحالات التي تُقرّر فيها توزيعتك أخيرًا إضافة الدعم رسميًا لهذه الحزم من خلال المستودعات الافتراضية؟<br>قبل أن نتابع، قد يتوجب عليك تركيب الحزمة التالية في Ubuntu لتسهيل إدارة مستودعات PPA، والتي يختلف اسمها تبعًا للإصدار الذي تستخدمه، إلا أنه يجب أن تكون قادرًا على استخدام أحد هذين الخيارين: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get update 
</pre><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get install python-software-properties # For Ubuntu 12.04 and lower 
</pre><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get install software-properties-common # For Ubuntu versions &gt; 12.04 </pre><p>بعد ذلك يمكنك إضافة مستودعات PPA بواسطة الصيغة العامة التالية: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo add-apt-repository ppa:PPA_name </pre><p>ولتفعيل المستودع الجديد ينبغي تحديث فهرس الحزم للحصول على المعلومات الجديدة من PPA المُضاف، وأخيرًا يمكنك تركيب البرنامج الجديد الذي يُقدّمه المستودع كالعادة: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get update 
sudo apt-get install new_package</pre><h3>مستودعات Git</h3></div><div id="wmd-preview-section-28"><p>تُعتبر Git نوعًا آخر من المستودعات والتي يُرجّح أنك سمعت بها من قبل، في الأصل فإن Git هو برنامج مُوزّع وغير مركزي لإدارة إصدارات البرامج وتسهيل المشاركة في تطويرها وإدارة نُسخها، فإذا كان البرنامج الذي تبحث عنه مُستضافًا على مستودع git أو بواسطة إحدى خدمات الوِب لاستضافة البرمجيات باستخدام git مثل GitHub، Bitbucket، private GitLab، فيمكنك حينها تنزيل نسخة من الملفات بسهولة عن طريق الأمر git. <br>في البداية دعنا نتأكد من وجود الأداة git مُثبّتة على نظام التشغيل: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get update 
sudo apt-get install git </pre><p>بعد ذلك يمكنك إنشاء مجلّد جديد والانتقال إليه لتحفظ المشروع وتستنسخ مستودعه باستخدام المعلومات التي يقدّمها موقع الاستضافة. فعلى سبيل المثال للحصول على رابط URL لمستودع مشروع في موقع GitHub انظر إلى الجانب الأيمن: </p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_06/001_(1).png.89a921f15858a5ba8a0bbabe4fa12c5e.png"><img data-fileid="3103" class="ipsImage ipsImage_thumbnailed" alt="001_(1).thumb.png.e3603b375d56be8b0af742" src="https://academy.hsoub.com/uploads/monthly_2015_06/001_(1).thumb.png.e3603b375d56be8b0af7424aa32eee1d.png"></a> </p><p>يمكنك الآن نسخ عنوان الرابط URL وتمريره بعد ذلك إلى الطرفية باستخدام الأمر: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">git clone https://github.com/user/project.git </pre><p>ينسخ الأمر السابق المشروع بالكامل إلى الدليل النشط في الطرفيّة.</p></div><div id="wmd-preview-section-29"><h2 id="موارد-الوب-العامة">موارد الويب العامّة</h2><p>في حين أن استخدام المستودعات لإدارة البرامج أمرٌ سهل، ويوفّر طريقة رائعة لتتبّع الترقيعات والإصدارات الجديدة، إلا أنها قد لا تكون الطريقة المتاحة دومًا لأسباب عديدة؛ من ذلك أن عددًا آخر من التطبيقات غير موجودة لا يتوفر ضمن مستودعات، كما أنك قد تحتاج إلى أنواع أخرى من البيانات (غير حزم البرمجيات) على الخادوم الخاص بك. <br>ولهذه الحالات نحن نحتاج إلى مجموعة أخرى من الأدوات التي يمكن أن تساعدنا. سنناقش فيما يلي عددًا من الطرق متفاوتة التعقيد، لهذا الغرض.</p></div><div id="wmd-preview-section-30"><h3 id="تحميل-ونقل-البيانات-عن-بعد">تحميل ونقل البيانات عن بُعد</h3><p>قد تكون الطريقة الأكثر بداهةً لتحميل البيانات إلى الخادوم الخاص بك هي تنزيل هذه البيانات إلى حاسوبك المنزلي أولًا ومن ثم إعادة رفعها إلى الموقع. وعلى الأرجح أنك استخدمت هذه الطريقة بالفعل لرفع بعض المحتوى إلى موقعك، فرغم أنها قد لا تكون الأكثر أناقة إلا أنها سهلة بالتأكيد. <br>أي نوع من المحتوى، كالملفات والحزم، والتي ترغب بتضمينها في موقعك، يمكن تنزيلها إلى حاسوبك باستخدام متصفحات الوبِ التقليديّة. تأكد عند تحميلك تطبيق ما من حصولك على الإصدار الصحيح المطابق للتوزيعة المُثبتة على خادومك، بما في ذلك نوع الحزمة، إصدارها، ومعماريتها (في حال كان المصدر يتيح ذلك). <br>بعد ذلك، يمكنك نقل هذه الملفات بسهولة إلى خادومك، الطريقة التي أنصح باتباعها هي الاتصال عبر sftp، والتي ستؤّمن لك اتصالًا آمنًا ويسيرًا لنقل الملفات، يمكنك قراءة درسنا عن استخدام sftp من سطر الأوامر. <br>الطريقة الأخرى هي استخدام عميل FTP مع إمكانية sftp، والتي شرحناها في درسنا هنا عن استخدام تطبيق FileZilla مع sftp. <br>هذه غالبًا الطرق الأكثر مرونةً لتزويد خادومك بالمحتوى، حيث تتيح لك نقل الملفات الجديدة التي أنشأتها إضافةً إلى تلك الموجودة على الوِب.</p></div><div id="wmd-preview-section-31"><h3 id="تصفح-الوب-من-خلال-الطرفية">تصفح الوب من خلال الطرفيّة</h3><p>هناك طريقة أخرى أجدها ممتعة لتزويد موقعك بالمحتوى وهي استخدام متصفح الإنترنت ضمن الخادوم. <br>وعلى الرغم من أنه يمكنك تثبيت واجهة رسومية على الخادوم الخاص بك ومن ثم استخدام أحد المتصفحات التقليدية إلا أنني أعتبر ذلك نوعًا من المبالغة المُسرفة غير الضرورية، طالما هناك بديل آخر، ألا وهو استخدام المتصفحات المُخصّصة للاستعمال ضمن الطرفيّة نفسها والتي تسمح لك بزيارة المواقع واستعراض محتواها النصيّ. <br>لنستعرض الآن بعضًا من الخيارات المتوفرة لمتصفحات الوِب من خلال الطرفية.</p></div><div id="wmd-preview-section-32"><h4 id="lynx"><strong>lynx</strong></h4><p>يعتبر lynx أقدم متصفح وِب لا يزال تطويره واستخدامها نشطًا، كما أنه سهل الاستخدام، بشكل أساسي يتمّ التصفح باستخدام السهمين العلوي والسفلي للتنقل بين روابط الصفحة، وللضغط على رابط ما يتم تحديده بدايةً ثم الضغط على مفتاح الإدخال Enter أو السهم اليمني. <br>قد لا يكون lynx متاحًا بشكل افتراضي على نظام التشغيل لديك، إلا أنه يمكنك تثبيته بسهولة من مدير الحزم: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get update 
sudo apt-get install lynx </pre><p>يدعم متصفح lynx كلًا من ملفات تعريف الارتباط cookie والعلامات المرجعيّة bookmarks، كما يمكنه تلوين خرجه فيما لو دعمت الطرفية التي تستخدمها ذلك، وفي العموم يمكنك استخدامه لزيارة أي نوع من المواقع باستثناء تلك التي تعتمد على إضافات خارجية (كجافاسكربت أو فلاش) لتوفير وظائفها. <br>هنا على سبيل المثال استعرضنا موقع أكاديمية حسوب باستخدام المتصفح lynx ضمن طرفية mlterm: </p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_06/002_(1).png.b41d2130a7ab0d48532daa39bb712f2e.png"><img data-fileid="3104" class="ipsImage ipsImage_thumbnailed" alt="002_(1).thumb.png.76b93b012676734af820f8" src="https://academy.hsoub.com/uploads/monthly_2015_06/002_(1).thumb.png.76b93b012676734af820f8fb7bdee28b.png"></a></p></div><div id="wmd-preview-section-33"><h4 id="links"><strong>links</strong></h4><p>يقدّم links أداةً أخرى رائعة لتصفح الوِب من خلال الطرفيّة، ويتميز عن سابقه بأنه يحتوي على شريط قوائم علوي مماثلًا للمتصفحات التقليديّة (يمكن تفعيل شريط القوائم بالضغط على زر ESC). <br>لتثبيت links في حال لم يكن مُثبتا بالفعل؛ استخدم مدير الحزم كالعادة: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get update 
sudo apt-get install links </pre><p>وفي حين أنه لا يدعم تلوين النصّ بشكل افتراضي، مما قد يجعل من الصعب إلى حدٍ ما التمييز بين النصوص الصرفة وعناوين الروابط، إلا أنه يستفيد من ميزات مكتبة ncurses البرمجيّة لتقديم واجهة مرتبة بشكل جيّد، حيث أن استعراض موقع رسومي من خلال متصفحٍ نصيّ سيسبب دومًا مشاكل في التنسيق، links يتولى المهمة على نحوٍ جيّد. <br>ميزة أخرى مهمة قد تجعلك تُقرّر استخدام links وهو دعمه لاستخدام الفأرة، وهذا يعني إمكانية الدخول إلى الروابط واستعراضها عن طريق النقر على عناوينها باستخدام المؤشّر كما لو كنت تتعامل مع متصفحك التقليدي.</p></div><div id="wmd-preview-section-34"><h4 id="elinks"><strong>elinks</strong></h4><p>في عام 2001 اشتق elinks من متصفح links وأضيفت إليه ميزة دعم الامتدادات extended مع الاستفادة من قوّة وآليات عمل البرنامج الأب. <br>للحصول على elinks في Ubuntu عن طريق مدير الحزم apt نكتب: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get update 
sudo apt-get install elinks </pre><p>يتفوقelinks على links بعددٍ من الميزات، كقدرته على التعامل مع كلمات المرور وإدارة النماذج forms، تعدّد الألسنة، ودعم الجافاسكربت جزئيًا، بالإضافة إلى دعم بروتوكولي التورنت وIPv6، ورغم أن هذه الميزات قد تأتي على حساب السرعة، إلا أنه فرق بسيط للغاية.</p></div><div id="wmd-preview-section-35"><h4 id="w3m"><strong>w3m</strong></h4><p>w3m متصفحٌ نصيٌّ آخر يمكن اعتباره الأسهل في الاستخدام وبشكلٍ مشابه للتعامل مع المتصفح الرسومي، كما يأتي مع العديد من الميزات الأخرى، فعلى سبيل المثال تسمح لك معظم المتصفحات النصيّة بالتنقل بين الروابط، لكن التنقل خلال الصفحة نفسها قد لا يكون متاحًا بسهولة، w3m يسهّل هذه العملية عن طريق استخدام TABs للتنقل بين الروابط واستخدام مفاتيح الأسهم لتحريك المؤشر بشكل مستقل لتمرير الصفحة. <br>عادةً ما يأتي w3m مُثبت بشكل افتراضي مع العديد من الأنظمة، أما إذا لم يكن مضمنًا في خادومك فيمكنك إضافته عن طريق تنفيذ: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get update 
sudo apt-get install w3m </pre><p>إحدى المزايا التي قد تهم البعض هي إمكانية استخدام الأوامر المستعملة في برنامج vi، على سبيل المثال يمكن تحريك مؤشر الفأرة بواسطة الأزرار ‘j’, ‘k’, ‘l’, و ‘h’.</p></div><div id="wmd-preview-section-36"><h3 id="أدوات-التنزيل">أدوات التنزيل</h3><p>سيكون من المفيد أحيانًا أن تكون قادرًا على تصفح الإنترنت من الخادوم نفسه باستخدام الأدوات السابقة، إلا أنك ستجد نفسك في نهاية المطاف ترغب بالعودة إلى حاسبك الخاص للتصفح من خلال متصفحات الوِب الرسوميّة باعتبار ذلك أمرًا أكثر كفاءة، كما ستشعر بالثقة بأنّ ما تشاهده هو تمامًا ما يُفترض أن تحصل عليه. <br>لهذه الأسباب يلجأ معظم الناس إلى تصفح الوِب من خلال المستعرضات التقليدية ومن ثم نسخ ولصق الروابط إلى الطرفية لاستخدامها مع أحد أدوات التنزيل.</p></div><div id="wmd-preview-section-37"><h4 id="wget"><strong>wge</strong>t</h4><p>تُعتبر الأداة wget خيارًا ممتازًا للحصول على الصفحات أو الملفات من المواقع. <br>إذا لم تكن تملك wget مسبقًا على خادومك، يمكنك الحصول عليها عن طريق تنفيذ: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get update 
sudo apt-get install wget </pre><p>كلّ ما عليك فعله بعد ذلك لتنزيل الملفات من الإنترنت هو لصق عنوان الرابط URL في الطرفيّة بعد استدعاء الأداة: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">wget www.example.com </pre><p>إذا كان عنوان الرابط URL المُستخدم يُشير إلى موقع على شبكة الإنترنت فإنه سيجري تحميل الفهرس أو الصفحة الرئيسيّة له، وفي حال كان الرابط يعيد توجهيك إلى ملف فسيتم تحميل هذا الملف ضمن الدليل النشط. <br>وهكذا فأثناء تصفحك الإنترنت من خلال جهاز الحاسوب الخاص بك في المنزل، وحالما ترغب في تحميل ملف ما من الشبكة، انقر بزر الفأرة الأيمن على الرابط ثم اختر شيئًا مشابهًا لـ "انسخ عنوان الموقع"  أو "copy link location"، ثم قم بلصق العنوان في الطرفية مسبوقًا باستدعاء الأداة wget. <br>إذا حصل وقوطعت عملية التحميل لأي سبب (مثل ضُعف الاتصال بالإنترنت)، فإنه يمكنك استخدام wget مع الخيار <span style="font-family:courier new,courier,monospace;">c-</span> والذي يستأنف التحميل الجزئي في حال تمّ العثور على ملف غير مكتمل في الدليل النشط. </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">wget -c www.example.com </pre><p>تدعم الأداة wget التعامل مع ملفات تعريف الارتباط Cookies مما يجعلها مرشحًا جيدًا للنصوص التنفيذية scripting إضافةً إلى قدرتها على تحميل موقع وِب بالكامل.</p></div><div id="wmd-preview-section-38"><h4 id="curl"><strong>curl</strong></h4><p>تُعتبر الأداة curl خيارًا جيدًا كذلك لهذا النوع من العمليات، ففي حين تعمل wget بواسطة جلب الملفات، فإن curl تستخدم الخرج القياسي مما يجعلها أداة مثالية للاستخدام مع السكربتات والأنابيب scripts and pipes، بالإضافة إلى دعمها عددًا كبيرا من البروتوكولات، وتمكّنها من التعامل مع أساليب توثيق http بشكل أكفأ من wget. <br>تأتي العديد من أنظمة التشغيل مجهزة مع curl بشكل افتراضي، إذا لم يكن نظام تشغيلك كذلك: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo apt-get update 
sudo apt-get install curl </pre><p>وبينما تستخدم curl الأنابيب عادةً، إلا أنه يمكنك أيضًا حفظ خرجها بسهولة إلى ملف، وهذا ما تريده غالبًا إذا كنت ترغب بتحميل ملفات لرفعها إلى خادومك. <br>لتنزيل ملف وحفظه بالإبقاء على اسمه الافتراضي نفّذ: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">curl -O www.example.com/index.html </pre><p>يتوجب علينا تحديد الملف لأن هذه هي الطريقة التي نُعلم بها curl بالاسم المحليّ للملف. <br>أما إذا كنت تريد أن تختار اسم للملف المحلي، فنحن لسنا بحاجة للإشارة إلى ملف معيّن في عنوان الموقع إذا كان ما نريده هو فهرس دليل الموقع، بدلًا من ذلك يمكننا أن نشير اختياريًا إلى الموقع وأيا يكن ملف الفهرس فإنه سيُهيئ ليوضع في الملف الذي اخترناه: </p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">curl -o file.html www.example.com </pre><p>لا تقتصر فائدة هذه الطريقة على تنزيل فهارس الأدلة وإنما تعمل بشكل جيّد أيضًا لتنزيل ملف بالاسم الذي تختاره.</p></div><div id="wmd-preview-section-39"><h2 id="الخاتمة">الخاتمة</h2><p>كما ترى فإنه لدينا عدد غير قليل من الخيارات المختلفة للحصول على الملفات، التطبيقات، والمواد المختلفة من الإنترنت لتمريرها إلى الخادوم الخاص بك. وفي حين أن كلا منها لديه القدرة على جلب المحتوى من شبكة الإنترنت فلا يوجد أداة واحدة من بينها مناسبة لجميع أنواع التحميلات؛ لذا فمن المفيد أن نتعرف على الأدوات المتاحة أمامنا لنكون قادرين على الاستفادة من نقاط القوّة في كلّ منها والتي صُممت أساسًا من أجلها، وهذا ما سوف يساعدك على تجنب القيام بأعمال لا لزوم لها، ويعطيك المرونة في الطريقة التي تقارب بها مشاكلك. <br>تُرجم وبتصرف من مقال <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-download-software-and-content-onto-your-linux-vps">How To Download Software and Content onto your Linux VPS</a> لكاتبه Justin Ellingwood.</p><p><strong>ncurses:</strong> هي مكتبة برمجيّة تُزوّد التطبيقات بواجهة برمجيّة لتسهّل على المطورين كتابة واجهات نصيّة لبرامجهم تعمل ضمن الطرفية بطريقة أقرب للبرامج الرسوميّة. <br><strong>Pipes:</strong> الأنبوب، هي أداة يمكن أن تُشغّل عدّة أوامر في لينكس بشكل متعاقب بحيث تفصل بين كل أمرين؛ مُرسلةً خرج العملية السابقة ليكون دخل العملية اللاحقة.</p></div>
]]></description><guid isPermaLink="false">80</guid><pubDate>Mon, 29 Jun 2015 16:12:23 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x642;&#x648;&#x645; &#x628;&#x627;&#x644;&#x641;&#x62D;&#x635; &#x639;&#x646; &#x627;&#x644;&#x645;&#x634;&#x627;&#x643;&#x644; &#x627;&#x644;&#x634;&#x627;&#x626;&#x639;&#x629; &#x644;&#x644;&#x645;&#x648;&#x627;&#x642;&#x639; &#x639;&#x644;&#x649; &#x62E;&#x627;&#x62F;&#x648;&#x645; &#x644;&#x64A;&#x646;&#x643;&#x633;</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81-%D8%AA%D9%82%D9%88%D9%85-%D8%A8%D8%A7%D9%84%D9%81%D8%AD%D8%B5-%D8%B9%D9%86-%D8%A7%D9%84%D9%85%D8%B4%D8%A7%D9%83%D9%84-%D8%A7%D9%84%D8%B4%D8%A7%D8%A6%D8%B9%D8%A9-%D9%84%D9%84%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%B9%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r69/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_06/troubleshooting-server.png.cf084195b60981213fb4fa9a22c3a4f5.png" /></p>

<meta charset="utf-8"><title></title><style type="text/css"></style><p id="-">يُواجه كلّ شخص في وقتٍ ما مشاكل مع خادوم الوِيب Web Server، سيُساعدك تَعلّمك أين تبحث عندما تواجه مشكلة ما وأيّ العناصر هي التي من المحتمل تمّ تخريبها على إصلاح هذه المشاكل (troubleshoot) بسرعة وبإحباط أقل.</p><p>سنناقش في هذا الدرس كيف نقوم باستكشاف هذه المشاكل بحيث تستطيع الإبقاء على موقعك يعمل بشكل طبيعي.</p><h2 id="-">ما هي أنواع المشاكل النموذجية التي من المحتمل أن تواجهها ؟</h2><p>قد تنشأ في بعض الأحيان بعض المشاكل غير النموذجية إلّا أنّ الغالبية العظمى من المشاكل التي ستصادفها أثناء محاولتك لجعل موقعك يعمل بشكل صحيح تقع ضمن مجموعة يُمكن التنبُّؤ بها كثيرًا. سنقوم بالمرور على هذا بشكلٍ مُفصّل في الأقسام اللاحقة ولكن حاليًّا هذه قائمة من الأشياء التي يجب تفحّصها:</p><ul><li>هل تمّ تنصيب خادوم الوِيب لديك؟</li><li>هل خادوم الوِيب قيد التشغيل الآن؟</li><li>هل الصياغة في ملفات ضبط  خادوم الوِيب <span style="line-height: 22.3999996185303px; text-align: right;">configuration files </span>صحيحة؟</li><li>هل المنافذ ports التي قمت بضبطها مفتوحة (لم يتم حجبها من الجدار الناري)؟</li><li>هل تقودك إعدادات الـ DNS إلى المكان الصحيح؟</li><li>هل يشير جذر المستند document root إلى موقع ملفاتك؟</li><li>هل يقوم خادوم الوِيب بتخديم ملفات الفهرس index files الصحيحة؟</li><li>هل أذونات permissions وملكية الملف ownership وبُنى المجلد صحيحة؟</li><li>هل قُمتَ بمنع الوصول عن طريق ملفات الضبط؟</li><li>إن كنتَ تملك قاعدة بيانات database في الخلفيّة backend فهل هي تعمل؟</li><li>هل يستطيع موقعك الاتصال مع قاعدة البيانات بنجاح؟</li></ul><p>هذه هي بعض أشيع المشاكل التي يُصادفها مُدراء النُّظم عندما لا يعمل الموقع بشكلٍ صحيح، يُمكن عادةً تضييق المشكلة المحددة بإلقاء نظرة على ملفات السّجل Log Files للمكونات المختلفة وعن طريق الرجوع إلى صفحات الخطأ التي تظهر في متصفحك. سنقوم بالمرور في الأسفل على كل من هذه الحالات لكي تستطيع التحقق من أنّ الخدمات مضبوطة بشكلٍ صحيح.</p><h2 id="-logs">التحقق من السّجلات Logs</h2><p>قبل أن تقوم بتعقُّب مشكلة ما بشكلٍ عشوائي حاول أن تتحقق من سجلات خادوم الوِيب <span style="line-height: 22.3999996185303px;">Logs</span> لديك ومن أيّة عناصر مرتبطة بذلك، ستجد هذه السّجلات عادةً في المسار <span style="font-family:courier new,courier,monospace;">var/log/</span> في مجلّد فرعي مخصّص للخدمة التي تريدها.</p><p>فعلى سبيل المثال إن كنتَ تملك خادوم Apache يعمل على توزيعة Ubuntu فستجد بشكل افتراضي أنّ السّجلات يتمّ الاحتفاظ بها في المسار <span style="font-family:courier new,courier,monospace;">var/log/apache2/</span>، قُم بالتحقق من الملفات في هذا المجلد لكي ترى ما نوع رسائل الخطأ التي تمّ توليدها، إن كنت تملك قاعدة بيانات تعمل في الخلفيّة وتسبب لك المشاكل فهي على الأغلب تحتفظ بسجلاتها في المسار <span style="font-family:courier new,courier,monospace;">var/log/</span> أيضًا.</p><p>من الأشياء التي يجب التحقق منها أيضًا أن تتأكد إذا ما كانت العمليّات نفسها تصدر رسائل خطأ عندما تقوم بتشغيل الخدمات، إن كنت تحاول زيارة صفحة وِيب وتلقّيت خطأ فإنّ صفحة الخطأ قد تحتوي على تلميحات عن الخطأ أيضًا (بالرغم من أنّها ليست دقيقة كالسطور في ملفات السّجلات).</p><p>استخدم محرّك بحث Search Engine لتحاول إيجاد معلومات متعلقة بالموضوع والتي من الممكن أن تقودك في الاتجاه الصحيح، تساعدك الخطوات القادمة في استكشاف الأخطاء أكثر.</p><h2 id="-">هل تمّ تنصيب خادوم الوِيب لديك؟</h2><p>إنّ أول شيء تحتاج له لكي تُخدِّم مواقعك بشكل صحيح هو خادوم وِيب. ربّما قام مُعظم الأشخاص فعلًا بتنصيب خادوم قبل الوصول لهذه المرحلة، ولكن في بعض الحالات ربّما تكون أزلت الخادوم عن طريق الخطأ عند تنفيذك لعمليّات على الحزم Packages الأخرى.</p><p>إذا كنت تعمل على نظام تشغيل Ubuntu أو Debian وترغب بتنصيب خادوم وِيب Apache تستطيع كتابة ما يلي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo apt-get update
sudo apt-get install apache2</pre><p>تُدعى عمليّة Apache على هذه الأنظمة بـ apache2.</p><p>إن كنت تعمل على نظام تشغيل Ubuntu أو Debian وترغب بتنصيب خادوم وِيب Nginx تستطيع بدلًا من ذلك كتابة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo apt-get update
sudo apt-get install nginx</pre><p>تُدعى عمليّة Nginx على هذه الأنظمة بـ nginx.</p><p>إن كنت تعمل على أنظمة تشغيل CentOS أو Fedora وترغب باستخدام خادوم وِيب Apache فقُم بكتابة التالي وبإمكانك إزالة الأمر "sudo" إن كُنت قد سجّلت الدخول كـ root:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo yum install httpd</pre><p>تُدعى عمليّة Apache على هذه الأنظمة بـ httpd.</p><p>إن كنت تعمل على أنظمة تشغيل CentOS أو Fedora وترغب باستخدام خادوم وِيب Nginx تستطيع كتابة الأمر التالي، ومرّة أخرى قم بإزالة الأمر "sudo" إن كُنت قد سجّلت الدخول كـ root:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
sudo yum install nginx</pre><p>تُدعى عمليّة Nginx على هذه الأنظمة بـ nginx.</p><h2 id="-">هل خادوم الوِيب قيد التشغيل الآن؟</h2><p>بعد أن قمت بالتأكد من أنّ خادومك مُنَصّب بالفعل، فهل هو قيد التشغيل؟</p><p>تُوجَد العديد من الطّرق لكي تكتشف إذا ما كانت الخدمة قيد التشغيل أم لا، واحدة من هذه الطرق والتي تعمل على منصّات متعدّدة cross-platform هي استخدام الأمر netstat.</p><p>سيُخبِرك هذا الأمر عن جميع العمليّات التي تستخدم منافذ على الخادوم، بإمكاننا بعد ذلك كتابة الأمر grep لإيجاد اسم العملية التي نبحث عنها:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo netstat -plunt | grep apache2

tcp6       0      0 :::80           :::*            LISTEN      2000/apache2</pre><p>يجب عليك تغيير كلمة "apache2" إلى اسم عمليّة خادوم الوِيب الذي لديك، إن ظهر لك سطر كالموجود بالأعلى فهذا يعني أنّ العمليّة قيد التشغيل، أمّا إن لم تحصل على أيّة خَرج فهذا يعني إمّا أنّك قُمت بالاستعلام عن العمليّة الخطأ أو أنّ خادوم الوِيب لديك لا يعمل.</p><p>يُمكنك في هذه الحالة بدء تشغيله باستخدام الطريقة المفضّلة لتوزيعتك، فعلى سبيل المثال على Ubuntu تستطيع بدء تشغيل خدمة Apache2 بكتابة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service apache2 start</pre><p>وعلى توزيعة CentOS نكتب هذا الأمر:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo /etc/init.d/httpd start</pre><p>إذا تمّ بدء تشغيل خادومك فعندها تستطيع التحقق باستخدام الأمر netstat مرّة أخرى لكي تتأكد من انّ كل شيء يعمل بشكل صحيح.</p><p>هل الصّياغة Syntax في ملفات ضبط خادوم الوِيب صحيحة؟ إذا رفض خادوم الوِيب لديك أن يبدأ التشغيل فهذا يشير عادةً إلى أنّ ملفات الضبط تحتاج إلى بعض الانتباه، يتطلّب Apache و Nginx التزامًا صارمًا بتعليمات الصّياغة syntax لكي يتمّ قراءة الملفات بنجاح.</p><p>تتواجد ملفات إعدادات الضبط لهذه الخدمات عادةً في المسار <span style="font-family:courier new,courier,monospace;">etc/</span>  في مجلّد فرعي مُسمّى على اسم العمليّة نفسها.</p><p>وبهذا نستطيع الوصول إلى المجلّد الرئيسي لإعدادات ضبط Apache على Ubuntu بكتابة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">cd /etc/apache2</pre><p>ويمكننا الوصول بطريقة مشابهة إلى مجلّد إعدادات ضبط Apache على CentOS والمُسمّى على اسم تلك العمليّة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">cd /etc/httpd</pre><p>تكون إعدادت الضبط مُوزّعة على عدّة ملفات، وعندما يفشل بدء الخدمة فإنها ستشير عادةً إلى ملف إعدادات الضبط وإلى السّطر الذي حدثت فيه المشكلة، قُم بالتحقق من هذا الملف بحثًا عن الأخطاء. يُزوّدك كل واحد من خواديم الوِيب هذه بالقدرة على التحقق من صياغة إعدادات الضبط في ملفاتك. إن كُنتَ تستخدم Apache فبإمكانك استخدام الأمر <span style="font-family:courier new,courier,monospace;">apache2ctl</span> أو <span style="font-family:courier new,courier,monospace;">apachectl</span> للتحقق من ملفات إعدادات الضبط بحثاً عن أخطاء الصياغة:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">apache2ctl configtest
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK
</pre><p>لقد تلقيّنا كما ترى في الأعلى رسالة معلومات حول تفاصيل إعدادت الضبط لدينا ولم يكن هناك أيّة أخطاء، هذا جيّد.</p><p>وإن كنتَ تملك خادوم وِيب Nginx تستطيع البدء باختبار مماثل بكتابة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful</pre><p>تتحقق هذه العمليّة من صياغتك كما ترى، فإن أزلنا الفاصلة من المنقوطة من نهاية أحد الأسطر في ملف الإعدادات (وهو خطأ شائع بالنسبة لإعدادت ضبط Nginx) فسنحصل على رسالة مماثلة للآتي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">sudo nginx -t 

nginx: [emerg] invalid number of arguments in "tcp_nopush" directive in /etc/nginx/nginx.conf:18
nginx: configuration file /etc/nginx/nginx.conf test failed</pre><p>يُوجد عدد خاطئ من المُعطيات arguments لأنّ Nginx يقوم بالبحث عن الفاصلة المنقوطة لإنهاء الجُمَل، فإن لم يجدها ينتقل للسطر التالي ويفسّر ذلك على أنها مُعطيات إضافية للسطر السابق.</p><p>بإمكانك إجراء هذه الاختبارات لكي تجد أخطاء الصياغة في ملفاتك، قُم بإصلاح هذه المشاكل التي يُشير إليها إلى أن تستطيع ملفاتك تجاوز الاختبار بنجاح.</p><h2 id="-">هل المنافذ الذي قمت بضبطها مفتوحة؟</h2><p>تعمل خواديم الوِيب بشكلٍ عام على المنفذ 80 لاتصالات الوِيب الطبيعية normal web traffic وتستخدم المنفذ 443 للاتصالات المشفّرة باستخدام TLS/SSL، ولكي تصل بشكل صحيح إلى الموقع يجب أن تكون هذه المنافذ قابلة للوصول. تستطيع اختبار إذا ما كان الخادوم لديك يملك منفذًا مفتوحًا باستخدام الأداة netcat على حاسوبك المحلّي Local Machine.</p><p>تحتاج فقط لاستخدام عنوان الـ IP لخادومك وتخبرها عن رقم المنفذ الذي تريد التحقق منه كما يلي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo nc -z 111.111.111.111 80</pre><p>سيقوم هذا الأمر بالتحقق من المنفذ 80 على الخادوم الذي يملك عنوان 111.111.111.111، إن كان مفتوحًا سيخبرك الأمر فورًا بالنتيجة، أمّا إن لم يكن مفتوحًا فسيحاول الأمر باستمرار لإنشاء اتصال مع الخادوم دون جدوى، بإمكانك إيقاف هذه العمليّة بضغط على <span style="font-family:courier new,courier,monospace;">CTRL-C</span> في واجهة الأوامر.</p><p>إن لم تكن منافذ الوِيب قابلة للوصول لديك فيجب أن تبحث في إعدادات الجدار الناري لديك، حيث قد تحتاج أن تفتح المنفذ 80 أو المنفذ 443.</p><h2 id="-dns-">هل تقودك إعدادات الـ DNS إلى المكان الصحيح؟</h2><p>إن كان بإمكانك الوصول إلى موقعك باستخدام عنوان الـ IP ولا تستطيع ذلك عبر اسم المجال domain name فربّما يجب عليك إلقاء نظرة على إعدادت الـ DNS.</p><p>لكي يتمكّن زوّار موقعك من الوصول إليه عبر استخدام اسم المجال فيجب أن يكون لديك سِجِل "A"  أو "AAAA"  يشير إلى عنوان الـ IP الخاص بخادومك في إعدادات الـ DNS، تستطيع الاستعلام عن سِجِل “A” لمجالك باستخدام هذا الأمر:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">host -t A example.com
example.com has address 93.184.216.119</pre><p>يجب أن يتطابق السطر الذي يعود لك مع عنوان الـ IP لخادومك، إن كنتَ تريد التحقق من سِجِل "AAAA" (للاتصالات التي تستخدم IPv6) بإمكانك كتابة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">host -t AAAA example.com
example.com has IPv6 address 2606:2800:220:6d:26bf:1447:1097:aa7</pre><p>يجب أن تبقي في ذهنك أنّ أيّة تغييرات تقوم بها على سِجِل الـ DNS تأخذ وقتًا طويلًا ليتم تعميمها، ربّما تتلقى نتائج متضاربة بعد التغيير حيث أنّ طلبك يتمّ تلقيه من قبل خواديم مختلفة ليست جميعها مُحدّثة إلى آخر إصدار حتى الآن. إن كنتَ تستخدم موقع DigitalOcean فبإمكانك أن تتعلم <a href="https://academy.hsoub.com/devops/servers/%D9%85%D9%82%D8%AF%D9%91%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D9%85%D9%8F%D8%B5%D8%B7%D9%8E%D9%84%D8%AD%D8%A7%D8%AA-%D9%88%D8%B9%D9%86%D8%A7%D8%B5%D8%B1-%D9%88%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D9%86%D8%B8%D8%A7%D9%85-%D8%A3%D8%B3%D9%85%D8%A7%D8%A1-%D8%A7%D9%84%D9%86%D8%B7%D8%A7%D9%82%D8%A7%D8%AA-r5/">أساسيات DNS وأسماء النطاقات</a>.</p><p>قم بالتأكد من أن ملفات إعدادات الضبط تقوم بالتعامل مع مجالك بشكل صحيح. يبدو المقطع الخاص بملف المضيف الوهمي virtual host file لديك في Apache كما يلي:</p><pre data-pbcklang="html" data-pbcktabsize="4" class="html ipsCode prettyprint">&lt;VirtualHost *:80&gt;
ServerName example.com
ServerAlias www.example.com
ServerAdmin admin@example.com
DocumentRoot /var/www/html
٠٠٠</pre><p>يتم إعداد المضيف الوهمي virtual host لكي يستجيب مع أيّة طلبات على المنفذ 80 من أجل المجال example.com.</p><p>تبدو القطعة المشابهة لهذا في Nginx كما يلي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
server_name example.com www.example.com;
٠٠٠</pre><p>يتم إعداد هذه الكتلة Block لكي تستجيب إلى النوع المماثل من الطلبات التي تحدثنا عنها في الأعلى.</p><h2 id="-document-root-">هل يشير جذر المستند Document Root إلى موقع ملفاتك؟</h2><p>من الاعتبارات الأخرى التي يجب أن نأخذ بها هي إذا ما كان خادوم الويب لديك يشير إلى الموقع الصحيح للملف. يتم إعداد كل خادوم وهمي في Apache أو كتلة خادوم Server Block في Nginx لكي تشير إلى مجلّد محدد، فإن كان مُعدًّا بشكل غير صحيح سيرمي الخادوم رسالة خطأ عندما تحاول الوصول إلى الصفحة.</p><p>يتم إعداد جذر المستند Document Root في Apache باستخدام التوجيه DocumentRoot :</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">&lt;VirtualHost *:80&gt;
ServerName example.com
ServerAlias www.example.com
ServerAdmin admin@example.com
DocumentRoot /var/www/html
...</pre><p>يُخبر هذا السطر Apache أنّه يجب عليه البحث عن الملفات لهذا المجال في المسار <span style="font-family:courier new,courier,monospace;">var/www/html/</span>، فإن كنت تحتفظ بملفاتك في مكانٍ آخر يجب عليك تعديل هذا السطر لكي يشير إلى الموقع الصحيح.</p><p>يقوم التوجيه root في Nginx بإعداد نفس الشيء:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
server_name example.com www.example.com;
... </pre><p>يبحث Nginx في إعداد الضبط هذا عن الملفات لهذا المجال في المسار <span style="font-family:courier new,courier,monospace;">usr/share/nginx/html/</span></p><h2 id="-index-files-">هل يقوم خادوم الوِيب بتخديم ملفات الفهرس Index files الصحيحة؟</h2><p>إذا كان جذر المستند لديك صحيحًا ولا يتم تخديم صفحات الفهرس Index Pages بشكلٍ صحيح عندما تذهب إلى موقعك أو إلى مكان المجلد على موقعك فربّما تم ضبط إعدادات الفهارس بشكل غير صحيح.</p><p>عندما يقوم زائر ما بطلب مجلد يقوم خادومك نموذجيًا بإعطائه ملف فهرسة، عادةً ما يكون هذا ملف <span style="font-family:courier new,courier,monospace;">index.html</span> أو ملف <span style="font-family:courier new,courier,monospace;">index.php</span> وذلك اعتمادًا على على إعدادات الضبط لديك.</p><p>ربّما تجد في Apache سطرًا في ملف المضيف الافتراضي الذي يقوم بضبط إعدادات ترتيب الفهرس التي سيتم استخدامها لمجلدات معيّنة بشكلٍ صريح كما يلي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">&lt;Directory /var/www/html&gt;
DirectoryIndex index.html index.php
&lt;/Directory&gt;</pre><p>هذا يعني أنّه عندما يتم تخديم مجلد فإنّ Apache سيقوم بالبحث أولًا عن ملف يدعى index.html، ويحاول تخديم ملف index.php كاحتياط في حال لم يتم إيجاد الملف الأول. بإمكانك تعيين الترتيب الذي سيتم استخدامه لتخديم ملفات الفهرس لكامل الخادوم عن طريق تعديل ملف <span style="font-family:courier new,courier,monospace;">mods-enabled/dir.conf</span> والذي يقوم بتعيين الإعدادات الافتراضية للخادوم، إن كان الخادوم لديك لا يُخدّم ملف فهرس فقم بالتأكد أنّك تملك ملف فهرس في مجلّدك الذي يُوافق أحد الخيارات في ملفك.</p><p>يُدعى التوجيه الذي يقوم بذلك في Nginx بـ “index” ويتمّ استخدامه كما يلي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html;
index index.html index.htm;
server_name example.com www.example.com;
...</pre><h2 id="-">هل تمّ تعيين الأذونات والملكية بشكل صحيح؟</h2><p>حتى يتمكن خادوم الوِيب من تخديم الملفات الصحيحة يجب أن يكون قادرًا على قراءة الملفات وأن يمتلك صلاحية الوصول للمجلدات حيث يتم حفظ هذه الملفات، بالإمكان التحكم بهذا عبر أذونات وملكية الملفات والمجلدات. لكي تقرأ الملفات يجب أن تكون المجلدات التي تحتوي المحتوى قابلة للقراءة والتنفيذ من قبل عمليّة خادوم الوِيب، تختلف أسماء المستخدمين والمجموعات التي يتم استخدامها لتشغيل خادوم الوِيب من توزيعة لأخرى.</p><p>على Ubuntu و Debian يعمل كلًّا من Apache و Nginx كالمستخدم www-data والذي هو عضو من المجموعة www-data.</p><p>على CentOS و Fedora يعمل Apache تحت مستخدم يُدعى apache والذي ينتمي لمجموعة apache، يعمل Nginx تحت مستخدم يُدعى nginx والذي هو جزء من مجموعة nginx.</p><p>تستطيع باستخدام هذه المعلومات النظر إلى المجلدات والملفات التي يتألف منها محتوى موقعك:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">ls -l /path/to/web/root</pre><p>يجب أن تكون المجلدات قابلة للقراءة والتنفيذ من قبل المستخدم web أو مجموعته، أمّا الملفات فيجب أن تكون قابلة للقراءة لكي يتم قراءة محتواها، وبالإضافة لذلك إن أردنا تحميل، كتابة أو التعديل على المحتوى يجب أن تكون المجلدات والملفات قابلة للكتابة، ولكن احذر عند تعيينك للمجلدات لكي تكون قابلة للكتابة لأنّ هذا يُمكن أن يكون أحد المخاطر الأمنية.</p><p>لتعديل ملكية ملف ما تستطيع فعل ما يلي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo chown user_owner:group_owner /path/to/file
</pre><p>تستطيع فعل هذا أيضًا للمجلد، فبإمكانك تغيير ملكية المجلد وكل ما بداخله من ملفات عبر تمرير العَلَم –R:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo chown -R user_owner:group_owner /path/to/file
</pre><p>تستطيع التعلم أكثر عن <a href="https://academy.hsoub.com/devops/linux/%D9%85%D9%82%D8%AF%D9%91%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%A3%D8%B0%D9%88%D9%86%D8%A7%D8%AA-%D9%84%D9%8A%D9%86%D9%83%D8%B3-linux-permissions-r25/">أذونات لينِكس هنا</a>.</p><h2 id="-">هل قُمتَ بمنع الوصول عن طريق ملفات الضبط؟</h2><p>من المحتمل أنّه تم تعيين إعدادات الضبط لديك لكي تمنع الوصول إلى الملفات التي تحاول تخديمها. يتم إعداد هذا الضبط في Apache في ملف المضيف الافتراضي لهذا الموقع أو عبر ملف <span style="font-family:courier new,courier,monospace;">htaccess.</span> الموجود في المجلد نفسه.</p><p>من الممكن من خلال هذه الملفات أن تقوم بمنع الوصول بعدّة طرق ، يُمكن منع الوصول للمجلدات في إصدار Apache 2.4 بهذه الطريقة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">&lt;Directory /usr/share&gt;
AllowOverride None
Require all denied
&lt;/Directory&gt;</pre><p>يقوم هذا السطر بإخبار خادوم الوِيب بألّا يسمح لأي شخص بالوصول لمحتويات هذا المجلد، أمّا في إصدار Apache 2.2 والإصدارات الأقدم منه يمكننا كتابة ذلك كما يلي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">&lt;Directory /usr/share&gt;
AllowOverride None
Require all denied
&lt;/Directory&gt;</pre><p>إن وجدت توجيهًا كهذا للمجلد المُحتوي للمحتوى الذي تحاول الوصول إليه فإنّ هذا هو ما يمنع نجاحك. تأخذ هذه القيود في Nginx شكل توجيهات deny وتتواجد في كتل خادومك أو في ملفات إعدادات الضبط الرئيسية:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">location /usr/share {
deny all;
}</pre><h2 id="-database-">إن كنتَ تملك قاعدة بيانات database في الخلفية فهل هي تعمل؟</h2><p>إذا كان موقعك يعتمد على قاعدة بيانات في الخلفية مثل MySQL, PostreSQL, MongoDB, etc فستحتاج أن تتأكد من أنّها قيد التشغيل.</p><p>بإمكانك فعل هذا بنفس الطريقة التي تأكدت منها بأنّ خادوم الوِيب يعمل، مرّة أخرى نستطيع البحث عن العمليات قيد التشغيل ومن ثم انتقاء اسم العملية التي نبحث عنها كما يلي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo netstat -plunt | grep mysql

tcp        0      0 127.0.0.1:3306        0.0.0.0:*         LISTEN      3356/mysqld</pre><p>كما ترى فإن الخدمة قيد التشغيل على هذا الحاسوب، عندما تبحث عن خدمة قُم بالتأكد من أنّك تعرف الاسم الذي تعمل تحته هذه الخدمة. وكبديل لهذا ابحث عن المنفذ الذي تعمل الخدمة عليه إن كنتَ تعلم هذا، ابحث في توثيق documentation قاعدة بياناتك لكي تجد المنفذ الافتراضي الذي تعمل عليه أو تحقق من ملفات إعدادات الضبط.</p><h2 id="-">إن كنتَ تملك قاعدة بيانات في الخلفية، فهل يستطيع موقعك الاتصال بنجاح إليها؟</h2><p>الخطوة التالية التي يجب أن تأخذها إن كنت تحاول استكشاف الأخطاء مع وجود قاعدة بيانات في الخلفية هي أن ترى إن كان بإمكانك الاتصال بها بشكلٍ صحيح، يعني هذا عادةً التحقق من الملفات التي يقرؤها موقعك لكي يجد معلومات قاعدة البيانات.</p><p>على سبيل المثال في موقع WordPress يتم تخزين إعدادات اتصال قاعدة البيانات في ملف يُدعى <span style="font-family:courier new,courier,monospace;">wp-config.php</span> ، تحتاج للتحقق من أنّ DB_NAME ، DB_USER و DB_PASSWORD صحيحة لكي يتمكن موقعك من الاتصال بقاعدة البيانات. </p><p>بإمكانك اختبار إذا ما كان الملف يملك المعلومات الصحيحة بمحاولة الاتصال إلى قاعدة البيانات يدويًّا باستخدام ما يلي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">mysql -u DB_USER_value -pDB_PASSWORD_value DB_NAME_value</pre><p>إن لم تتمكّن من الاتصال باستخدام القيم التي وجدتها في الملف فربّما تحتاج إلى إنشاء الحسابات وقواعد البيانات أو تعديل أذونات الوصول لقاعدة بياناتك.</p><h2 id="-script-processor-">هل تمّ ضبط خادوم الوِيب لديك لكي يمرر محتوىً ديناميكيًا إلى معالج نصوص Script Processor؟</h2><p>إن كنت تستخدم قاعدة بيانات في الخلفية، فأنت بكل تأكيد تستخدم لغة برمجة مثل PHP لكي تعالج طلبات للمحتوى الديناميكي، تجلب المحتويات من قاعدة البيانات وتقديم النتائج. إن كانت هذه هي الحالة تحتاج للتأكد من أن خادوم الوِيب لديك مُعَد بشكل صحيح لكي يمرر الطلبات إلى معالج النصوص.</p><p>يعني هذا بشكل عام في Apache التأكد من تنصيب وتمكين mod_php5، بإمكانك فعل هذا على Ubuntu أو Debian بكتابة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo apt-get update
sudo apt-get install php5 libapache2-mod-php5
sudo a2enmod php5</pre><p>وفي أنظمة CentOS و Fedora يجب كتابة ما يلي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo yum install php php-mysql
sudo service httpd restart</pre><p>ولكنّ هذا معقّد أكثر قليلًا في Nginx، حيث أنّه لا يملك وحدة PHP ليتمّ تمكينها، لذلك نحتاج أن نتأكد من تنصيب وتمكين php-fpm في إعدادات الضبط.</p><p>على خادوم Ubuntu أو Debian تأكد أنّه تم تنزيل العناصر بكتابة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo apt-get update
sudo apt-get install php5-fpm php5-mysql</pre><p>تستطيع فعل هذا على CentOS أو Fedora بكتابة:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo yum install php-fpm php-mysql
</pre><p>بما أنّ معالج PHP ليس جزءًا من Nginx تحتاج أن تذكر له صراحةً أن يمرر ملفات PHP، اتبع الخطوات الأربعة من <a href="https://academy.hsoub.com/devops/web-servers/nginx/%D8%AA%D9%86%D8%B5%D9%8A%D8%A8%D8%8C-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D9%88%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-nginx-%D9%83%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D9%88%D9%8A%D8%A8-r1/">هذا الدليل لتتعلم كيف تضبط إعدادات Nginx</a> لكي يمرر ملفات PHP إلى php-fpm، يجب عليك أيضًا أن تلقي نظرة على المقطع من الخطوة الثالثة الذي يتعامل مع إعداد معالج PHP، يجب أن يكون هذا مماثلًا إلى حدٍّ كبير بغض النظر عن توزيعتك.</p><h2 id="-">إن فشل كل هذا تحقق من السّجلات مرّة أخرى</h2><p>يجب أن يكون التحقق من السّجلات خطوتك الأولى، ولكنّه من الجيد أن يكون أيضًا خطوتك الأخيرة قبل أن تطلب المزيد من المساعدة.</p><p>إن بذلت قصارى جهدك في استكشاف الأخطاء بنفسك وتحتاج بعض المساعدة (من صديق، بفتح تذكرة مساعدة، إلخ...) ستحصل على مساعدة بشكل أسرع بتزويد ملفات السجل ورسائل الأخطاء، حيث سيجد مدراء النظم الخبيرون غالبًا فكرة جيّدة عمّا يحصل إن أعطيتهم هذه القطع من المعلومات التي يحتاجونها.</p><h2 id="-">الخاتمة</h2><p>آمل أن تكون نصائح استكشاف الأخطاء هذه قد ساعدتك في تعقب وإصلاح بعضًا من أشيع المشاكل التي يواجهها مدراء النظم عند محاولتهم في تشغيل مواقعهم. إن كنت تملك نصائح إضافية عن أشياء يجب التحقق منها وطرق لحل المشاكل قم بمشاركتهم مع المستخدمين الآخرين في التعليقات.</p><p>ترجمة -وبتصرّف- للمقال  <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-troubleshoot-common-site-issues-on-a-linux-server">How To Troubleshoot Common Site Issues on a Linux Server</a>  لصاحبه Justin Ellingwood.</p>
]]></description><guid isPermaLink="false">69</guid><pubDate>Wed, 10 Jun 2015 10:57:59 +0000</pubDate></item></channel></rss>
