<?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/6/?d=4</link><description>DevOps: &#x62E;&#x648;&#x627;&#x62F;&#x64A;&#x645;</description><language>ar</language><item><title>&#x648;&#x627;&#x62C;&#x647;&#x627;&#x62A; &#x634;&#x628;&#x643;&#x629; &#x627;&#x644;&#x625;&#x646;&#x62A;&#x631;&#x646;&#x62A; &#x648;&#x628;&#x631;&#x648;&#x62A;&#x648;&#x643;&#x648;&#x644;&#x627;&#x62A;&#x647;&#x627; &#x627;&#x644;&#x623;&#x633;&#x627;&#x633;&#x64A;&#x651;&#x629;</title><link>https://academy.hsoub.com/devops/servers/%D9%88%D8%A7%D8%AC%D9%87%D8%A7%D8%AA-%D8%B4%D8%A8%D9%83%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-%D9%88%D8%A8%D8%B1%D9%88%D8%AA%D9%88%D9%83%D9%88%D9%84%D8%A7%D8%AA%D9%87%D8%A7-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D9%91%D8%A9-r64/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_06/networking2.png.1ec435335270cbc97e59b9496dd886b1.png" /></p>

<p id="مقدمة">عرضنا في الجزء الأول من هذا الدّليل <a href="https://academy.hsoub.com/devops/servers/%D9%85%D9%81%D8%A7%D9%87%D9%8A%D9%85-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D9%91%D8%A9-%D9%81%D9%8A-%D8%AA%D9%88%D8%B5%D9%8A%D9%84-%D8%A7%D9%84%D8%B4%D9%91%D8%A8%D9%83%D8%A7%D8%AA-networking-%D8%B9%D9%86%D8%AF-%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-r62/">بعض المفاهيم الأساسيّة في مجال الشّبكات</a>. نستكمل الحديث في هذا المقال بالتطرّق إلى ماهيّة الواجهات في الشّبكة والبروتوكولات المستخدَمة لربط الشّبكات.</p><h2 id="الواجهات">الواجهات</h2><p>الواجهات هي نقاط الاتّصال بالنّسبة لحاسوبك. تُربَط كلّ واجهة بجهاز طرفيّ ملموس أو افتراضيّ.</p><p>توجد عادةً واجهة شبكة قابلة للإعداد لكلّ بطاقة Ethernet أو بطاقة شبكة لا سلكيّة على الخادوم. تُعرَّف واجهة شبكة افتراضيّة تُسمّى loopback (الاسترجاع) أو localhost (المستضيف المحلّي) لكلّ بطاقة شبكة. تُستخدَم هذه الواجهة لتوصيل العمليّات أو التّطبيقات العاملة على نفس الجهاز في ما بينها. تظهر هذه الواجهة في العديد من الأدوات باسم lo.</p><p>يُعدّ مدراء الشّبكات في الغالب واجهة لخدمة البيانات القادمة من شبكة الإنترنت وأخرى للشّبكة المحليّة أو الخاصّة.</p><p>على سبيل المثال، يضبُط مزّودو الخدمات السّحابيّة Cloud services الخواديم الخاصّة الافتراضيّة Virtual private server, VPS للعمل بواجهتيْ شبكة (إضافة إلى الواجهة المحليّة lo): الأولى باسم eth0 مضبوطة لمعالجة البيانات القادمة من الإنترنت، والثّانيّة eth1 للاتّصال بالشّبكة الخاصّة بمزوّد الخدمة.</p><h2 id="البروتوكولات">البروتوكولات</h2><p>يعمل ربط الشّبكات عن طريق تركيب مجموعة من البروتوكولات فوق بعضها. بهذه الطّريقة يُمكن إرسال قطعة بيانات باستخدام بروتوكولات مختلفة يغلّف كلٌّ منها الآخر.</p><p>سنعرض لبعض البروتوكولات شائعة الاستخدام مع محاولة شرح الفروق في ما بينها إضافةً إلى السّيّاق والمستوى الّذي تتدخّل فيه.</p><p>نبدأ بالبروتوكولات الّتي تعمل في الطّبقات الدّنيا من الشّبكة ونصعد إلى البروتوكولات الأكثر تجريدًا (الطّبقات العليا).</p><h3 id="التحكم-في-الوصول-إلى-الوسائط-media-access-control-mac">1- التّحكّم في الوصول إلى الوسائط Media Access Control, MAC</h3><p>يُستخدَم لتمييز الأجهزة الطّرفيّة. يُفترَض أن يكون لدى كلّ جهاز طرفيّ عنوان وحيد يُمنَح له عند تصنيعه؛ يُسمَّى عنوان MAC، ويُمكّن من تعريفه ضمن الشّبكة. تسمح عنونة العتاد عن طريق عناوين MAC بالإشارة إلى الجهاز الطّرفيّ بقيمة وحيدة لا تتغيّر حتّى ولو استخدمت البرامج اسمًا آخر لتعريف الجهاز أثناء عملها.</p><p>يعمل بروتوكول التّحكّم في الوصول إلى الوسائط ضمن طبقة الوصلة، وربّما يكون البروتوكول الوحيد من هذا المستوى الّذي ستجد الفرصة للتّعامل معه دوريًّا.</p><h3 id="ابروتوكول-الإنترنت-internet-protocol-ip">2- بروتوكول الإنترنت Internet protocol, IP</h3><p>وهو أحد البروتوكولات الأساسيّة الّتي تعمل عليها شبكة الإنترنت. يعمل بروتوكول الإنترنت مع عناوين IP، وهي فريدة في كلّ شبكة، ممّا يسمح للأجهزة بالتّواصل في ما بينها عبر الشّبكة. يُنفَّذ ابروتكول الإنترنت على مستوى طبقة التّوصيل ضمن نموذج TCP/IP.</p><p>يجب عند ربط الشّبكات في ما بينها، توجيه البيانات عند عبورها حدود الشّبكة. يفترض ابروتكول الإنترنت أنّ الشّبكة غير موثوقة؛ ووجود مسارات متعدّدة يُمكن التّغيير ديناميكيًّا بينها للوصول إلى الوجهة.</p><p>يُنفَّذ ابرتوكول IP عمليًّا بصيّغ عديدة أشهرها اليوم هو الإصدار الرّابع من البروتوكول IPv4، إلاّ أنّ الإصدار السّادس IPv6 يزداد شعبيةً يومًا بعد يوم نظرًا للشّح المتزايد في عناوين الإصدار الرابع المتوفّرة، والتّحسينات المُضافة إلى إمكانيّات البروتوكول.</p><h3 id="ابروتوكول-رسائل-التحكم-في-الإنترنت-internet-control-message-protocol-icmp">3- بروتوكول رسائل التّحكّم في الإنترنت Internet control message protocol, ICMP</h3><p>يُستخدَم لإرسال رسائل بين الأجهزة الطّرفيّة للإشعار بحالتها من حيث التّوفّر ووجود أخطاء وطبيعتها. تُستخدَم حزم ICMP في أدوات تشخيص الشّبكة مثل <code>traceroute</code> و<code>ping</code>.</p><p>تُرسَل حزم ICMP عادةً عند ما تواجه حزمة من نوعيّة أخرى مشكلة أثناء النّقل، أيّ أنّ حزم ICMP هي في الواقع آليّة للتّعليق على الاتّصالات عبر الشّبكة.</p><h3 id="ابروتوكول-التحكم-في-الإرسال-transmission-control-protocol-tcp">4- بروتوكول التّحكّم في الإرسال Transmission control protocol, TCP</h3><p>يُؤسّس بروتوكول TCP لاتّصالات موثوقة ويعمل في طبقة النّقل من نموذج TCP/IP.</p><p>يغلّف بروتوكول TCP البياناتِ ضمن حزم ثمّ يرسلها إلى المستقبِل على الطّرف الآخر من الاتّصال عبر الوسائل المتوفّرة في الطّبقات الأدنى. يتأكّد ابروتوكول TCP في الطّرف المستقبل من عدم وجود أخطاء أثناء النّقل وقد يُعيد طلب بعض الحزم ثمّ يُجمّع البيانات في رسالة واحدة لإرسالها إلى طبقة التّطبيق.</p><p>يُنشئ بروتوكول TCP، قبل البدء بنقل البيانات، اتّصالًا عبر آليّة تُعرَف بالمصافحة الثّلاثية Three-way handshake. تمكّن هذه الآلية طرفيْ الاتّصال من الإقرار باستلام الطّلبات والاتّفاق على طريقة لضمان موثوقيّة البيانات. بعد اكتمال نقل البيانات يُنهى الاتّصال عبر آليّة مشابهة تُدعَى المصافحة الرّباعيّة.</p><p>تعتمد الكثير من استخدامات الإنترنت على بروتوكول TCP. نذكر منها الويب WWW، نقل الملفّات عبر FTP، والبريد الإلكتروني. يُمكن القول دون كثير من المجازفة أنّ الإنترنت الّتي نعرفها اليوم لم تكن لتوجد لولا ابروتوكول TCP.</p><h3 id="ابروتوكول-مخطط-بيانات-المستخدم-user-datagram-protocol-udp">5- بروتوكول مخطَّط بيانات المستخدِم User datagram protocol, UDP</h3><p>يعمل مثل TCP في طبقة النّقل. الفرق الأساسيّ بين الاثنين أنّ UDP ،على العكس من TCP، لا يضمن موثوقيّة النّقل؛ فلا يتأكّد من استلام الطّرف الآخر في الاتّصال للبيانات. قد يبدو من الوهلة الأولى ألّا فائدة من بروتوكول UDP، فهو لا يوفّر آليّة لضمان الموثوقيّة؛ إلّا أنّه مهمّ جدًّا لتأديّة بعض الوظائف.</p><p>بروتوكول UDP أسرع بكثير من TCP، فهو لا يحتاج للانتظار للتّأكّد من استلام حزمة البيانات، وإعادة إرسالها في حال عدم الاستلام. كما أنّه لا يؤسّس لاتّصال مع وِجهة البيانات بل يكتفي بإلقائها إليه ولا يهتمّ هل يقبلها أم لا. تُفيد سهولة المعاملة الّتي يعرّفها UDP في التّواصل غير المعقَّد مثل طلب موارد على الشّبكة. لا يحتفظ ابروتوكول بمعلومات عن حالة الاتّصال ممّا يجعل منه خيّارًا مناسبًا لإرسال البيانات من جهاز واحد إلى عملاء عديدين في الوقت الحقيقي Real time clients. تجعل هذه الميزات من UDP الخيّار الأمثل لبرامج VoIP (الصّوت عبر ابروتوكول الإنترنت، Voice over IP)، الألعاب، والتّطبيقات الأخرى الّتي لا تحتمل الانتظار.</p><h3 id="ابروتوكول-نقل-النصوص-التشعبية-hypertext-transfer-protocol-http">6- بروتوكول نقل النّصوص التّشعبيّة Hypertext transfer protocol, HTTP</h3><p>يعرَّف هذا البروتوكول على مستوى طبقة التّطبيق، ويكوّن الأساس للتّواصل عبر الويب. يعرّف HTTP دوالّ مختلفة لإخبار النّظام البعيد مالّذي يطلُبه المستخدِم. نذكر منها على سبيل المثال <code>POST</code>، <code>GET</code> و <code>DELETE</code> الّتي تتعامل كلّها مع البيانات المطلوبة ولكنّ بطُرق مختلفة.</p><h3 id="ابروتوكول-نقل-الملفات-file-transfer-protocol">7- بروتوكول نقل الملفّات File transfer protocol</h3><p>يعمل على مستوى طبقة التّطبيق، ويوفّر طريقة لنقل ملفّات كاملة من مستضيف إلى آخر. يجب الانتباه إلى أنّ بروتوكول FTP غير آمن ويجب ألّا يُستخدَم في أي شبكة معروضة للعموم إلّا إذا كان على خادوم لا يقبل سوى تنزيل الملفّات.</p><h3 id="نظام-أسماء-النطاقات-domain-name-system-dns">8- نظام أسماء النّطاقات Domain name system, DNS</h3><p>يُنفَّذ على مستوى طبقة التّطبيق من أجل تعريف آليّة توفّر تسميّات يسهُل تذكّرها للموارد على شبكة الإنترنت. تعطي هذه الآليّة إمكانيّة ربط اسم نطاق بعنوان IP وتسمح بتصفّح موقع عبر إدخال اسمه في المتصفّح. للمزيد راجع مقال <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></p><h3 id="ابروتوكول-الصدفة-الآمنة-secure-shell-ssh">9- بروتوكول الصّدفة الآمنة Secure Shell, SSH</h3><p>يعمل بروتوكول SSH على مستوى طبقة التّطبيق ويُستخدَم للتّواصل مع خادوم بعيد بطريقة آمنة تُعمّي Encrypt البيانات. تعتمد تقنيّات عديدة على SSH نظرًا لتوفّره على التّعميّة من طرف إلى طرف End-to-end وشيوع استخدامه.</p><p>توجد الكثير من البروتوكولات الأخرى المهمّة الّتي لم تُذكَر في هذا الدّرس؛ إلّا أنّ المذكور منها هنا يُعطي نظرة عامّة حول أهم التّقنيّات الّتي تجعل من الإنترنت واقعًا وتسمح للأجهزة بالتّواصل في ما بينها.</p><h2 id="خاتمة">خاتمة</h2><p>يجب أن تُدرك بانتهاء هذا الدّليل بعض المفهيم الأساسيّة لعمل الشّبكات ممّا يمنحك القدرة على فهم كيف تتواصل مختلف عناصر الشّبكات في ما بينها؛ الأمر الّذي يُساعدك على فهم مقالات أخرى عن الموضوع أو مستندات التّوثيق الموجودة في النّظام.</p><p>ترجمة بتصرّف لمقال <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/an-introduction-to-networking-terminology-interfaces-and-protocols">An Introduction to Networking Terminology, Interfaces, and Protocols</a>.</p>
]]></description><guid isPermaLink="false">64</guid><pubDate>Sat, 06 Jun 2015 12:36:00 +0000</pubDate></item><item><title>&#x62A;&#x648;&#x635;&#x64A;&#x644; &#x627;&#x644;&#x634;&#x651;&#x628;&#x643;&#x627;&#x62A; (Networking) &#x644;&#x645;&#x64F;&#x62F;&#x631;&#x627;&#x621; &#x627;&#x644;&#x62E;&#x648;&#x627;&#x62F;&#x64A;&#x645;</title><link>https://academy.hsoub.com/devops/servers/%D8%AA%D9%88%D8%B5%D9%8A%D9%84-%D8%A7%D9%84%D8%B4%D9%91%D8%A8%D9%83%D8%A7%D8%AA-networking-%D9%84%D9%85%D9%8F%D8%AF%D8%B1%D8%A7%D8%A1-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-r62/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_06/netwroking-intro.png.4bbb7ed038801a246ca3e20b15a4ffab.png" /></p>

<p id="مقدمة">يُعدّ إعداد وربط الشّبكات من الأمور المهمّة لكلّ من يريد إدارة الخواديم. ليس إعداد الشّبكات فقط أساسيًّا لتوفير خدمات على الويب ولكنّه يمنح أيضًا إدراكًا يُساعد في تشخيص المشاكل.</p><p>يقدّم هذا الدّليل، المكوَّن من جزأيْن، نظرة عامّة على المصطلحات الأكثر شيوعًا في مجال ربط الشّبكات Networking؛ إذ سيتطرّق إلى المفاهيم القاعديّة، والبروتوكولات الأكثر انتشارًا؛ إضافةً إلى مسؤوليّات الطّبقات Layers الموجودة في الشّبكة وخصائصها.</p><p>رغم أنّ هذا الدّليل مستقلّ عن نظام التّشغيل المُستخدَم، إلّا أنّه سيكون مفيدًا جدًّا عند إضافة خدمات وميزات تستخدم الشّبكة على خادومك.</p><h2 id="مصطلحات-الشبكات">مصطلحات الشّبكات</h2><p>يجب، قبل الدّخول في عمق الموضوع، تعريفُ بعض المصطلحات الشّائعة الّتي ستقرأها في هذا الدّليل أو أيّ دليل آخر أو توثيق يتعلّق بربط الشّبكات.</p><ul><li><p>اتّصال Connection: يُحيل الاتّصال، ضمن مجال الشّبكات، إلى أجزاء مترابطة من المعلومات تُنقَل عبر الشّبكة. يُستنتج من ذلك أنّ الاتّصال عمومًا يُنشَأ قبل الشّروع في نقل البيانات (باتّباع إجراءات مُعرَّفة في ابروتوكول)، ثمّ يُفكَّك - أي الاتّصال - بعد الانتهاء من نقل البيانات.</p></li><li><p>حزمة Packet: وهي الوحدة الصّغرى المنقولة عبر الشّبكة. تغلّف الحزمُ قطعَ البيانات لنقلها من طرف إلى آخر أثناء التّواصل عبر الشّبكة.</p></li></ul><p>لدى الحزمة ترويسة Header تحوي معلومات عن الحزمة؛ منها: المصدَر والوِجهة، الختم الزّمنيّ Timestamp، القفزات Hops (أجزاء المسار بين المصدَر والوِجهة)،… إلخ. بينما يحوي الجزء الأكبر من الحزمة البيانات الفعلية المنقولة، ويُسمَّى أحيانًا بالمتن Body أو الحمولة Payload.</p><ul><li>واجهة شبكة Network interface: يُمكن أن تُحيل واجهة شبكة إلى أيّ نوع من الرّبط بين البرمجيّات Software والعتاد Hardware. على سبيل المثال، إذا كانت لدى الخادوم بطاقتا شبكة، فيُمكن التّحكّم في كلّ واحدة منهما وإعدادها بشكل مستقلّ عن طريق إعداد الواجهة المرتبطة بها.</li></ul><p>يُمكن أن تكون واجهة الشّبكة مرتبطة بجهاز طرفيّ Device ملموس، أو أن تكون تمثيلًا لواجهة افتراضيّة. الجهاز الطّرفي loopback (يُستخدم للتّخاطب بين البرامج الموجودة على نفس الجهاز) مثال على الواجهات الافتراضيّة.</p><ul><li><p>شبكة منطقة محليّة Local area network,LAN: يُطلَق عليها أحيانًا الشّبكة المحليّة. تُشير إلى شبكة - أو جزء من شبكة - لا يُتاح لعموم المستخدمين عبر الإنترنت الوصول إليها. الشّبكة الموجودة في المنزل أو المكتب مثال على الشّبكات المحليّة.</p></li><li><p>شبكة واسعة Wide area network, WAN: وتعني شبكة أكثر اتّساعًا بكثير من شبكة محليّة. يُستخدَم مصطلح الشّبكة الواسعة أحيانًا للدّلالة على شبكة الإنترنت ككلّ، رغم أنّه يُشير في الأصل إلى الشّبكات الواسعة والمتفرّقة عمومًا.</p></li></ul><p>إذا وُصِفت واجهة بأنّها متّصلة بشبكة واسعة (WAN) فالمقصود - عادةً - هو أنّها متّصلة بالإنترنت.</p><ul><li>ابروتوكول Protocol: البروتوكول هو مجموعة من القواعد والمعايير Standards الّتي تعرّف لغةً يُمكن للأجهزة الطّرفيّة استخدامُها للتّخاطب. تُستخدَم ابروتوكولات عديدة في ربط الشّبكات، وتُنفَّذ عادةً على هيئة طبقات مختلفة.</li></ul><p>أمثلة على ابروتوكولات المستويات الدّنيا: IP، UDP ، TCP وICMP. الأمثلة التّاليّة هي لتطبيقات مبنيّة على طبقات من البروتكولات الأدنى مستوى: HTTP (للوصول إلى صفحات الويب)، TLS/SSL، SSH وFTP.</p><ul><li><p>منفذ Port: المنفذ هو عنوان ضمن الجهاز يُمكن ربطه ببرنامج محدّد. المنفذ ليس واجهة ملموسة أو موقِعًا، بل هو طريقة تجعل من الجهاز (الخادوم) قادرًا على التّواصل باستخدام أكثر من تطبيق.</p></li><li><p>جدار ناريّ Firewall: الجدار النّاريّ هو برنامج يُقرّر السّماح لحركة البيانات - القادمة إلى الخادوم أو الخارجة منه - بالمرور أو يمنعها من ذلك. يعمل الجدار النّاري اعتمادًا على قواعد تحدّد نوعيّة البيانات المقبولة والمنافذ المسموح للبيانات بالمرور عبرها. تحظر الجدران النّارية عادةً منافذ الخادوم غير المستخدمة من طرف أيّ تطبيق.</p></li><li><p>ترجمة عناوين الشّبكة Network address translation, NAT: وهي طريقة لإرسال الطّلبات القادمة إلى خادوم توجيه Routing إلى الأجهزة الطّرفيّة المُناسبة أو إلى الخواديم داخل الشّبكة المحليّة الّتي لديها معلومات عن وِجهة الطّلبات. تُستخدم ترجمة عناوين الشّبكة في الشّبكات المحليّة لتوجيه طلبات قادمة على نفس عنوان IP إلى الخواديم الخلفيّة المناسبة.</p></li><li><p>الشّبكات الخاصّة الافتراضيّة Virtual private network, VPN: الشّبكات الخاصّة الافتراضيّة هي طريقة لتوصيل شبكات محليّة مختلفة عبر الإنترنت، مع الحفاظ على الخصوصيّة. تُستخدم هذه الطّريقة لتوصيل أنظمة متباعدة كما لو كانت في نفس الشّبكة المحليّة، لأسباب أمنيّة غالبًا.</p></li></ul><p>يجب أن تكون لديك الآن نبذة عن المفاهيم الأساسيّة في مجال ربط الشّبكات. توجد مصطلحات أخرى عديدة، يُمكن أن تُصادفك، لم تُذكَر في اللّائحة أعلاه. سنشرح مصطلحات أخرى في هذا الدّليل فورَ احتيّاجنا إليها.</p><h2 id="طبقات-الشبكة">طبقات الشّبكة</h2><p>تُقدّم الشّبكات غالبًا وفق بنيتها الأفقيّة، بين المستضيفات Hosts؛ إلّا أنّ تنفيذ الشّبكة يتمّ وفقا لطبقات على مستوى حاسوب أو حواسيب عدّة.</p><p>يعني عملُ الشّبكات على طبقات وجودَ تقنيّات متعدّدة تُبنى كلّ واحدة منها فوق الأخرى من أجل أن يعمل التّواصل بطريقة سلِسة. تُجرِّد Abstract كلُّ طبقة البياناتِ الخامّ القادمة من الطّبقة الأدنى، تجرّدها أكثر وتجعل من التّعامل معها أسهل بالنّسبة للتّطبيقات والمستخدمين. يُساعد تنظيم الشّبكة على طبقات في تسهيل استخدام الطّبقات الدّنيا بطرُق جديدة دون بذل الجهد في تطوير ابروتوكولات وتطبيقات تتعامل مع صيّغ البيانات الموجودة في هذه الطّبقات.</p><p>تختلف طريقة وصف تخطيط طبقات الشّبكة كثيرًا حسب النموذج Model المستخدَم. لا يتغيّر المسار الّذي تأخذه البيانات في الشّبكة رغم اختلاف النّماذج.</p><p>تبدأ البيانات رحلَتها، عند إرسالها من الجهاز، من قمّة كومة Stack الطّبقات متّجهة إلى الطّبقات الدّنيا. يحدُث نقل البيانات بين الأجهزة فعليًّا في المستوى الأدنى. تُعيد البيانات بعد النّقل رحلتها عبر طبقات الجهاز المستقبِل ولكن في الاتّجاه المعاكس: من الطبقة الدّنيا إلى القمّة.</p><p>تُضيف كلّ طبقة غلافًا على حزمة البيانات عندما تصل إليها من الطّبقة الأعلى منها، وهو ما يُساعد الطّبقات المواليّة لها في معرفة ما يتوجّب عليها فعلُه بالبيانات. عند الاستقبال تنزع الطّبقة على الجهاز المستقبِل غلاف الطّبقة المكافئة لها على الجهاز المُرسِل.</p><h3 id="نوذج-osi">1- نموذج OSI</h3><p>نموذج OSI (اختصار ل Open Systems Interconnect: شبكة وصل الأنظمة المفتوحة) هو أحد الطُّرُق الأولى لوصف الطّبقات المختلفة في الشّبكة.</p><p>يُعرّف نموذج OSI سبعَ طبقات هي:</p><ul><li><p>التّطبيق Application: وهي الطّبقة الّتي يتفاعل معها المستخدمون وتطبيقات المستخدمين. يكثُر استخدام مصطلحات مثل توفّر الموارد Availability of resources، شركاء للتّخاطب معهم، مزامنة البيانات Data synchronization لوصف الاتّصال على هذا المستوى.</p></li><li><p>التّقديم Presentation: طبقة التّقديم هي المسؤولة عن تعيين الموارد وتعريف السّيّاق Context. تُستخدم لترجمة بيانات المستويات الأدنى إلى صيغة يُمكن للتّطبيقات التّعامل معها.</p></li><li><p>الجلسة Session: وهي مُداوِل Handler الاتّصال: تُنشئ، تُحافظ على، وتنهي الاتّصال بين المُتخاطبَيْن بطريقة مستمرّة.</p></li><li><p>النّقل Transport: مسؤوليّتها إحالة اتّصال موثوق للطّبقات الموجودة فوقها (التّطبيق، التّقديم، والجلسة). تعني موثوقيّةُ الاتّصال في هذا الإطار القدرةَ على التّحقّق من وصول كلّ جزء من البيانات سليمًا إلى الطّرف الآخر من الاتّصال.</p></li></ul><p>يُمكن لهذه الطّبقة إعادة إرسال البيانات المفقودة أو المشوَّهة كما أنّ بإمكانها إبلاغ الأجهزة البعيدة بتسلّم البيانات القادمة منها.</p><ul><li><p>الشّبكة Network: تُستخدَم هذه الطّبقة لتوجيه البيانات بين مختلف العُقَد Nodes الموجودة في الشّبكة. تسخدم طبقة الشّبكة عنواين لمعرفة الجهاز الّذي ستُرسَل إليه البيانات. يُمكن لهذه الطّبقة أيضًا تقسيمُ الرّسائل ذات الحجم الكبير إلى قطع أصغر تُجمَّع على الطّرف الآخر من الاتّصال - بعد استلامه لها - لإنشاء الرّسالة الأصليّة.</p></li><li><p>وصلة البيانات Data link: تُنفَّذ هذه الطّبقة بحيث تُنشئ وتُحافظ على وصلات موثوقة بين مختلف العُقد والأجهزة الموجودة في الشّبكة باستخدام اتّصالات ملموسة.</p></li><li><p>الاتّصال الملموس Physical: وهي الطّبقة المسؤولة عن معالجة الأجهزة الطّرفية الفعليّة المُستخدَمة للاتّصال. تستدعِي هذه الطّبقةُ البرنامجَ الّذي يُدير الاتّصالات الملموسة والعتاد (مثل Ethernet).</p></li></ul><p>توجد إذن العديد من الطّبقات الّتي يُمكن الحديث عنها انطلاقًا من قربها من العتاد والوظيفة الّتي تقدّمها.</p><h3 id="نوذج-tcpip">2- نموذج TCP/IP</h3><p>يشيع استخدام تعبير حزمة ابروتوكلات الإنترنت Internet protocol suite للحديث عن هذا النّموذج الأسهل والأكثر تبنيًّا. يُعرِّف نموذجُ TCP/IP أربع طبقات، يتداخل بعضٌ منها مع طبقات نموذج OSI:</p><ul><li>التّطبيق: وهي الطّبقة المسؤولة - في هذا النّموذج - عن إنشاء وإرسال بيانات المستخدِم بين التّطبيقات. يُمكن أن توجد التّطبيقات على أنظمة متباعدة، ويجب أن تظهر وكأنّها تعمل محلّيًّا لدى المستخدِم.</li></ul><p>يوصف الاتّصال بأنّه يحدُث بين النّظراء Peers.</p><ul><li><p>النّقل: وهي الطّبقة المسؤولة عن الاتّصال بين العمليّات Processes. يستخدِم هذا المستوى من الشّبكة المنافذَ لعنونة مختلف الخدمات. يُمكن لطبقة النّقل إنشاء اتّصالات موثوقة أو غير موثوقة حسب نوعيّة البروتوكول المستخدَم.</p></li><li><p>التّوصيل Internet: مسؤوليّتها نقل البيانات من عقدة على الشّبكة إلى أخرى. تعرف هذه الطّبقة طرفيْ الاتّصال ولكنّها لا تهتمّ بالاتّصال الفعليّ المُستخدَم للانتقال من طرف إلى آخر. تُعرَّف عناوين IP على هذا المستوى بوصفها طريقة للوصول إلى الأنظمة البعيدة.</p></li><li><p>الوصلة Link: تُنفّذ طبقة الوصلة مخطَّط الشّبكة المحليّة الّذي يسمح لطبقة التّوصيل بتقديم واجهة بعناوين. تنشئ هذه الطّبقة الاتّصالات بين العقد المتجاورة بهدف إرسال البيانات بينها</p></li></ul><p>نموذج TCP/IP أكثر تجريدًا وسلاسة من سابقه؛ ممّا جعله أكثر سهولةً للتّنفيذ وبالتّالي الطريقة الأكثر انتشارًا لتقسيم الطّبقات في الشّبكات.</p>
]]></description><guid isPermaLink="false">62</guid><pubDate>Wed, 03 Jun 2015 14:33:12 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x651;&#x629; &#x62A;&#x62B;&#x628;&#x64A;&#x62A; &#x648;&#x625;&#x639;&#x62F;&#x627;&#x62F; &#x627;&#x644;&#x630;&#x651;&#x627;&#x643;&#x631;&#x629; &#x627;&#x644;&#x645;&#x64F;&#x62E;&#x628;&#x651;&#x626;&#x629; (Memcache) &#x639;&#x644;&#x649; Ubuntu</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D9%91%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D9%84%D8%B0%D9%91%D8%A7%D9%83%D8%B1%D8%A9-%D8%A7%D9%84%D9%85%D9%8F%D8%AE%D8%A8%D9%91%D8%A6%D8%A9-memcache-%D8%B9%D9%84%D9%89-ubuntu-r47/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_05/memcached-ubuntu.png.77eed6590e8d5a667b8e4b70cfab86a2.png" /></p>

<div id="preview-contents"><div id="wmd-preview" class="preview-content">يزداد نمو المواقع يومًا بعد يوم، ومنه إلى ازديار في نسبة مرور البيانات (traffic)، الأمر الّذي من شأنه أن يزيد من الضغط على قواعد البيانات، وباعتبار أنّ قواعد البيانات هي عنق الزجاجة لأداء أي موقع، فعليه يجب أنّ يتمّ إعدادها بشكل مُناسب لِتتولّى الضغط العالي بشكل يُلائم مُتطلّبات العمل.</div><div id="wmd-preview-section-22"><p>يُمكن اعتبار تقنيّة <strong>memcached</strong> أحد الطّرق العمليّة في رفع معدّل تخبئة الكائنات في ذاكرة النظام، فهي نظام يعمل على تخزين البيانات وبشكلٍ مؤقّت في الذّاكرة على أن يتمّ استدعائها من الذّاكرة بدلًا من قاعدة البيانات، بحيث تكون هذه البيانات جاهزةً إلى الطلب التّالي ومن الذّاكرة، الأمر الّذي يزيد من سرعة الاستجابة وبشكلٍ ملحوظ.</p><p>سيتناول هذا الشرح كيفيّة تنصيب وإعداد الذّاكرة المُخبّئة على الخادوم Ubuntu 14.04، ومناقشة ما يلزم من تفاصيل.</p></div><div id="wmd-preview-section-23" class="wmd-preview-section preview-content"><h2 id="متطلبات-العمل">مُتطلّبات العمل</h2><p>قبل بدء العمل، يجب توفّر مُستخدِم ذو صلاحيات وصول عالية، لتطبيق مُحتويات هذه الدليل.</p></div><div id="wmd-preview-section-24" class="wmd-preview-section preview-content"><h2 id="تنصيب-memcached-وباقي-المقومات-المطلوبة">تنصيب Memcached وباقي المُقَوِّمات المطلوبة</h2><p>يُمكن تنصيب كافة المُقَوِّمات (components) اللازمة لبدأ العمل من مستودعات <code>أبونتو</code> حيثُ أنّه يوفّرها جميعها.</p><p>سيتمّ أولًا تحديث الحزم المحلّيّة، ومن ثمّ تنصيب باقي البرامج</p><p>سيتمّ تنصيب <code>memcached</code>، بالإضافة إلى قواعد البيانات <strong>MySQL</strong>، ولغة <strong>PHP</strong> لتتولّى عمليّة الوساطة مع قواعد البيانات، وكما سيتمّ الحاجة إلى تنصيب تَوْسِعَة/إضافة (extension) للغة <strong>PHP</strong> لِتتولّى عمليّة الربط مع <strong>الذّاكرة المُخبّئة</strong> (memcached):</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo apt-get update
sudo apt-get install mysql-server php5-mysql php5 php5-memcached memcached</pre><p>يجب الانتباه هنا إلى توفّر <em>توسعتان</em> من <code>الذّاكرة المخبّئة</code> الخاصّة بلغة <strong>PHP</strong>، تحمل الأولى الاسم <strong>php5-memcache</strong>، وتحميل الثّانية الاسم <code>php5-memcached</code>، -حرف “d” الإضافي في الثّانية-سيتمّ الاعتماد على الإضافة الثّانية في هذا الشرح بسبب استقرارها، وتقديمها إلى مساحة أكبر من الخيارات والمزايا.</p><p>إنّ لم تكن قواعد البيانات منصّبة من قبل، فإن المُنصب سيَطلب اختيار وتأكيد كلمة مرور حساب المُدير.</p><p>ويكون بهذا قد تمّ تنصيب ما سيتمّ الحاجة له خلال الشرح.</p></div><div id="wmd-preview-section-25" class="wmd-preview-section preview-content"><h2 id="اختبار-تنصيب-الذاكرة-المخبئة">اختبار تنصيب الذّاكرة المُخبّئة</h2><p>قد يبدو الأمر صعب التصديق، ولكن بهذا الإعداد البسيط فإن <code>الذّاكرة المُخبئة</code> أصبحت جاهزة للعمل، ويُمكن اختبارها بطرقٍ عدّة.</p><p>تُعتبر الطريقة الأولى سهلة إلى حدٍّ ما، حيث من المُمكن فقط سؤال <strong>PHP</strong> إن كانت تعلم حول تَوْسِعَة <strong>memcached</strong>، وفيما إذا كانت مُفعّلة أو لا، وذلك عبر إنشاء صفحة <strong>PHP info</strong> المعروفة.</p><p>سيتمّ إنشاء ملف بالاسم <strong>info.php</strong> في المسار الجذر لخادوم الوب، والّذي سيكون <strong>/var/www/html</strong> على اعتبار أنّ خادوم الوب هو <strong>Apache</strong>:</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">sudo nano /var/www/html/info.php</pre><p>سيتمّ كتابة السطور التّالية في هذا الملفّ، والّتي من شأنها استدعاء دالّة (<strong>PHP function</strong>)، والّتي من شأنها أنّ تجمع وتطبع معلومات حول الخادوم بصفحة ويب مُنسقة بشكل مقروء ومُبسّط.</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">&lt;?php
  phpinfo();
?&gt;</pre><p>يُمكن الآن زيارة خادوم الوب متبوعًا بـ <strong>/info.php</strong>، وبعد التدرّج في الصفحة إلى القسم الخاص بـ “memcached”، سيكون هناك معلومات مُشابهة إلى التّالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">http://server_domain_name_or_IP/info.php</pre><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_05/php_info.png.02abb177c9a15d44849b07e35c72d838.png"><img data-fileid="1897" class="ipsImage ipsImage_thumbnailed" alt="php_info.thumb.png.fdb19cb7e1130c3edf041" src="https://academy.hsoub.com/uploads/monthly_2015_05/php_info.thumb.png.fdb19cb7e1130c3edf041e21c8365dfc.png"></a></p><p>تشير المعلومات السابقة إلى أنّ تَوْسِعَة <strong>memcached</strong> مُفعّلة، وقد تمّ ربطها مع خادوم الوب.</p><p>يُمكن أيضًا اختبار فيما إذا كانت خدمة <strong>memcached</strong> تعمل عن طريقة ترشيح العمليات الحاليّة باستخدام الأداة <strong>grep</strong>:</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">ps aux | grep memcached</pre><p>يعرض الأمر السابق معلومات على الشكل التّالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">memcache  6584  0.0  0.0 327448  3004 ?        Sl   14:07   0:00 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1
demouser  6636  0.0  0.0  11744   904 pts/0    S+   14:29   0:00 grep --color=auto memcached</pre><p>وكما هو الأمر دائمًا مع خدمات أنظمة <code>لينكس</code> فيمكن إيقاف، تشغيل، أو إعادة تشغيل أي خدمة، فالإعادة تشغيل خدمة <code>memcached</code> يُمكن تنفيذ الأمر التّالي:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">sudo service memcached restart</pre></div><div id="wmd-preview-section-26" class="wmd-preview-section preview-content"><h2 id="اختبار-الذاكرة-المخبئة">اختبار الذّاكرة المُخبّئة</h2><p>بعد أن تمّ التأكّد من عمل <code>الذّاكرة المُخبّئة</code>، وأن تَوْسِعَة <strong>PHP</strong> مُتصلة بها ومُفعّلة، فمن المُمكن تجربة استخدامها في تخبئة/تخزين بعض البيانات.</p><p>سيتمّ كتابة شيفرة/سكريبت <strong>PHP</strong> آخر لذلك، وسيكون أكثر تعقيدًا من سابقه:</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">sudo nano /var/www/html/cache_test.php</pre><p>سيتمّ تغليف الشيفرة بوسم <strong>PHP</strong>:</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">&lt;?php
?&gt;</pre><p>سيتمّ إنشاء حالة/نموذج (instance) من كائن <strong>Memcached</strong>، وتخزينه في مُتغيّر، ومن ثُمّ سيتمّ تعريف المَوضع الّذي يُمكّن هذا الكائن من الاتصال بخدمة <strong>memcache</strong>، والّتي تعمل على المنقذ <code>11211</code> بالإعداد الافتراضيّ.</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">&lt;?php
  $mem = new Memcached();
  $mem-&gt;addServer("127.0.0.1", 11211);
?&gt;</pre><p>سيتمّ في الخطوة التّالية إخبار حالة <strong>Memcached</strong>، المُنشئة في الخطوة السابقة، بالاستعلام (query) عن مفتاح (key) من *التخبئة (cache)، يُمكن أنّ يكون اسم المُفتاح اعتباطيًا باعتبار أنّه لم ينشئ بعد، وليكن “<strong>test</strong>”، وستُخزّن نتيجة هذا الطلب في المتغيّر <strong>$result</strong>:</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">&lt;?php
  $mem = new Memcached();
  $mem-&gt;addServer("127.0.0.1", 11211);

  $result = $mem-&gt;get("test");
?&gt;</pre><p>سيتمّ في الخطوة التّالية اختبار فيما إذا تمّ الحصول على أي عائد:</p><ul><li>فلو وجدت <code>memcached</code> مفتاحًا بالاسم “<strong>test</strong>”، سيتمّ طباعته مع قيمته.</li><li>أما لو لم تجد مفتاحًا مُطابقًا، سيتمّ طباعة رسالة تُشير إلى ذلك.</li></ul><p>يجب بعد ذلك تعيين قيمة للمفتاح، ليكون حاضرًا عند السؤال عن البيانات/القيمة في المرّة القادمة، ستجد <strong>memcached</strong> البيانات/القيمة المُعيّنة له.</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">&lt;?php
  $mem = new Memcached();
  $mem-&gt;addServer("127.0.0.1", 11211);

  $result = $mem-&gt;get("blah");

  if ($result) {
     echo $result;
  } else {
     echo "No matching key found.  I will add that now";
     $mem-&gt;set("blah", "I am data!  I am held in memcached") or die("Couldn't save anything to memcached...");
  }
?&gt;</pre><p>أصبحت الشيفرة/السكريبت جاهزةً في هذه المرحلة، وبزيارة الصّفحة باستخدام المُتصفّح، سيتمّ رؤية التّالي:</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">http://server_domain_name_or_IP/cache_test.php</pre><p>ستظهر النتيجة على الشكل التّالي في الزيارة الأولى، والّتي تُشير إلى عدم وجود مُفتاح مُطابق، على أنّ تتم إضافته إلى حين الطلب اللّاحق:</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_05/memcache1.png.986698de5b37664fee3b9321e79de329.png"><img data-fileid="1894" class="ipsImage ipsImage_thumbnailed" alt="memcache1.thumb.png.b129dd95a8b86f3d0264" src="https://academy.hsoub.com/uploads/monthly_2015_05/memcache1.thumb.png.b129dd95a8b86f3d026470af80166aeb.png"></a></p><p>وستكون النتيجة على الشكل التّالي في الزيارة التّالية:</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_05/memcache2.png.8c182a3c02bea99251e5c181c08c0b98.png"><img data-fileid="1895" class="ipsImage ipsImage_thumbnailed" alt="memcache2.thumb.png.84fe0b905cb2ef2e72f3" src="https://academy.hsoub.com/uploads/monthly_2015_05/memcache2.thumb.png.84fe0b905cb2ef2e72f364c562b8d5bd.png"></a></p><p>يُوضّح المثال السابق، كيف استطاعت خدمة <code>memcached</code> على تخبئة المعلومات المُعيّنة كما هو مُبرمجٌ لها أن تفعل.</p></div><div id="wmd-preview-section-27" class="wmd-preview-section preview-content"><h2 id="اختبار-تخبئة-قيم-قواعد-البيانات-بشكل-مؤقت-caching-database-values">اختبار تخبئة قيم قواعد البيانات بشكل مؤقّت (Caching Database Values)</h2><p>أصبح الآن من المُمكن تخزين البيانات في <code>الذّاكرة المُخبئة</code>، ومن المُمكن توضيح المزيد من الأمثلة الواقعيّة، وذلك بالتّطرّق إلى تخبئة النتائج المُستعلمة من قواعد البيانات بشكل مؤقّت في الذّاكرة.</p></div><div id="wmd-preview-section-28" class="wmd-preview-section preview-content"><h3 id="إنشاء-عينة-بيانات-في-mysql">إنشاء عيّنة بيانات في MySQL</h3><p>سيتمّ إعداد قواعد البيانات بشكلٍ مُلائم أولًا، وذلك قبل أنّ يتمّ إنشاء هذه العيّنة</p><p>سيتمّ الاتصال بقواعد البيانات كمُستخدِم مُدير مع إدخال كلمة المرور المُعيّنة خلال تنصيب <strong>MySQL</strong>، ليتمّ استحضار موجّه الأوامر الخاصّ بـ <strong>MySQL</strong>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">mysql -u root -p</pre><p>سيتمّ إنشاء قاعدة بيانات ليتمّ الاختبار عليها، وبعد ذلك البدء في استخدامها:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">CREATE DATABASE mem_test;
USE mem_test;</pre><p>سيتمّ إنشاء مُستخدِم بالاسم “<strong>test</strong>”، وبكلمة مرور “<strong>testing</strong>”، وبصلاحيات وصول إلى القاعدة الّتي تمّ إنشاؤها:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">GRANT ALL ON mem_test.* TO test@localhost IDENTIFIED BY 'testing123';</pre><p>سيتمّ بعد ذلك إنشاء جدول يحتوي على سجل وحيد، سيحمل الجدول الاسم “<strong>sample_data</strong>”، مُحتويًا على عمودان، نصيّ وعددي.</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">CREATE TABLE sample_data (id int, name varchar(30));
INSERT INTO sample_data VALUES (1, "some_data");</pre><p>تمّ بذلك إنشاء بنية قاعدة البيانات اللازمة، وأصبح بالإمكان الخروج من موجّه الأوامر الخاصّ بـ <strong>MySQL</strong>:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">exit</pre></div><div id="wmd-preview-section-29" class="wmd-preview-section preview-content"><h3 id="كتابة-شيفرة-php-لتخبئة-بيانات-mysql">كتابة شيفرة PHP لتخبئة بيانات MySQL</h3><p>أصبح من المُمكن كتابة شيفرة تُحاكي بيئة عمل تطبيق حقيقي في البيئة الحيّة، وذلك بعد أنّ أصبحت قواعد البيانات مجهّزة بشكل مُناسب.</p><p>ستقوم الشيفرة بالبحث عن البيانات في الذّاكرة المُخبّئة والعودة بالبيانات المُتوفّرة، ولكن عند عدم إيجاد أي بيانات، سيتمّ الاستعلام من قواعد البيانات نفسها، ومن ثمّ تخزين النتائج في الذّاكرة المخبّئة من أجل الاستعلامات المُستقبليّة.</p><p>سيتمّ كتابة الشيفرة في المسار الجذر الخاصّ بخادوم الوب، وسيحمل الملفّ الّذي يحتوي هذه الشيفرة الاسم <strong>database_test.php</strong>:</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">sudo nano /var/www/html/database_test.php</pre><p>ستبدأ سُطور الشيفرة بشكل مُشابه إلى الشيفرة السابقة، وذلك بإنشاء <strong>حالة</strong> وإخبارها بمكان خدمة <strong>memcached</strong> على الخادوم، كما تمّ الأمر في المثال السابق:</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">&lt;?php
  $mem = new Memcached();
  $mem-&gt;addServer("127.0.0.1", 11211);
?&gt;</pre><p>ستكون الخطوة التّالية هي تحديد كيف لـ <strong>PHP</strong> الاتصال بقواعد بيانات <strong>MySQL</strong>، وذلك بتمرير بيانات الاعتماد/الدخول الخاصّة بالمُستخدِم المُنشئ سابقًا، ومن ثُمّ تحديد أيًا من قواعد البيانات يجب استخدامها:</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">&lt;?php
  $mem = new Memcached();
  $mem-&gt;addServer("127.0.0.1", 11211);

  mysql_connect("localhost", "test", "testing123") or die(mysql_error());
  mysql_select_db("mem_test") or die(mysql_error());
?&gt;</pre><p>سيتوجّب في الخطوة التّالية بناء الاستعلام، الّذي وظيفته جلب البيانات الموجودة في جدول قاعدة البيانات، وتخزينه في المُتغيّر <strong>$query</strong>.</p><p>سيتمّ بعد ذلك إنشاء مُتغيّر <strong>$querykey</strong> ليخزّن المفتاح الذي ستستخدمه <code>memcached</code> لاسترجاع المعلومات</p><p>سيتمّ بناء هذا المُفتاح بالجمع بين الكلمة “<strong>KEY</strong>”، وبعثرة (hashing) من نوع <strong>md5</strong>، ويضمن ذلك أن كلَّ مُفتاح هو مُفتاح فريد عن الآخر، فعندما يتمّ استخدام هذا الأسلوب مع مجموعة كبيرة من البيانات، وليس كما هو حال هذا المثال المُبسّط، سيضمن ذلك أن أي استعلام مُماثل سيُنتج نفس المُفتاح للطلبات المُستقبليّة.</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">&lt;?php
  $mem = new Memcached();
  $mem-&gt;addServer("127.0.0.1", 11211);

  mysql_connect("localhost", "test", "testing123") or die(mysql_error());
  mysql_select_db("mem_test") or die(mysql_error());

  $query = "SELECT ID FROM sample_data WHERE name = 'some_data'";
  $querykey = "KEY" . md5($query);
?&gt;</pre><p>سيتمّ في الخطوة التّالية إنشاء المُتغيّر <strong>querykey</strong>، ليتمّ تعيينه إلى المُتغيّر <strong>$result</strong> في حال توفّره.</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">&lt;?php
  $mem = new Memcached();
  $mem-&gt;addServer("127.0.0.1", 11211);

  mysql_connect("localhost", "test", "testing123") or die(mysql_error());
  mysql_select_db("mem_test") or die(mysql_error());

  $query = "SELECT name FROM sample_data WHERE id = 1";
  $querykey = "KEY" . md5($query);

  $result = $mem-&gt;get($querykey);
?&gt;</pre><p>سيتمّ عمل اختبار منطقي (جملة شرطيّة)، والّذي من شأنه أن يُحدّد ماذا سيحدث عند <em>وجود</em> نتائج (جواب الشرط true) في <code>الذّاكرة المُخبّئة</code>، وفي حال ذلك سيتمّ طباعة البيانات المسحوبة، وإخبار المُستخدم أنه قد تمّ استدعاء البيانات من <code>الذّاكرة المُخبّئة</code> بشكل مُباشر:</p><pre data-pbcklang="" data-pbcktabsize="" class="ipsCode prettyprint">&lt;?php
  $mem = new Memcached();
  $mem-&gt;addServer("127.0.0.1", 11211);

  mysql_connect("localhost", "test", "testing123") or die(mysql_error());
  mysql_select_db("mem_test") or die(mysql_error());

  $query = "SELECT name FROM sample_data WHERE id = 1";
  $querykey = "KEY" . md5($query);

  $result = $mem-&gt;get($querykey);

  if ($result) {
     print "&lt;p&gt;Data was: " . $result[0] . "&lt;/p&gt;";
     print "&lt;p&gt;Caching success&lt;/p&gt;&lt;p&gt;Retrieved data from memcached!&lt;/p&gt;";
  }
?&gt;</pre><p>سيتمّ في الخطوة التّالية كتابة الحالة البديلة، وستكون عند <em>عدم</em> وجود نتائج (جواب الشرط false)، ولذلك يجب استخدام الاستعلام الذي تمّت صياغته سابقًا لسؤال <strong>MySQL</strong> عن البيانات، ومن ثمّ تخزينها داخل المُتغيّر <strong>$result</strong>، والذي سيكون على شكل مصفوفة (array).</p><p>أصبح من المُمكن بعد ذلك إضافة النتائج إلى <code>الذّاكرة المُخبّئة</code>، بعد توفّر نتيجة الاستعلام، لتكون هذه البيانات مُخبّئة للطلب التّالي، ولذلك سيتمّ تمرير ثلاثة مُعاملات لتعيين الذّاكرة المُخبّئة:</p><ul><li>المفتاح الّذي سيتمّ استخدامه كإشارة مرجعيّة للبيانات، وهو نفس المُفتاح المُنشئ بالمُتغيّر <strong>$querykey</strong>.</li><li>البيانات نفسها، وهي مخزّنة في المُتغيّر <strong>$result</strong> بعد إجراء استعلام <strong>MySQL</strong>.</li><li>مُدّة التخبئة بالثانية.</li></ul><p>سيتمّ تخزين التخبئة لمُدّة ثوانٍ قليلة، في البيئة الحقيقية، سيكون من المُفيد تخبئة المُحتوى لمدّة أطول، ربما دقائق عدّة، خاصّة إذا كان المُحتوى لا يتغيّر بشكل كبير، ولكن لأغراض التجربة، سيتمّ الالتزام بهذه الثواني بدلًا من إعادة تشغيل خدمة <strong>memcached</strong> لتكملة الاختبار.</p><p>بعد ذلك، سيتمّ طباعة رسالة بنتائج الاستعلام، مع إخبار المُستخدِم بطريقة الحصول على البيانات:</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">&lt;?php
  $mem = new Memcached();
  $mem-&gt;addServer("127.0.0.1", 11211);

  mysql_connect("localhost", "test", "testing123") or die(mysql_error());
  mysql_select_db("mem_test") or die(mysql_error());

  $query = "SELECT name FROM sample_data WHERE id = 1";
  $querykey = "KEY" . md5($query);

  $result = $mem-&gt;get($querykey);

  if ($result) {
     print "&lt;p&gt;Data was: " . $result[0] . "&lt;/p&gt;";
     print "&lt;p&gt;Caching success&lt;/p&gt;&lt;p&gt;Retrieved data from memcached!&lt;/p&gt;";
  } else {
     $result = mysql_fetch_array(mysql_query($query)) or die(mysql_error());
     $mem-&gt;set($querykey, $result, 10);
     print "&lt;p&gt;Data was: " . $result[0] . "&lt;/p&gt;";
     print "&lt;p&gt;Data not found in memcached.&lt;/p&gt;&lt;p&gt;Data retrieved from MySQL and stored in memcached for next  time.&lt;/p&gt;";
  }
?&gt;</pre><p>اكتملت الشيفرة بهذا الشكل، وبالمُختصر ما سيحدث هو مُحاولة الحصول على البيانات من <code>الذّاكرة المُخبّئة</code>، واستعراضها عند توفرها، وفي حال الفشل في الحصول على البيانات من <code>الذّاكرة المُخبّئة</code>، سيتمّ التوجّه مُباشرةً لاستعلام قواعد البيانات، ومن ثُمّ تخزين النتائج للطلب التّالي ولفترة ثواني معدودة.</p></div><div id="wmd-preview-section-30" class="wmd-preview-section preview-content"><h3 id="اختبار-الشيفرة">اختبار الشيفرة</h3><p>تمّ الانتهاء من كتابة الشيفرة، وأصبح بالإمكان اختبارها، وذلك عبر التوجّه إلى المُتصفّح واستعراض ملفّ الشيفرة:</p><pre data-pbcklang="php" data-pbcktabsize="" class="php ipsCode prettyprint">http://server_domain_name_or_IP/database_test.php</pre><p>يجب أنّ تكون المُخرجات في الزيارة الأولى على الشكل التّالي:</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_05/memcache3.png.ad9115439804ed7593eeed75c8409e2d.png"><img data-fileid="1896" class="ipsImage ipsImage_thumbnailed" alt="memcache3.thumb.png.a202c53065166d41ec97" src="https://academy.hsoub.com/uploads/monthly_2015_05/memcache3.thumb.png.a202c53065166d41ec976fa2f3759d40.png"></a></p><p>ما أن يتمّ تحديث الصفحة، وقبل انقضاء الثواني العشر، حتّى تَعرض الصفحة رسالة مُختلفة كما في التّالي:</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_05/memcache4.png.2f7bbc4640e855623830c60f8798e557.png"><img data-fileid="1898" class="ipsImage ipsImage_thumbnailed" alt="memcache4.thumb.png.83baf4c91085cdc04aef" src="https://academy.hsoub.com/uploads/monthly_2015_05/memcache4.thumb.png.83baf4c91085cdc04aef2138079165d5.png"></a></p><p>ما إنّ تنقضي الثواني العشر، ستنتهي صلاحيّة المُحتوى المُخبّئ، وسيُحذف من <code>الذّاكرة المُخبّئة</code> (memcached)، وستُعرض الرسالة الأولى الّتي تُشير إلى أنّ البيانات قد تمّ استدعاؤها من قاعدة البيانات بدلًا من الذّاكرة المُخبّئة.</p></div><div id="wmd-preview-section-31" class="wmd-preview-section preview-content"><h2 id="كلمات-أخيرة">كلمات أخيرة</h2><p>يُفترض الآن وبعد الانتهاء من هذا الشرح الحصول على فهم كامل لكيفيّة إعداد الذّاكرة المُخبّئة، وكيف من المُمكن الحفاظ على أداء خادوم الوب، بتجنيبه من إجراء استعلامات مٌتكرّرة على قواعد البيانات للحصول على نفس المُحتوى.</p><p>يجب الانتباه إلى أنّ الشيفرة المُستخدمة في هذا الدليل هي فقط لأغراض الشرح، ولتُعطي فكرة واضحة عن آلية العمل وكيفيّة بناء منظومة كاملة وصحيحة تعتمد على الذّاكرة المُخبئة، واستعلام قواعد البيانات في حال فشلها.</p><p>ترجمة – وبتصرّف – للمقال <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-install-and-use-memcache-on-ubuntu-14-04">How To Install and Use Memcache on Ubuntu 14.04</a> لصاحبه <a rel="external nofollow" href="https://www.digitalocean.com/community/users/jellingwood">Justin Ellingwood</a>.</p></div></div>
]]></description><guid isPermaLink="false">47</guid><pubDate>Sat, 09 May 2015 09:49:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x627;&#x62E;&#x62A;&#x644;&#x627;&#x641; &#x627;&#x644;&#x639;&#x645;&#x644;&#x64A;&#x651; &#x628;&#x64A;&#x646; Apache &#x648; Nginx</title><link>https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D8%A7%D8%AE%D8%AA%D9%84%D8%A7%D9%81-%D8%A7%D9%84%D8%B9%D9%85%D9%84%D9%8A%D9%91-%D8%A8%D9%8A%D9%86-apache-%D9%88-nginx-r42/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_05/apache-vs-nginx.png.5e78e2eb5983d49bbdc8ecb0feb8e7cd.png" /></p>

<div><div><div><div><div><div><div><p>يُعتبر خادوما الويب Apache و Nginx الأكثر شهرةً من بين الخواديم المفتوحة المصدر في عالم الشبكة العنكبوتيّة، على اعتبار أنّهما مسؤولان عن خدمة وتأمين نصف تدفّق البيانات على الإنترنت، وعلى مَقدرة على تولّي مُختلف حجوم الأحمال، والعمل مع برمجيات أخرى في سبيل توفير حزمة من خدمات الويب الشاملة والكاملة لتلبية مُختلف الاحتياجات.</p><p>بينما يَتشارك الخادومان Apache و Ngnix العديد من الميّزات والخاصيّات، فلا يُمكن اعتبارهما مُتشابهان، أو التفكير بأن أحدهما هو بديل عن الآخر، فكل منهما يتفّوق عن الآخر بشيءٍ ما، وعلى مُدير النظام فهم وإدراك لماذا يجب اختيار أحدهما دون الآخر، فهذا الدليل يَهدف إلى مُناقشة كيف أنّ كُل خادوم يَتميّز ويَبرز في شيء ويُخفق في آخر.</p></div><div><h2>مقدّمة عامّة</h2><p>سيتمّ أخذ نظرة سريعة عن تاريخ وبداية المشروعين وخواصّهم العامّة قبل التعمّق في الاختلاف بينهما.</p></div><div><h3>تاريخ خادوم الويب Apache</h3><p>أَنْشَأَ “روبت ماك كول” (Robert McCool) “خادم الـ HTTP أباتشي” (Apache HTTP Server) في عام 1995، وتمّ مُتابعة تطويره تحت مظلّة “مُنشأةُ برمجيات أباتشي” (Apache Software Foundation) مُنذ العام 1999، وكان هذا الخادم هو المشروع الأساسي للمُنشأة والأكثر شهرةً عن باقي البرمجيات، فأصبح ببساطة يُشار إليه بالاسم “Apache”.</p><p>يُعتبر خادم الويب أباتشي الخادم الأكثر استخدامًا على الإنترنت منذ العام 1996، وبسبب هذه الشهرة، استفاد أباتشي من توثيق ودعم باقي مشاريع البرمجيات الأُخرى.</p><p>يَختار مُدراء الأنظمة الخادم أباتشي غالبًا بسبب مرونته، وقُدرته على التحمّل، وتوفّر دعمه العالي والمُنتشر، كما يُحسب له قابليته على التوسّع عبر نظام الوحدات (modules) الديناميكيّة، واستطاعته على مُعالجة عدد كبير من اللغات المُفسّرة (interpreted languages) من دون الحاجة إلى برمجيّة مٌستقلّة وسيطة.</p></div><div><h3>تاريخ خادوم الويب Nginx</h3><p>بَدأ “ايجور سيسيوﭫ” في عام 2002 العمل Nginx للإجابة وحلّ المُشكلة المعروفة بالاسم C10K، والّتي كانت تُشكّل تحدّيًا كبيرًا لخوادم الويب لتُصبح قادرة على تولّي عشرة آلاف اتصال مُتزامن (concurrent) وذلك في تلبية حاجة الويب الحديث، وأُنتجت الإصدارة الأوليّة والمُتاحة للعُموم في عام 2004 مُقدمةً حلًا لهذه المُشكلة، وذلك بالاعتماد على معماريّة مدفوعة بالحالة (event-driven) ولا مُتزامنة.</p><p>انتشر Nginx كالنار في الهشيم مُنذ إصداره، بمُقتضى خفته واستخدامه الخفيف للمَوارد، وقدرته على التوسّع وتحمّل الضغط العالي وبأقل عتاد مُمكن، وتفوّق Nginx بتأمين المُحتوى الثّابت (static content) بسرعة، وبتصميمه لتمرير الطلبات الديناميكيّة (المُتغيّرة) إلى برمجيات أُخرى قادرة على مُعالجة هذا النوع من المُحتوى.</p><p>يختار مُدراء الأنظمة الخادم Nginx غالبًا بسبب استهلاكه الأمثل للمَوارد، واستجابته العالية مع الضغط المتزايد.</p></div><div><h2>معماريّة مُعالجة الاتصال (Connection Handling Architecture)</h2><p>يَكمن الاختلاف الواضح بين أباتشي و Nginx في طريقة كلٍ منهما في مُعالجة الاتصالات وتدفّق البيانات (traffic)، وربّما هذا السبب وراء الاختلاف في طريقة كل من الخادمين في الاستجابة إلى حالة تدفّق البيانات المُختلفة.</p></div><div><h3>وحدات أباتشي (Apache Modules)</h3><p>يقدّم أباتشي تشكيلةً من وحدات المُعالجة المُتعدّدة (multi-processing)، والّتي يُطلق عليها بـ MPMs، والغرض منها تحديد آليّة مُعالجة طلبات العميل، ويَسمح ذلك مُدراء الأنظمة عامّةً بالتبديل بين معماريّة مُعالجة الاتصال بسهولة، والوحدات هي:</p><ul><li><p>mpm_prefork: تَستنسخ وتُوالد هذه الوحدة الخاصّة بالمُعالجة عمليّات (processes) باستخدام سلسلة وحيدة (single thread)، على أنّ تكون كل عمليّة لمُعالجة طلب، ويستطيع كل ابن مُعالجة اتصال واحد في نفس الوقت، وطالما أنّ عدد الطلبات أقل من عدد العمليّات، فستكون هذه الوحدة سريعةً جدًا، ولكن يَنخفض الأداء بسرعة بعد تخطّي الطلبات عدد العمليّات، ولذلك لا يُعتبر هذا النمط بالخيار الجيّد للعديد من السيناريوهات، فكل عمليّة لها تأثير بليغ على استهلاك الذاكرة (RAM)، ولهذا السبب تُصعّب هذه الوحدة من عمليّة التوسّع بطريقة مُلائمة، ومع هذا تبقى هذه الوحدة خيارًا جيّدًا إن تمّ استخدامها مقترنةً مع مُقوّمات (components) أُخرى لم تُبنى بالأساس آخذةً بعين الاعتبار السلاسل (threads)، فلغة PHP ليست سلسلة آمنة (thread-safe)، ولذلك يُنصح بهذه الوحدة باعتبارها الطريقة الوحيدة الآمنة للعمل مع mod_php والّتي هي وحدة من وحدات أباتشي لمُعالجة هذا النوع من الملفّات.</p></li><li><p>mpm_worker: تستنسخ وتُوالد هذه الوحدة عمليّات (processes) كل منها ذات قُدرة على إدارة سلاسل مُتعدّدة (multiple threads)، تستطيع كل واحدة من هذه السلاسل مُعالجة اتصال وحيد، تُعتبر هذه السلاسل أكثر كفاءة من العمليّات، بسبب أنّ هذه الوحدة تتوسّع (scales)، وتتحمّل المزيد من الضغط أفضل من الوحدة prefork MPM، وباعتبار أنّه يوجد سلاسل أكثر من العمليّات، فهذا يعني أيضًا أنّ الاتصالات الجديدة تستطيع مُباشرةً استهلاك واستخدام سلسلةبدلًا من اضطرارها إلى الانتظار لتوفّر عمليّة مُتاحة.</p></li><li><p>mpm_event: تَعمل هذه الوحدة بشكل مُشابه إلى الوحدة worker، ولكنها مُحسّنة لتتولّى اتصالات keep-alive، فعند استخدام الوحدة worker فإن الاتصال سيَحتفظ بالسلسلة (thread) بصرف النظر فيما إذا كان الطلب نشطًا فيما صُنع من أجله ما دام الاتصال محفوظًا نشطًا، فالوحدة mpm_event تتولّى الاتصالات keep-alive بالاحتفاظ جانبًا بسلاسل مكرّسة لمُعالجتها، وبتمرير الطلبات النشطة إلى سلاسل أُخرى، وهذا من شأنه أنّ يُبعد الوحدة من الغوص بطلبات keep-alive، الأمر الّذي يُجيز بتنفيذ الطلبات (execution) بشكل أسرع، وهذا الأسلوب أصبح يعمل بشكل مُستقر مع الإصدار Apache 2.4.</p></li></ul><p>أصبح الأمر أكثر وضوحًا، حيث تقدّم خوادم أباتشي بنية معماريّة مرنة للاختيار بين مُختلف الاتصالات وخوارزمية مُعيّنة في مُعالجة الطلبات، وبُنيت هذه الخيارات في الدرجة الأولى من تطوّر الخادم والحاجة المُتزايدة للاتصالات المُتزامنة لتواكب طبيعة الإنترنت بعد تغيرها وتطوّرها.</p></div><div><h3>آليّة مُعالجة الاتصال في خادوم Nginx</h3><p>قَدِم Nginx إلى عالم خوادم الويب بعد قدوم أباتشي، مَبنيًّا ومُعدًّا لمشاكل الاتصالات المُتزامنة (concurrency) الّتي تواجه المواقع عند التوسّع، مُحمّلًا بهذه المعرفة، صُمّمَ Nginx من جذوره ليستخدم خوارزميّة في مُعالجة اتصالات مدفوعة بالحالة (event-driven)، غير مُستوقفة (non-blocking)، ولا مُتزامِنة.</p><p>يستنسخ ويُوالد Nginx من العمليّات العاملة (worker processes)، ويستطيع كلٍ مِنها مُعالجة آلاف الاتصالات، وتُنجذ العمليّات العاملة ذلك عن طريق تطبيق/تنفيذ آلية حلقيّة سريعة، والّتي تفحص بشكل مُستمر حالات العمليّات (processes events)، وإن فصل المُهمّة الفعليّة عن الاتصالات يسمح لكلعامل بالاهتمام بنفسه باتصال فقط عند بدء حالة جديدة.</p><p>يتموضع كل اتصال مُعالج من قبل العامل ضمن حلقة الحالة (event loop) في مكان تواجد بقية الاتصالات، وتُعالج الأحداث بشكل لا مُتزامن ضمن الحلقة، ليتمّ إنجاز المُهمّة بطريقة غير مُستوقفة (non-blocking)، وعندما يُغلق الاتصال سيتمّ نزعه من الحلقة.</p><p>يَسمح هذا الأسلوب من مُعالجة الاتصال Nginx بتحمّل الضغط العالي بشكل لا يُصدّق وبأقل المَوارد المُتاحة، وباعتبار أنّ الخادم ذو سلسلة وحيدة (single-threaded) ولا تتوالد العمليّات لتُعالج كل اتصال جديد، فإن استهلاك المُعالج (CPU)، والذّاكرة يبقى ثابتًا نسبيّا، حتّى في أوقات الذروة.</p></div><div><h2>كيف يُعالج أباتشي و Nginx المُحتوى الثّابت والمحتوى الديناميكي (المُتغيّر)</h2><p>إن أبرز ما يتمّ النظر إليه عند المُقارنة بين الخادمين هي طريقة كلٍ منهما في التعامل مع طلبات المُحتوى الثّابت (static)، والمُحتوى المُتغيّر (dynamic).</p></div><div><h3>كيف يتعامل أباتشي مع المُحتوى الثّابت والمُتغيّر</h3><p>تستطيع خوادم أباتشي التعامل مع المُحتوى الثّابت باستخدام الطريقة التقليديّة المُعتمدة على الملفّات، ويعود أداء هذه الإجراءات (operations) في الدرجة الأولى على دور ووظيفة أساليب الوحدات (MPM) المشروحة سابقًا.</p><p>يستطيع أباتشي أيضًا مُعالجة المُحتوى الديناميكي (المُتغيّر) بدمج مُعالج اللغة المُراد مُعالجتها داخل كل من نماذجه العاملة (worker instances)، وهذا يَسمح له بتنفيذ المُحتوى الديناميكي داخل خادم الويب نفسه بدون الحاجة إلى الاعتماد على مُقوّمات خارجيّة، ومن المُمكن تفعيل هذه المُعالجات الديناميكيّة (المُتغيّرة) من خلال استخدام وحدات قابلة للتحميل بشكل ديناميكي.</p><p>إن قدرة أباتشي على مُعالجة المُحتوى الديناميكي بشكل داخلي تعني أنّ الإعداد يُصبح أسهل لمُعالجة هذا النوع من المُحتوى، فليس من الضروري تنسيق عمليّة الربط مع برمجيات إضافيّة، وتستطيع الوحدات وبسهولة أنّ تقوم بالتبديل عندما تتغيّر مُتطلّبات المُحتوى.</p></div><div><h3>كيف يتعامل Nginx مع المُحتوى الثّابت والمُتغيّر</h3><p>لا يَملك Nginx بطبيعته أي قدرة على مُعالجة المُحتوى الديناميكي، ولمُعالجة شيفرة PHP وطلبات المُحتوى الديناميكي، فإن على Nginx تمرير الطلبات إلى مُعالج خارجي من أجل التنفيذ (execution) والانتظار ريثما يتم الانتهاء من مُعالجة هذا المُحتوى ليتمّ إعادة إعادته، ومن ثم عرض النتائج على العميل.</p><p>يَنبغي على مُدراء الأنظمة الانتباه إلى أنّ الأسلوب الّذي ينتهجه Nginx يستوجب إعدادًا بينه وبين المُعالج وباستخدام واحدًا من البرتوكولات الّتي يفهمها Nginx أمثال: HTTP, FastCGI, SCGI,uWSGI, memcache، وهذا من شأنه أنّ يُعقّد الأمور بعض الشيء، خصوصًا عند مُحاولة توقّع عدد الاتصالات اللازم السماح بها، حيثُ أنّه سيتمّ استخدام اتصالًا إضافيًا لكل مُعالج يتمّ استدعاؤه.</p><p>من ناحية أخرى، إن هذا الأسلوب يقدّم بعضًا من الأفضليّة، عندما نعلم أنّ مُفسّر المُحتوى الديناميكي غير مُدمج في عمليّة العامل، وتكلفة هذه الطريقة ستُدفع للمُحتوى الديناميكي فقط، وعلى أنّ يُقدّم المُحتوى الثّابت بطريقة مُباشرة، ولا يتمّ الاتصال بالمُفسر إلا عند الحاجة، والجدير بالذكر أنّ أباتشي يستطيع العمل بهذا الأسلوب، ولكن بعمله ذلك سيتخلّى عندها عن بعض ميزاته.</p></div><div><h2>الاختلاف بين الإعداد الموزّع (Distributed) والإعداد المركزي (Centralized)</h2><p>يَعتبر مُدراء الأنظمة الاختلاف الأكبر والبارز بين هذين الخادمين هو فيما إذا كان الإعداد والتخصيص على مُستوى المسار مسموحًا أو لا ضمن مسارات (directories)المُحتوى.</p></div><div><h3>فلسفة Apache في الإعداد</h3><p>يُضمّن أباتشي خيارًا للسماح بالإعداد لكل مسار عن طريق تَفحُّص (inspecting) وتفسير (interpreting) التعليمات أو التوجيهات الموجودة في الملفات المخفيّة داخل مسارات المُحتوى نفسها، وهذه الملفّات معروفة بملفات .htaccess.</p><p>باعتبار أنّ هذه الملفّات تَقطن داخل مسارات المُحتوى نفسها، فعند مُعالجة طلبٍ ما، فإن أباتشي يَفحص كل جزء من مسار الملفّ المطلوب باحثًا عن ملفّ .htaccess ليُطبّق التوجيهات الّتي بداخله، وهذا من شأنه أنّ يسمح للإعداد اللامركزي لخادم الويب، والذي غالبًا ما يُستخدم لإنجاز:</p><ul><li>إعادة كتابة عنوان الموقع (URL rewrites)</li><li>تقييد الوصول (access restrictions)</li><li>التفويض والمُصادقة (authorization and authentication)</li><li>سياسات التخبئة (caching policies)</li></ul><p>بالطبع يُمكن للأمثلة السابقة إعدادها عن طريق ملفّ إعدادات أباتشي الرئيسي، ولكن استخدام ملفات.htaccess يَملك بعض الميزات:</p><ul><li>أوّلًا، باعتبار أنّها تُفسّر في كل مرّة توجد بها مع المسار المطلوب، فهي تُنفّذ مُباشرةً بدون إعادة تحميل الخادم.</li><li>ثانيًا، تجعل من المُمكن السماح للمُستخدِمين غير المصرّح لهم بالتحكم بجانب معيّن من المُحتوى الخاصّة بهم بدون إعطائهم تحكم كامل لملفّ الإعدادات.</li></ul><p>يُقدّم هذا النمط من الإعداد طريقة سهلة ونموذجيّة، وخاصّة لبعض برمجيات الويب، مثل أنظمة إدارة المُحتوى (CMS)، لغرض إعداد بيئتها بدون مَنح إذن وصول إلى ملفّ إعدادات مركزيّ، وكما هو معروف يُستخدم هذا الأسلوب مع مزودات الاستضافة المُشتركة (shared hosting providers) لصون والحفاظ على الإعدادات الرئيسية مع إمكانيّة منح العُملاء أفضليّة التحكّم بمسارات مُعيّنة.</p></div><div><h3>فلسفة Nginx في الإعداد</h3><p>لا يُفسّر Nginx ملفّات .htaccess، ولا يُقدّم أي آليّة للتعامل مع كل مسار من دون استخدام ملفّ إعدادات رئيسي، قد يبدو هذا الأسلوب أقل مرونةً من أسلوب أباتشي، ولكن من ناحية أُخرى فلهذا الأسلوب أفضليته.</p><p>إن عدم الاعتماد على نظام ملفّات .htaccess الخاصّ بالإعداد على مستوى المسارات يُقدّم سرعةً في الأداءً، فخادم أباتشي عليه القيام بتفحّص المسار الجذر لكل طلب يصله، وعند وجود ملفّ أو أكثر خلال عمليّة البحث، يتم قراءة محتوياته وتفسيرها، ولكن Nginx لا يفعل ذلك، فهو يخدم الطلبات بسرعة أكبر بالاعتماد على مكان وحيد للبحث عنه.</p><p>أفضليّة أُخرى مُتعلّقة بالحماية، فإن توزيع ملفّات الإعدادات على مستوى المسارات يوزّع مسؤوليّة الحماية على كل المُستخدِمين، الّذين قد يكونوا في معظم الأحوال غير موثوقون لتولّي هذه المُهمّة بالشكل الأمثل، فعندما يقوم مُدير النظام بتولّي مُهمة التحكم بالخادم ككل، يمنع ذلك من حدوث أخطاء، والتي قد تحدث في حال منح صلاحيات وصول لأطراف أُخرى.</p><p>يجدر الذكر أنّه من المُمكن تعطيل تفسير ملفّات .htaccess’ فيأباتشي`، في حال أنها تُشكل نوعًا من القلق لمُدير النّظام.</p></div><div><h2>الاختلاف بين تفسير الملفّات وتفسير URI</h2><p>لا يقتصر الاختلاف بين الخادومين على ما سبق فقط، فيظهر الاختلاف الآخر في كيفيّة تفسير كلٍ منهما للطلبات (requests) وربطها مع المَوارد المُتواجدة على النّظام.</p></div><div><h3>كيف يُفسر Apache الطلبات</h3><p>يقدّم أباتشي القدرة على تفسير الطلب إما كمَورد فيزيائي (حقيقي) على نظام الملفّات (filesystem) أو عنوان URI الّذي قد يحتاج أسلوب أكثر تجرّد، ويستخدم أباتشي بشكلٍ عام للأسلوب الأول كتل (blocks) وهي إما &lt;Directory&gt; أو &lt;Files&gt;، بينما يستخدم كتل &lt;Location&gt;للمَوارد الأكثر تجرّدًا.</p><p>صُمّم أباتشي من الأساس كخادم ويب، لذلك في مُعظم الأحيان فإن السلوك الافتراضيّ هو تفسير الطلبات كمَوارد نظام ملفّات (filesystem)، حيثُ يبدأ بتتبّع جذر المُستند وإلحاقه بجزئية الطلب متبوعًا باسم المُضيف (host) ورقم المنفذ في مُحاولة لإيجاد الملفّ المطلوب، بمعنى آخر وببساطة، تتمثّل هرميّة نظام الملفّات على الويب كشجرة مُستند.</p><p>يُقدّم أباتشي عددًا من البدائل عندما لا يتوافق الطلب مع نظام الملفّات المقصود، فمثلًا من المُمكن استخدام الموجّه Alias لربط عنوان البديل، مع العلم أنّ استخدام الكتل &lt;Location&gt; هو طريقة للتعامل مع URI نفسها بدلًا من نظام الملفّات، كما يُمكن استخدام التعابير النمطيّة (regular expression)، والّتي من المُمكن استخدامها لتطبيق الإعداد بسهولة أكبر في كامل نظام الملفّات.</p><p>يُعوّل أباتشي على نظام الملفّات بشكل كبير، يظهر ذلك جليًا في اعتماده على ملفّات .htaccessلإعداد كل مسار، حتّى أنّ <a rel="external nofollow" href="http://httpd.apache.org/docs/2.4/sections.html#whichwhen">التوثيق الرسميّ</a> الخاصّ به يحذر من استخدام كتل مُعتمدة على URI في تقييد الوصول عندما يكون الطلب يَعتمد بشكل أو بآخر على نظام الملفّات.</p></div><div><h3>كيف يُفسّر Nginx الطلبات</h3><p>أُنشِأ Nginx ليكون خادمًا للويب وخادمًا وكيلًا/وسيطًا (proxy server)، ونظرًا إلى المعماريّة المطلوبة للعمل بهذه الأدوار، فإنه يعمل بشكل رئيسي مع URIs، والتحويل إلى نظام الملفّات عند الضرورة.</p><p>يُمكن رؤية ذلك في بعض جوانب بناء وتفسير ملفّات إعدادات Nginx، فلا يوفّر Nginx آليّة لتحديد إعدادًا لمسار نظام الملفّات، بل يَستعيض عنها بتحليل URI نفسه.</p><p>يُمكن توضيح ذلك بالمثال، كتل الإعداد الأوليّ لـ Nginx هي: server و location، الكتلة serverتُفسّر المُضيف الجاري طلبه، بينما الكتل مسؤولة عن مُطابقة أجزاء من URI التي تأتي بعد المُضيف والمنفذ، في هذه المرحلة يتمّ تفسير الطلب كـ URI، وليس كعنوان على نظام الملفّات.</p><p>يتوجّب في نهاية المطاف على جميع الطلبات أنّ تُربط مع عنوان على نظام الملفّات وذلك للملفّات الثّابتة، فأولًا، سيَختار Nginx كتل server و location الّتي سوف تتولّى الطلب، ومن ثم ضم جزر المُستند مع الـ URI.</p><p>إن تحليل ومُعالجة الطلب قبل كل شيء على شكل URIs بدلًا من عناوين نظام الملفّات يَسمح لـ Nginxالعمل بسهولة وعلى حدٍّ سواء كخادم وسيط (بروكسي)، وكخادم بريد، وخادم ويب، فقد تمّ إعداده ليُلائم كيف له أنّ يستجيب لأنماط الطلبات المُختلفة، ولا يفحص Nginx نظام الملفّات حتّى يكون جاهزًا ليَخدم الطلب، وهذا يُفسّر لماذا هو لا يُطبّق نمط ملفّات .htaccess.</p></div><div><h2>الوحدات</h2><p>يتوسع كلا الخادومان عن طريق نظام الوحدات، ولكن طريقة عملهما تختلف عن الآخر بشكل كبير.</p></div><div><h3>كيف يستخدم أباتشي نظام الوحدات (Modules)؟</h3><p>يَسمح نظام وحدات أباتشي بطريقة آليّة وديناميكيّة بتركيب ونزع الوحدات ليتناسب مع مُتطلّبات مُدير النظام خلال عمليّة تشغيل الخادم، وتتواجد نواة أباتشي دائمًا بكل جاهزية، بينما يُمكن تشغيل أو تعطيل الوحدات، أو حتّى حذفها أو إضافة ما يلزم إلى الخادم.</p><p>يستخدم أباتشي الوحدات في العديد من المهام، ونظرًا للباع الطويل لمنصة أباتشي، فيتوفّر عدد هائل من مكتبات الوحدات، والّتي من المُمكن استخدامها في تعديل بعض الوظائف الداخليّة في بنية خادم أباتشي، فمثلًا الوحدة mod_php تقوم بدمج مُفسّر PHP داخل كل عامل (worker).</p><p>لا تنحصر الوحدات لمُعالجة المُحتوى الديناميكي (المُتغيّر) فقط، فيُمكن استخدامها في العديد من الوظائف، فيُمكن استخدامها في:</p><ul><li>rewriting URLs: إعادة كتابة العناوين</li><li>authenticating: المُصادقة</li><li>logging: التّتبّع</li><li>caching: التخبئة</li><li>compression: الضغط</li><li>proxying: الوساطة</li><li>encrypting: التشفير</li></ul></div><div><h3>كيف يتعامل Nginx مع نظام الوحدات (Modules)</h3><p>يُطبّق ويتعامل Nginx مع نظام الوحدات، ولكن يختلف الأمر عما هو في نظام أباتشي، فلا تُحمّل الوحدات بشكل ديناميكي في نظام Nginx، لذلك يجب على هذه الوحدات أنّ تُختار وتُترجم (compiled) إلى النواة.</p><p>قد يبدو الأمر صعبًا للعديد من المُستخدمين وخاصّة لهؤلاء الذين لا يُحبذون صيانة برمجياتهم المُترجمة (compiled) بدون الاستعانة بنظام حزم تقليدي، وعلى الرغم من أنّ حزم الموزّع تتضمّن الوحدات الأكثر استخدامًا، ولكن عند الحاجة إلى وحدة غير شائعة، سيتوجب على مُدير النظام بناء الخادم من المصدر بنفسه.</p><p>تَبقى وحدات Nginx مع ذلك ذات فائدة، وتسمح لمُدير النّظام بتحديد ماذا يجب على الخادم أنّ يحتوي من وظائف، أيضًا بعض المُدراء ينظر إلى الأمر من منظور الحماية، حيثُ أنّ المُكوّنات الاعتباطيّة لا يُمكن أن تُدرج داخل الخادم.</p><p>تُقدّم وحدات Nginx مقدرات مُماثلة للوحدات الّتي المُقدّمة من أباتشي، على سبيل المثال، توفّر وحدات Nginx:</p><ul><li>proxying support: الوساطة</li><li>compression: الضغط</li><li>logging: التّتبّع</li><li>rewriting: إعادة كتابة العنوان</li><li>authentication: المُصادقة</li><li>encryption: التشفير</li></ul></div><div><h2>الدعم والتوافُقيّة والتوثيق</h2><p>يجب دائمًا التأكد من آليّة بناء الخادم ومُتطلباتها، وما الّذي على مُدير النّظام عمله لبناء خادم يعمل بأبسط الإمكانيات، وما هو حجم الدعم والمُساعدة المتوفّر لهذه البرمجية.</p></div><div><h3>الدعم في أباتشي</h3><p>يُعرف الخادم أباتشي بباعه الطويل في هذا المجال، ولذلك فإن الدعم الخاصّ به متواجد وبقوّة، حيثُ يتوفّر توثيق مُمتاز لمكتباته الخاصّة به ومكتبات الطرف الثالث (الخارجيّة)، وعلى كافّة المُستويات، سواء كان لنواة الخادم أو للجزئيات المُرتبطة ببرمجيات أُخرى.</p><p>يتوفّر بجانب التوثيق، العديد من الأدوات ومشاريع الويب لتسريع بدء العمل مع بيئة الخادم، وهي موجودة ضمن المشاريع نفسها أو مُتوفّرة ضمن برمجيات الحزم المعروفة.</p><p>يَملك أباتشي بشكلٍ عام دعمًا قويًا من قِبل مشاريع الطرف الثالث، وذلك بسبب حصته السوقيّة، وقِدَمه، كما يَملك مُعظم مُدراء الأنظمة بشكل أو بآخر معرفة جيّدة بخادم أباتشي، ليس فقط بسبب انتشاره، ولكن أيضًا بسبب أنّ معظمهم بشكل أو بآخر يستخدم الاستضافة المُشتركة (shared-hosting)، والّتي تعتمد على خادم أباتشي بشكل حصري، لمقدرته الإدارية الموزّعة باستخدام ملفّ .htaccess.</p></div><div><h3>الدعم في Nginx</h3><p>يكسب Nginx المزيد من الدعم مع ازدياد المُستخدِمين بسبب أدائه العالي، ولكن يبقى عليه التطوير من نفسه في بعض الجزئيات.</p><p>قد كان من الصعب إيجاد توثيق مفهوم وواضح بالغة الإنكليزية للخادم Nginx في البداية، نظرًا إلى أنّ تطويره وتوثيقه تمّ بالغة الروسية، ومع ازدياد الاهتمام بالمشروع، أصبح هناك وفرة من المصادر على الموقع الرسميّ وغيره من الدعم الخارجي.</p><p>أصبح الدعم متوفّرًا أكثر من ذي قبل فيما يخص تطبيقات الطرف الثالث، وبدأت بعض الحزم بتقدم خيارات الإعداد التلقائي سواءً لـ أباتشي أو Nginx، وعند عدم توفّر الدعم، فإن إعداد Nginx مع البرمجيات البديلة عادةً ما يكون واضحًا ومُيسرًا طالما أنّ برمجية الطرف الثالث تملك توثيقًا جيّدًا لمُتطلّباتها.</p></div><div><h2>استخدام Apache و Nginx معًا</h2><p>تمّ عرض فوائد وقصور كلا الخادومين، ويجب على مُدير النّظام في هذه المرحلة أنّ يُحدّد أيًا منهما يُناسب احتياجاته، ولكن يجد العديد من المُستخدِمين أنّه من المُمكن تقوية خادوم الويب عند استخدام كلٍ من أباتشي و Nginx جنبًا إلى جنب.</p><p>إن إتمام هذه الشراكة يتمّ عن طريق تَمَوْضُع Nginx أمام أباتشي كوكيل/وسيط عكسي (reverse proxy)، وهذه يسمح لـ Nginx بمُعالجة جميع الطلبات من العُملاء، الأمر الّذي يَسمح بالاستفادة من سرعة Nginx وقدرته على تولّي عدد كبير من الاتصال في وقتٍ واحد.</p><p>إن خدمة الملفّات الثّابتة بسرعة كبيرة ومباشرةً إلى العُملاء، هو الأمر الّذي يتفوّق به Nginx، ولكن وللمُحتوى الديناميكي، ملفات PHP مثلًا، سيُوكل Nginx الطلبات إلى أباتشي لمُعالجتها والعودة بصفحة بالنتيجة النهائيّة، ليستطيع Nginx عندها تمرير المُحتوى إلى العميل.</p><p>يعمل هذا الإعداد بشكل جيّد للعديد من مُدراء الأنظمة، وذلك بسبب أنّه يسمح لـ Nginx ليعمل كآلة فرز وتصنيف، بمعنى أنّه سيتولّى مُعالجة جميع الطلبات طالما أنّه يستطيع ذلك، وتمرير ما لا يستطيع التعامل معه، وبتخفيض الطلبات المطلوب من خادم أباتشي تولّيها، سيُخفف بعضًا من الاستيقاف (blocking) الّذي قد يحدث عندما يستهلك أباتشي المزيد من المُعالج.</p><p>يَسمح هذا الإعداد أيضًا لمُدراء الأنظمة بالتوسّع عن طريق إضافة خادم خلفي (backend) على حسب الحاجة والضرورة، ومن المُمكن إعداد Nginx لتمرير الطلبات إلى تجمّع (pool) من الخوادم بسهولة، الأمر الّذي يزيد من الأداء والفعاليّة.</p></div><div><h2>الختام</h2><p>يُقدّم كلًا من أباتشي و Nginx مُرونة في الاستخدام، وقوّةً في الأداء، والتفضيل بينهما هو لأمرٌ يَعتمد على تقدير مُتطلبات ووظائف الخادم، وعلى مُدير النّظام أنّ لا يسأل: هو أفضل خادم ويب؟، بل السؤال الّذي يجب سؤاله هو، ما هو أفضل خادم ويب لمشروعي الّذي يتطلّب كذا وكذا؟</p><p>يوجد بالفعل اختلافات بين المشروعين، هذه الاختلافات من شأنها أن تأثر على الأداء، والقدرات، والوقت المُستغرق في إتمام أي منهما للعمل بالجاهزيّة الكاملة، ولكي يتمّ اختيار الأفضل يُنصح بعمل تسوية أو مقايضة بين المحاسن والمساوئ، ففي نهاية المطاف لا يوجد خادم يُلبي كافة الاحتياجات، ويَكمن الحلّ في ترتيب الأولويات.</p><p>ترجمة –وبتصرّف– للمقال <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/apache-vs-nginx-practical-considerations">Apache vs Nginx: Practical Considerations</a> لصاحبه <a rel="external nofollow" href="https://www.digitalocean.com/community/users/jellingwood">Justin Ellingwood</a>.</p></div></div></div></div></div></div></div>
]]></description><guid isPermaLink="false">42</guid><pubDate>Thu, 07 May 2015 21:45:00 +0000</pubDate></item><item><title>&#x645;&#x642;&#x62F;&#x651;&#x645;&#x629; &#x625;&#x644;&#x649; HAProxy &#x648;&#x645;&#x628;&#x627;&#x62F;&#x626; &#x645;&#x648;&#x627;&#x632;&#x646;&#x629; &#x627;&#x644;&#x62D;&#x645;&#x644; (Load Balancing)</title><link>https://academy.hsoub.com/devops/servers/%D9%85%D9%82%D8%AF%D9%91%D9%85%D8%A9-%D8%A5%D9%84%D9%89-haproxy-%D9%88%D9%85%D8%A8%D8%A7%D8%AF%D8%A6-%D9%85%D9%88%D8%A7%D8%B2%D9%86%D8%A9-%D8%A7%D9%84%D8%AD%D9%85%D9%84-load-balancing-r41/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_05/haproxy.png.c28d01338d1802e29ec02732184f5654.png" /></p>

<p>HAProxy (والذي يرمز إلى الوسيط عالي التوفّر High Availability Proxy) هو عبارة عن تطبيق موزانة حملٍ مفتوح المصدر لبروتوكول TCP/HTTP يُمكن أن يتم تشغيله على أنظمة لينكس، Solaris وFreeBSD. يتم استخدامه بشكلٍ شائع لتحسين أداء ومرونة بيئة خادوم الويب عبر توزيع الحمل على خواديم أخرى متعددة (كمثال: خادوم للويب، خادوم للتطبيق، خادوم لقاعدة البيانات..). يتم استخدام HAProxy في العديد من البيئات عالية التوفّر مثل: GitHub، Imgur, Instagram و Twitter.</p><p>في هذا الدرس، سنتعرّف على ماهيّة HAProxy بشكلٍ عام، مصطلحات موازنة الحمل الأساسية وأمثلةٍ لكيفية استخدامه لتحسين أداء ومرونة بيئة خادوم الويب الخاصّ بك.</p><h2>مصطلحات HAProxy</h2><p>هناك العديد من المصطلحات والمفاهيم التي من المهمّ فهمها عند الحديث عن موازنة الحمل واستخدام الوسيط (Proxying)، سنتحدّث عن أهمّ هذه المصطلحات في الأقسام الفرعيّة التالية.</p><p>قبل أن نبدأ بالحديث عن الأنواع الأساسية لموازنة الحمل، سنتحدّث عن قوائم تحكّم الوصول (ACLs – Access Control Lists)، الواجهات الخلفيّة (backends) والواجهات الأماميّة (frontends).</p><h3>قائمة تحكّم الوصول (ACL)</h3><p>في ارتباطٍ وثيق مع مبدأ موازنة الحمل، يتم استخدام قوائم تحكّم الوصول (Access Control List) لاختبار بعض الشروط وتنفيذ بعض الأوامر (كمثال: اختيار خادومٍ معيّن، حظر طلبٍ ما..) بناءً على نتيجة الاختبار. يسمح استخدام قوائم تحكّم الوصول بعمليةِ إعادة توجيهٍ مرنة لتدفّق الشبكة (network traffic) بناءً على عدّة عوامل مثل مطابقة النمط (pattern matching) وعدد الاتصالات المُرسلة إلى الواجهة الخلفيّة.</p><p><strong>مثال على ACL:</strong></p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">acl url_blog path_beg /blog</pre><p>تكون قائمة تحكّم الوصول السابقة متطابقة في حال كان المسار الذي يطلبه المستخدم مبدوءًا بـ <span style="font-family:courier new,courier,monospace;">blog/</span>. هذا يعني أنّ مسارًا مثل <a rel="external nofollow" href="http://yourdomain.com/blog/blog-entry-1">http://yourdomain.com/blog/blog-entry-1</a> مثلًا كان ليكون متطابقًا مع القائمة في حال تطبيقها. لدليلٍ تفصيلي حول كيفية استخدام ACL، راجع <a rel="external nofollow" href="http://cbonte.github.io/haproxy-dconv/configuration-1.4.html#7">دليل إعداد </a><a rel="external nofollow" href="http://cbonte.github.io/haproxy-dconv/configuration-1.4.html#7">HAProxy</a>.</p><h3>الواجهة الخلفيّة Backend</h3><p>الواجهة الخلفيّة هي عبارة عن مجموعة خواديم تتلقى الطلبات (requests) الموجّهة إليها. يتمّ تعريف الواجهات الخلفيّة في قسم backend في ملفّ إعدادات HAProxy. في شكلها الأكثر بساطةً يمكننا تعريف الواجهة الخلفيّة عبر:</p><ul><li>خوارزميات موازنة الحمل التي يجب استخدامها.</li><li>قائمة من الخواديم والمنافذ (Ports).</li></ul><p>يمكن لواجهةٍ خلفيّة أن تحتوي خادومًا واحدًا أو أكثر فيها. بشكلٍ عام، إضافة المزيد من الخواديم إلى واجهتك الخلفيّة سيزيد من سعة التحمّل القصوى الخاصّة بموقعك عبر توزيع الحمل على أكثر من خادومٍ واحد. يتم توفير عمليّة زيادة المرونة أيضًا باستخدام هذه الطريقة، ففي حال تعطّل أحد خواديمك، سيبقى هناك غيره ليقوم بخدمة الزوّار.</p><p>إليك مثالًا على إعدادات واجهتين خلفيّتين، web-backend وblog-backend مع خادومين اثنين لكلّ واحدٍ منهما، يعملان على المنفذ 80:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">backend web-backend
  balance roundrobin
  server web1 web1.yourdomain.com:80 check
  server web2 web2.yourdomain.com:80 check

backend blog-backend
  balance roundrobin
  mode http
  server blog1 blog1.yourdomain.com:80 check
  server blog1 blog1.yourdomain.com:80 check</pre><ul><li>يقوم السطر balance roundrobin بتحديد خوارزميّة موازنة الحمل التي سيتم استعمالها، والتي سنتحدث عنها في قسمٍ لاحق.</li><li>يحدد سطر mode http أنّه سيتم استخدام الطبقة 7 كوسيط، سنشرح هذا الأمر أيضًا في قسمٍ لاحق.</li><li>يقوم الخيار check في نهاية السطور المبدوءة بـserver بإخبار النظام بوجوب التحقق من حالة خواديم الواجهة الخلفيّة هذه في كلّ مرّة.</li></ul><h3>الواجهة الأماميّة Frontend</h3><p>تقوم بالواجهة الأماميّة بتعريف كيفية إعادة توجيه الطلبات إلى الواجهات الخلفيّة backends. يتم تعريف الواجهات الأماميّة في قسم frontend في ملفّ إعدادات HAProxy. تتكون تعريفاتها من المكونات التالية:</p><ul><li>مجموعة من عناوين الـIP والمنافذ (مثل: 10.1.1.7:80، *:443، إلخ..).</li><li>قوائم تحكّم الوصول ACLs.</li><li>قواعد <span style="font-family:courier new,courier,monospace;">use_backend</span>، والتي تعرّف أيًّا من الواجهات الخلفيّة يجب استخدامها اعتمادًا على ما إذا كانت قوائم تحكّم الوصول متطابقة معها في كلّ مرّة أم لا، و/أو قاعدة <span style="font-family:courier new,courier,monospace;">default_backend</span> والتي تقوم بمعالجة الحالات الأخرى.</li></ul><p>يمكن إعداد واجهةٍ أمامية تبعًا لأنواعٍ مختلفة من تدفّقات الشبكة، وهو ما سنشرحه في القسم التالي.</p><h2>أنواع موازنة الحمل</h2><p>الآن وبعد أن فهمنا المكوّنات الأساسية التي يتم استخدامها في عملية موازنة الحمل، فلنتطرّق إلى الأنواع الأساسية لموازنة الحمل.</p><h3>موازنة الحمل المعدومة No Load Balancing</h3><p>يمكن لبيئة تطبيق ويبٍ بسيطة لا تستعمل أيًّا من طرق موازنة الحمل أن تبدو بالشكل التالي:</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_05/001.png.72b18b0fea23b5133fa2be352ff4815a.png"><img data-fileid="1722" class="ipsImage ipsImage_thumbnailed" alt="001.thumb.png.6dd57dd70f21ebe5d67d5c748f" src="https://academy.hsoub.com/uploads/monthly_2015_05/001.thumb.png.6dd57dd70f21ebe5d67d5c748f661483.png"></a></p><p>في هذا المثال، يتّصل المستخدم مباشرةً إلى خادوم الويب الخاصّ بك في yourdomain.com حيث لا يوجد أيّ نوع من موازنة الحمل. إذا تعطّل خادوم الويب الوحيد، فإنّ المستخدم لن يكون قادرًا على الوصول إلى تطبيقك. أيضًا، في حال ما إذا كان العديد من المستخدمين يحاولون الوصول إلى خادومك بنفس الوقت ولم يكن الخادوم قادرًا على معالجة كل هذه الطلبات بنفس الوقت، فقد يواجه الزوّار بطئًا في عملية تحميل الموقع وقد لا يحمّل إطلاقّا.</p><h3>موازنة الحمل عن طريق الطبقة 4 (Layer 4 Load Balancing)</h3><p>أبسط طريقة لموازنة الحمل في تدفّق الشبكة على خادومين اثنين هو استخدام موازنة الحمل عن طريق الطبقة رقم 4 (وهي طبقة شفافة transport layer). موازنة الحمل باستخدام هذه الطريقة ستسبب في توجيه تدفّق الزوار بناءً على مدى عنوان الـIP والمنفذ (كمثال، إذا جاء طلبٌ للمسار <a rel="external nofollow" href="http://yourdomain.com/anything">http://yourdomain.com/anything</a>، فإنّه سيتم توجيه التدفّق إلى خادوم الواجهة الخلفيّة الذي يعالج الطلبات لـyourdomain.com بالمنفذ 80). </p><p>إليكَ رسمًا توضيحيًا لموازنة الحمل باستخدام الطبقة 4:</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_05/002.png.b4285a9f567c81418680f200717c7cd4.png"><img data-fileid="1723" class="ipsImage ipsImage_thumbnailed" alt="002.thumb.png.5a7fedb95b6271483d00dd9520" src="https://academy.hsoub.com/uploads/monthly_2015_05/002.thumb.png.5a7fedb95b6271483d00dd9520dac513.png"></a></p><p>يقوم المستخدم بالوصول إلى مُوازِن الحمل (load balancer) والذي يقوم بدوره بتوجيه طلبات المستخدم إلى مجموعة web-backend لخواديم الواجهة الخلفيّة. عندما يتم اختيار خادوم واجهةٍ خلفيّة معيّن فإنّه يستجيب مباشرةً إلى طلبات المستخدم. بشكلٍ عام، يجب على جميع الخواديم في مجموعة web-backend أن تحتوي على نفس المحتوى والبيانات، وإلّا فإنّ المستخدم قد يتصفّح محتوىً مختلفًا بالمرّة. لاحظ أيضًا أن كُلًا من الخادومين يتصلان إلى نفس خادوم قاعدة البيانات.</p><h3>موازنة الحمل عن طريق الطبقة 7 - Layer 7 Load Balancing</h3><p>طريقةٌ أخرى أكثر تعقيدًا لتوزيع تدفّق الحمل القادم إلى الشبكة هي عبر استخدام الطبقة 7 (وهي طبقة تطبيق application layer) لموازنة الحمل. يسمح استخدام الطبقة 7 لمُوازِن الحمل بتوجيه الطلبات إلى خواديم الواجهة الخلفيّة المختلفة بناءً على المحتوى الذي يطلبه المستخدم. يسمح لك هذا النوع من موازنة الحمل بتشغيل أكثر من خادوم تطبيق ويب تحت نفس النطاق والمنفذ.</p><p>إليك رسمًا توضيحيًا لمثالٍ بسيط لموازنة الحمل باستخدام الطبقة 7:</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_05/003.png.9b63d8ffe742fbe39cfcbf8e36e9ddc8.png"><img data-fileid="1724" class="ipsImage ipsImage_thumbnailed" alt="003.thumb.png.bbea5498e8efade51d8b6bb715" src="https://academy.hsoub.com/uploads/monthly_2015_05/003.thumb.png.bbea5498e8efade51d8b6bb7157dd315.png"></a></p><p>في هذا المثال، إذا قام مستخدم بطلب <span style="font-family:courier new,courier,monospace;">yourdomain.com/blog</span> فإنّه سيتم توجيهه إلى الواجهة الخلفيّة لـblog، والتي تتكون من مجموعة خواديم تشغّل تطبيق الويب الخاصّ بالمدوّنة. يتم توجيه الطلبات الأخرى إلى web-backend، والتي يمكن أن تكون عاملةً على تشغيل تطبيق ويب مختلف. كلٌّا الواجهتين الخلفيّتين تستعملان نفس خادوم قاعدة البيانات في هذا المثال.</p><p>يمكن لجزءٍ من مثالٍ على ملفّ إعدادات الواجهة الأماميّة أن يبدو هكذا:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">frontend http
  bind *:80
  mode http

  acl url_blog path_beg /blog
  use_backend blog-backend if url_blog

  default_backend web-backend</pre><ul><li>يقوم هذا المثال بإعداد واجهةٍ أمامية تدعى <span style="font-family:courier new,courier,monospace;">http</span>، والتي ستقوم بمعالجة جميع الطلبات المتدفّقة إلى المنفذ 80.</li><li>يقوم سطر <span style="font-family:courier new,courier,monospace;">acl url_blog_path_beg /blog</span> بمطابقة ما إذا كان ما يطلبه الزائر يبدأ بـ <span style="font-family:courier new,courier,monospace;">blog/</span>.</li><li>يقوم سطر <span style="font-family:courier new,courier,monospace;">use_backend blog-backend if url_blog</span> بجعل الخادوم يستخدم قوائم تحكّم الوصول ACL كوسيط لتوجيه التدفّق إلى blog-backend.</li><li>يحدّد <span style="font-family:courier new,courier,monospace;">default_backend web-backend</span> أنّه سيتم توجيه كل التدفّقات الأخرى إلى <span style="font-family:courier new,courier,monospace;">web-backend</span>.</li></ul><h2>خوارزميات موازنة الحمل</h2><p>تقوم خوارزميّة موازنة الحمل المستخدمة بتحديد أيٍّ من خواديم الواجهة الخلفيّة سيتم اختيارها عند بدء عملية موازنة الحمل. يوفّر HAProxy عدّة خيارات لهذه الخوارزميّات. بالإضافة إلى خوارزميّة موازنة الحمل فإنّه بالإمكان إسناد مُعامِل الـweight لتحديد الخواديم التي نريد استخدامها بشكلٍ أكبر من الأخرى.</p><p>بسبب أنّ HAProxy يوفّر العديد من خوارزميّات موازنة الحمل، فإننا سنتحدّث عن القليل منها فقط هنا. يمكنك مراجعة <a rel="external nofollow" href="http://cbonte.github.io/haproxy-dconv/configuration-1.4.html#4.2-balance">دليل إعداد </a><a rel="external nofollow" href="http://cbonte.github.io/haproxy-dconv/configuration-1.4.html#4.2-balance">HAProxy</a> لقائمةً كاملة بالخوارزميات.</p><h3>1-roundrobin</h3><p>تقوم خوارزميّة round robin باختيار الخواديم بالتناوب، وهي الخوارزميّة الافتراضية المستعملة.</p><h3>2-leastconn</h3><p>تقوم هذه الخوارزميّة باختيار الخادوم الأقل استخدامًا حاليًا والذي يتصل به أقل عدد من الزوّار ليعالج الطلبات القادمة، هذه الخوارزميّة مستحسنة للجلسات (sessions) الطويلة. يتم أيضًا اختيار الخواديم الموجودة في نفس الواجهة الخلفيّة بالتناوب على طريقة round-robin.</p><h3>3-Source</h3><p>تقوم هذه الخوارزميّة باختيار الخادوم الذي يجب استعماله بناءً على عنوان الـIP الخاصّ بالمستخدم. يتم استخدام هذه الطريقة للتأكّد مما إذا كان المستخدم سيتصل بنفس الخادوم.</p><h2>الجلسات الملتصقة Sticky Sessions</h2><p>تتطلب بعض التطبيقات أن يقوم المستخدم بمتابعة الاتصال إلى نفس خادوم الواجهة الخلفيّة. يتم تحقيق هذه العمليّة عن طريق ما يعرف بالجلسات الملتصقة أو Sticky Sessions، عبر استخدام مُعامِل appsession في ملف إعدادات الواجهة الخلفيّة التي تحتاجه.</p><h2>اختبار الحالة Health Check</h2><p>يقوم HAProxy باستخدام اختبارات الحالة للتحقق مما إذا كان خادومٌ ما في الواجهة الخلفيّة متوفّرًا لمعالجة الطلبات أم لا. بفضل هذه العمليّة، فإنّ المستخدم لا يعود بحاجة إلى إزالة الخادوم يدويًا من الواجهة الخلفيّة في حال أصبح غير متوفّر. سيقوم اختبار الحالة الافتراضي بمحاولة إنشاء اتصال TCP مع الخادوم ليرى إن كان يعمل أم لا، حيث سيقوم بمحاولة الاتصال بعنوان الـIP المحدّد والمنفذ الخاصّ به.</p><p>إذا فشل أحد الخواديم في اختبار الحالة وكان غير قادرٍ على معالجة الطلبات، فإنّه يتم تعطيله تلقائيًا من الواجهة الخلفيّة، حيث لن يتم توجيه تدفّق الشبكة إليه مرةً أخرى إلى أن يصبح متوفّرًا مجددًا وبحالة جيّدة. إذا تعطّلت جميع خواديم الواجهة الخلفيّة، فإنّ الخدمة لن تعود متوفّرة إلى حين عودة أحد الخواديم إلى العمل من جديد.</p><p>لأنواعٍ معيّنة من خواديم الواجهات الخلفيّة، مثل خواديم قاعدة البيانات في بعض الحالات الخاصّة، فإنّ اختبار الحالة الافتراضي ليس كافيًا لتحديد حالة الخادوم الجيّدة أو عكس ذلك.</p><h2>حلولٌ أخرى</h2><p>إذا كنتَ تشعر أنّ HAProxy معقّد جدًا مقارنةً باحتياجاتك، فإنّ الحلول التالية قد تناسبك:</p><ul><li>خواديم لينكس الافتراضية (LVS) – مُوَازِن حملٍ يستخدم الطبقة رقم 4 لموازنة الحمل، بسيط وسريع ومتوفّر في معظم توزيعات لينكس.</li><li>Nginx – خادوم ويب سريع ومرن يُمكن أيضًا استخدامه كوسيط أو لغرض موازنة الحمل (راجع مقالتنا السابقة عن <a href="http://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-%D9%85%D9%88%D8%A7%D8%B2%D9%86%D8%A9-%D8%A7%D9%84%D8%AD%D9%85%D9%84-load-balancing-%D8%B9%D9%84%D9%89-nginx-r20/">استخدام </a><a href="http://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-%D9%85%D9%88%D8%A7%D8%B2%D9%86%D8%A9-%D8%A7%D9%84%D8%AD%D9%85%D9%84-load-balancing-%D8%B9%D9%84%D9%89-nginx-r20/">Nginx </a><a href="http://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-%D9%85%D9%88%D8%A7%D8%B2%D9%86%D8%A9-%D8%A7%D9%84%D8%AD%D9%85%D9%84-load-balancing-%D8%B9%D9%84%D9%89-nginx-r20/">لموزانة الحمل</a>). يتم استخدام Nginx عادةً بالتوازي مع HAProxy نظرًا لقدرته على إنشاء ذاكرة الخبيئة (caching) وإمكانيات الضغط العالية.</li></ul><h2>الخاتمة</h2><p>الآن صرتَ تمتلك معرفةً أساسية حول موازنة الحمل وصرتَ تعرف بضع طرقٍ يستخدمها HAProxy لتلبية احتياجات موازنة الحمل الخاصّة بك، صار لديك قاعدةٌ صلبة لتستند عليها في البدء بتحسين أداء ومرونة بيئة خادوم الويب الخاصّ بك.</p><p>ترجمة -وبتصرّف- للمقال: <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/an-introduction-to-haproxy-and-load-balancing-concepts">An Introduction to HAProxy and Load Balancing Concepts</a>.</p>
]]></description><guid isPermaLink="false">41</guid><pubDate>Sun, 03 May 2015 10:30:00 +0000</pubDate></item><item><title>&#x62E;&#x637;&#x648;&#x627;&#x62A; &#x625;&#x636;&#x627;&#x641;&#x64A;&#x629; &#x644;&#x62A;&#x637;&#x628;&#x64A;&#x642;&#x647;&#x627; &#x639;&#x644;&#x649; &#x62E;&#x648;&#x627;&#x62F;&#x64A;&#x645; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648; 14.04 &#x627;&#x644;&#x62C;&#x62F;&#x64A;&#x62F;&#x629;</title><link>https://academy.hsoub.com/devops/servers/%D8%AE%D8%B7%D9%88%D8%A7%D8%AA-%D8%A5%D8%B6%D8%A7%D9%81%D9%8A%D8%A9-%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D9%87%D8%A7-%D8%B9%D9%84%D9%89-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-%D8%A7%D9%84%D8%AC%D8%AF%D9%8A%D8%AF%D8%A9-r36/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_04/ubuntu-further-config.png.5f2cb5850875491ab62ae1eb3a115506.png" /></p>

<p dir="rtl">
	بعد <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>

<h2 dir="rtl">
	الأهداف والمتطلبات
</h2>

<p dir="rtl">
	قبل أن تبدأ بهذا الدرس، يجب أن تقرأ درس <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><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/">Ubuntu 14.04 </a><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>. قراءة ذلك الدرس أولًا هو أمرٌ مهمّ بهدف إعداد حسابات المستخدمين، إعداد وضبط الصلاحيّات المرتبطة بـsudo وقفل اتصالات <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> للحصول على المزيد من الحماية.
</p>

<p dir="rtl">
	بمجرّد أن تقرأ وتطبّق الدرس المذكور أعلاه، ستكون قادرًا على المتابعة مع هذه المقالة. في هذا الدرس، سنركّز على إعداد بعض المكوّنات الإضافية المستحسنة لخادومنا. سيتضمن هذا إعداد جدارٍ ناري، مزامنة بروتوكول وقت الشبكة وإعداد ملفّات الـSwap.
</p>

<h2 dir="rtl">
	إعداد جدار ناري بسيط
</h2>

<p dir="rtl">
	تقوم جدران الحماية بتوفير درجة حمايةٍ بسيطة لخادومك. هذه التطبيقات مسؤولة عن منع وصول التدفّقات (traffics) إلى كلّ المنافذ الموجودة في خادومك باستثناء تلك المنافذ/الخدمات التي قمتَ بالسماح لها بالوصول. تأتي توزيعة Ubuntu مع اداة تدعى UFW يُمكن استخدامها لإعداد سياسات (policies) الجدار الناري الخاصّ بك. استراتيجيّتنا البسيطة ستكون قفلَ كلّ شيءٍ لا نرى أنّه من الصواب تركه مفتوحًا.
</p>

<p dir="rtl">
	قبل أن نقوم بتفعيل أو إعادة تحميل جدارنا الناريّ، سنقوم بإنشاء القواعد (rules) التي تعرّف تلك الاستثناءات التي نريدها من سياسة التعامل مع حزم البيانات الواردة. أولًا، سنحتاج إلى إنشاء استثناء لاتّصالات <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> لنتمكّن من الوصول إلى الصلاحيات الإدارية لخادومنا عن بعد.
</p>

<p dir="rtl">
	يعمل عفريت <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> (يدعى <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> daemon) على المنفذ 22 افتراضيًا. يمكن لـufw أن يقوم بتطبيق القواعد التي تريدها على <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> طالما أنّك لم تقم بتغيير ذاك المنفذ. لذا إذا لم تكن قد عدّلت المنفذ الافتراضي لـSSH، فيمكنك السماح باستثنائه عبر:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo ufw allow ssh</span></pre>

<p dir="rtl">
	إذا قمتَ بتعديل المنفذ الافتراضي الذي يعمل عليه عفريت <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr>، فسيجب عليك السماح له بالوصول إلى الخادوم عبر تحديد رقم المنفذ الجديد مع بروتوكول TCP:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo ufw allow </span><span class="lit">4444</span><span class="pun">/</span><span class="pln">tcp</span></pre>

<p dir="rtl">
	هذا هو أبسط إعدادٍ متوفّر للجدار الناري. سيسمح فقط بالوصول إلى منفذ <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> الخاصّ بخادومك وسيقوم بحجب كلّ الخدمات الأخرى ومنعها من الوصول إلى الخادوم. إذا كنتَ تريد السماح بوصول المزيد من الخدمات، فسيجب عليك فتح الجدار الناري لكلٍّ منفذٍ تريده بالتحديد.
</p>

<p dir="rtl">
	إذا كنتَ تخطط لتشغيل خادوم ويب لبروتوكول HTTP، فستحتاج إلى السماح بالوصول للمنفذ 80:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo ufw allow </span><span class="lit">80</span><span class="pun">/</span><span class="pln">tcp</span></pre>

<p dir="rtl">
	إذا كنتَ تريد تشغيل خادوم ويب مع تفعيل <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr>/<abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل">TLS</abbr>، فيجب عليك السماح بمرور التدفّق عبر المنفذ 443 أيضًا:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo ufw allow </span><span class="lit">443</span><span class="pun">/</span><span class="pln">tcp</span></pre>

<p dir="rtl">
	إذا كنتَ تحتاج إلى تفعيل بريد SMTP، فيجب أن يكون المنفذ 25 مفتوحًا أيضًا:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo ufw allow </span><span class="lit">25</span><span class="pun">/</span><span class="pln">tcp</span></pre>

<p dir="rtl">
	بعد أن تنتهي من إضافة هذه الاستثناءات، يجب أن تقوم بمعاينة التغييرات التي قمتَ بها عن طريق:
</p>

<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4">
<span class="pln">sudo ufw show added</span></pre>

<p dir="rtl">
	إذا كان كلّ شيءٍ يبدو جيّدًا، فيمكنك الآن تفعيل الجدار الناري عبر كتابة:
</p>

<pre class="html ipsCode prettyprint prettyprinted" data-pbcklang="html" data-pbcktabsize="4">
<span class="pln">sudo ufw enable</span></pre>

<p dir="rtl">
	سيتم سؤالك لتأكيد اختياراتك، لذا قد تكتب "y" إذا رغبتَ بالمتابعة. سيقوم هذا الأمر بتطبيق الاستثناءات التي قمتَ بإضافتها وحجب جميع أنواع التدفّقات الأخرى إلى خادومك، كما سيقوم بإعداد الجدار الناري الخاصّ بك ليبدأ تلقائيًا عند الإقلاع.
</p>

<p dir="rtl">
	تذكّر أنّه يجب عليك فتح أيّ منافذ إضافية لأيّ خدمات إضافية تحتاج الوصول عبر تلك المنافذ. للمزيد من المعلومات التفصيليّة، <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81-%D8%AA%D8%B6%D8%A8%D8%B7-%D8%AC%D8%AF%D8%A7%D8%B1%D8%A7-%D9%86%D8%A7%D8%B1%D9%8A%D8%A7-%D9%81%D9%8A-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-ufw-r120/">راجع مقالتنا حول إعداد جدار </a><a href="https://www.digitalocean.com/community/tutorials/how-to-setup-a-firewall-with-ufw-on-an-ubuntu-and-debian-cloud-server" rel="external nofollow">ufw </a><a href="https://www.digitalocean.com/community/tutorials/how-to-setup-a-firewall-with-ufw-on-an-ubuntu-and-debian-cloud-server" rel="external nofollow">الناري</a>.
</p>

<h2 dir="rtl">
	إعداد المناطق الزمنية ومزامنة بروتوكول وقت الشبكة
</h2>

<p dir="rtl">
	الخطوة التالية هي ضبط إعدادات التوطين (localization) لخادومك وإعداد مزامنة بروتوكول وقت الشبكة (NTP - Network Time Protocol).
</p>

<p dir="rtl">
	ستضمن الخطوة الأولى أنّ خادومك يعمل باستخدام المنطقة الزمنية الصحيحة، وستقوم الخطوة الثانية بإعداد نظامك لمزامنة ساعة النظام الخاصّة به تلقائيًا مع الساعة العالمية عبر الاتصال بخواديم NTP العالمية، وهذا لضمان عدم وجود فرق بين التوقيتين (توقيت الخادوم وتوقيت الوقت الحقيقي في المنطقة التي تعيش بها) ولجعل الوقت المضبوط على خادومك هو نفسه الوقت المضبوط على الخواديم الأخرى.
</p>

<h3 dir="rtl">
	إعداد المناطق الزمنية
</h3>

<p dir="rtl">
	ستكون خطوتنا الأولى هي إعداد المنطقة الزمنيّة الخاصّة بخادومنا. هذا الأمر سهل للغاية ويمكن فعله عبر إعادة إعداد حزمة tzdata:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo dpkg</span><span class="pun">-</span><span class="pln">reconfigure tzdata</span></pre>

<p dir="rtl">
	سيتم عرض قائمة لك تحتوي مناطق العالم المتوفّرة، اختر المنطقة التي تعيش بها:
</p>

<p dir="rtl" style="text-align: center;">
	<a href="https://academy.hsoub.com/uploads/monthly_2015_04/001.png.f89d5c5653f30ff35357c95b0641c6d7.png" rel="external nofollow"><img data-fileid="1514" src="https://academy.hsoub.com/uploads/monthly_2015_04/001.thumb.png.a3e8dc39dddee4ecc96bff7068dc5064.png" alt="001.thumb.png.a3e8dc39dddee4ecc96bff7068"></a>
</p>

<p dir="rtl">
	بعد اختيار منطقة معيّنة، ستكون قادرًا على اختيار منطقة زمنيّة معيّنة لضبطها في خادومك الشخصي عبر اختيار العاصمة أو المدينة التي تعيش بها:
</p>

<p dir="rtl" style="text-align: center;">
	<a href="https://academy.hsoub.com/uploads/monthly_2015_04/002.png.6140b22a43c5ef1698f52ca5af6f4f35.png" rel="external nofollow"><img data-fileid="1515" src="https://academy.hsoub.com/uploads/monthly_2015_04/002.thumb.png.7b9c5c4970daf104f8e057a0c32d3b1b.png" alt="002.thumb.png.7b9c5c4970daf104f8e057a0c3"></a>
</p>

<p dir="rtl">
	بعد هذا، سيتم تحديث نظامك ليستخدم المنطقة الزمنيّة الجديدة، وسيتم طباعة النتائج إلى الشاشة:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="typ">Current</span><span class="pln"> </span><span class="kwd">default</span><span class="pln"> time zone</span><span class="pun">:</span><span class="pln"> </span><span class="str">'America/New_York'</span><span class="pln">
</span><span class="typ">Local</span><span class="pln"> time </span><span class="kwd">is</span><span class="pln"> now</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Mon</span><span class="pln"> </span><span class="typ">Nov</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">17</span><span class="pun">:</span><span class="lit">00</span><span class="pun">:</span><span class="lit">11</span><span class="pln"> EST </span><span class="lit">2014.</span><span class="pln">
</span><span class="typ">Universal</span><span class="pln"> </span><span class="typ">Time</span><span class="pln"> </span><span class="kwd">is</span><span class="pln"> now</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Mon</span><span class="pln"> </span><span class="typ">Nov</span><span class="pln"> </span><span class="lit">3</span><span class="pln"> </span><span class="lit">22</span><span class="pun">:</span><span class="lit">00</span><span class="pun">:</span><span class="lit">11</span><span class="pln"> UTC </span><span class="lit">2014.</span></pre>

<h3 dir="rtl">
	إعداد مزامنة NTP
</h3>

<p dir="rtl">
	الآن وبعد أن قمتَ بإعداد المنطقة الزمنيّة، يجب عليك إعداد NTP. ستسمح عمليّة مزامنة NTP لحاسوبك بالبقاء متزامنًا مع خواديم الويب الأخرى حيث سيتم توحيد الوقت الذي يستعمله خادومك مع الخواديم الأخرى حول العالم، وهو ما سيوفّر المزيد من الدقّة للعمليات التي تحتاج وقتًا دقيقًا لتتم بنجاح.
</p>

<p dir="rtl">
	لمزامنة NTP، سنستخدم خدمة تدعى ntp، والتي يمكننا تثبيتها من مستودعات Ubuntu الافتراضية:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo apt</span><span class="pun">-</span><span class="kwd">get</span><span class="pln"> update
sudo apt</span><span class="pun">-</span><span class="kwd">get</span><span class="pln"> install ntp</span></pre>

<p dir="rtl">
	هذا هو كلّ ما تحتاج فعله لإعداد مزامنة NTP على Ubuntu. سيبدأ عفريت ntp تلقائيًا بعد التثبيت وعند كلّ إقلاع وسيبقى طوال الوقت عاملًا على مزامنة وقت النظام مع خواديم NTP العالميّة لضمان التوافقية.
</p>

<p dir="rtl">
	اضغط هنا إذا أردت <a href="https://www.digitalocean.com/community/tutorials/how-to-set-up-time-synchronization-on-ubuntu-12-04" rel="external nofollow">تعلّم المزيد عن خواديم </a><a href="https://www.digitalocean.com/community/tutorials/how-to-set-up-time-synchronization-on-ubuntu-12-04" rel="external nofollow">NTP</a>.
</p>

<h2 dir="rtl">
	إنشاء ملف Swap
</h2>

<p dir="rtl">
	يسمح إنشاء ملفّ "Swap" على خادوم لينكس للنظام بنقل المعلومات والبرامج الأقل استعمالًا حاليًا من الذاكرة العشوائية RAM إلى موقعٍ معيّن على القرص الصلب. الوصول إلى البيانات الموجودة على القرص الصلب هو أبطئ بكثير من عملية الوصول إليها لو كانت على الذاكرة العشوائية RAM، ولكنّ توفير قرص Swap قد يكون الأمر الفاصل بين بقاء تطبيقاتك العاملة حاليًا على قيد الحياة وبين تحطّمها (crash). هذا الأمر مفيد للغاية خاصةً في حال كنتَ تنوي استضاف قواعد بيانات على خادومك.
</p>

<p dir="rtl">
	تختلف النصيحة عن الحجم الأفضل لقرص الـSwap اعتمادًا على ما تريد القيام به. ولكن بشكلٍ عام، فإنّ جعل حجمه بضعف حجم الذاكرة العشوائية RAM سيكون فكرةً جيّدة.
</p>

<p dir="rtl">
	قم باقتطاع المساحة التي تريد تخصيصها لقرص الـSwap من نظام الملفّات الكلّي باستخدام أداة fallocate. كمثال، إذا احتجنا إلى عمل قرص Swap حجمه 4 جيجابايت، فيمكننا إنشاء ملفّ Swap بالمسار /swapfile عن طريق كتابة:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo fallocate </span><span class="pun">-</span><span class="pln">l </span><span class="lit">4G</span><span class="pln"> </span><span class="pun">/</span><span class="pln">swapfile</span></pre>

<p dir="rtl">
	بعد إنشاء الملفّ، سنحتاج إلى تقييد الوصول إليه لكي لا يتمكن المستخدمون الآخرون أو العمليّات الأخرى من رؤية البيانات المكتوبة عليه:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo chmod </span><span class="lit">600</span><span class="pln"> </span><span class="pun">/</span><span class="pln">swapfile</span></pre>

<p dir="rtl">
	نمتلكُ الآن ملفّ Swap مضبوطًا على الصلاحيّات الصحيحة. لإخبار نظامنا بتهيئة الملفّ وإعداده ليكون قرص Swap، فلنطبّق:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo mkswap </span><span class="pun">/</span><span class="pln">swapfile</span></pre>

<p dir="rtl">
	يمكننا الآن أن نخبر نظامنا أن يستخدم الملفّ الجديد عن طريق تطبيق:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo swapon </span><span class="pun">/</span><span class="pln">swapfile</span></pre>

<p dir="rtl">
	وسيبدأ النظام باستخدامه لجلستنا الحاليّة، هناك مشكلة وهي أنّ النظام لن يستخدمه سوى لجلستنا الحاليّة وليس طوال الوقت، ولذلك علينا تعديل ملفٍ في النظام لجعل خادومنا يقوم بالمهمّة تلقائيًا عند الإقلاع. يمكنك فعل ذلك عبر كتابة:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo sh </span><span class="pun">-</span><span class="pln">c </span><span class="str">'echo "/swapfile none swap sw 0 0" &gt;&gt; /etc/fstab'</span></pre>

<p dir="rtl">
	مع هذه الإضافة، يجب أن يكون نظامك قادرًا على استخدام ملفّ Swap تلقائيًا عند كل إقلاع.
</p>

<h2 dir="rtl">
	أين الطريق من هنا؟
</h2>

<p dir="rtl">
	بدأتَ الآن بداية جيّدة في إعداد خادومك العامل بنظام لينكس. من هنا، هناك العديد من الأماكن التي يمكنك التوجّه إليها الآن. أولًا، قد تودّ أخذَ لقطةٍ احتياطية (snapshot) من خادومك بإعداداته الحاليّة.
</p>

<h3 dir="rtl">
	خذّ لقطةٍ احتياطية من إعداداتك الحاليّة
</h3>

<p dir="rtl">
	إذا كنتَ مرتاحًا مع إعداداتك الحاليّة وكنتَ تودُّ استخدامها كقاعدةٍ أساسية في خواديمك المستقبليّة، فيمكنك أخذ لقطةٍ احتياطيّة لخادومك عبر لوحة تحكّم DigitalOcean.
</p>

<p dir="rtl">
	للقيام بهذا، قم بإطفاء خادومك من سطر الأوامر عبر كتابة:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo poweroff</span></pre>

<p dir="rtl">
	الآن، في لوحة تحكّم DigitalOcean، يمكنك أخذ لقطةٍ احتياطية عبر زيارة لسان "Snapshots" الموجود في صفحة خادومك:
</p>

<p dir="rtl">
	<a href="https://academy.hsoub.com/uploads/monthly_2015_04/003.png.f43e26f94ee3b9383f929dac6c3d9afd.png" rel="external nofollow"><img data-fileid="1516" src="https://academy.hsoub.com/uploads/monthly_2015_04/003.thumb.png.42ec82cb7723848420f9962e28dadff6.png" alt="003.thumb.png.42ec82cb7723848420f9962e28"></a>
</p>

<p dir="rtl">
	بعد أخذ اللقطة الاحتياطية التي تريدها، ستكون قادرًا على استعمال تلك الصورة كقاعدةٍ لعمليات تثبيت وإعداد خواديمك المستقبلية عبر اختيار تلك اللقطة الاحتياطية من لسان "My Snapshots" كنظام تشغيل أثناء عمليّة الإنشاء:
</p>

<p dir="rtl">
	<a href="https://academy.hsoub.com/uploads/monthly_2015_04/004.png.1b5ea07e14a38dc2eb17f594c4ac128c.png" rel="external nofollow"><img data-fileid="1517" src="https://academy.hsoub.com/uploads/monthly_2015_04/004.thumb.png.6f4316af88cef50567ba618b2d99c3ce.png" alt="004.thumb.png.6f4316af88cef50567ba618b2d"></a>
</p>

<h3 dir="rtl">
	مصادر إضافيّة وخطواتٌ أخرى
</h3>

<p dir="rtl">
	من هنا، يعتمد مسارك بشكلٍ كامل على ما تودّ فعله بخادومك. قائمة الدروس أدناه مرهقة للتطبيق، ولكنّها تمثّل جزءًا مهمًا من الإعدادات التي يجب تنفيذها من قبل المستخدمين بالخطوة التاليّة:
</p>

<ul dir="rtl"><li>
		<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-nginx%D8%8C-linux-lemp-%D9%88php-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r29/">كيف تُثبّت حزم </a><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-nginx%D8%8C-linux-lemp-%D9%88php-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r29/">LEMP </a><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-nginx%D8%8C-linux-lemp-%D9%88php-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r29/">كـ</a><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-nginx%D8%8C-linux-lemp-%D9%88php-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r29/">: Linux, PHP, Nginx </a><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-nginx%D8%8C-linux-lemp-%D9%88php-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r29/">و </a><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-nginx%D8%8C-linux-lemp-%D9%88php-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r29/">MySQL </a><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-nginx%D8%8C-linux-lemp-%D9%88php-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r29/">على أوبونتو </a><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-nginx%D8%8C-linux-lemp-%D9%88php-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r29/">14.04</a>
	</li>
	<li>
		<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/">كيف تُثبّت حزم </a><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/">L</a><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/">A</a><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/">MP </a><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/">كـ</a><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/">: Linux, PHP, </a><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/">Apache</a><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/"> </a><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/">و </a><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 </a><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/">على أوبونتو </a><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/">14.04</a>
	</li>
	<li>
		<a href="https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-on-ubuntu-14-04" rel="external nofollow">تثبيت سكربت إدارة المحتوى ووردبريس على خادوم </a><a href="https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-on-ubuntu-14-04" rel="external nofollow">Apache</a>
	</li>
	<li>
		<a href="https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-nginx-on-ubuntu-14-04" rel="external nofollow">تثبيت سكربت إدارة المحتوى ووردبريس على خادوم </a><a href="https://www.digitalocean.com/community/tutorials/how-to-install-wordpress-with-nginx-on-ubuntu-14-04" rel="external nofollow">Nginx</a>
	</li>
	<li>
		<a href="https://www.digitalocean.com/community/tutorials/how-to-install-drupal-on-an-ubuntu-14-04-server-with-apache" rel="external nofollow">تثبيت سكربت إدارة المحتوى دروبال على خادوم </a><a href="https://www.digitalocean.com/community/tutorials/how-to-install-drupal-on-an-ubuntu-14-04-server-with-apache" rel="external nofollow">Apache</a>
	</li>
	<li>
		<a href="https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-an-ubuntu-14-04-server" rel="external nofollow">تثبيت </a><a href="https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-an-ubuntu-14-04-server" rel="external nofollow">Node.js</a>
	</li>
	<li>
		<a href="https://www.digitalocean.com/community/tutorials/how-to-install-ruby-on-rails-on-ubuntu-14-04-using-rvm" rel="external nofollow">تثبيت </a><a href="https://www.digitalocean.com/community/tutorials/how-to-install-ruby-on-rails-on-ubuntu-14-04-using-rvm" rel="external nofollow">Ruby on Rails </a><a href="https://www.digitalocean.com/community/tutorials/how-to-install-ruby-on-rails-on-ubuntu-14-04-using-rvm" rel="external nofollow">مع </a><a href="https://www.digitalocean.com/community/tutorials/how-to-install-ruby-on-rails-on-ubuntu-14-04-using-rvm" rel="external nofollow">RVM</a>
	</li>
	<li>
		<a href="https://www.digitalocean.com/community/tutorials/how-to-install-laravel-with-an-nginx-web-server-on-ubuntu-14-04" rel="external nofollow">تثبيت </a><a href="https://www.digitalocean.com/community/tutorials/how-to-install-laravel-with-an-nginx-web-server-on-ubuntu-14-04" rel="external nofollow">Laravel, </a><a href="https://www.digitalocean.com/community/tutorials/how-to-install-laravel-with-an-nginx-web-server-on-ubuntu-14-04" rel="external nofollow">إطار عمل </a><a href="https://www.digitalocean.com/community/tutorials/how-to-install-laravel-with-an-nginx-web-server-on-ubuntu-14-04" rel="external nofollow">PHP</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/deployment/puppet/%D8%AA%D9%86%D8%B5%D9%8A%D8%A8-puppet-%D9%84%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D8%A8%D9%86%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%91%D9%8E%D8%AD%D8%AA%D9%90%D9%8A%D9%91%D9%8E%D8%A9-%D9%84%D9%84%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-r16/">تثبيت </a><a href="https://academy.hsoub.com/devops/deployment/puppet/%D8%AA%D9%86%D8%B5%D9%8A%D8%A8-puppet-%D9%84%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D8%A8%D9%86%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%91%D9%8E%D8%AD%D8%AA%D9%90%D9%8A%D9%91%D9%8E%D8%A9-%D9%84%D9%84%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-r16/">Puppet </a><a href="https://academy.hsoub.com/devops/deployment/puppet/%D8%AA%D9%86%D8%B5%D9%8A%D8%A8-puppet-%D9%84%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%A7%D9%84%D8%A8%D9%86%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%91%D9%8E%D8%AD%D8%AA%D9%90%D9%8A%D9%91%D9%8E%D8%A9-%D9%84%D9%84%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-r16/">لإدارة البنى التحتية</a>
	</li>
</ul><h2 dir="rtl">
	الخاتمة
</h2>

<p dir="rtl">
	بعد هذا الدرس، يجب أن تكون صرتَ تعرف كيفيّة إعداد بنيةٍ تحتية جيّدة لخواديمك الجديدة. لحسن الحظّ، لديك قائمة جيّدة بالأفكار التي يمكنك تطبيقها كخطوةٍ تالية. يمكنك تصفّح المقالات الموجودة بقسم DevOps بموقع أكاديمية حسوب لرؤية المزيد من الدروس التي يمكنك تطبيقها.
</p>

<p dir="rtl">
	ترجمة -وبتصرّف- للمقال: <a href="https://www.digitalocean.com/community/tutorials/additional-recommended-steps-for-new-ubuntu-14-04-servers" rel="external nofollow">Additional Recommended Steps for New Ubuntu 14.04 Servers</a>.
</p>

<p><a href="https://academy.hsoub.com/uploads/monthly_2015_04/01_تسجيل_الدخول_phpmyadmin.png.295c321e268064c860f85888061d3da7.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="1499" src="https://academy.hsoub.com/uploads/monthly_2015_04/01_تسجيل_الدخول_phpmyadmin.thumb.png.7d8d65acd349126250f0c3dcadfc4227.png" class="ipsImage ipsImage_thumbnailed" alt="01_تسجيل_الدخول_phpmyadmin.png"></a></p>
<p><a href="https://academy.hsoub.com/uploads/monthly_2015_04/02_واجهة_المستخدم_phpmyadmin.png.045caae7c8e699d90068e78539f7ab65.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="1500" src="https://academy.hsoub.com/uploads/monthly_2015_04/02_واجهة_المستخدم_phpmyadmin.thumb.png.1a44b9d74590c7249abe1b2ecb9d6e9e.png" class="ipsImage ipsImage_thumbnailed" alt="02_واجهة_المستخدم_phpmyadmin.png"></a></p>
<p><a href="https://academy.hsoub.com/uploads/monthly_2015_04/03_حماية_phpMyAdmin.png.feda987ea942c3755a7eb6482857a77d.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="1501" src="https://academy.hsoub.com/uploads/monthly_2015_04/03_حماية_phpMyAdmin.thumb.png.fe6a52a2932379e50228ade8b5c98521.png" class="ipsImage ipsImage_thumbnailed" alt="03_حماية_phpMyAdmin.png"></a></p>
<p><a href="https://academy.hsoub.com/uploads/monthly_2015_04/001.png.91b4e576c130032c5110c5f684e36c4d.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="1510" src="https://academy.hsoub.com/uploads/monthly_2015_04/001.thumb.png.b5e8c5085b075691b6ce97a350d557b7.png" class="ipsImage ipsImage_thumbnailed" alt="001.png"></a></p>
<p><a href="https://academy.hsoub.com/uploads/monthly_2015_04/002.png.f5d8a9af9b437c8251ce1091ca5ab21f.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="1511" src="https://academy.hsoub.com/uploads/monthly_2015_04/002.thumb.png.a59a2b331d4bd8b8a3b9f14aa1e5fd6e.png" class="ipsImage ipsImage_thumbnailed" alt="002.png"></a></p>
<p><a href="https://academy.hsoub.com/uploads/monthly_2015_04/003.png.00dfc499b336d8a7e407c21072117b37.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="1512" src="https://academy.hsoub.com/uploads/monthly_2015_04/003.thumb.png.15e8ef1fd50552a14176f3e162cff70a.png" class="ipsImage ipsImage_thumbnailed" alt="003.png"></a></p>
<p><a href="https://academy.hsoub.com/uploads/monthly_2015_04/004.png.fee1fff9340b4e50b02202eba32a19df.png" class="ipsAttachLink ipsAttachLink_image"><img data-fileid="1513" src="https://academy.hsoub.com/uploads/monthly_2015_04/004.thumb.png.9d7dffa4c94966a599b734e62f235cce.png" class="ipsImage ipsImage_thumbnailed" alt="004.png"></a></p>]]></description><guid isPermaLink="false">36</guid><pubDate>Tue, 28 Apr 2015 12:51:00 +0000</pubDate></item><item><title>&#x625;&#x639;&#x62F;&#x627;&#x62F; &#x627;&#x644;&#x630;&#x651;&#x627;&#x643;&#x631;&#x629; &#x627;&#x644;&#x648;&#x647;&#x645;&#x64A;&#x651;&#x629; (&#x645;&#x644;&#x641;&#x651;&#x627;&#x62A; &#x627;&#x644;&#x62A;&#x628;&#x627;&#x62F;&#x644;) &#x639;&#x644;&#x649; &#x62E;&#x627;&#x62F;&#x648;&#x645; &#x62E;&#x627;&#x635; &#x648;&#x647;&#x645;&#x64A;&#x651; (VPS)</title><link>https://academy.hsoub.com/devops/servers/%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D9%84%D8%B0%D9%91%D8%A7%D9%83%D8%B1%D8%A9-%D8%A7%D9%84%D9%88%D9%87%D9%85%D9%8A%D9%91%D8%A9-%D9%85%D9%84%D9%81%D9%91%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%A8%D8%A7%D8%AF%D9%84-%D8%B9%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D8%AE%D8%A7%D8%B5-%D9%88%D9%87%D9%85%D9%8A%D9%91-vps-r34/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_04/swap.png.fccdeafb4f131e73af1631a85b289b7b.png" /></p>

<div><div><div><div><div><div><div><p>يتناول هذا المقال محاسن ومساوئ استخدام <strong>ذاكرة وهميّة </strong>(virtual memory)، أو كما يُطلق عليها بملفّ التبديل (swap file)، أو كما تُطلِق أنظمة ويندوز على هذه التقنيّة بالترقيم (paging)، أيضا سيتمّ التَّطَرُّق إلى كيفيّة تحديد فيما إذا كان النّظام المؤجّر (الخادوم) يستخدم هذه الذّاكرة الوهميّة أم لا، كما سيتمّ التَّطَرُّق إلى الاختلاف بين ملفّ التبديل (swap file)، وقسم التبديل (swap partition)، وكما سيتمّ تناول آلية إنشاء ملفّ تبديل، وكيفيّة إعداد ملفّات “<strong>swappiness</strong>”، والّتي تسمح لمُدير النظام بتحديد مدى الاعتماد على الذّاكرة الوهميّة، والحجم المُناسب للاستخدام.</p><p>يمكن الاستزادة والقراءة عن <a rel="external nofollow" href="http://en.wikipedia.org/wiki/Swap_file">التبديل</a> (Swap)، و<a rel="external nofollow" href="http://en.wikipedia.org/wiki/Virtual_memory">الذّاكرة الوهميّة</a> على موسوعة ويكبيديا، والّتي ستجيب على الكثير من الأسئلة الّتي لن يتطرّق لها هذا الشرح.</p><p>سيتمّ اقتباس أحد الأجزاء المهمّة:</p><blockquote><blockquote class="ipsQuote" data-cite="اقتباس" data-ipsquote=""><p>يُعتبر الترقيم (paging) جزء من إتمام وإنجاز الذّاكرة الوهميّة في معظم أنظمة التشغيل الحديثة، والمُصنّفة على أنّها للأغراض العامّة، لتسمح لهذه الأنظمة في استخدام الأقراص في حفظ المُعطيات الّتي لم يتمّ احتوائها في ذاكرة الوصول العشوائية (RAM) الفيزيائيّة.</p><p>يُعتبر الترقيم (paging) في أنظمة التشغيل الخاصّة بالحاسوب جزء من تصميمات/وحدات إدارة الذّاكرة، والّتي من خلالها يقوم الحاسوب بتخزين واستعادة المُعطيات من وحدة تخزين ثانويّة، وذلك للاستخدام في الذّاكرة الرَّئِيسَة، حيثُ يستعيد نظام التشغيل المُعطيات من وحدة التخزين الثانويّة ذات نفس الحجم الكتل (blocks)، والّتي تُدعى صفحات (pages)، حيثُ تعتبر الغاية الرئيسيّة من استخدام الترقيم على استخدام مُتجزّئات الذّاكرة (memory segmentation) هي السماح لمساحة العنوان الفيزيائي الخاصّ بالعمليّة (process) ليُحفظ بشكل غير مُتجاور، حيثُ أنّه وقبل أنّ يتمّ العمل بنظام الترقيم، كان على الأنظمة أنّ تَحشر جميع البرامج داخل وحدة التخزين على شكل مُتجاور، الأمر الّذي كان يُسبب مشاكل في التخزين ومشاكل في التجزئة (fragmentation).</p></blockquote></blockquote></div><div><h2>الذّاكرة الوهميّة ومُتطلّباتُها</h2></div><div><h3>ماهي الذّاكرة الوهميّة ولماذا يجب استخدامها؟</h3><p>ليس المهم إن كان النظام يَملك ذاكرة وصول عشوائي من الحجم 512mb، أو حتّى 8mb، وليس مُهمًا إن كان نظام التشغيل هو Arch أو Fedora أو CentOS أو Debian، أو حتّى Ubuntu، فإن التطبيقات أوالخواديم ستحتاج إلى المزيد من <strong>الذّاكرة العشوائيّة الفيزيائيّة</strong>، أو الذّاكرة المُحدّدة (memory allocated) الوهميّة عندما يكون الخادوم خادومًا وهميًّا، كما هو حال الخادوم المُستخدم في هذا الدليل.</p><p>إنّ معرفة فيما إذا كانت الذّاكرة الوهميّة غير مفعّلة على النّظام لأمرٌ ضروريٌ يجب على مُدير النظام أن يُدركه، حيثُ أنّ النّظام في حال وصوله إلى نقطةٍ ما لا يتوفّر به أي ذاكرة حرّة، وطلبت خدمةٌ ما، أو برنامجٌ ما، أو ربما خادم الوب نفسه إلى المزيد من الذّاكرة، سيؤدي ذلك إلى فشل هذه الخدمة أو البرنامج عن العمل، وبناءً على نظام التشغيل وإعداداته، فمن المُمكن جدًا أنّ يسبب ذلك إلى مشاكلٍ لا تُحمد عُقباها، أو على الأقل ستصبح البرامج في حالة من عدم الاستقرار، وأيضًا قد تُجبر بعض التطبيقات على التوقف عن العمل لتحرير مساحة الذّاكرة المطلوبة، الأمر الّذي يزيد من تعقيد الأمور، خاصّة عندما يكون هذا الخادوم خادومًا يعمل في البيئة الحقيقية (production server)، وليست البيئة التّطويريّة (development server).</p><p>يَنصح الخبراء، وبسبب الاحتماليّة السابقة، مُدراء الأنظمة، وحتّى الأشخاص غير المتخصّصين، وعلى أي نظام تشغيل، سواء Windows، أو OSX، أو حتّى الأجهزة اللّوحيّة الخاصّة الّتي تعمل بنظام التشغيل Android، بوجوب تفعيل الذّاكرة الوهميّة، حتّى ولو بحجمٍ صغيرٍ.</p></div><div><h3>آلية عمل الذّاكرة الوهميّة</h3><p>تُقدّم الذّاكرة الوهميّة للنظام، وبطبيعة الحال للتطبيقات الخاصّة به، ذاكرة RAM وهميّة إضافية، بالإضافة إلى ما يقدمه النّظام من ذاكرة فيزيائيّة – في حالة الخادوم الوهميّ ستكون الذّاكرة هي الذّاكرة المُحدّدة (allocated memory)، وليست الذّاكرة الفيزيائيّة – تعمل الذّاكرة الوهميّة عملها بالاستعانة بأقراص التخزين (disks) في سبيل تقديم هذه المساحة الإضافيّة، وذلك عن طريق تبادل المعطيات ذهابًا وإيابًا بين ذاكرة النّظام، والذّاكرة الوهميّة، وعلى حسب الحاجة.</p><p>يجب أنّ يعي مُدراء الأنظمة أنّ عمليّة الكتابة والقراءة على الأقراص (disks) – حتّى السريع منها SSD – هي أبطأ بكثير من الكتابة على ذاكرة النّظام الحقيقيّة، فعلى الرغم من أنّ الذّاكرة الوهميّة ستقدّم مساحة تخزين لتنقذ بها موارد النّظام، من تطبيقات وخدمات لتعمل بشكلٍ ملائم، وتجنيبها الخروج عن العمليّة التشغيليّة المخصّصة لها (وذلك عن طريق عدم الوقوع في شرك “امتلاء الذّاكرة“) فإن الذّاكرة الوهميّة ليست بالبديل عن الذّاكرة الفيزيائيّة، وليست بالحلّ العمليّ الذي يُمكن الاعتماد عليه، ولا يُمكن بأي حالٍ من الأحوال الاستغناء عن ترقية الذّاكرة الفعليّة الخاصّة بالنظام إنّ كان النظام يستعين بالذّاكرة الوهميّة بشكلٍ كبير.</p><p>قد لا تبدو فكرة هذا الدليل بتلك الأهميّة لبعض خُبراء الأنظمة، ولكنها في حقيقة الأمر معلومات لا يُمكن تجاهلها، وخاصّةً لأي شخص يستخدم خدمات الاستضافة (hosting services)، وبالتحديد لهؤلاء الجُدد منهم على أنظمة VPS بشكلٍ عام، أو أي خادومٍ مهما كان.</p></div><div><h3>مُتطلّبات بيئة العمل</h3><p>تتطلّب بيئة العمل إعدادًا بسيطًا للغاية، ومن المُفترض أنّ تعمل هذه التقنيّة على جميع التوزيعات باختلاف أشكالها ونكهاتها، أو مع الأنظمة الوهميّة أو الفيزيائيّة، حتّى أنها تعمل على أنظمة Android، سواءً أجهزة الهاتف المحمول، أو الأجهزة اللوحيّة ولكن بشرط توفّر صلاحيات وصول عالية (root).</p></div><div><h3>مُتطلّبات تطبيق هذا الدليل</h3><ul><li>خادوم وهميّ يعمل بأحد أنظمة التشغيل المُعتمدة على Linux</li><li>صلاحيات وصول كاملة سواءً كان الخادوم محلي local أو يعتمد على تقنيّة الوصول عن بُعد vnc أو باستخدام تقنية ssh.</li><li>الأوامر الّتي سيتمّ استخدامها هي: <strong>free</strong>, <strong>swapon</strong>, <strong>dd</strong>, <strong>mkswap</strong>، والّتي من المُفترض توفّرها على أي منصّة.</li></ul><p>تَقوم مُعظم المنصّات وبشكل آليّ بإنشاء إما قسم تبادل، أو ملفّ خاص داخل قسم النظام، وذلك خلال عمليّة إعداد النّظام، وبحجمٍ عادةً ما يكون مُعتمدًا على الذّاكرة الحقيقيّة للنظام RAM، فإما أنّ يكون نفس الحجم الذّاكرة أو ضعفها.</p></div><div><h2>المحاسن والمساوئ</h2><p>تجدُر الإشارة قبل الدخول في التفاصيل، أنّ أقراص SSD:</p><ul><li>أسرع بكثير من الأقراص الصلبة العاديّة.</li><li>لا تعاني من انخفاض أداء عند البحث (low seek times)، والذي يُسببه رأس القرص الصلب عند تنقله الفيزيائيّ لقراءة البيانات.</li><li>معدّل طلبات إدخال وإخراج (IO) مُنخفض خلال الثانية الواحدة.</li><li>تستطيع القراءة من أجزاء متعدّدة وفي نفس الوقت، بينما لا تستطيع الأقراص الصلبة العاديّة القراءة سوى من جزء مُحدّد في الوقت نفسه.</li></ul><p>تُقدم أقراص التخزين SSD قيمةً إضافيّة للذاكرة الوهميّة، وتُقلّل من المعاناة الّتي قد يُواجها مُدير النّظام مع الأقراص الصلبة، ومع ذلك فليس من المُستحسن الاعتماد عليها واستخدامها بدلًا من الذّاكرة RAM، خاصّةً مع الخواديم ذات الحِمل العالي: خواديم البريد الإلكتروني (web mail)، أو خواديم الوب (web server)، أو خواديم قواعد البيانات (database server).</p></div><div><h3>محاسن استخدام الذّاكرة الوهميّة</h3><ul><li>حماية ضد أخطاء “امتلاء الذّاكرة” (out of memory)، أو ما يُشار إليها بالاختصارOOM، بالإضافة إلى الحماية من انهيار النّظام، والحماية من دخول الخادوم في حالة عدم استقرار.</li><li>زيادة الذّاكرة المُتوفّرة للنظام، الأمر الّذي يسمح بتشغيل المزيد من البرامج والتطبيقات بنفس الوقت، مع توفّر أمان عالي أثناء عملها.</li><li>تقوم أقراص التخزين من نوع SSD بالتقليل من الفتور (lag)، بالإضافة إلى التقليل من عدد النقرات (thrashing)، وذلك عن طريق زيادة وقت استجابة الترقيم (paging).</li></ul></div><div><h3>مساوئ استخدام الذّاكرة الوهميّة</h3><ul><li><p>تزداد معدّل النقرات (thrashing)، عندما يكون النّظام مشغولًا جدًا، ويطلب ذاكرة أكثر من المُعدّل الطّبيعيّ، وعندما لا تستطع الذّاكرة الفيزيائية تلبية حاجة النّظام، سيُجبر النّظام على الدخول في دوامة يقوم بها بنقل بيانات البرامج من وإلى القرص، ومن وإلى الذّاكرة العشوائيّة، وعلى مُقتضى الحاجة، ولرُبما تبدو هذه الحالة بالمألوفة لمُستخدمي أنظمة التشغيل ويندوز، عندما يتمّ تحميل النظام فوق طاقته، سيدخل القرص الصلب في قيلولة، قد لا يستيقظ منها قبل أنّ ينتهي فنجان القهوة، ولكن هذه الحالة من المُمكن تجنبها بالإعداد المُناسب، واستخدام أقراص من SSD</p></li><li><p>استهلاك مساحة القرص الصلب، حيث تعتمد هذه المساحة على ذاكرة النّظام الرئيسية، فعند توفّر ذاكرة بسعة 512mb، فمن المُستحسن استخدام 512mb إلى 1.5g للتبديل، ولكن على صِغر هذه المساحة، ستبقى مساحةً ناقصةً من قرص الخادوم في جميع الأحوال.</p></li></ul><p>يُنصح بشكلٍ عام باستخدام قرص مُقسّم ومُخصّص لعمليّة التبديل، ولكن هذا الأمر قد لا يتوفّر في بعض الأنظمة المؤجّرة، ولذلك سيكون لا محالة من استخدام نظام ملفّ التبديل (swap file) أو صورة قرص (disk image)</p></div><div><h2>كيف يتمّ التأكد من تفعيل خدمة الذّاكرة الوهميّة على الخادوم الخاصّ الوهميّ</h2><p>قد يكون الخادوم المؤجّر بالفعل يستخدم الذّاكرة الوهميّة، وللتأكّد من ذلك يُمكن الاستعانة بالأمر free، والّذي يَكشف لمُدير النّظام إن كانت خدمة التبديل مفعّلة أم لا، ويُظهر العديد من الخيارات الإضافيّة، والّتي تكون مُساعدة لمُدير النّظام، مع الانتباه أنّه يجب استخدام المُستخدِم root لتنفيذ الأمر، ولتحديد المُستخدِم الحاليّ يُمكن الاستعانة بالأمر <strong><span style="font-family:'courier new', courier, monospace;">whoami</span></strong>.</p><pre class="ipsCode prettyprint">bash-root@academy.hsoub:/# free</pre><p>يُظهر الأمر free معلومات عن ذاكرة النّظام الوهميّة والذّاكرة الفيزيائيّة، وفيما إذا كانت الذّاكرة الوهميّة مُفعّلة أم لا، فالمُخرجات التّالية هي لخادوم قد تمّ تفعيل خدمة التبديل عليه:</p><pre class="ipsCode prettyprint">bash-root@academy.hsoub:/# free
             total       used       free     shared    buffers     cached
Mem:        361996     360392       1604          0       1988      54376
-/+ buffers/cache:     304028      57968
Swap:       249896          0     249896</pre><p>وفي حال كانت خدمة الذّاكرة الوهميّة مُعطّلة ستكون المُخرجات على الشكل التّالي:</p><pre class="ipsCode prettyprint">bash-root@academy.hsoub:/# free
             total       used       free     shared    buffers     cached
Mem:        361996     360392       1604          0       2320      54444
-/+ buffers/cache:     303628      58368
Swap:            0          0          0</pre><p>يُمكن استخدام الأمر free | grep Swap لعرض المُخرج المطلوب فقطّ، وهو السطر الخاصّ بالخاصيّة Swap.</p><pre class="ipsCode prettyprint">bash-root@academy.hsoub:/# free | grep Swap
Swap:       249896          0     249896</pre></div><div><h2>الفرق بين أقسام التبديل وملفّات التبديل</h2></div><div><h3>ملاحظة حول أقسام التبديل (Swap Partitions)</h3><p>يُفضل بشكلٍ عام استخدام قسم/تجزئة تبديل مُخصّص (dedicated swap partition) على القرص الصلب، وذلك للأنظمة الّتي تعتمد على لينكس في بُنيتها، مع العلم أنّ مُعظم الأنظمة تقوم بهذه العمليّة خلال عمليّة الإعداد (التنصيب)، وفي هذه الحالة ستكون الذّاكرة الوهميّة من نوع “قسم التبديل” (swap partition) في مُعظم الأحيان.</p><p>ولكن يُمكن استخدام الطريقة الّتي سيتمّ شرحها في هذا الشرح لزيادة الذّاكرة الوهميّة المتاحة باستخدام ملفّ التبديل swap file، ليتمّ به زيادة مساحة قسم التبديل، مع العلم أنّه إنّ كان النّظام يدير عمليّة التبديل، فقد يكون إضافة ذاكرة وهميّة غير ضروريّ، وقد يكون من الأفضل الاعتماد على الإعداد الافتراضيّ.</p></div><div><h3>ما هو ملفّ التبديل (Swap File)</h3><p>تخزّن بعض الأنظمة (خاصّةً نظام التشغيل ويندوز) الذّاكرة الوهميّة في ملفّ مُحدّد، بدلًا من استخدام قرص كامل لذلك، وهذا الأسلوب هو المُستخدم دائمًا عندما لا يكون من المُمكن استخدام قسم كامل للذاكرة الوهميّة، وإن هذا النوع من الملفّات يقابله بما يُسمى صورة قرص disk image على أنظمة التشغيل لينكس.</p></div><div><h3>ما هو صورة القرص (Disk Image)</h3><p>يتضمّن هذا النوع عادةً ملفّات التبديل وبياناتها، بالإضافة إلى ملفّات النّظام المرتبطة معها، ويُستخدَم هذا النوع في بعض الأنظمة المؤجّرة لأخذ نسخة احتياطيّة كاملة عن النّظام، أو في تهجير النّظام (migration) من مكان إلى آخر، ومن الأمثلة الشائعة أيضًا عن هذا النوع من الملفات هو توزيعات لينكس كيف أنّها تأتي باللاحقة .iso، والّتي تستخدم في تنصيب النّظام كما هو معروف.</p></div><div><h2>إنشاء ملفّ تبديل (Creating the Swap File)</h2><p>لا تَسمح بعض الأنظمة المؤجّرة بتقسيم وتهيئة مساحة التخزين، لذلك يَتوجّب على مُدير النّظام استخدام صورة قرص (disk image)، ومع العلم أنّ أنظمة التشغيل المبنيّة على NIX* تستخدم نظامًا خاصًا ومكرّسًا لعمليّة التبديل (swap)، ولهذا السبب يُفضّل البعض قسم التبديل على ملفّ التبديل، ولإنشاء هذا النوع من الملفّات يجب إنشاء صورة قرص فارغة (empty disk image) بحجم مُتوافق مع الذّاكرة الوهميّة المطلوبة، وتهيئتها لبدء العمل.</p><p>يجب أولًا تحديد مكان الملفّ، ويجب توفّر مساحة كافية على القرص، فعند الرغبة بإضافة ذاكرة وهميّة بحجم 512mb، سيكون عندها ملفّ التبديل تقريبًا بذلك الحجم.</p><p>يُمكن استخدام الأمر df-h، لاستعراض التقسيمات المُدرجة (mounted partitions)، كما يُظهر هذا الأمر معلومات عن نظام الملفّات المُستخدَم وحجم كل تقسيم، والمساحة الحرّة الخاصّة بكل قسم.</p><p>سيتمّ إضافة ملفّ التبديل في المسار /var، وبالاسم ”swap.img”، وبالصلاحيات 600، وذلك فقطّ لكي لا يستطيع أيًا كان من المُستخدمين قراءة مُحتويات ذاكرة النّظام (الوهميّة).</p><pre class="ipsCode prettyprint">bash-root@academy.hsoub:/# cd /var
bash-root@academy.hsoub:/var# touch swap.img
bash-root@academy.hsoub:/var# chmod 600 swap.img</pre></div><div><h3>اختيار حجم ملفّ التبديل (Sizing Swap File)</h3><p>سيتمّ في هذه الخطوة اختيار حجم الملفّ، وهو أمرٌ هامٌ جدًا، ويَختلف الحجم الأنسب على حسب نظام التشغيل وحسب الحالة، ولكن بشكلٍ عام، يُنصح دائمًا بأن تكون الذّاكرة الوهميّة أما بنفس حجم ذاكرة الوصول العشوائي (RAM)، وأو ضعف حجمها، ولكن عندما يتوفّر بالنظام ذاكرة فيزيائيّة كبيرة الحجم، فلا يُنصح بتكبير حجم ملفّ التبديل.</p><p>سيتمّ استخدام الأمر dd لحشو ملفّ التبديل بمعطيات وهميّة، ليتوسع إلى الحجم المطلوب، في المثال التّالي سيكون 1024mb.</p><pre class="ipsCode prettyprint">bash-root@academy.hsoub:/var# dd if=/dev/zero of=/var/swap.img bs=1024k count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1.0 GB) copied, 4.0868896 s, 253 MB/s</pre></div><div><h3>تحضير صورة القرص (Disk Image)</h3><p>سيتمّ تطبيق الأمر mkswap، وذلك لتحضير نظام الملفّات للملفّ swap.img، بعد ذلك سيكون الملفّ جاهزًا للاستخدام.</p><pre class="ipsCode prettyprint">bash-root@academy.hsoub:/var# mkswap /var/swap.img
Setting up swapspace version 1, size = 1020 GiB
no label, UUID=72761533-8xbe-436l-b07e-c0sabe9cedf3</pre></div><div><h2>كيفيّة تفعيل وتعطيل ملفّ التبديل (Enabling and Disabling Swap)</h2></div><div><h3>تفعيل ملفّ التبديل</h3><p>سيتمّ استخدام الأمر swapon لتفعيل ملفّ التبديل، مع الانتباه أنه في حال نجاح عمليّة التفعيل، فالأمر السابق لا يَعرض مُخرجات بنجاح العمليّة والحالة النهائيّة، ولذلك يُمكن استخدام الأمر free.</p><pre class="ipsCode prettyprint">bash-root@academy.hsoub:/var# swapon /var/swap.img
bash-root@academy.hsoub:/var# free
             total       used       free     shared    buffers     cached
Mem:        503596     478928      24668          0      38832     102384
-/+ buffers/cache:     337712     165884
Swap:      1048572       1780    1046792</pre><p>ولتعطيل ملفّ التبديل يُمكن استخدام الأمر swapoff /var/swap.img.</p></div><div><h3>تفعيل ملفّ التبديل خلال عمليّة الإقلاع</h3><p>يقوم الأمر swapon بتفعيل ملفّ التبديل فقط للإقلاع الحاليّ للنظام، بمعنى أنّه عند إعادة إقلاع الخادوم، سيكون ملفّ التبديل معطلًا، إلا إذا تمّت برمجة الأمر ليتم تنفيذه عند الإقلاع، أو تمّ التعديل على الملفّ /etc/fstab، وهي الطريقة الأسهل والأكثر استخدامًا.</p><p>ما يجب عمله هو إضافة سطر إلى الملفّ /etc/fstab، ليتمّ تفسيره عند الإقلاع، ولكن يجب الحذر في استخدام هذا الأمر، فالتعديل الخاطئ من شأنه أنّ يعطب النّظام.</p><pre class="ipsCode prettyprint">bash-root@academy.hsoub:/var# echo "/var/swap.img    none    swap    sw    0    0" &gt;&gt; /etc/fstab</pre><p>يُستخدم الرمز <span style="font-family:'courier new', courier, monospace;"><strong>&gt;&gt;</strong></span> للإضافة، ولو تمّ استخدام الرمز <span style="font-family:'courier new', courier, monospace;"><strong>&gt;</strong></span>، لتمّ الكتابة من جديد ومسح الإعدادات (مُحتويات الملفّ) السابقة.</p></div><div><h2>إعدادات إضافيّة ومعلومات تفصيليّة</h2><p>ما أنّ يتمّ تفعيل ملفّ التبديل، لتصبح الذّاكرة الوهميّة على أتمّ الاستعداد لتعمل عملها، ولكن هناك بعض التفاصيل الّتي سيتمّ التّطرّق لها لفهم أفضل لعمل هذه التقنيّة.</p></div><div><h3>الأولَوِيّات</h3><p>يجب تحديد أولَويّات عند استخدام أكثر من ملفّ تبديل، أو عند استخدام أقسام موزّعة عبر أجهزة عدّة، <br>بمعنى أنه يجب تحديد ترتيب أولويّة لكل جزء من أجزاء التبديل، فالحاجة إلى توزيع الأولويات هو للتفضيل بين الجزء السريع على البطيء، أو للتفضيل بين قسم التخزين الخامل (idle) على القسم النشط، ولذلك يتمّ تمرير الأولويّة كمُعامل للأمر swapon، أو استخدام الملفّ /etc/fstab في ذلك.</p><p>سيستخدم النّظام قسم التبديل ذو الأولويّة الأعلى على أقسام التبديل ذو الأولويّة المُنخفضة:</p><pre class="ipsCode prettyprint">​bash-root@academy.hsoub:/var# swapon -p 100 /var/swap.img
bash-root@academy.hsoub:/var# swapon -p 10 /mnt/SecondDrive/swap.img</pre><p>ولاستخدام الملفّ /etc/fstab لتحديد الأولويّة يُمكن كتابة السطور التّالية:</p><pre class="ipsCode prettyprint">/var/swap.img none swap defaults,pri=100 0 0
/mnt/SecondDrive/swap.img none swap defaults,pri=10 0 0</pre></div><div><h3>خيارات الأمر sysctl</h3><p>سيتمّ استخدام الأمر sysctl، وذلك لتغيير الإعدادات المخصّصة بمُدير الذّاكرة الوهميّة (virtual memory manager) لنظام التشغيل لينكس.</p><p>يُعتبر الإعداد الخاصّ بـ vm.swappiness هامًا جدًا، ومُهمته إخبار مُتولّي (handler) نواة النّظام كيف من المُفترض أنّ تُستخدَم الذّاكرة الوهميّة، وقيمة هذا الخيار تُحدّد بالنسبة المئويّة أي بين 0-100، والنسبة 60 هي الافتراضيّة في مُعظم التوزيعات، وعند الإعداد يجب الانتباه إلى التّالي:</p><ul><li>القيمة 0: بالكاد ستستخدم النواة أيًا من مساحة التبديل المتوفّرة، بل ستصب كافة الأحمال على ذاكرة النّظام المتوفّرة أولًا.</li><li>القيمة 100: ستستخدم النّواة مُعظم مساحة التبديل المتوفّرة، وستُحاول إبقاء المساحة العُظمى من ذاكرة النّظام حرّة للاستخدام.</li></ul><p>لا يوجد قيمة مثاليّة هنا، أو قاعدة يجب الالتزام بها، بل تختلف الحالة، ولكن القيمة 30% مُناسبة بشكل عام، والّتي من شأنها الموازنة بين التبادل (swapping)، وذاكرة النّظام (system memory).</p><pre class="ipsCode prettyprint">bash-root@academy.hsoub:/var# sysctl -w vm.swappiness=30
vm.swappiness = 30</pre></div><div><h2>كلمات أخيرة</h2><p>يجب أن يُدرك مُدير النّظام بعد هذا الشرح أهمّيّة ملفّات التبديل ومدى تأثيرها على استقرار النّظام في بيئة العمل الحقيقيّة (production environments)، وهذا من شأنه أيضًا أنّ يسمح لمُدير النّظام باستخدام هذا النوع من التقنيّة في بيئة التّطوير لتجربة بعض التّقنيّات الّتي يعمل عليها.</p><p>ترجمة – وبتصرّف – للمقال <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-configure-virtual-memory-swap-file-on-a-vps">How To Configure Virtual Memory (Swap File) on a VPS</a> لصاحبه Jai Boudreau.</p></div></div></div></div></div></div></div>
]]></description><guid isPermaLink="false">34</guid><pubDate>Sun, 26 Apr 2015 18:54:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x62B;&#x628;&#x62A; &#x62D;&#x632;&#x645; MySQL &#x60C;nginx &#x60C;Linux :LEMP &#x648;PHP &#x639;&#x644;&#x649; &#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-%D8%AD%D8%B2%D9%85-mysql-%D8%8Cnginx-%D8%8Clinux-lemp-%D9%88php-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r29/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_04/LEMP_480x300.jpg.9e14084611294ecca06489f7b1699710.jpg" /></p>

<p dir="rtl">حِزم LEMP هي مجموعة من البرامج يُمكِن استخدامُها لتقديم صفحات ويب ديناميكيّة وتطبيقات ويب. يُشير هذا الاختصار إلى بيئة تتكوَّن من نظام تشغيل Linux، وخادوم ويب Nginx؛ تُخزَّن البيانات في قاعدة بيانات MySQL ويتولّى PHP مُعالجةَ المحتوى الدّيناميكي.</p><p dir="rtl">سنشرح في هذا الدّرس كيفيّة تثبيت حزم LEMP على خادوم Ubuntu 14.04. يُمثِّل Ubuntu اللّبنة الأولى من حزمة LEMP في هذا الدّرس؛ سنشرح كيفيّة الحصول على بقيّة المُكوِّنات وتشغيلها.</p><h2 dir="rtl">المتطلبات</h2><p dir="rtl">لإجراء الخطوات المذكورة في هذا الدّليل، يجب أن يكون لديك حساب عادي (غير الحساب الجذر Root user) بصلاحيّات sudo. يُمكنك معرفة كيف تضبُط حسابًا بهذه المواصفات في الخطوات من 1 إلى 4 من درس<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><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 dir="rtl">سجِّل الدّخول إلى خادومك عبر الحساب المذكور حتى تكون جاهزًا لتطبيق خطوات الشّرح.</p><h2 dir="rtl">الخطوة الأولى: ثبت خادوم ويب Nginx</h2><p dir="rtl">لنكون قادرين على عرض صفحات ويب لزوّار موقعنا سنستخدم Nginx؛ وهو خادوم ويب حديث وفعّال. كلّ البرامج الّتي سنُثبِّتها موجودة في المُستودعات Repositories الرّسميّة لأوبنتو، لذا سنستعين ببرنامج apt لإدارة الحزم لإكمال عمليّة التّثبيت.</p><p dir="rtl">نبدأ أوّلًا بتحديث فهرس الحزم، ثمّ نُثبِّت خادوم الويب:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">sudo apt-get update
sudo apt-get install nginx</pre><p dir="rtl">في أوبنتو 14.04 يبدأ Nginx بالعمل فور تثبيته. يُمكِن التّأكّد من ذلك عبر إدخال اسم نطاق Domain name أو عنوان IP الخادوم العموميّ في شريط العنوان الموجود في مُتصفِّح الويب.</p><p dir="rtl"><strong>ملحوظة</strong>: إذا كنتَ تُجرِّب هذه الخطوات على جهازك الشّخصي (أو جهاز محلّي) فعنوان خادوم الويب هو 127.0.0.1 (أو localhost).</p><p dir="rtl">يُمكنك معرفة عنوان IP خادومك العمومي إن لم تكن تعرفه، ولا تملك اسمَ نطاق يُشير إلى موقعك، عبرَ تنفيذ الأمر التّالي في الطّرفيّة:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'</pre><p dir="rtl">مثال على نتيجة تنفيذ الأمر أعلاه:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">111.111.111.111
fe80::601:17ff:fe61:9801
</pre><p><span style="line-height: 1.6;">يُمكن أيضًا تجربة الأمر:</span></p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">curl http://icanhazip.com</pre><p dir="rtl">النّتيجة:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">111.111.111.111</pre><p dir="rtl">جرّب الدّخول إلى العنوان الّذي حصلتَ عليه عن طريق إدخاله في شريط عنوان المتصفِّح:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">http://server_domain_name_or_IP</pre><p dir="rtl">يجب أن تظهر لديك صفحة الهبوط Landing page الافتراضيّة لـNginx:</p><p style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_04/01_%D8%A3%D9%87%D9%84%D8%A7_%D8%A8%D9%83_nginx.png.22e840e08595e4ed330767dcae6817fa.png"><img data-fileid="1226" class="ipsImage ipsImage_thumbnailed" src="https://academy.hsoub.com/uploads/monthly_2015_04/01_%D8%A3%D9%87%D9%84%D8%A7_%D8%A8%D9%83_nginx.thumb.png.5c99c05cc46b5b4a393119b22eec34b8.png" alt="01_%D8%A3%D9%87%D9%84%D8%A7_%D8%A8%D9%83"></a></p><p dir="rtl">إذا ظهرت لك هذه الصّفحة فمعناهُ أنّ Nginx ثُبِّت بنجاح.</p><h2 dir="rtl">الخطوة الثانية: ثبت MySQL لإدارة بيانات الموقع</h2><p dir="rtl">نحتاج بعد تثبيت خادوم الويب إلى نِظامٍ لإدارة قواعد البيانات Database management system, DBMS من أجل حفظ وإدارة بيانات موقعنا. سنستخدم MySQL لهذا الغرض. لتثبيت MySQL نُنفِّذ الأمر:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">sudo apt-get install mysql-server</pre><p dir="rtl">سيُطلب منك إدخال كلمة سر لحساب المُستخدم الأعلى (الجذر Root) ضمن نظام MySQL.</p><p dir="rtl">ملحوظة: كلمة السّر هنا هيّ لحساب إداري ضمن MySQL ولا علاقةَ لها بالمستخدِم الجذر في أوبنتو.</p><p dir="rtl">نُواصِل مع MySQL عبر استكمال إعداداتِه.</p><p dir="rtl">أوّلًا، نُنفِّذ الأمر التّالي الّذي يطلُب من MySQL توليدَ بُنية المجلّدات الّتي يحتاجها من أجل حفظ قواعد البيانات:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">sudo mysql_install_db</pre><p dir="rtl">ثمّ ننتقل لإجراء بضعة إعدادات أمنيّة حيثُ سنُغيِّر قيّمًا افتراضيّة غير الآمنة، عبر تنفيذ سكربت "التثبيت الآمن":</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">sudo mysql_secure_installation

</pre><p dir="rtl">سيُطلَب منك إدخال كلمة سر حساب المُدير في MySQL (نفس كلمة السّر الّتي أدخلتها أثناء التّثبيت).</p><p dir="rtl">بعدها ستظهر رسالة تسألك إذا ما كنتَ تُريد تغيير كلمة سر المُدير في MySQL، إن لم تكن ترغب في ذلك أدخل حرف <span style="font-family:courier new,courier,monospace;">N</span> ثمّ اضغط زر Enter. بقيّة الأسئلة تتعلّق بإزالة بعض الحسابات وقواعد البيانات المُعَدَّة للتّجربة؛ فقط اضغط Enter للإجابة عليها وستُحذَف الإعدادات الافتراضيّة غير الآمنة.</p><p dir="rtl">نظام إدارة قواعد البيانات MySQL جاهز الآن للعمل.</p><h2 dir="rtl">الخطوة الثالثة: ثبت PHP لمعالجة البيانات</h2><p dir="rtl">ثبّتنا كلًّا من Nginx لتقديم صفحات الموقع وMySQL لتخزين وإدارة البيانات؛ بقيَ ربطُ الاثنيْن من أجل توليد محتوى ديناميكي. يُؤدّي PHP هذه الوظيفة.</p><p dir="rtl">لا يأتي خادوم ويب Nginx بمعالج PHP مُضَمَّن كما هي حال بعض خواديم الويب الأخرى، لذا سنحتاج إلى تثبيت<span style="font-family:courier new,courier,monospace;"> php5-fpm</span> (حيثُ <span style="font-family:courier new,courier,monospace;">fpm</span> اختصار لـ fastCGI process manager، وهوّ مُكوِّن مسؤول عن تقديم المحتوى الديناميكي في PHP)، ثمّ نطلُب من Nginx تمريرَ طلبات PHP إلى هذا البرنامج لمُعالجتها.</p><p dir="rtl">يُمكِن تثبيت هذا العُنصُر وفي نفس الوقت نُثبِّت المكوِّن الّذي يسمح ل PHP بالتّواصُل مع النّهاية الخلفيّة Backend متمثّلةً في قاعدة البيانات؛ سيُنزِّل أمرُ التّثبيت كافّةَ الملفّات الضّروريّة:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">sudo apt-get install php5-fpm php5-mysql</pre><h3 dir="rtl">ضبط مُعالج PHP</h3><p dir="rtl">ينتُج عن تنفيذ الأمر السّابق تثبيتُ العناصِر الضّروريّة لعمل PHP، لكن يتوجّب ضبطُ بعض الإعدادات من أجل أمان أكثر.</p><p dir="rtl">افتَح الملف الرّئيس لإعداد <span style="font-family:courier new,courier,monospace;">php5-fpm</span> بصلاحيّات الجذر:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">sudo nano /etc/php5/fpm/php.ini</pre><p dir="rtl">نبحث عن مُعطى Parameter باسم <span style="font-family:courier new,courier,monospace;">cgi.fix_pathinfo</span>. افتراضيًّا ستجد أنّه مسبوق بعلامة ";" (دلالةً على أن السّطر تعليق، أي أنه لا يُؤخذ في الاعتبار) بقيمة مُساويّة لـ"1". هذا الإعداد غير آمن بالمرة، فهو يطلب من PHP تخمينَ الملف الذي يبحث عنه المستخدِم وتنفيذه إن لم يجد تطابقا تامًّا مع طلبه. أي أنّ الإعداد يُتيح للمستخدمين إنشاءَ طلبات PHP بحيث تؤدّي إلى تنفيذ سكربتات لا يجوز السّماح لهم بتنفيذها. نُغيّر الإعداد عن طريق حذف علامة التّعليق ("<span style="font-family:courier new,courier,monospace;">;</span>") ثمّ تبديل قيمة المُعطى لتُصبح <span style="font-family:courier new,courier,monospace;">0</span>، كما يلي:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">cgi.fix_pathinfo=0</pre><p dir="rtl">احفظ الملف (Ctrl + O ثم زر Enter) ثم أغلقه بعد الانتهاء من تحريره (Ctrl + x).</p><p dir="rtl">نُعيد تشغيل مُعالج PHP لأخذ التّغييرات بالاعتبار:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">sudo service php5-fpm restart</pre><h2 dir="rtl">الخطوة الرابعة: اضبط Nginx على استخدام معالج PHP</h2><p dir="rtl">جميع العناصِر مُثبَّتة الآن؛ تبقّى تعديلٌ واحدٌ وهو إعدادُ Nginx لاستخدام معالج PHP المُعدّ أعلاه للتّعامل مع المُحتوى الدّيناميكي.</p><p dir="rtl">يُضبط هذا الإعداد على مُستوى مُربّع الخادوم Server block (مُربّعات الخادوم مُشابهة لـ<a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%B6%D8%A8%D8%B7-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%B6%D9%8A%D9%81%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D9%81%D8%AA%D8%B1%D8%A7%D8%B6%D9%8A%D8%A9-%D9%81%D9%8A-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D9%88%D8%A8-apache-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r10/">لمُستضيفات الافتراضيّة </a><a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%B6%D8%A8%D8%B7-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%B6%D9%8A%D9%81%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D9%81%D8%AA%D8%B1%D8%A7%D8%B6%D9%8A%D8%A9-%D9%81%D9%8A-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D9%88%D8%A8-apache-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r10/">Virtual hosts </a><a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%B6%D8%A8%D8%B7-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%B6%D9%8A%D9%81%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D9%81%D8%AA%D8%B1%D8%A7%D8%B6%D9%8A%D8%A9-%D9%81%D9%8A-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D9%88%D8%A8-apache-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r10/">على خادوم ويب </a><a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%B6%D8%A8%D8%B7-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%B6%D9%8A%D9%81%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D9%81%D8%AA%D8%B1%D8%A7%D8%B6%D9%8A%D8%A9-%D9%81%D9%8A-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D9%88%D8%A8-apache-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r10/">Apache</a> ). افتَح الملف الافتراضي لإعداد مُربّع خادوم Nginx عبر تنفيذ الأمر:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">sudo nano /etc/nginx/sites-available/default</pre><p dir="rtl">يبدو الملفّ، بعد حذف التّعليقات، كالتّالي:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php 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 localhost;

    location / {
        try_files $uri $uri/ =404;
    }
}</pre><p dir="rtl">سنُجري بضع تعديلات على هذا الملف.</p><p dir="rtl">نحتاج أوّلًا إلى إضافة خيّار <span style="font-family:courier new,courier,monospace;">index.php</span> إلى تعليمة Directive الفهرس، ممّا يسمح بتقديم ملفّات فهارس PHP عند طلَب مُجلَّد. نحتاج أيضًا إلى تعديل تعليمة <span style="font-family:courier new,courier,monospace;">server_name</span> حتّى تُشير إلى اسم نطاق الخادوم أو عنوانه العموميّ.</p><p dir="rtl">يحوي ملفّ الإعداد على أسطُر تُعرِّف دوّالًا للتّعامل مع الأخطاء. توجد أمام هذه الأسطُر علامة تعليق. نحذف علامة التّعليق لكي تعمَل آليّات التّعامل مع الأخطاء.</p><p dir="rtl">نفس الشّيْء بالنّسبة لمُعالج PHP، ننزع التّعليق عن أسطُر أخرى من ملفّ الإعداد. ثمّ أخيرًا نُضيف التّعليمة <span style="font-family:courier new,courier,monospace;">try_files</span> للتّأكّد من أنّ Nginx لا يُمرّر طلباتٍ غير صالحة لمُعالج PHP.</p><p dir="rtl">تظهر التّغييرات في مُحتوى الملفّ أدناه باللّون الأحمر:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index <span style="color:#FF0000;">index.php</span> index.html index.htm;

    server_name <span style="color:#FF0000;">server_domain_name_or_IP</span>;

    location / {
        try_files $uri $uri/ =404;
    }

    <span style="color:#FF0000;">error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }</span>
}</pre><p dir="rtl">يُمكِن حفظ الملف وغلقُه بعد إجراء التّعديلات.</p><p dir="rtl">أعِد تشغيل Nginx لأخذ التّغييرات في الاعتبار:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">sudo service nginx restart</pre><h2 dir="rtl">الخطوة الخامسة: أنشئ ملف PHP لاختبار الإعدادات</h2><p dir="rtl">يُفترَض أن تكون حزم LEMP مُثبَّتة وجاهزة للعمل. سنتأكّد الآن أنّ خادوم ويب Nginx يتعامل مع ملفّات PHP ويُمرِّرها لمُعالج PHP.</p><p dir="rtl">نُنشئ عبر الأمر التّالي ملفَّ اختبار PHP في مَبدَأ المستند Document root:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">sudo nano /usr/share/nginx/html/info.php</pre><p dir="rtl">يُمكِن أن نُضيف الأسطُر التّالية؛ وهي شفرة برمجيّة Code صالحة في لغة PHP، ينتُج عنها عرض معلومات الخادوم على الصّفحة.</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">&lt;?php

phpinfo();

?&gt;</pre><p dir="rtl">احفَظ الملفّ ثمّ أغلقه.</p><p dir="rtl">اذهب إلى متصفِّح الويب ثم اعرض للصّفحة عبر إدخال اسم نطاق أو عنوان الموقع (<span style="font-family:courier new,courier,monospace;">server_domain_name_or_IP</span>) متبوعًا ب <span style="font-family:courier new,courier,monospace;">info.php/</span> كما يلي:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">http://server_domain_name_or_IP/info.php</pre><p dir="rtl">يجب أن تظهر لديك صفحة ويب تعرِض معلومات الخادوم، كما في الصّورة.</p><p dir="rtl" style="text-align: center;"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_04/02_%D9%85%D8%B9%D9%84%D9%88%D9%85%D8%A7%D8%AA_%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%88%D9%85_phpinfo.png.3468f486b2618ab46a273d4ca4b17ae2.png"><img data-fileid="1227" class="ipsImage ipsImage_thumbnailed" src="https://academy.hsoub.com/uploads/monthly_2015_04/02_%D9%85%D8%B9%D9%84%D9%88%D9%85%D8%A7%D8%AA_%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%88%D9%85_phpinfo.thumb.png.bbc585ad3b2af7fa791f1f0fdb76805b.png" alt="02_%D9%85%D8%B9%D9%84%D9%88%D9%85%D8%A7%"></a></p><p dir="rtl">يدُلّ ظهور الصّفحة على نجاح إعداد Nginx للتّعامل مع ملفّات PHP.</p><p dir="rtl">من الأفضل حذفُ ملفّ <span style="font-family:courier new,courier,monospace;">info.php</span> بعد انتهاء الاختبار، إذ أنّه يُمكن أن يكشف عن إعدادات موقعك، الأمر الّذي قد يُساعِد من يُحاول الحُصول على وُصول غير مُرَخَّص. يُمكِنك دائمًا إنشاء هذا الملفّ عندما تُريد إجراء اختبارات. للحذف، نفّذ الأمر التّالي:</p><pre data-pbcklang="php" data-pbcktabsize="4" class="php ipsCode prettyprint">sudo rm /usr/share/nginx/html/info.php</pre><h2 dir="rtl">خاتمة</h2><p dir="rtl">يُمكِّن اتّباع الخطوات السّابقة من إعداد وضبط حزمة LEMP على خادوم أوبنتو 14.04. تُعطي هذه الحزمة قاعدة جيّدة ومرنة من أجل تقديم مُحتوى ديناميكي لزوّار موقعك.</p><p dir="rtl">ترجمة -وبتصرّف- للمقال <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-14-04">How To Install Linux, nginx, MySQL, PHP (LEMP) stack on Ubuntu 14.04</a> لصاحبه Justin Ellingwood.</p>
]]></description><guid isPermaLink="false">29</guid><pubDate>Wed, 15 Apr 2015 05:09:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x62B;&#x628;&#x62A; &#x62D;&#x632;&#x645; MySQL &#x60C;Apache &#x60C;Linux :LAMP &#x648; PHP &#x639;&#x644;&#x649; &#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-%D8%AD%D8%B2%D9%85-mysql-%D8%8Capache-%D8%8Clinux-lamp-%D9%88-php-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r27/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_04/ubuntu-lamp_480x300.png.fba9cc8e7fc81a885cbdfc0cd7e1c820.png" /></p>

<p dir="rtl">
	حزم LAMP هيّ مجموعة من البرامج مفتوحة المصدر تُثَبَّت عادةً معًا لتمكين خادوم من استضافة مواقع ويب ديناميكيّة وتطبيقات ويب. تُشير الأحرف LAMP على التّوالي إلى نِظام تشغيل Linux، خادوم ويب Apache، قاعدة بيانات MySQL، ولغة PHP لمُعالجة المُحتوى الدّيناميكي.
</p>

<p dir="rtl">
	سنُثبِّت في هذا الدّليل حزم LAMP على خادوم Ubuntu 14.04، حيث يُمثِّل أوبنتو اللّبنة الأولى من الحزمة (نظام التّشغيل).
</p>

<h2 dir="rtl">
	المتطلبات
</h2>

<p dir="rtl">
	يجب، من أجل مُتابعة خطوات هذا الدّرس، أن يكون لديك حساب عادي (غير الحساب الجذر Root user) بصلاحيّات sudo. يُمكنّك معرفة كيف تضبُط حسابًا بهذه المواصفات في الخطوات من 1 إلى 4 من درس<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><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>

<h2 dir="rtl">
	الخطوة الأولى: ثبت Apache
</h2>

<p dir="rtl">
	خادوم ويب Apache هوّ في الوقت الحالي خادوم الويب الأكثر شعبيّة، الأمر الّذي يجعل منه خيّارًا افتراضيًّا جيّدًا لاستضافة مواقع الويب.
</p>

<p dir="rtl">
	يُمكن تثبيت خادوم ويب Apache بسهولة عن طريق مدير حزم Package manager أوبنتو، <span style="font-family:courier new,courier,monospace;">apt</span>. نبدأ بتحديث فهرس الحزم ثمّ نُثبّت حزمة <span style="font-family:courier new,courier,monospace;">apache2</span> لنحصُل على خادوم ويب Apache:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo apt</span><span class="pun">-</span><span class="kwd">get</span><span class="pln"> update
sudo apt</span><span class="pun">-</span><span class="kwd">get</span><span class="pln"> install apache2</span></pre>

<p>
	<span style="line-height: 1.6;">سيُطلب منك إدخال كلمة السّر من حين لآخر، نظرًا لاستخدام صلاحيّات الجذر </span><span style="line-height: 1.6;">(Root) </span><span style="line-height: 1.6;">عن طريق </span><span style="line-height: 1.6;">sudo.</span>
</p>

<p dir="rtl">
	ننتقل إلى مُتصفِّح الويب بعد انتهاء تنفيذ الأمر السّابق للتّأكد من تثبيت Apache. نُدخِل عنوان IP الخادوم العمومي أو اسم نطاق الموقع Domain name في شريط عنوان المُتصفّح:  
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">http</span><span class="pun">:</span><span class="com">//your_server_IP_address</span></pre>

<p dir="rtl">
	<strong>ملحوظة</strong>: إذا كنتَ تُجرِّب هذه الخطوات على جهازك الشّخصي (أو جهاز محلّي) فعنوان خادوم الويب هو 127.0.0.1 (أو localhost).
</p>

<p dir="rtl">
	ستظهر الصّفحة الافتراضيّة لخادوم ويب Apache، حيثُ توجد بعض معلومات الإعداد. شكل الصّفحة يبدو كالتّالي:
</p>

<p dir="rtl" style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_04/01_Apache_%D9%8A%D8%B9%D9%85%D9%84.png.73b7819de5924017c2f005206d05f228.png" rel="external nofollow"><img alt="01_Apache_%D9%8A%D8%B9%D9%85%D9%84.thumb" class="ipsImage ipsImage_thumbnailed" data-fileid="1077" src="https://academy.hsoub.com/uploads/monthly_2015_04/01_Apache_%D9%8A%D8%B9%D9%85%D9%84.thumb.png.0d5c253dd415a1b043e89493474b4bed.png"></a>
</p>

<p dir="rtl">
	إن عُرضت الصّفحة أعلاه فتثبيتُ خادوم ويب Apache جرى كما يُرام.
</p>

<h3 dir="rtl">
	كيف تجد عنوان IP العمومي لخادومك
</h3>

<p dir="rtl">
	<strong>ملحوظة</strong>: هذه الفقرة غير مُوَّجَّهة لمن يختبر التّثبيت على حاسوبه الشّخصي.
</p>

<p dir="rtl">
	توجد عدّة طُرُق لمعرفة عنوان IP العمومي لخادوم على شبكة الإنترنت. عنوان IP العمومي للخادوم هو في العادة نفس العنوان الّي تتّصل به عن طريق <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr>.
</p>

<p dir="rtl">
	نفِّذ الأمر التّالي في سطر الأوامر:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">ip addr show eth0 </span><span class="pun">|</span><span class="pln"> grep inet </span><span class="pun">|</span><span class="pln"> awk </span><span class="str">'{ print $2; }'</span><span class="pln"> </span><span class="pun">|</span><span class="pln"> sed </span><span class="str">'s/\/.*$//'</span></pre>

<p dir="rtl">
	ينتُج عن هذا الأمر سطر أو اثنان (واحد عنوان كما يُكتَب في الإصدار الرّابع IPv4 من بروتوكول IP، والآخر كما يُكتَب في الإصدار السّادس IPv6). في حال كانت النّتيجة سطرين فكلاهما صحيح ولكن من الممكن ألّا يستطيعَ حاسوبك الشّخصي التّعامل إلا مع واحد منهما؛ جرّب العنوانيْن حتى تحصُل على العنوان المُناسب.
</p>

<p dir="rtl">
	توجد طريقة بديلة وهي استخدام خدمة عامّة للحصول على عنوان IP. للحصول على العنوان نتّصل بالخدمة ونطلُب منها إخبارنَا عن العنوان الّذي نتّصِل منه:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">curl http</span><span class="pun">:</span><span class="com">//icanhazip.com</span></pre>

<p dir="rtl">
	<strong>ملحوظة</strong>: إن استخدمتَ الأمر السّابق من جهازك الشّخصي فستحصُل على عنوان IP الّذي تظهر به للخارج؛ هذا لا يعني بالضّرورة أنّ هذا هو عنوان IP العمومي لجهازك.
</p>

<p dir="rtl">
	مهما اختلفت الطّريقة فالمهم هو الحصول على عنوان خادومك ثمّ إدخاله في شريط العناوين في المتصفّح للتّأكّد من تثبيت خادوم ويب Apache.
</p>

<h2 dir="rtl">
	الخطوة الثانية: ثبت MySQL
</h2>

<p dir="rtl">
	يأتي الآن دورُ MySQL، بعد تثبيت MySQL. Apache هو نظام لإدارة قواعد البيانات DataBase Management System, DBMS؛ وهو برنامج مسؤول عن إدارة وتوفير الاتّصال بقاعدة البيانات الّتي تُخزَّن بها معلومات الموقع.
</p>

<p dir="rtl">
	سنستخدم - كما في الخطوة السّابقة - مُديرَ حزم Apt، ولكن هذه المرّة سنُضيف بعض الحزم المُساعدة من أجل تمكين الاتّصال بين مختلف عناصِر البيئة الّتي نحن في طور إعدادها.
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo apt</span><span class="pun">-</span><span class="kwd">get</span><span class="pln"> install mysql</span><span class="pun">-</span><span class="pln">server php5</span><span class="pun">-</span><span class="pln">mysql</span></pre>

<p dir="rtl">
	<strong>ملحوظة</strong>: لم ننُفِّذ أمر <span style="font-family:courier new,courier,monospace;">sudo apt-get update</span> قبل أمر التّثبيت هذه المرّة. يعود السّبب في ذلك إلى أنّنا نفّذنا هذا الإجراء للتّو وهو ما يعني أنّ فهرس الحزم لدينا مُحدَّث <span style="font-family:courier new,courier,monospace;">up-to-date</span>.
</p>

<p dir="rtl">
	أثناء تثبيت MySQL سيطلُب منك الخادوم اختيّار كلمة سرّ للمُستخدِم root على MySQL. الحساب root هو حساب إداريّ يملك صلاحيّات واسعة على نظام قواعد البيانات؛ وهو يُشبه إلى حدٍّ مّا الحساب الجذر في خادوم أوبنتو نفسه (لكن انتبِه إلى أنّه حساب خاص بنظام MySQL لإدارة قواعد البيانات).
</p>

<p dir="rtl">
	نحتاج بعد انتهاء التّثبيت إلى تنفيذ أوامر إضافيّة من أجل تأمين MySQL.
</p>

<p dir="rtl">
	نطلُب أوّلا من MySQL إنشاءَ بُنية المجلّدات الخاصّة بقاعدة البيانات حيثُ سيُخزّن المعلومات. الأمر التّالي يُؤدّي هذه المهمّة:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo mysql_install_db</span></pre>

<p dir="rtl">
	ثمّ نُنفّذ سكربت التّثبيت الآمن الّذي يحذِف بعض القيّم الافتراضيّة غير الآمنة ويمنع الوصول المُباشر لنظام إدارة قواعد البيانات:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo mysql_secure_installation</span></pre>

<p dir="rtl">
	سيُطلب منك النّظام إدخال كلمة سرّ الحساب الجذر في MySQL؛ ثمّ يسألك ما إذا كنتَ تُريد تغييرها. أدخل حرف n (دلالةً على "no" أي "لا") إن لم تكن ترغبُ في ذلك.
</p>

<p dir="rtl">
	بقيّة الأسئلة تتعلّق بإزالة بعض الحسابات وقواعد البيانات المُعَدَّة للتّجربة، تعطيل الدّخول عن بُعد للحساب الجذر، ثم تحميل الإعدادات الجديدة ليبدأ MySQL العمل بها مُباشرةً؛ فقط اضغط Enter للإجابة على هذه الأسئلة.
</p>

<p dir="rtl">
	تحصُل بعدانتهاء هذه الخطوة على نظام قواعد بيانات مضبوط وجاهز للعمل.
</p>

<h2 dir="rtl">
	الخطوة الثالثة: ثبت PHP
</h2>

<p dir="rtl">
	يتولّى PHP التّعاملَ مع البيانات لإظهار المُحتوى الدّيناميكي؛ حيث يُنفِّذ السكربتات، يتّصِل بقاعدة بيانات MySQL ويُمرّر المُحتوى - بعد معالجته - إلى خادوم الويب، الّذي يعرضه.
</p>

<p dir="rtl">
	نستعين بمُدير الحزم <span style="font-family:courier new,courier,monospace;">apt</span> مُجدّدًا لتثبيت PHP وبعض البرامج المُساعِدة الأخرى:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo apt</span><span class="pun">-</span><span class="kwd">get</span><span class="pln"> install php5 libapache2</span><span class="pun">-</span><span class="pln">mod</span><span class="pun">-</span><span class="pln">php5 php5</span><span class="pun">-</span><span class="pln">mcrypt</span></pre>

<p dir="rtl">
	ينبغي أن يكون الأمر السّابق كفيلًا بتثبيت PHP دون أيّة مشاكل. سنختبر نجاح التّثبيت بعد قليل.
</p>

<p dir="rtl">
	يقضي الإعداد الافتراضي لخادوم ويب Apache بالبحث أوّلا عن ملفّ باسم <span style="font-family:courier new,courier,monospace;">index.html </span>عند وصول طلب لعرض مُجلّد. سنُغيّر هذا الإعداد بحيثُ يبحث خادوم الويب أوّلًا عن ملفّ PHP باسم<span style="font-family:courier new,courier,monospace;"> index.php</span>. نفتح ملفّ <span style="font-family:courier new,courier,monospace;">dir.conf </span>في المُحرّر بصلاحيّات المُستخدِم الجذر:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo nano </span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">apache2</span><span class="pun">/</span><span class="pln">mods</span><span class="pun">-</span><span class="pln">enabled</span><span class="pun">/</span><span class="pln">dir</span><span class="pun">.</span><span class="pln">conf</span></pre>

<p dir="rtl">
	يُشبه مُحتوى الملفّ الشّكلَ التّالي:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2246_7">
<span class="tag">&lt;IfModule</span><span class="pln"> </span><span class="atn">mod_dir</span><span class="pln">.</span><span class="atn">c</span><span class="tag">&gt;</span><span class="pln">
  DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</span><span class="tag">&lt;/IfModule&gt;</span><span class="pln">

</span></pre>

<p dir="rtl">
	ما نُريده هو تقديم ملف <span style="font-family:courier new,courier,monospace;">index.php</span><span style="font-family:courier new,courier,monospace;"> </span>المُعلَّم بالأحمر أعلاه إلى الوضعيّة الأولى، مباشرةً بعد تعليمة <span style="font-family:courier new,courier,monospace;">DirectoryIndex </span> هكذا:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2246_9">
<span class="tag">&lt;IfModule</span><span class="pln"> </span><span class="atn">mod_dir</span><span class="pln">.</span><span class="atn">c</span><span class="tag">&gt;</span><span class="pln">
  DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</span><span class="tag">&lt;/IfModule&gt;</span></pre>

<p>
	<span style="line-height: 1.6;">احفَظ الملفّ بعد الانتهاء من تحريره عن طريق الضغط على الزّرّيْن <span style="font-family:courier new,courier,monospace;">CTRL+O </span>ثم زرّ Enter في لوحة المفاتيح وأغلِقه بالضّغط على الزّرّيْن <span style="font-family:courier new,courier,monospace;">CTRL+X</span>.</span>
</p>

<p dir="rtl">
	نعيد تشغيل Apache للعمَل بالإعدادات الجديدة:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo service apache2 restart</span></pre>

<h3 dir="rtl">
	ثبت وحدات PHP Modules ،PHP
</h3>

<p dir="rtl">
	توجد بعض الوِحدات Modules الاختيّاريّة الّتي نستطيع تثبيتَها من أجل تحسين وظائف PHP.
</p>

<p dir="rtl">
	ننفِّذ الأمر التّالي لعرض مكتبات Libraries ووِحدات PHP المُتاحة:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">apt</span><span class="pun">-</span><span class="pln">cache search php5</span><span class="pun">-</span></pre>

<p dir="rtl">
	جميع ما يظهَر في النّتائج هيّ وحدات اختيّاريّة يُمكن تثبيتها إن أردت. تتضمّن كل نتيجة اسم الوحدة ووصفًا مُختَصرًا لها:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_2246_11">
<span class="pln">php5-cgi - server-side, HTML-embedded scripting language (CGI binary)
php5-cli - command-line interpreter for the php5 scripting language
php5-common - Common files for packages built from the php5 source
php5-curl - CURL module for php5
php5-dbg - Debug symbols for PHP5
php5-dev - Files for PHP5 module development
php5-gd - GD module for php5
. . .</span></pre>

<p>
	<span style="line-height: 1.6;">إن أردت معلوماتٍ أكثرَ عن إحدى الوِحدَات يمكنك البحث على الشّبكة أو استخدام أمر الوصف المُطَوَّل للحزمة عبر تنفيذ الأمر (حيثُ package_name اسم الحزمة):</span>
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">apt</span><span class="pun">-</span><span class="pln">cache show package_name</span></pre>

<p dir="rtl">
	بالنّسبة لوحدة <span style="font-family:courier new,courier,monospace;">php5-cli</span> على سبيل المثال:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">apt</span><span class="pun">-</span><span class="pln">cache show php5</span><span class="pun">-</span><span class="pln">cli</span></pre>

<p dir="rtl">
	ستجد أن هناك مخرجاتٍ عديدةً من بينها حقلٌ باسم Description-en يُقدّم شرحًا لوظيفة الوِحدة (بالإنجليزيّة غالبًا، إلّا إذا كان التّوثيق Documentation يتوفّر بلغة النّظام لديك).
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pun">.</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="pun">.</span><span class="pln">

SHA256</span><span class="pun">:</span><span class="pln"> </span><span class="lit">91cfdbda65df65c9a4a5bd3478d6e7d3e92c53efcddf3436bbe9bbe27eca409d</span><span class="pln">

</span><span class="typ">Description</span><span class="pun">-</span><span class="pln">en</span><span class="pun">:</span><span class="pln"> command</span><span class="pun">-</span><span class="pln">line interpreter </span><span class="kwd">for</span><span class="pln"> the php5 scripting language

</span><span class="typ">This</span><span class="pln"> </span><span class="kwd">package</span><span class="pln"> provides the </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">bin</span><span class="pun">/</span><span class="pln">php5 command interpreter</span><span class="pun">,</span><span class="pln"> useful </span><span class="kwd">for</span><span class="pln"> testing PHP scripts </span><span class="kwd">from</span><span class="pln"> a shell </span><span class="kwd">or</span><span class="pln"> performing general shell scripting tasks</span><span class="pun">.</span><span class="pln">

</span><span class="pun">.</span><span class="pln">

</span><span class="typ">The</span><span class="pln"> following extensions are built </span><span class="kwd">in</span><span class="pun">:</span><span class="pln"> bcmath bz2 calendar </span><span class="typ">Core</span><span class="pln"> ctype date dba dom ereg exif fileinfo filter ftp gettext hash iconv libxml mbstring mhash openssl pcntl pcre </span><span class="typ">Phar</span><span class="pln"> posix </span><span class="typ">Reflection</span><span class="pln"> session shmop </span><span class="typ">SimpleXML</span><span class="pln"> soap sockets SPL standard sysvmsg sysvsem sysvshm tokenizer wddx xml xmlreader xmlwriter zip zlib</span><span class="pun">.</span><span class="pln">

</span><span class="pun">.</span><span class="pln">

PHP </span><span class="pun">(</span><span class="pln">recursive acronym </span><span class="kwd">for</span><span class="pln"> PHP</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Hypertext</span><span class="pln"> </span><span class="typ">Preprocessor</span><span class="pun">)</span><span class="pln"> </span><span class="kwd">is</span><span class="pln"> a widely</span><span class="pun">-</span><span class="pln">used open source general</span><span class="pun">-</span><span class="pln">purpose scripting language that </span><span class="kwd">is</span><span class="pln"> especially suited </span><span class="kwd">for</span><span class="pln"> web development </span><span class="kwd">and</span><span class="pln"> can be embedded </span><span class="kwd">into</span><span class="pln"> HTML</span><span class="pun">.</span><span class="pln">

</span><span class="typ">Description</span><span class="pun">-</span><span class="pln">md5</span><span class="pun">:</span><span class="pln"> f8450d3b28653dcf1a4615f3b1d4e347

</span><span class="typ">Homepage</span><span class="pun">:</span><span class="pln"> http</span><span class="pun">:</span><span class="com">//www.php.net/</span><span class="pln">

</span><span class="pun">.</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="pun">.</span><span class="pln">
</span></pre>

<p>
	<span style="line-height: 1.6;">إذا أردتَ تثبيت وِحدة من وِحدات PHP، بعد الحصول على المعلومات الكافيّة عن وظيفتها، فيُمكنك استخدامُ أمر <span style="font-family:courier new,courier,monospace;">apt-get install</span>. بالعودة إلى مثال <span style="font-family:courier new,courier,monospace;">php5-cli</span> فإنّ التّثبيت يكون كما يلي:</span>
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo apt</span><span class="pun">-</span><span class="kwd">get</span><span class="pln"> install php5</span><span class="pun">-</span><span class="pln">cli</span></pre>

<p dir="rtl">
	ُيرجى ملاحظة أنّه بالإمكان تثبيت أكثر من حزمة في نفس الوقت عبر الفصل بينها بمسافة، هكذا:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo apt</span><span class="pun">-</span><span class="kwd">get</span><span class="pln"> install package1 package2</span></pre>

<p dir="rtl">
	ينبغي أن تكون حزم LAMP، بالوصول إلى هذه النّقطة من الدّليل، مُثّبَّتةً ومضبوطةً. ننتقل إلى اختبار PHP.
</p>

<h2 dir="rtl">
	الخطوة الرابعة: اختبر تعامل خادوم الويب مع ملفات PHP
</h2>

<p dir="rtl">
	سننشئ سكربت PHP مُيَسّرًا من أجل اختبار إعدادات PHP وخادوم الويب. الهدف هوّ أن يعثُر خادوم الويب على السكربت، الّذي سنُسمّيه <span style="font-family:courier new,courier,monospace;">info.php</span>، ثمّ يعرض محتواه بشكل صحيح.
</p>

<p dir="rtl">
	يجب أن يُحفَظ الملفّ في مجلّد خاصّ، يُسمّى جذر الويب Web root (في هذا المُجلَّد مباشرةً أو في أحد المجلّدات المتفرّعة عنه)، لكي يعثُر عليه خادوم ويب Apache .
</p>

<p dir="rtl">
	يوجد جذر الويب في أوبنتو 14.04 على المسار <span style="font-family:courier new,courier,monospace;">/var/www/html/</span>. نُنشئ ملفَّ اختبار الإعداد داخل هذا المسار عبر الأمر:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo nano </span><span class="pun">/</span><span class="kwd">var</span><span class="pun">/</span><span class="pln">www</span><span class="pun">/</span><span class="pln">html</span><span class="pun">/</span><span class="pln">info</span><span class="pun">.</span><span class="pln">php</span></pre>

<p dir="rtl">
	سيُفتح المحرّر وبداخله ملفّ فارغ، نُضيف إليه الشيفرة البرمجيّة التّاليّة:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_2246_14">
<span class="pun">&lt;?</span><span class="pln">php
  phpinfo</span><span class="pun">();</span><span class="pln">
</span><span class="pun">?&gt;</span></pre>

<p dir="rtl">
	هذا كل ما في الأمر. احفظ الملفّ ثم أغلقه.
</p>

<p dir="rtl">
	لاختبار إعداد خادوم الويب نفتح متصفّحَ ويب ثمّ نُدخل عنوان الصّفحة في شريط العنوان. يتكوّن عنوان الصّفحة من عنوان IP العمومي لخادوم الويب (أو اسم النّطاق) متبوعًا بمسار تواجد الصّفحة بالنّسبة لجذر الويب. صفحة الاختبار الّتي أعددناها موجودة في جذر الويب وهو ما يعني أنّ عنوان الوصول إليها هوّ التّالي (حيث <span style="font-family:courier new,courier,monospace;">your_server_IP_address</span> هو عنوان IP أو اسم نطاق الموقع):
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">http</span><span class="pun">:</span><span class="com">//your_server_IP_address/info.php</span></pre>

<p dir="rtl">
	يجب أن تظهر في المتصفّح صفحة الويب التّاليّة:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" href="https://academy.hsoub.com/uploads/monthly_2015_04/02_%D9%85%D8%B9%D9%84%D9%88%D9%85%D8%A7%D8%AA_%D8%AE%D8%A7%D8%AF%D9%88%D9%85_apache_phpinfo.png.6b0bf1d7a4f10ec86c8279b2c22a210d.png" rel="external nofollow"><img alt="02_%D9%85%D8%B9%D9%84%D9%88%D9%85%D8%A7%" class="ipsImage ipsImage_thumbnailed" data-fileid="1078" src="https://academy.hsoub.com/uploads/monthly_2015_04/02_%D9%85%D8%B9%D9%84%D9%88%D9%85%D8%A7%D8%AA_%D8%AE%D8%A7%D8%AF%D9%88%D9%85_apache_phpinfo.thumb.png.d41da166d920741b9605e2f345d72e40.png"></a>
</p>

<p dir="rtl">
	تُقدّم هذه الصّفحة معلوماتٍ عن الخادوم كما يراه PHP. بعض هذه المعلومات مهمّ لمعرفة إعدادات خادوم الويب ومُعالج PHP، كما أنّها تُساعِدك أثناء تنقيح Debugging السكربتات.
</p>

<p dir="rtl">
	إذا ظهرت الصّفحة فهذا يعني أنّ PHP يعمل كما نُريد.
</p>

<p dir="rtl">
	يُنصَح بحذف هذه الصّفحة بعد الانتهاء من الاختبار، حيث إنّها قد تُعطي معلوماتٍ عن خادومك لأشخاص لا يجدر بهم الحصول على هذه المعلومات، الأمر التّالي يؤدّي هذه المهمّة:
</p>

<pre class="php ipsCode prettyprint prettyprinted" data-pbcklang="php" data-pbcktabsize="4">
<span class="pln">sudo rm </span><span class="pun">/</span><span class="kwd">var</span><span class="pun">/</span><span class="pln">www</span><span class="pun">/</span><span class="pln">html</span><span class="pun">/</span><span class="pln">info</span><span class="pun">.</span><span class="pln">php</span></pre>

<p dir="rtl">
	يُمكن دائمًا إنشاء صفحة الاختبار من أجل الوصول إلى المعلومات الّتي توفّرها، متى أردت ذلك.
</p>

<h2 dir="rtl">
	خاتمة
</h2>

<p dir="rtl">
	باستكمال خطوات هذا الدّليل تكون قد وضعتَ الأساس لتثبيت، استعمال وإعداد العديد من أنواع مواقع وتطبيقات الويب.
</p>

<p dir="rtl">
	ترجمة -وبتصرف- للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-ubuntu-14-04" rel="external nofollow">How To Install Linux, Apache, MySQL, PHP (LAMP) stack on Ubuntu 14.04</a> لصاحبه Justin Ellingwood.
</p>
]]></description><guid isPermaLink="false">27</guid><pubDate>Thu, 09 Apr 2015 13:21:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x625;&#x639;&#x62F;&#x627;&#x62F; &#x627;&#x644;&#x627;&#x628;&#x62A;&#x62F;&#x627;&#x626;&#x64A; &#x644;&#x62E;&#x627;&#x62F;&#x648;&#x645; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648; 14.04</title><link>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/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/ubuntu_480x300.png.b62d3f06948db6ddbc929fc09c6f6641.png" /></p>

<p dir="rtl">
	توجد بعض الإعدادات التي يجب إجراؤها في البداية كجزء من عملية التثبيت الأولية عند إنشاء خادوم جديد. تؤدي هذه الخطوات إلى تعزيز أمان وقابلية استخدام Usability خادومك ممّا يعطيك أساسًا صلبا للإجراءات اللاحقة.
</p>

<h2 dir="rtl">
	الخطوة الأولى - الولوج Login إلى الحساب الجذر Root
</h2>

<p dir="rtl">
	يتوجّب عليك، للولوج إلى خادومك، معرفة عنوان IP العمومي Public IP Address إضافةً إلى كلمة سر حساب المستخدم الجذر. إن لم تكن قمتَ بالولوج إلى خادومك من قبل فبإمكانك الاطّلاع على الدرس <a href="https://academy.hsoub.com/devops/servers/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D9%88%D8%AE%D9%8A%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D8%A8%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D8%B9%D9%86-%D8%A8%D8%B9%D8%AF-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-ssh-r74/" rel="">أساسيات وخيارات الاتصال بخادوم عن بعد باستخدام <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></a><a href="https://www.digitalocean.com/community/tutorials/how-to-connect-to-your-droplet-with-ssh" rel="external nofollow"> </a>(البرنامج المسؤول عن الاتصال بالخادوم عن بعد)، الذي يُغطي هذه العملية بالتفصيل.
</p>

<p dir="rtl">
	ابدأ بالاتصال بخادومك عن طريق الأمر التّالي (أبدِل الكلمة البارزة بعنوان IP خادومك العمومي):
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="pln"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr> root@SERVER_IP_ADDRESS</span></pre>

<p dir="rtl">
	أكمِل عملية الولوج بقبول التحذيرات حول موثوقية المستضيف Host authenticity في حال ظهورها، وإعطاء معلومات التحقق (كلمة السّر أو المفتاح السري). سيُطلب منك تبديل كلمة سر حساب المستخدِم الجذر إن كانت هذه أول مرة تلِج إلى الخادوم باستخدام كلمة السر.
</p>

<h3 dir="rtl">
	حول المستخدم الجذر
</h3>

<p dir="rtl">
	المستخدم الجذر هو المُدير في أنظمة لينوكس، ولديه امتيازات Privileges واسعة جدًًا. عمليًا، يُنصَح بعدم استخدام الحساب الجذر في الأمور الاعتيادية، فالصلاحيات الواسعة التي يتمتع بها تُتيح إحداث تغييرات - قد تكون مدمِّرة - في النظام . وليسَ نادرا أن يحدث ذلك بشكل غير مقصود.
</p>

<p dir="rtl">
	الخطوة الموالية ستكون إنشاء حساب مستخدم بديل بمجال تأثير محدود للقيام بالعمل اليومي. ستتعلّم أيضًا كيفية الحصول على امتيازات أكبر عندما تحتاج إليها.
</p>

<h2 dir="rtl">
	الخطوة الثانية - إنشاء مستخدم جديد
</h2>

<p dir="rtl">
	بعد الولوج باستخدام الحساب الجذر تُصبِح على استعداد لإضافة الحساب الجديد الذي سنلِج باستخدامه من الآن فصاعدا.
</p>

<p dir="rtl">
	يُنشئ المثال التالي مستخدما باسم "demo"، أبدِلهُ باسم المستخدم الذي تراه مناسِبا:
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="pln">adduser demo</span></pre>

<p dir="rtl">
	ستُطرَح عليك بعض الأسئلة، بدءًا بكلمة سرالحساب.
</p>

<p dir="rtl">
	أدخِل كلمة سر قوية. يُمكنك تعبئة بقية المعلومات الإضافية حسب رغبتك. اضغط على زر Enter في لوحة المفاتيح لتجاوز أي حقل لا تودّ تعبئته.
</p>

<h2 dir="rtl" id="امتيازات-الجذر">
	الخطوة الثالثة - امتيازات الجذر
</h2>

<p dir="rtl">
	لدينا الآن حساب مستخدم جديد بامتيازات حساب عادي. سنحتاج في بعض الأحيان إلى القيام ببعض الأعمال الإدارية التي تتطلّب امتيازات الجذر. نستطيع إعداد "مستخدم أعلى" Super user لتجنب الخروج من الحساب العادي والولوج بالحساب الجذر أثناء القيام بالمهام الإدارية. المستخدم الأعلى هو مستخدم عادي ولكنه يستطيع الحصول على امتيازات المستخدم الجذر مؤقتا عن طريق كتابة sudo أمام الأوامر التي يطلب تنفيذها.
</p>

<p dir="rtl">
	يتوجّب علينا إضافة المستخدم الجديد إلى مجموعة المستخدمين Users group sudo حتى يتسنى له الحصول على الامتيازات الإدارية. يُسمَح - في الإعداد الافتراضي لأوبنتو 14.04 - للمستخدمين الأعضاء في مجموعة sudo باستخدام أمر <span style="font-family:courier new,courier,monospace;">sudo</span>.
</p>

<p dir="rtl">
	نفّذ باستخدام الحساب الجذر، الأمر التالي لإضافة المستخدم الجديد إلى المجموعة sudo (أبدِل الكلمة البارزة بالاسم الذي اخترتَه للمستخدم الجديد):
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="pln">gpasswd </span><span class="pun">-</span><span class="pln">a demo sudo </span></pre>

<p dir="rtl">
	يُمكِن للمستخدِم الجديد الآن تنفيذ أوامر بامتيازات المستخدِم الأعلى.
</p>

<h2 dir="rtl">
	الخطوة الرابعة - إضافة الاستيثاق عن طريق المفتاح العمومي Public Key Authentication (يوصى بهذه الخطوة)
</h2>

<p dir="rtl">
	الخطوة التالية في تأمين خادومك هي إعداد مفتاح عمومي Public Key للمستخدم الجديد. هذا الإعداد سيرفع من أمان خادومك بطلب مفتاح <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> سري للولوج.
</p>

<h3 dir="rtl">
	توليد زوج من المفاتيح
</h3>

<p dir="rtl">
	سيتوجّب عليك توليد زوج مفاتيح (مفتاح عمومي وآخر سرّي). إن كان لديك مفتاح عمومي ترغب في استخدامه تجاوز إلى خطوة نسخ المفتاح العمومي.
</p>

<p dir="rtl">
	لتوليد زوج مفاتيح جديدة نفِّذ الأمر التالي على الطّرفيةTerminal محليًّا (على حاسوبك الشخصي):
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="pln"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr></span><span class="pun">-</span><span class="pln">keygen </span></pre>

<p dir="rtl">
	ستظهر لك مُخرجات شبيهة بما يلي (localuser هنا هو اسم المستخدم الذي يُنفِّذ الأمر):
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="typ">Generating</span><span class="pln"> </span><span class="kwd">public</span><span class="pun">/</span><span class="kwd">private</span><span class="pln"> rsa key pair</span><span class="pun">.</span><span class="pln">
</span><span class="typ">Enter</span><span class="pln"> file </span><span class="kwd">in</span><span class="pln"> which to save the key </span><span class="pun">(</span><span class="str">/Users/</span><span class="pln">localuser</span><span class="pun">/.</span><span class="pln"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr></span><span class="pun">/</span><span class="pln">id_rsa</span><span class="pun">):</span><span class="pln"> </span></pre>

<p>
	اضغط زر Enter على لوحة المفاتيح لقبول اسم ومسار حفظ الملف، أو أدخل مسارا لملف جديد.
</p>

<p dir="rtl">
	سيُطلب منك بعدها إدخال عبارة سر Passphrase لتأمين المفتاح. عبارة السّر اختيارية ويُمكنك تجاوزها وتركها خاوية.
</p>

<p dir="rtl">
	<strong>ملحوظة</strong>: عند ترك عبارة السر خاوية يُمكن استخدام المفتاح السري للاستيثاق دون الحاجة لإدخال عبارة سر، أما في حال إنشاء عبارة سر فستحتاج للإثنين (عبارة السر والمفتاح السري) للولوج. إنشاء عبارة سر يُعطي أمانا أكبر ولكن لكل من الطريقتين (المفتاح السري وحده أو مع عبارة سر) استخداماتُها، كما أنهما أكثر أمانا من الاستيثاق الأساسي عن طريق كلمة سر.
</p>

<p dir="rtl">
	حصلنا الآن على مفتاح سري (<span style="font-family:courier new,courier,monospace;">id_rsa</span>)، وآخر عمومي (<span style="font-family:courier new,courier,monospace;">id_rsa.pub</span>) يوجدان في المجلَّد <span style="font-family:courier new,courier,monospace;"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr></span>. الموجود في المجلّد الشخصي للمستخدم <span style="font-family:courier new,courier,monospace;">localuser</span>. تذكَّر أنه لا يجوز على الإطلاق مُشاركة المفتاح السري مع أي شخص لا يحق له الاتصال بخواديمك.
</p>

<h3 dir="rtl">
	نسخ المفتاح العمومي
</h3>

<p dir="rtl">
	بعد توليد المفتاح العمومي محليًّا ننقلهُ إلى الخادوم.
</p>

<p dir="rtl">
	استخدم الأمر التالي لإظهار مفتاحك العمومي (أبدِل مسار الملف في حال غيّرت مسار الحفظ أثناء توليد المفتاح)
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="pln">cat </span><span class="pun">~</span><span class="str">/.<abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr>/</span><span class="pln">id_rsa</span><span class="pun">.</span><span class="pln">pub </span></pre>

<p dir="rtl">
	سيظهر مفتاحك العمومي الذي يُشبه شكلُه التالي:
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="pln"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr></span><span class="pun">-</span><span class="pln">rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBGTO0tsVejssuaYR5R3Y</span><span class="pun">/</span><span class="pln">i73SppJAhme1dH7W2c47d4gOqB4izP0</span><span class="pun">+</span><span class="pln">fRLfvbz</span><span class="pun">/</span><span class="pln">tnXFz4iOP</span><span class="pun">/</span><span class="pln">H6eCV05hqUhF</span><span class="pun">+</span><span class="typ">KYRxt9Y8tVMrpDZR2l75o6</span><span class="pun">+</span><span class="pln">xSbUOMu6xN</span><span class="pun">+</span><span class="pln">uVF0T9XzKcxmzTmnV7Na5up3QM3DoSRYX</span><span class="pun">/</span><span class="pln">EP3utr2</span><span class="pun">+</span><span class="pln">zAqpJIfKPLdA74w7g56oYWI9blpnpzxkEd3edVJOivUkpZ4JoenWManvIaSdMTJXMy3MtlQhva</span><span class="pun">+</span><span class="pln">j9CgguyVbUkdzK9KKEuah</span><span class="pun">+</span><span class="pln">pFZvaugtebsU</span><span class="pun">+</span><span class="pln">bllPTB0nlXGIJk98Ie9ZtxuY3nCKneB</span><span class="pun">+</span><span class="typ">KjKiXrAvXUPCI9mWkYS</span><span class="pun">/</span><span class="lit">1rggpFmu3HbXBnWSUdf</span><span class="pln"> localuser@machine</span><span class="pun">.</span><span class="kwd">local</span><span class="pln"> </span></pre>

<p dir="rtl">
	حدّد المفتاح العمومي وانسخه إلى الحافِظة Clipboard.
</p>

<h3 dir="rtl">
	إضافة المفتاح العمومي إلى المستخدم الجديد على الخادوم
</h3>

<p dir="rtl">
	يجب إضافة مفتاح <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> إلى ملف خاص يوجد بالمجلد الشخصي للمستخدِم على الخادوم حتى يتسنى له استعمالُه للاستيثاق.
</p>

<p dir="rtl">
	استعمل الأمر التالي - على الخادوم - للانتقال من المستخدِم الجذر إلى المستخدِم الذي أنشأناه في الخطوات الأولى من هذا الدّليل (أبدِل demo باسم المستخدِم الذي اخترتَه):
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="pln">su </span><span class="pun">-</span><span class="pln"> demo</span></pre>

<p dir="rtl">
	ستُنقَل بعدَ الولوج إلى الخادوم إلى ملف المستخدم الشخصي.
</p>

<p dir="rtl">
	أنشئ مجلَّدا فرعيا جديدا في المجلّد الشخصي باسم <span style="font-family:courier new,courier,monospace;"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr>.</span> (النقطة جزء من الاسم) مع تقييد الأذون Permissions عن طريق الأوامر التالية:
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="pln">mkdir </span><span class="pun">.</span><span class="pln"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr>
chmod </span><span class="lit">700</span><span class="pln"> </span><span class="pun">.</span><span class="pln"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr> </span></pre>

<p>
	سنُنشئ الآن ملفًا باسم<span style="font-family:courier new,courier,monospace;"> authorized_keys</span> مع فتحه عن طريق محرِّر نصوص. سنستخدِم محرِّر Nano للتعديل على الملف، كما في الأمر التالي:
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="pln">nano </span><span class="pun">.</span><span class="pln"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr></span><span class="pun">/</span><span class="pln">authorized_keys </span></pre>

<p dir="rtl">
	ثم نأتي لإدراج المفتاح العمومي في الملف عن طريق لصقه في المحرِّر.
</p>

<p dir="rtl">
	اضغط على الزريْن <span style="font-family:courier new,courier,monospace;">CTRL</span> و <span style="font-family:courier new,courier,monospace;">X</span> معًا في لوحة المفاتيح للخروج من المحرِّر ثم زر <span style="font-family:courier new,courier,monospace;">Y</span> لحفظ التغييرات وEnter لتأكيد اسم الملف.
</p>

<p dir="rtl">
	نُقيّد الأذون على الملف <span style="font-family:courier new,courier,monospace;">authorized_keys </span>عن طريق الأمر:
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="pln">chmod </span><span class="lit">600</span><span class="pln"> </span><span class="pun">.</span><span class="pln"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr></span><span class="pun">/</span><span class="pln">authorized_keys </span></pre>

<p dir="rtl">
	للعودة إلى المستخدِم الجذر ننفِّذ الأمر التالي:
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="kwd">exit</span><span class="pln"> </span></pre>

<p dir="rtl">
	بإمكانك الآن الولوج إلى حساب المستخدم الجديد عن طريق <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> باستخدام المفتاح السري.
</p>

<h2 dir="rtl">
	الخطوة الخامسة - إعداد <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr>
</h2>

<p dir="rtl">
	يُمكننا، بعد أن أنشأنا حسابَ مستخدم جديدًا، زيادة تأمين الخادوم عن طريق تغيير إعداد <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> . نبدأ بفتح ملف الإعدادات بواسطة محرِّر نصوص مع استعمال المستخدِم الجذر:
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="pln">nano </span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr></span><span class="pun">/</span><span class="pln">sshd_config </span></pre>

<p dir="rtl">
	تغيير منفذ Port الاتصال عن طريق <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> (اختياري)
</p>

<p dir="rtl">
	أولى التغييرات ستكون تعديل المنفذ الذي يستخدمه <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> للاتصال بالخادوم. ابحث عن السّطر التالي:
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="typ">Port</span><span class="pln"> </span><span class="lit">22</span><span class="pln"> </span></pre>

<p dir="rtl">
	عند تغيير هذا الرقم إلى آخر بين 1025 و 65536 فإن خدمة <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> ستستخدم المنفذ الجديد للاتصال بالخادوم بدلا من المنفذ الافتراضي (22). يُحاول بعض المستخدمين غير المسموح لهم بالولوج استعمال منفذ <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> الافتراضي الوصول إلى الخادوم. تغيير المنفذ يعني إضافة خطوات جديدة أمام هذا النوع من المستخدمين لأنه يضطرهم إلى تجربة منافذ عديدة لمعرفة أيها يُستخدم من طرف <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr>.
</p>

<p dir="rtl">
	يجب عند تغيير منفذ <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> تذكر رقم المنفذ الجديد حتى يُمكن الاتصال عن بعد بالخادوم. سنُغيِّر منفذ <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> إلى 4444. يعني هذا أنه يتوجب إخبار الخادوم عند الاتصال برقم المنفذ المُستخدَم لكي لا يستخدم المنفذ الافتراضي، وهو ما سنشرحه لاحقا.
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="typ">Port</span><span class="pln"> </span><span class="lit">4444</span><span class="pln"> </span></pre>

<p dir="rtl">
	تقييد ولوج المستخدم الجذر عبر <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr>
</p>

<p dir="rtl">
	بعد تغيير منفذ <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> نبحث عن السّطر التالي:
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="typ">PermitRootLogin</span><span class="pln"> yes </span></pre>

<p dir="rtl">
	يُتيح هذا السطر إمكانية السماح للمستخدم الجذر أو منعه من الولوج عن طريق <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr>. يُعتبَر هذا الإجراء أكثر أمانا حيثُ يمكن الولوج بالمستخدم العادي عن طريق <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> ثم استخدام صلاحيات المستخدم الجذر عن الحاجة.
</p>

<p dir="rtl">
	نُغيّر السطر بإبدال yes ب no لمنع المستخدم الجذر من الولوج عن بعد.
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="typ">PermitRootLogin</span><span class="pln"> </span><span class="kwd">no</span></pre>

<p>
	يُنصَح دائما، من أجل أمان أكبر، بتقييد ولوج المستخدم الجذر عبر <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr>.
</p>

<p dir="rtl">
	بعد إنهاء التعديلات احفَظ الملف وأغلقه باستخدام الطريقة التي رأيناها سابقا (<span style="font-family:courier new,courier,monospace;">CTRL+X</span>، ثم <span style="font-family:courier new,courier,monospace;">Y</span> و <span style="font-family:courier new,courier,monospace;">ENTER</span> بعد ذلك).
</p>

<h2 dir="rtl">
	الخطوة السادسة - إعادة تحميل <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr>
</h2>

<p dir="rtl">
	انتهينا الآن من تحرير الإعدادات. لأخذها في الاعتبار نُعيد تشغيل خدمة <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> عن طريق الأمر التالي:
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="pln">service <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr> restart </span></pre>

<p dir="rtl">
	يجب أن نتأكد من أن الإعداد الجديد يعمل بشكل جيّد قبل الخروج، حتى لا نجد أنفسَنا في وضعية لا يُمكن فيها الولوج عن بعد إلى الخادوم. افتح نافذة جديدة لواجهة الأوامر على حاسوبك الشخصي. سنجري في النافذة الجديدة اتصالا مع الخادوم باستعمال حساب المستخدم العادي الذي أنشأناه بدلا من المستخدِم الجذر.
</p>

<p dir="rtl">
	يجب ذكر رقم منفذ الولوج إلى خادوم لا يستخدم المنفذ الافترضي للاتصال عن طريق <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> وذلك بإضافة العبارة "<span style="font-family:courier new,courier,monospace;">p 4444-</span>" إلى أمر الاتصال حيثُ 4444 هو رقم المنفذ الجديد.
</p>

<p dir="rtl">
	للولوج إلى الخادوم عن طريق المنفَذ الذي أعددناه في الخطوة السابقة نستخدم الأمر التالي (أبدِل<span style="font-family:courier new,courier,monospace;"> SERVER_IP_ADDRESS</span> بعنوان خادومك و <span style="font-family:courier new,courier,monospace;">demo</span> باسم المستخدِم):
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="pln"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr> </span><span class="pun">-</span><span class="pln">p </span><span class="lit">4444</span><span class="pln"> demo@SERVER_IP_ADDRESS </span></pre>

<p dir="rtl">
	<strong>ملحوظة</strong>: لا تنسَ، إن كنت تستخدم برنامج PuTTY، تغيير إعداد المنفَذ في البرنامج حتى يتوافق مع الإعداد الحالي لخادومك.
</p>

<p dir="rtl">
	سيُطلب منك إدخال كلمة سر المستخدم الجديد ثم، بعد التحقق، ستلِج إلى المجلد الشخصي للمستخدم على الخادوم. تذكّر إضافة sudo أمام الأوامر التي ترغي في تنفيذها بصلاحيات المستخدِم الجذر:
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="pln">sudo command_to_run </span></pre>

<p dir="rtl">
	حيثُ<span style="font-family:courier new,courier,monospace;"> command_to_run</span> هو الأمر المُراد تنفيذه.
</p>

<p dir="rtl">
	إذا جرت الخطوات السّابقة كما وصفناها فإن كل شيء على ما يُرام ويُمكنك الخروج عن طريق الأمر
</p>

<pre class="php ipsCode prettyprint prettyprinted">
<span class="kwd">exit</span><span class="pln"> </span></pre>

<h3 dir="rtl">
	ماذا بعد هذا الدرس؟
</h3>

<p dir="rtl">
	بالوصول إلى هذه النقطة فإن لدى خادومك أساسا قويا، ويُمكنك تثبيت أي برنامج ترغب فيه عليه.
</p>

<p dir="rtl">
	يُمكنك المُتابعة مع هذه السلسة بقراءة مقال <a href="https://academy.hsoub.com/devops/servers/%D8%AE%D8%B7%D9%88%D8%A7%D8%AA-%D8%A5%D8%B6%D8%A7%D9%81%D9%8A%D9%91%D8%A9-%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D9%87%D8%A7-%D8%B9%D9%84%D9%89-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-ubuntu-1404-%D8%A7%D9%84%D8%AC%D8%AF%D9%8A%D8%AF%D8%A9-r36" rel="">خطوات إضافية موصى بها لخواديم أوبنتو </a><a href="https://www.digitalocean.com/community/tutorials/additional-recommended-steps-for-new-ubuntu-14-04-servers" rel="external nofollow">14.04 </a><a href="https://www.digitalocean.com/community/tutorials/additional-recommended-steps-for-new-ubuntu-14-04-servers" rel="external nofollow">الجديدة</a> الذي يشرح أمورا من قبيل تفعيل <a href="https://academy.hsoub.com/tags/fail2ban/" rel="">fail2ban</a> للحد من فعاليّة هجمات القوة العمياء Brute force attacks، الإعدادات الأساسية للجدار الناري <a href="https://academy.hsoub.com/tags/%D8%AC%D8%AF%D8%A7%D8%B1%20%D9%86%D8%A7%D8%B1%D9%8A/" rel="">Firewall</a>، بروتكول NTP وملفات الإبدال Swap. كما أنّ به روابطَ لشروح حول كيفية تثبيت وإعداد بعض تطبيقات الويب الشائعة.
</p>

<p dir="rtl">
	مقالات مثل إعداد حِزم LAMP أو LEMP جيّدة لمن يُريد استكشاف المزيد.
</p>

<p dir="rtl">
	ترجمة -وبتصرّف- للمقال: <a href="https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-14-04" rel="external nofollow">Initial Server Setup with Ubuntu 14.04</a> لصاحبه Justin Ellingwood.
</p>
]]></description><guid isPermaLink="false">4</guid><pubDate>Wed, 04 Mar 2015 17:40:00 +0000</pubDate></item><item><title>&#x645;&#x642;&#x62F;&#x651;&#x645;&#x629; &#x625;&#x644;&#x649; &#x645;&#x64F;&#x635;&#x637;&#x64E;&#x644;&#x62D;&#x627;&#x62A; &#x648;&#x639;&#x646;&#x627;&#x635;&#x631; &#x648;&#x645;&#x641;&#x627;&#x647;&#x64A;&#x645; &#x646;&#x638;&#x627;&#x645; &#x623;&#x633;&#x645;&#x627;&#x621; &#x627;&#x644;&#x646;&#x637;&#x627;&#x642;&#x627;&#x62A;</title><link>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/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/internet_480x300.png.11fffba7d7cfabcf4286c684164d1bb5.png" /></p>

<h2 dir="rtl">
	مقدّمة
</h2>

<p dir="rtl">
	نظام أسماء الّنطاقات، بالإنجليزية Domain Name System ويُختصَر ب DNS، هو أحد أكثر مجالات إعداد المواقع والخواديم صعوبةً على المتعلمين. فهْم آلية عمل نظام أسماء النطاقات سيُساعدك في تشخيص مشاكل إعدادات النفاذ إلى مواقعك؛ كما أنه يمنحك فرصة التعمق في فهم كيف تجري الأمور خلف الكواليس.
</p>

<p dir="rtl">
	سنتطرّق في هذا الدّليل إلى بعض المفاهيم الأساسية لنظام أسماء النّطاقات بحيثُ تُصبح جاهزا للعمل على إعدادات DNS لديك. يُفترَض - بعد قراءة هذا الدّليل - أن تكون لديك القدرة على إعداد اسم النطاق Domain name الذي تمتلكه على DigitalOcean أو ضبط خادومك الخاص لتشغيل DNS.
</p>

<p dir="rtl">
	فلنبدأ بتعريف بعض المفاهيم الأساسية حول كيف يعمل النظام، قبل الشروع في إعداد خواديمك الخاصة لحل نطاقك أو ضبط نطاقاتنا في لوحة التحكّم.
</p>

<h2 dir="rtl">
	مُصطلحات النطاق
</h2>

<p dir="rtl">
	يجب أولا البدء بتعريف المصطلحات التي سنستخدمها؛ فبالرغم من أن بعض المواضيع تبدو مألوفة في أُطُر مُغايِرة، إلا أن الكثير من العبارات المُستخدمة في إطار الحديث عن أسماء النطاقات ونظام DNS لا تظهر بكثرة أثناء التطرق لمجالات أخرى من الحوسبة.
</p>

<p dir="rtl">
	فلنبدأ بالأبسط.
</p>

<h3 dir="rtl">
	نظام أسماء النطاقات
</h3>

<p dir="rtl">
	نظام أسماء النطاقات المعروف اختصارًا ب"DNS" هو نظام التشبيك المُستخدَم لتحويل أسماء سهلة التذكّر إلى عناوين فريدة.
</p>

<h3 id="domain-name" dir="rtl">
	اسم النّطاق
</h3>

<p dir="rtl">
	اسم النّطاق هو الاسم سهل التذكر المستخدَم للرّبط بمورد على شبكة الإنترنت. على سبيل المثال، "google.com" اسمُ نطاق. سيقول بعض الأشخاص إن الجزء "google" هو اسم النطاق؛ ولكن يُمكننا على العموم الحديث على الصيغة المركّبة، أي "google.com" باعتبارها اسمَ النطاق.
</p>

<p dir="rtl">
	المَسار "google.com" مرتبِط بالخواديم المملوكة لشركة Google. نظام أسماء النطاقات يُتيح لنا إمكانية الوصول إلى خواديم Google عند كتابة "google.com" في شريط عناوين المتصفّح.
</p>

<h3 dir="rtl">
	عنوان IP
</h3>

<p dir="rtl">
	عنوانIP هو ما نُسمّيه موقعا قابلا للعنونة على الشّبكة. كل عنوان IP يجب أن يكون فريدًا في شبكته. عند الحديث عن مواقع الوب فإن هذه الشبكة تشمل الإنترنت بأكملها.
</p>

<p dir="rtl">
	الإصدار الرّابع من عناوين IP - الأكثر استخدامًا والذي يُرمز له بIPv4 يُكتَب على شكل أربع مجموعات من الأعداد، تحوي كل مجموعة ثلاثة أرقام على الأكثر ويُفصَل بين المجموعات الأربع بنقطة. على سبيل المثال فإن "111.222.111.222" يمكن أن يكون عنوانَ IP صالحًا. نظام DNS يُترجِم اسمًا إلى هذا العنوان. بهذه الطّريقة لن تحتاج إلى حفظ مجموعة معقّدة من اﻷرقام لكل موقع توَدّ زيارته على الشبكة.
</p>

<h3 dir="rtl">
	النطاق ذو المستوى العلوي Top-Level Domain
</h3>

<p dir="rtl">
	النطاق ذو المستوى العلوي (النطاق العلوي)، TLD اختصارًا، هو الجزء الأكثر شمولية من النطاق. النطاق العلوي هو القسم الموجود في أقصى يمين اسم النطاق (يُفصَل بين أجزاء اسم النطاق بنقطة). النطاقات العلوية المشهورة هي: "com"، و"net"، و"org"، و"gov"، و"edu"، و"io".
</p>

<p dir="rtl">
	توجد النطاقات العلوية في أعلى التسلسل الهرمي لأسماء النطاقات؛ حيث تَمنح منظمة Internet Corporation for Assigned Names and Numbers (ICANN) - المختصّة بتوزيع عناوين IP وأسماء النطاقات - لبعض الجهات صلاحية التحكم بإدارة نطاقات علوية. يُمكن لهذه الجهات بعد ذلك توزيع أسماء نطاقات تابعة للنطاق العلوي الذي تديرُه، عن طريق مسجّل نطاقات Domain registrar عادةً.
</p>

<h3 dir="rtl" id="المضيف-host">
	المُضيف Host
</h3>

<p dir="rtl">
	لدى مالك النطاق القدرة على تعريف عدة مُضيفات داخل نطاقه. يُشير المُضيف إلى حاسوب أو خدمة مستقلة يُمكن الوصول إليها عن طريق النطاق. على سبيل المثال، يُتيح معظم أصحاب النطاقات إمكانية الوصول إلى خواديم الوب الخاصة بهم عن طريق النطاق "الحاسِر" example.com إضافة إلى تعريف المُضيف "www" (مثال: www.example.com).
</p>

<p dir="rtl">
	يمكنك تعريف عدة مُضيفات أخرى داخل النطاق العام؛ فتَمنح الوصول إلى واجهة لبرمجة التطبيقات <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> عن طريق المُضيف "<abbr title="Application Programming Interface | واجهة برمجية">api</abbr>" (<abbr title="Application Programming Interface | واجهة برمجية">api</abbr>.example.com)، أو تعطِي إمكانية استخدام بروتوكول نقل الملفات FTP عن طريق تعريف مُضيف باسم "ftp" أو "files" (ftp.example.com أو files.example.com). لا يوجد تقييد على طول اسم المُضيف، التقييد الوحيد هو أن يكون فريدًا داخل النطاق.
</p>

<h3 dir="rtl">
	النطاق الفرعي SubDomain
</h3>

<p dir="rtl">
	تحدثنا عن المُضيف في الفقرة السّابقة، في هذه الفقرة سنتطرّق لمفهوم ذي صلة به: النطاق الفرعي.
</p>

<p dir="rtl">
	يعمل نظام DNS حسب تسلسل هرمي تتبع فيه عدة نطاقات للنطاقات العلوية. على سبيل المثال فإن النطاقين "google.com" و"ubuntu.com" يندرجان تحت النطاق العلوي "com". عند الحديث عن نطاق فرعي فالمقصود هو أي نطاق يُشكِّل جزءًا من نطاق أكبر. في المثال الذي ذكرناه يمكننا القول بأن "ubuntu.com" هو نطاق فرعي من "com". إجمالاً فإن"ubuntu.com" يُسمّى نطاقا، وبشكل أكثر تحديدًا فإن جزئية "ubuntu" تسمّى نطاقا من المستوى الثاني Second Level Domain، وتُختصَرب SLD.
</p>

<p dir="rtl">
	إضافةً إلى ذلك، يمكن لكل نطاق التحكم في نطاقات تتبع له. هذه النطاقات هي ما يُطلق عليه نطاقات فرعية. على سبيل المثال يُمكنك إنشاء نطاق فرعي لقسم التاريخ في مدرستك www.history.school.edu. جزئية "history" هي النطاق الفرعي (على اعتبار أن school.edu هو النطاق التابع للمدرسة).
</p>

<p dir="rtl">
	الفرق بين المُضيف والنطاق الفرعي هو أن المُضيف يُعرّف حاسوبًا أو خدمة، في حين أن النطاق الفرعي يُمدِّد النطاق الأب؛ أي أنه طريقة لتقسيم النطاق نفسِه.
</p>

<p dir="rtl">
	يُمكن ملاحظة أن الجزء الموجود في أقصى يسارِ اسم النطاق، سواء تعلّق الأمر بمُضيف أو نطاق فرعي، هو الأكثر تحديدًا؛ هذه هي طريقة عمل نظام DNS: من الأكثر إلى الأقل تحديدًا، باتجاه القراءة من اليسار إلى اليمين.
</p>

<h3 dir="rtl">
	اسم النطاق المعرَّف بالكامل Fully Qualified Domain Name
</h3>

<p dir="rtl">
	اسم نطاق معرَّف بالكامل، FQDN اختصارًا، هو ما يُطلق عليه اسم نطاق مُطلَق. في نظام DNS يُمكن إعطاء اسم نطاق بالنسبة إلى نطاق آخر، وهو ما قد يؤدي إلى بعض الالتباس. اسم النطاق المعرَّف بالكامل FQDN هو اسم مُطلق يحدّد النطاق انطلاقًا من أصل نظام أسماء النطاقات.
</p>

<p dir="rtl">
	يعني هذا أن FQDN يُحدد أسماء كل النطاقات التي يتفرّع منها النطاق بما فيها النطاق العلوي TLD. ينتهي اسمُ النطاق المعرَّف بالكامل بنقطة تُشير إلى النقطة الأعلى في التسلسل الهرمي لنظام DNS. النطاق ".mail.google.com" هو نطاق معرَّف بالكامل. النقطة الأخيرة غير ضرورية في بعض البرمجيات التي تتعامل مع FQDN؛ ولكنها مطلوبة للتوافق مع معايير ICANN.
</p>

<h3 dir="rtl">
	خادوم الأسماء Name server
</h3>

<p dir="rtl">
	خادوم الأسماء هو حاسوب مخصَّص لترجمة أسماء النطاقات إلى عناوين IP. تقوم هذه الخواديم بالجزء الأكبر من العمل في نظام DNS. بما أن مجموع عمليات الترجمة من أسماء نطاقات إلى عناوين IP أكثر بكثير من أن يقوم به خادوم أسماء واحد فإن كل واحد من هذه الخواديم يُمكن أن يُعيد توجيه الطّلبات التي تصله إلى خواديم أخرى أو أن يُفوِّض إدارة مجموعة من النطاقات الفرعية التي هو مسؤول عنها.
</p>

<p dir="rtl">
	خواديم الأسماء يمكن أن تكون "ذات سلطة" Authoritative، بمعنى أنها تعطي إجابات عن نطاقات تقع ضمن مسؤوليتها. ما عدا ذلك فإنها تُشير إلى خواديم أخرى أو تُجيب بنسخ تخبِّئها من بيانات خواديم أسماء أخرى.
</p>

<h3 dir="rtl">
	ملف النطاق Zone file
</h3>

<p dir="rtl">
	ملف النطاق هو ملف نصي بسيط يحوي الترجمات بين أسماء النطاقات وعناوين IP؛ هذه هي الوسيلة التي يعرِف عن طريقها نظام DNS أي عنوان IP يجب الاتصال به عند طلب اسم نطاق معيَّن.
</p>

<p dir="rtl">
	توجد ملفات النطاق لدى خواديم الأسماء، وتعرِّف عموما الموارد المتاحة في نطاق محدَّد أو المكان الذي يجب البحث فيه للحصول على هذه المعلومة.
</p>

<h3 dir="rtl">
	السّجلّات Records
</h3>

<p dir="rtl">
	يُخزّن ملف النطاق المعلومات ضمن سجلات. في شكله الأبسط، السجل هو ترجمة وحيدة لمورِد (مضيف أو نطاق فرعي) واسْم. يُمكن أن يكون السّجل ترجمة لاسم نطاق إلى عنوان IP، أو تعريفًا لخواديم الأسماء المسؤولة عن نطاق، أو تعيينًا لخواديم بريد النطاق، ... إلخ.
</p>

<h2 dir="rtl">
	كيف يعمل نظام أسماء النّطاقات
</h2>

<p dir="rtl">
	بعد الاطّلاع على بعض المُصطلحات المستخدمة في نظام DNS، سنتطرّق للسؤال: كيف يعمل فعلًا نظام DNS؟
</p>

<p dir="rtl">
	يبدو النظام سهلًا للغاية عند إلقاء نظرة عامة عليه، ولكنه يصبح معقَّدًا جدًا عند الدّخول في التفاصيل. مع ذلك يبقى إجمالًا بنيةًً تحتيةً موثوقا بها، كان لها دور رئيس في تبني الإنترنت بالشكل الذي نعرفها به اليوم.
</p>

<h2 dir="rtl">
	خواديم الجذرRoot servers
</h2>

<p dir="rtl">
	نظام DNS - كما ذكرنا سابِقًا - مُصمّم ليعمل حسب تسلسل هرمي. في أعلى هذا التسلسل يوجد ما يُعرف بخواديم الجذر. تُشغَّل هذه الخواديم من طرف عدّة منظمات، بتفويض من ICANN.
</p>

<p dir="rtl">
	يعمل في الوقت الحالي 13 خادومًا جذرًا.. من ناحية ثانية ونظرًا للعدد الهائل من طلبات ترجمات النطاقات في كل دقيقة، فإن كل واحد من هذه الخواديم معكوس mirrored (جميع العمليات والبيانات مكرّرة على خواديم أخرى).يشترك كل خادوم جذرفي نفس عنوان IP مع خواديمه المعكوسة. عند طلب أحد خواديم الجذر يُمرَّر الطّلب إلى مرآة Mirrorخادوم الجذر الأقرب من المُرِسل.
</p>

<p dir="rtl">
	ما العمل الذي تقوم به خواديم الجذر؟ تتعامل خواديم الجذر مع طلبات المعلومات عن نطاقات المستوى العلوي، فعند وصول طلب لا يُمكن لخادوم أسماء من مستوى أدنى التعامل معه؛ يُرسَل طلب إلى خادوم جذر للاستفسار عن النطاق.
</p>

<p dir="rtl">
	في الواقع لن يعرف الخادوم الجذر أين يُستضَاف النطاق محل الطّلب، ولكنه يستطيع إعادة توجيه مُرسِل الطّلب Requester إلى خواديم الأسماء التي تتعامل مع النطاق ذي المستوى العلوي المطلوب.
</p>

<p dir="rtl">
	في المحصّلة: عند إرسال طلب لعنوان "www.wikipedia.org" إلى خادوم جذر فإنه سيُجيب بعدم توفر نتائج في سجلاته تُوافق "www.wikipedia.org" وذلك بعد بحث في ملفات النطاق التي يحتفظ بها؛ ولكنه سيجد سجلًا للنطاق العلوي "org" ويُعطي لمُرسِل الطّلب عنوانَ خادوم الأسماء المسؤول عن عناوين "org".
</p>

<h2 dir="rtl">
	خواديم النّطاقات العليا TLD Servers
</h2>

<p dir="rtl">
	بعدها يقوم مُرسِل الطّلب بتوجيه طلب جديد إلى عنوان خادوم الأسماء الذي زوّده به الخادوم الجذر. خادوم الأسماء هذا هو المسؤول عن النطاق العلوي الموجود في الطّلب. يقوم المرسِل بعدها ببعث طلب إلى خادوم الأسماء المسؤول عن النطاق العلوي "org" لسؤاله ما هو عنوان "www.wikipedia.org". يجيب خادوم الأسماء - بعد بحث عن "www.wikipedia.org" في ملفات النطاق الخاصة به - بعدم وجود هذا النطاق في ملفاته. غير أنه يعثر على السجل الذي يحوي اسم الخادوم المسؤول عن النطاق "wikipedia.org". لقد اقتربنا كثيرًا من الإجابة التي نبحث عنها.
</p>

<h3 dir="rtl">
	خواديم الأسماء على مستوى النّطاق Domain-Level name server
</h3>

<p dir="rtl">
	حصل مُرسِل الطّلب الآن على عنوان IP الخاص بخادوم الأسماء المسؤول عن معرفة العنوان الفعلي للهدف. من جديد، يبعث مُرسِل الطلب إلى خادوم الأسماء لسؤاله إن كان يستطيع ترجمة "www.wikipedia.org" إلى عنوان IP.
</p>

<p dir="rtl">
	يبحث خادوم الأسماء على مستوى النطاق في ملفات النطاق لديه ويعثر على ملف نطاق يتعلق ب"wikipedia.org". داخل هذا الملف يوجد سجل عن مُضيف باسم "www". في هذا السّجل يوجد عنوان IP الذي يقع عليه المضيف. يبعث خادوم الأسماء بالإجابة النهائية إلى مُرسِل الطلب.
</p>

<h3 dir="rtl">
	ما هو خادوم الأسماء الحالّ Resolving name server؟
</h3>

<p dir="rtl">
	في السيناريو أعلاه تحدثنا عن "مُرسِل طلب". ما المقصود ب"مرسِل الطلب" في هذه الحالة؟
</p>

<p dir="rtl">
	مرسِل الطّلب هو في الغالب ما نسميه "خادوم أسماء حالّ" Resolving name server. خادوم أسماء حالّ هو خادوم مُعَد لإرسال الطّلبات إلى خواديم أسماء أخرى؛ أي أنه في الأساس وسيط يلجأ إليه المستخدِم. هذا الوسيط يُخبِّئ نتائجَ طلبات سابقة لتحسين سرعة الإجابة، كما أنه يعرف عناوين خواديم الجذر مما يمكّنه من "حل" resolving الطّلبات التي ليست لديه معرفة بنتائجها.
</p>

<p dir="rtl">
	يوجد لدى المستخدم غالبًا عدة خواديم أسماء حالّة مضبوطة، آليًا أو يدويًا، في نظام التشغيل لديه. يوفّر مزوّدو خدمة الإنترنت Internet Service Profider, ISP عادة خواديم أسماء حالّة. بعض المنظمات الأخرى تقوم بنفس الشيء. Google على سبيل المثال تُقدّم خواديم DNS حالّة يُمكنك إرسال الطلبات إليها.
</p>

<p dir="rtl">
	أول ما يقوم به حاسوبك عند إدخال مسار في شريط العنواين على المتصفّح هو البحث في الموارد المحلّية لديه؛ فيتحقق من ملف المضيفات Hosts المحلّي وأماكن أخرى على جهازك. في حال عدم الحصول على إجابة يُرسل طلبًا إلى خادوم أسماء حالّ وينتظر عنوان IP المورِد الذي يبحث عنه. يقوم خادوم الأسماءالحالّ بعدها بالنظر في البيانات المخبَّأة لديه بحثًا عن إجابة وإن لم يجدها يتبع الخطوات التي ذكرناها أعلاه.
</p>

<p dir="rtl">
	عمل خواديم الأسماء الحالّة هو في الأساس اختصار آلية الطّلب للمستخدمين النهائيين. كل ما على هؤلاء معرفته هو طريقة سؤال خواديم الأسماء الحالّة عن عنوان مورِد والتأكد من أن خادوم الأسماء الحالّ سيبحث ويعود لهم بالإجابة.
</p>

<h2 dir="rtl">
	ملفّات النطاق
</h2>

<p dir="rtl">
	تطرّقنا في آلية العمل المذكورة أعلاه إلى "ملفات النطاق" و"السجلّات".
</p>

<p dir="rtl">
	ملفات النطاق هي الوسيلة التي تستخدمها خواديم الأسماء لتخزين معلومات النطاقات التي تعرفها. كل نطاق يعرف خادومُ الأسماء معلوماتٍ عنه مخزَّن في ملف نطاق. أغلب الطلبات التي تأتي لخادوم أسماء تبحث عن نطاقات لا يملك ملفات نطاق تخزِّن معلومات عنها. إذا كان خادوم الأسماء مضبوطًا للتعامل مع الاستعلامات بطريقة تكرارية Recursive - مثل خادوم أسماء حالّ - فإنه سيعثُر على الإجابة ويُرسلها لصاحب الاستعلام. أما إن لم يكن كذلك فإنه سيُخبِر صاحب الاستعلام بالجهة التالية التي يجب عليه البحث لديها.
</p>

<p dir="rtl">
	تتناسب قدرة خادوم الأسماء على الإجابة على الطّلبات طردًا مع ملفات النطاق التي يُخزنها: ملفات نطاق أكثر تعني قدرة أكبر على الإجابة على الطّلبات بنطاقات تقع تحت مسؤولية الخادوم.
</p>

<p dir="rtl">
	يصف ملف النطاق "منطقة" من نظام DNS؛ أي مجموعة فرعية من كامل نظام الأسماء DNS، ويُستخدم عادةً لضبط نطاق واحد فقط حيث يمكن أن يحوي مجموعة من السجلّات تعرّف بمواقع موارد النطاق محل التعريف. يعرّف المُعطى Parameter $ORIGIN افتراضيًا المُستوى الأعلى لسلطة ملف النطاق.
</p>

<p dir="rtl">
	لنأخذ مثالًا لملف نطاق مُستخدَم لإعداد النطاق "example.com". في هذا المثال ORIGIN$ سيكون مضبوطًا على ".example.com". هذا الإعداد إما أن يكون في أعلى ملف النّطاق أو في ملف إعداد خادوم DNS الذي يُحيل إلى ملف النطاق. في كلتا الحالتين فالمُعطى يصف المنطقة التي ستكون لديه السلطة عليها.
</p>

<p dir="rtl">
	بشكل مشابِه، المُعطى TTL$ يضبط "عُمر" Time to live المعلومة التي يوفرها ملف النطاق. هذا المُعطى هو مؤقِّت يُمكن لخادوم أسماء يستعمل التخبئة Caching الاستعانة به للإجابة على طلبات سبق له الحصول على نتائجها دون إعادة البحث وذلك حتى انقضاء قيمة TTL.
</p>

<h2 dir="rtl">
	أنواع السجلّات
</h2>

<p dir="rtl">
	يمكن أن توجد عدة أنواع من السجلّات في ملف النّطاق. في ما يلي سنستعرض بعض الأنواع الشّائعة (أو الإلزامية).
</p>

<h3 dir="rtl">
	سجلاّت بداية السّلطة Start of Authority
</h3>

<p dir="rtl">
	سجل بداية السلطة، SOA اختصارًا، هو سجل إلزامي في كل ملفات النطاق. يجب أن يكون أولَ سجل فعلي في الملف (يُمكن لكل من ORIGIN$ و TTL$ أن يسبقه في الملف)، كما أنه الأكثر تعقيدًا.
</p>

<p dir="rtl">
	يأخذ سجل SOA الشكل التالي:
</p>

<pre class="php ipsCode prettyprint">
domain.com. IN SOA ns1.domain.com. admin.domain.com. (

12083 ; serial number

3h ; refresh interval

30m ; retry interval

3w ; expiry period

1h ; negative TTL

) 
</pre>

<p dir="rtl">
	فلنشرح دلالة كل جزء من السجل:
</p>

<ul dir="rtl">
<li>
		.domain.com: هذا هو المستوى الأعلى في النطاق (جذر النطاق). يعني هذا الجزء أن الملف يتعلق بالنطاق .domain.com؛ قد تجد مكانه علامة @ التي هي مجرَّد ماسك مكان Placeholder يحل محل محتوى المُعطَى ORIGIN$ الذي تحدّثنا عنه سابقًا.
	</li>
	<li>
		IN SOA: تعني IN هنا إنترنت (ستتكرّر في عدة سجلّات)، أما SOA فيُشير لنوعية السجل (بداية سلطة).
	</li>
	<li>
		.ns1.domain.com: هنا نعرِّف خادوم الأسماء الرئيس الأولي للنطاق. خواديم الأسماء إما أن تكون رئيسة Master أو تابِعة Slave. إذا كان نظام DNS معدًّا ليعمل ديناميكا (تحديث السجلات يتم دون تدخل يدوي)- كما هي الحال هنا - فيجب أن يوجد خادوم "رئيس أولي" Primary master. في حال عدم ضبط DNS للعمل بشكل ديناميكي فهذا الخادوم هو أحد خواديم الأسماء الرئيسة.
	</li>
	<li>
		.admin.domain.com: عنوان البريد الإلكتروني للمسؤول عن النطاق. هنا أُبدِلت علامة "@" بنقطة في العنوان البريدي (admin@domain.com). إذا كان العنوان البريدي يحوي نقطة فيجب إبدالها ب"\" (your.name@domain.com تُصبح your\name.domain.com).
	</li>
	<li>
		12083: هذا هو الرقم التسلسلي Serial number لملف النطاق. يجب زيادة هذا الرقم في كل مرّة يُعدَّل فيها على ملف النطاق حتى ينتشر ملف النطاق بشكل صحيح، حيثُ إن الخواديم التابعة تتحقق ما إذا كان الرقم التسلسلي الموجود في ملف النطاق لدى الخادوم الرئيس أكبرَ من الرّقم التسلسلي الموجود لديها. إن كان الأمر كذلك فإنها تطلب ملف النطاق الجديد وإلا تستمر في استخدام الملف الموجود لديها.
	</li>
	<li>
		3h: فترة التجديد Refresh interval باالنسبة للنطاق (3 ساعات في المثال)، أي المدة الزمنية التي يقضيها الخادوم التابِع قبل إرسال استفسار إلى الخادوم الرّئيس عن تغييرات على ملف النطاق.
	</li>
	<li>
		30m: فترة إعادة المحاولة Retry interval باالنسبة للنطاق (30 دقيقة في المثال هنا). في حال عدم قدرة الخادوم التابع على الاتصال بالخادوم الرئيس عند انقضاء فترة التجديد فإنه ينتظر مدةً مساوية لفترة إعادة المحاولة قبل إعادة محاولة الاتصال.
	</li>
	<li>
		3w: مدة انتهاء الصلاحية Expiry period. إن لم يستطع الخادوم التابِع الاتصال بالخادوم الرئيس خلال هذه المدة (في المثال هنا 3 أسابيع) فإنه يتوقّف عن إرسال إجابات تتعلَّق بهذا النطاق.
	</li>
	<li>
		1h: عمر المعلومة السّالب Negative TTL. مُماثل لمعطى TTL$ الذي تحدّثنا عنه مع فرق أنه يُلجأ إليه في حال عدم وجود المعلومة المبحوث عنها. بمعنى أخر: عند وصول طلب عن عنوان اسم غير موجود في الملف لدى الخادزم والإجابة أنه غير موجود فإن أي طلب عن الاسم مجدّدا سيُرد عليه بأنه غير موجود وذلك مدة ساعة (في المثال هنا) قبل البحث عنه مرة أخرى.
	</li>
</ul>
<p dir="rtl">
	<strong>ملحوظة</strong>: النص الموجود بعد النقطة-الفاصلة ";" على نفس السطر تعليق ولا يدخُل في إطار الإعدادات.
</p>

<h3 dir="rtl" id="سجلات-A">
	سجلات A و AAAA
</h3>

<p dir="rtl">
	يستعمل السّجلّان A و AAAA لتعيين مضيف إلى عنوان IP. يُستخدَم السجل "A" لتعيين مضيف إلى عنوان IP من الإصدار الرابع IPv4 بينما يُستخدَم السجل "AAAA" لتعيين مضيف إلى عنوان IP من الإصدار السّادس IPv6.
</p>

<p dir="rtl">
	تأتي الهيئة العامة لهذه السجلات على الشكل التالي:
</p>

<pre class="php ipsCode prettyprint">
host IN A IPv4_address
host IN AAAA IPv6_address 
</pre>

<p dir="rtl">
	رأينا أن السجل SOA يستدعي خادومًا رئيسًا أوليًا باسم "ns1.domain.com"؛ سيتوجّب علينا إذن تعيين عنوان IP ل"ns1.domain.com" نظرًا لأنه يقع ضمن النطاق الذي يُعرِّفه هذا الملف.
</p>

<p dir="rtl">
	يأخذ هذا السجل الشكل التالي:
</p>

<pre class="php ipsCode prettyprint">
ns1 IN A 111.222.111.222 
</pre>

<p dir="rtl">
	لاحِظ أنه لا يتوجَّب علينا هنا ذكر اسم النطاق كامِلًا، يكفينا ذكر اسم المُضيف فقط دون اسم النّطاق المعرَّف بالكامل (FQDN) وسيُكمل خادوم الأسماء الباقي عن طريق قيمة المُعطى ORIGIN$. مع ذلك يُمكننا استخدام FQDN إذا ارتأينا أن لذلك دلالة أكبر:
</p>

<pre class="php ipsCode prettyprint">
ns1.domain.com. IN A 111.222.111.222 
</pre>

<p dir="rtl">
	في الغالب هذا هو المكان الذي سنعرّف فيه خادوم الوب "www":
</p>

<pre class="php ipsCode prettyprint">
www IN A 222.222.222.222 
</pre>

<p dir="rtl">
	ستوجب علينا أيضًا ذكر العنوان الذي يُحيل إليه النطاق الأصلي، كما يلي:
</p>

<pre class="php ipsCode prettyprint">
domain.com. IN A 222.222.222.222 
</pre>

<p dir="rtl">
	كما يُمكن استخدم علامة "@" لتحل محل اسم النطاق الأصلي (domain.com):
</p>

<pre class="php ipsCode prettyprint">
@ IN A 222.222.222.222 
</pre>

<p dir="rtl">
	يوجد أيضًا خيار "*" لتعيين أي شيء يقع في النطاق - ولم يُذكَر تعريفه في الملف - إلى عنوان IP محدّد (خادوم الوب في مثالنا هنا):
</p>

<pre class="php ipsCode prettyprint">
* IN A 222.222.222.222 
</pre>

<p dir="rtl">
	كل ما ذُكِر في الفقرات السابقة يعمل بالنسبة للإصدار السادس من عناوين IP (IPv6) مع إبدال A بAAAA.
</p>

<h3 dir="rtl">
	سجلّات CNAME
</h3>

<p dir="rtl">
	السجلّات من نوع CNAME تُعرِّف كُنية Alias للاسم المُتعارَف عليه Canonical name لخادومك (الأسماء المُعرَّفة في سجلات A أو AAAA). على سبيل المثال، يُمكّننا سجل A من تعريف مُضيف باسم "server1" ثم استخدام كُنية "www" للإحالة لهذا المُضيف:
</p>

<pre class="php ipsCode prettyprint">
server1 IN A 111.111.111.111
www IN CNAME server1 
</pre>

<p dir="rtl">
	من الجيّد الانتباه إلى أن استخدام الكُنيات يؤدي إلى التقليل من الأداء نظرًا لأنها تحتاج إلى استعلام إضافي إلى الخادوم. يُمكِن الحصول على نفس النتيجة - في الغالب - عن طريق إضافة سجلات من نوع A أو AAAA. الحالة التي يُنصَح فيها بسجل من نوع CNAME هي إتاحة كُنية لمورِد خارج النطاق الحالي.
</p>

<h3 dir="rtl">
	سجلّات MX
</h3>

<p dir="rtl">
	تُستَخدم سجلّات MX (اختصار ل Mail eXchange، تبادُل البريد) لتعريف تعاملات البريد الإلكتروني داخل النّطاق. يُساعد هذا الأمر على وصول الرسائل إلى خادوم البريد بشكل صحيح.
</p>

<p dir="rtl">
	عكسَ الأنواع اﻷخرى، لا تُعيِّن السجلّات من نوع MX غالبًا مُضيفًا إلى شيء آخر (عنوان IP أو سجل). السّبب أن تعريفها ينطبق على كامل النّطاق. على هذا الأساس تأخذ غالبًا الشكل التالي:
</p>

<pre class="php ipsCode prettyprint">
IN MX 10 mail.domain.com. </pre>

<p dir="rtl">
	لاحِظ ألّا وجودَ لاسم مضيف في بداية السّجل.
</p>

<p dir="rtl">
	لاحِظ أيضًا وجود رقم إضافي في السّجل. يُستخدم هذا الرّقم للمفاضلة بين خواديم البريد في حال وجود العديد منها. الأرقام الأدنى لديها أولوية أكبر.
</p>

<p dir="rtl">
	يجب أن يُشير سجل MX - في الحالة العامة - إلى مضيف مُعرَّف عن طريق سجل A أو AAAA، لا سجل CNAME.
</p>

<p dir="rtl">
	إذا كان لدينا خادوما بريد فإن تعريف السجلاّت سيكون على النحو التالي:
</p>

<pre class="php ipsCode prettyprint">
IN MX 10 mail1.domain.com.

IN MX 50 mail2.domain.com.

mail1 IN A 111.111.111.111

mail2 IN A 222.222.222.222
</pre>

<p dir="rtl">
	في هذا المثال، المُضيف "mail1" هو المُفضَّل كخادوم لتبادل البريد الإلكتروني.
</p>

<p dir="rtl">
	الكتابة التالية مكافئة للكتابة السّابقة :
</p>

<pre class="php ipsCode prettyprint">
IN MX 10 mail1

IN MX 50 mail2

mail1 IN A 111.111.111.111

mail2 IN A 222.222.222.222 
</pre>

<h3 dir="rtl">
	سجلّات NS
</h3>

<p dir="rtl">
	تُعرِّف السجلّات من نوع NS (اختصار لName Server، خادوم الأسماء) خواديم الأسماء المُستخدمة في النطاق.
</p>

<p dir="rtl">
	قد تطرح السؤال "إذا كان ملف النطاق موجودًا على خادوم الأسماء فلماذا يحتاج الخادوم لتعريف نفسه؟". أحد العناصر المهمة وراء نجاح نظام DNS هو المستويات المتعدّدة للتخبئة في هذا النظام. بالنسبة لتعريف خادوم الأسماء في ملف النطاق فأحد الأسباب هو أن هذا الملف قد يكون معروضًا من نسخة مخبَّأة موجودة على خادوم أسماء آخر. توجد أسباب أخرى لتعريف خادوم الأسماء في ملف النطاق الموجود عليه ولكن نكتفي بالسبب المذكور دون الدّخول في التفاصيل.
</p>

<p dir="rtl">
	مثل السجلّات من نوع MX، ينطبق تعريف سجلّات NS على كامل النّطاق، لذا لا تظهر أسماء مضيفات في هذا السجّل. الشكل العام لسجل NS هو كالتالي:
</p>

<pre class="php ipsCode prettyprint">
IN NS ns1.domain.com.
IN NS ns2.domain.com. </pre>

<p>
	 
</p>

<p dir="rtl">
	ينبغي وجود خادومَيْ أسماء على الأقل معرَّفيْن في كل ملف نطاق حتى يعمل النظام بشكل صحيح في حال حصول مشكل مع أحد الخادوميْن. تعتبرأغلب برامج خواديم DNS ملف النطاق غيرَ صالح إذا كان يعرف خادوم أسماء واحدًا فقط.
</p>

<p dir="rtl">
	كالعادة، ضمِّن تعيين المضيفات عبر سجلّات A أو AAAA:
</p>

<pre class="php ipsCode prettyprint">
IN NS ns1.domain.com.

IN NS ns2.domain.com.

ns1 IN A 111.222.111.111

ns2 IN A 123.211.111.233 </pre>

<p>
	 
</p>

<p dir="rtl">
	توجد أنواع سجلّات أخرى عديدة يُمكنك استخدامُها، ولكن الأنواع التي تحدّثنا عنها أعلاه هي الأكثر شيوعًا من بين ما سيُصادفك.
</p>

<h3 dir="rtl">
	خاتمة
</h3>

<p dir="rtl">
	من المفروض أن يكون لديك الآن إدراك جيّد لكيفية عمل نظام DNS. على الرّغم من أن الفكرة العامة للنظام سهلة الفهم نسبيا لمن ألِف طريقة عمله، إلا أنها تبقى أمرًا يواجه مديرو الأنظمة - من غير ذوي الخبرة - بعضَ الصّعوبة في تنفيذه.
</p>

<p dir="rtl">
	ترجمة -وبتصرّف- للمقال: <a href="https://www.digitalocean.com/community/tutorials/an-introduction-to-dns-terminology-components-and-concepts" rel="external nofollow">An Introduction to DNS Terminology, Components, and Concepts</a>
</p>
]]></description><guid isPermaLink="false">5</guid><pubDate>Wed, 04 Mar 2015 01:01:00 +0000</pubDate></item><item><title>&#x62E;&#x645;&#x633;&#x629; &#x625;&#x639;&#x62F;&#x627;&#x62F;&#x627;&#x62A; &#x634;&#x627;&#x626;&#x639;&#x629; &#x644;&#x62E;&#x648;&#x627;&#x62F;&#x64A;&#x645; &#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A; &#x627;&#x644;&#x648;&#x64A;&#x628;</title><link>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/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2015_03/server_room_768x480.png.0d64f99690df54c6b93aedfbbf677e40.png" /></p>

<h2 dir="rtl">مقدِّمة</h2><p dir="rtl">توجد العديد من العوامل التي يجب أخذها بالاعتبار قبل اتخاذ قرار بشأن بنية الخادوم المستخدَم في بيئة عملك. هذه العوامل هي الأداء، والقابلية للتوسّع، والتوفّر، والثبات، والثمن، إضافةً لسهولة الإدارة.</p><p dir="rtl">نستعرِض في هذا المقال قائمة بإعدادات شائعة للخواديم مع وصف مُختصَر لكل إعداد يتضمن إيجابيات وسلبيات هذا الخيار. ينبغي الانتباه إلى إمكانية دمج الإعدادات في ما بينها حسب حاجة بيئة العمل؛ فلا وجود هنا لإعداد واحد هو الصّحيح وغيره خاطئ.</p><h2 dir="rtl">كل بيئة العمل على نفس الخادوم</h2><p dir="rtl">في هذا الإعداد توجد جميع مكوّنات بيئة العمل على خادوم واحد. إذا أخذنا مثال تطبيق ويب بهذا الإعداد، فإن خادوم الويب، وخادوم التطبيق وخادوم قاعدة البيانات توجد كلّها على نفس الخادوم. أحد أكثر هذا الإعداد شيوعا هو تنصيب حِزم LAMP: نظام تشغيل Linux، وخادوم ويب Apache، وقاعدة بيانات MySQL ولغة البرمجة PHP؛ الجميع على نفس الخادوم.</p><h3 dir="rtl">حالات الاستخدام</h3><ul dir="rtl"><li>مناسِب لتنصيب تطبيق بشكل سريع، فهو أبسط إعداد ممكن. ولكن يعيبُه محدودية قابليته للتمدّد وعدم عزل مكوّّنات بيئة العمل عن بعضها.</li></ul><p dir="rtl"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/single_server.png.e9cdf8a695f467131370341f4c550959.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="190" alt="single_server.thumb.png.2a47f25d72d1d10a" src="https://academy.hsoub.com/uploads/monthly_2015_03/single_server.thumb.png.2a47f25d72d1d10af9f43b23ab99630a.png"></a></p><h3 dir="rtl">الإيجابيات</h3><ul dir="rtl"><li>البساطة</li></ul><h3 dir="rtl">السّلبيات</h3><ul><li dir="rtl">يتزاحم كل من التطبيق وقاعدة البيانات - في هذا الإعداد - على نفس الموارد (وحدة المُعالجة CPU، والذاكرة Memory، وحدات الإدخال والإخراج I/O، ...إلخ) مما يتسبب في رداءة الأداء. علاوةً على ذلك يصعُب تحديد مصدَر رداءة الأداء، هل هو التطبيق أم قاعدة البيانات.</li><li dir="rtl">صعوبة التمدّد أفقيا Horizontal scaling.</li></ul><p dir="rtl"><strong>ملحوظة</strong>: المقصود بالتمدّد الأفقي هو استعمال عدة خواديم وتشغليها بحيث تظهر وكأنها خادوم واحد، أما التمدّد العمودي Vertical scaling فيُقصَد به إضافة موارد جديدة لنفس الجهاز (زيادة حجم ذاكرة الوصول العشوائي RAM على سبيل المثال). لا يحتاج التمدّد الأفقي في الغالب لإعادة تشغيل الجهاز أو الخادوم.</p><h2 dir="rtl">خادوم قاعدة بيانات منفصِل</h2><p dir="rtl">يُمكِن فصل نظام إدارة قواعد البيانات (Database management system, DBMS) عن بقية بيئة العمل، وذلك للحد من التزاحم على الموارد بين التطبيق وقاعدة البيانات. إضافة إلى ذلك، فإن نقل خادوم قاعدة البيانات من الشبكة العمومية أو من المنطقة منزوعة السّلاح DMZ (طريقة لتمكين المستخدمين في الشبكة الخارجية من الوصول إلى بعض الخدمات الموجودة في الشبكة المحلية) يزيدُ من أمان بيئة العمل.</p><h3 dir="rtl">حالات الاستخدام</h3><ul dir="rtl"><li>مناسِب لتنصيب تطبيق بشكل سريع مع التخلص من تنازع الموارد بين التطبيق وقاعدة البيانات.</li></ul><p dir="rtl"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/separate_database.png.b1392bc8a2b1606f2841d05434d14de9.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="191" alt="separate_database.thumb.png.1de9c52c57ab" src="https://academy.hsoub.com/uploads/monthly_2015_03/separate_database.thumb.png.1de9c52c57abd41fb93fd4494c0ae8ca.png"></a></p><h3 dir="rtl">الإيجابيات</h3><ul><li dir="rtl">لا وجود لتنازع الموارد (وحدة المُعالجة، والذاكرة، وحدات الإدخال والإخراج I/O، ...إلخ) بين مستوى التطبيق ومستوى قاعدة البيانات</li><li dir="rtl">يُمكِن تمديد أي من المستوَييْن (التطبيق وقاعدة البيانات) أفقيًّا حسب الحاجة وبشكل مستقِل عن الآخر.</li><li dir="rtl">زيادة الأمان بنقل قاعدة البيانات من المنطقة منزوعة السّلاح (حسب إعدادات الشبكة).</li></ul><h3 dir="rtl">السّلبيات</h3><ul><li dir="rtl">أكثر صعوبة - بقليل - من إعداد بخادوم واحد.</li><li dir="rtl">قد تظهر بعض المشاكل في الأداء إذا كان زمن الوصول Latency بين الخادومين مُعتَبرا (في حال تواجد الخادومين في مكانيْن منفصليْن جغرافيا على سبيل المثال) أو إذا كان عرض الموجة Bandwidth لا يُناسِب حجم البيانات المتبادلة.</li></ul><h3 dir="rtl">دروس متعلِّقة</h3><ul dir="rtl"><li>كيفية إعداد قاعدة بيانات عن بُعد لتحسين أداء موقع يستخدِم MySQL (المقال الثّالث في هذا المشروع).</li></ul><h2 dir="rtl">موزِّع حِمل Load Balancer (وسيط عكسي Reverse proxy)</h2><p dir="rtl">تُمكِن إضافة موزعي حِمل إلى بيئة الخادوم للرفع من الأداء والثبات عن طريق توزيع عبْء العمل بين عدّة خواديم. في حال توقف أحد الخواديم التي يُوزَّع الحِمل بينها أو وصوله للحد الأعلى من قدرته على العمَل فإن بقية الخواديم تتكفَّل بالتعامل مع البيانات القادِمة في انتظار عودة الخادوم لحالته الطبيعية. يُمكِن أيضًا استخدام موزِّع حمل يخدُم عدة تطبيقات على نفس المنفَذ Port أو النِّطاق Domain، حيثُ يلعب دور وسيط عكسي على مُستوى التطبيقات.</p><ul dir="rtl"><li>أمثلة على برامج تعمل كوسيط عكسي لتوزيع الحِمل (Load balanicig): Varnish و Nginx وHAProxy.</li></ul><h3 dir="rtl">حالات الاستخدام</h3><ul dir="rtl"><li>بيئات العمل التي تتطلَّب التمدّد أفقيًّا.</li></ul><p dir="rtl"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/load_balancer.png.b2f848e94926d6c0b58676cc3509fd7f.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="192" alt="load_balancer.thumb.png.7a9f63f8f37831d8" src="https://academy.hsoub.com/uploads/monthly_2015_03/load_balancer.thumb.png.7a9f63f8f37831d869eca9199a419100.png"></a></p><h3 dir="rtl">الإيجابيات</h3><ul><li dir="rtl">سهولة إضافة خواديم جديدة (التمدّد الأفقي).</li><li dir="rtl">يُساعِد على التصدي للهجمات المُوَزَّعة لحجب الخدمة (Distributed Denial Of Service, DDOS).</li></ul><h3 dir="rtl">السّلبيات</h3><ul><li dir="rtl">قد يُصبِح موزع الحِمل نفسه عقبة في وجه الأداء إن لم يمتلِك الموارد الكافية أو إن أُعِدَّ بطريقة غير جيّدة.</li><li dir="rtl">تُضيف وجود موزِّع حِمل اعتبارات جديدة ربّما تزيد من التعقيد، مثل الانتقال من اتصال معمّى Encrypted إلى آخر غير معمَّى أو التعامُل مع التطبيقات التي تتطلّب جلسات متماسِكة Sticky sessions (في الجلسات المُتماسِكة تُربَط الاستعلامات القادِمة من جلسة المستخدِم بنفس الخادوم، ممّا يعني أن حِمل الاستعلامات القادِمة من هذا المُستخدِم لا يُوزَّع بين الخواديم).</li></ul><h2 dir="rtl">مسرِّع HTTP (وسيط عكسي مُخبِّئ Caching Reverse Proxy)</h2><p dir="rtl">يُلجَأ لمسرِّع HTTP (يُسمَّى أيضًا وسيطا عكسيا مُخبئا لطلبات HTTP) للتقليل من المدة اللازمة لتقديم المُحتوى إلى المستخدِم عبر مجموعة متنوِّعة من التقنيات. التقنية الرئيسة هي الاحتفاظ في الذّاكرة بإجابات الاستعلامات المُتلقاة من خادوم ويب أو تطبيق؛ مما ينتُج عنهُ سُرعة حصول الطّلبات المُحتفَظ بها (المُخبَّأة Cached) على الإجابة، مع التّقليل من التفاعل غير الضّروري مع خادوم الويب أو التّطبيق.</p><ul dir="rtl"><li>أمثلة على برامج تستطيع العمَل مسرّعاتHTTP:برنامج Varnish، وSquid وNginx.</li></ul><h3 dir="rtl">حالات الاستخدام</h3><ul dir="rtl"><li>مُناسِب لتطبيقات الويب الديناميكية ذات المحتوى الضخم أو التي تقرأ من ملفات مُشترَكة عديدة.</li></ul><p dir="rtl"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/http_accelerator.png.35aa956e64ee472cf23caef11fd114d5.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="193" alt="http_accelerator.thumb.png.2fbdcac4faa74" src="https://academy.hsoub.com/uploads/monthly_2015_03/http_accelerator.thumb.png.2fbdcac4faa7491b6ed7029ca75e2543.png"></a></p><h3 dir="rtl">الإيجابيات</h3><ul><li dir="rtl">الرّفع من الأداء بالتقليل من حِمل العمل على وحدة المُعالجة في خادوم الويب واللجوء إلى التخبئة والضغط Compression.</li><li dir="rtl">بالإمكان استخدامُه كموزِّع حِمل (وسيط عكسي).</li><li dir="rtl">تُساعِد بعض برامج التخبِئة في الحد من الهجمات المُوَزَّعة لحجب الخدمة.</li></ul><h3 dir="rtl">السلبيات</h3><ul><li dir="rtl">يحتاج إلى ضبط المُسرِّع بطريقة تضمن الحصول على أفضَل أداء.</li><li dir="rtl">يقِل الأداء في حال انخفاض نسبة إصابة التخبِئة Cache-hit، أي نسبة الطّلبات المُحتفَظ بإجاباتِها في ذاكرة التخبِئة.</li></ul><h2 dir="rtl">مُضاعفة قاعدة البيانات بهيئة رئيس-تابِع Master-Slave</h2><p dir="rtl">تُستخدم مُضاعفة قاعدة البيانات بهيئة رئيس-تابِع لتحسين أداء قواعد البيانات التي تُجري عمليات قراءة كثيرة مقارنة بغمليات الكتابة، كما هو الحال في نُظم إدارة المُحتوى Content managment systems, CMS. يوجد في هذه الحالة قاعدة بيانات رئيسة واحدة إضافةً لقاعدة بيانات تابِعة أو أكثر. عند تحديث قاعِدة البيانات يُرسَل الطّلب إلى قاعدة البيانات الرئيسة، أما عند القراءة فإنه بالإمكان توزيع الطّلب بين قواعد البيانات التابعة.</p><h3 dir="rtl">حالات الاستخدام</h3><ul><li dir="rtl">هذا الإعداد جيّد لتحسين أداء جانب قاعدة البيانات من التّطبيق.</li><li dir="rtl">في الشكل أدناه مثال على مُضاعفة قاعدة البيانات بهيئة رئيس-تابِع يوجد به قاعدة بيانات تابِعة واحدة:</li></ul><p dir="rtl"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/master_slave_database_replication.png.80a8f05e480a1043df35261aa260d3dd.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="194" alt="master_slave_database_replication.thumb." src="https://academy.hsoub.com/uploads/monthly_2015_03/master_slave_database_replication.thumb.png.58d65eaf04b082b17f2c32db962aa910.png"></a></p><h3 dir="rtl">الإيجابيات</h3><ul><li dir="rtl">يزيد من الأداء في القراءة من قاعدة البيانات عن طريق توزيع العملية بين مختَلف التوابع.</li><li dir="rtl">يُمكن أن يُحسِّن من الأداء في الكتابة بحصر قاعدة البيانات الرئيسة في الكتابة فقط، فلا يستغرق الخادوم الرئيس أي وقت في الإجابة على طلبات القراءة.</li></ul><h3 dir="rtl">السلبيات</h3><ul dir="rtl"><li>يجب أن توجد في التطبيق آلية للتفريق بين قواعد البيانات الرئيسة والتابعة حتى يعرف إلى أين يُرسل كلا من طلبات القراءة والكتابة.</li><li>تحديث قواعد البيانات التّابعة غير متزامن Asynchronous، أي أنه يوجد احتمال أن تكون البيانات المقروءة لم تعُد صالحة.</li><li>في حال تعثر قاعدة البيانات الرئيسة فلا يُمكن عمل أي تحديث حتى تعود للعمل.</li><li>لا وجود لآلية مُدمَجة لتجاوز الفشل عند تعطّل قاعدة البيانات الرئيسة.</li></ul><h2 dir="rtl">مثال: تجميع المفاهيم</h2><p dir="rtl">يُمكن توزيع الحِمل بين خواديم التخبئة إضافة إلى خواديم التطبيقات مع مضاعفة قاعدة البيانات، كل ذلك في نفس بيئة العمل. الهدف من جمع هذه التقنيات هو جني ثمار كل واحدة منها دون إثارة الكثير من المشاكل أو التعقيدات. أسفلَه يوجد مُخَطَّط بياني لمثال على دمج هذه التقنيات معًا.</p><p dir="rtl"><a class="ipsAttachLink ipsAttachLink_image" rel="external nofollow" href="https://academy.hsoub.com/uploads/monthly_2015_03/combined.png.fe769016181634eb4af5a8e1e5103b9a.png"><img class="ipsImage ipsImage_thumbnailed" data-fileid="195" alt="combined.thumb.png.e4ca93671f70be8052b4b" src="https://academy.hsoub.com/uploads/monthly_2015_03/combined.thumb.png.e4ca93671f70be8052b4be00df50c53b.png"></a><br> </p><p dir="rtl">سنفترض أنّ موزّع الحمل مضبوط للتعرّف على المحتوى السّاكن (مثل الصوّر، وملفات CSS و Javascript، ...إلخ) وإرسال الطّلبات لهذا المُحتوى إلى خواديم التخبئة. بالنسبة لبقية الطّلبات فإنه يُرسِلها إلى خواديم التطبيق.</p><p dir="rtl">عند طلب محتوى ديناميكي فإن ما يحدُث هو التّالي:</p><ol dir="rtl"><li>يطلُب المستخدِم محتوى ديناميكيا من <a rel="external nofollow" href="http://example.com">http://example.com</a>، يتلقى مُوزّع الحِمل الطّلب.</li><li>يُمرِّر موزِّع الحِمل الطّلب إلى المُنتهي الخلفي للتطبيق Application Backend.</li><li>يجلب المُنتهي الخلفي المحتوى المطلوب من قاعدة البيانات ويُرسِله إلى موزِّع الحِمل.</li><li>يُمرِّر موزّع الحمل المحتوى المطلوب إلى المستخدِم.</li></ol><p dir="rtl">بالنسبة للمحتوى السّاكن فإن الخطوات تكون كالتالي:</p><ol dir="rtl"><li>يتعرّف موزِّع الحِمل على المحتوى السّاكِن ثم يتحقق من وجود المحتوى المطلوب لدى خادوم التخبِئة (إصابة التخبِئة) أو عدمه (تفويت التخبِئة Cache-miss).</li><li>في حال إصابة التخبِئة: يُرسِل خادوم التخبِئة المحتوى المطلوب إلى موزِّع الحِمل؛ نُكمِل مع الخطوة 6. في حال تفويت التخبِئة يعيد خادوم التخبِئة الطّلب إلى موزِّع الحِمل.</li><li>يُمرِّر موزِّع الحِمل الطّلب إلى المُنتهي الخلفي للتطبيق.</li><li>يجلب المُنتهي الخلفي المحتوى المطلوب من قاعدة البيانات ويُرسِله إلى موزِّع الحِمل.</li><li>يُمرِّر موزِّع الحِمل الطّلب إلى خادوم التخبِئة الذي يحتفِظ بنسخة من الطّلب والإجابة ثم يُعيده إلى موزِّع الحِمل.</li><li>يُمرِّر موزّع الحمل المحتوى إلى المستخدِم.</li></ol><p dir="rtl">تُوفّر بيئة العمل أعلاه كل فوائد الإعدادات المذكورة في هذا الشّرح من ناحية الثبات والأداء، ولكنْ لديها نقطتا ضعف: موزِّع الحمل وقاعدة البيانات الرئيسة.</p><h2 dir="rtl">خاتمة</h2><p dir="rtl">ينبغي أن تكون لديك الآن، بعد التعرّف على بعض الإعدادات الأساسية للخواديم، رؤيةٌ جيّدة تُمكِّنك من معرفة أي إعداد أنسب لتطبيقاتِك. تذكّر عند العمل على الرّفع من مستوى بيئة عملك أنْ تتدرّج في إدخال التحسينات بحيث لا تُدخِل الكثير من التعقيدات في فترة قصيرة.</p><p dir="rtl"> </p><p dir="rtl">ترجمة -وبتصرّف- للمقال: <a rel="external nofollow" href="https://www.digitalocean.com/community/tutorials/5-common-server-setups-for-your-web-application">5 Common Server Setups For Your Web Application</a></p>
]]></description><guid isPermaLink="false">8</guid><pubDate>Wed, 04 Mar 2015 01:01:00 +0000</pubDate></item></channel></rss>
