<?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/?d=4</link><description>DevOps: &#x62E;&#x648;&#x627;&#x62F;&#x64A;&#x645;</description><language>ar</language><item><title>&#x62A;&#x648;&#x635;&#x64A;&#x627;&#x62A; &#x623;&#x633;&#x627;&#x633;&#x64A;&#x629; &#x644;&#x62D;&#x645;&#x627;&#x64A;&#x629; &#x627;&#x644;&#x62E;&#x648;&#x627;&#x62F;&#x645; &#x645;&#x646; &#x627;&#x644;&#x627;&#x62E;&#x62A;&#x631;&#x627;&#x642;</title><link>https://academy.hsoub.com/devops/servers/%D8%AA%D9%88%D8%B5%D9%8A%D8%A7%D8%AA-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D8%AD%D9%85%D8%A7%D9%8A%D8%A9-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%AF%D9%85-%D9%85%D9%86-%D8%A7%D9%84%D8%A7%D8%AE%D8%AA%D8%B1%D8%A7%D9%82-r841/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2025_04/-----.png.48eb87659befcda5bbeab639f902b3af.png" /></p>
<p>
	غالبًا ما نركز اهتمامنا على معرفة كيفية بناء التطبيق ونشره في البيئة السحابية، وقد نغفل دون قصد الإجراءات الأمنية الأساسية التي ينبغي علينا توفيرها على الخادم السحابي قبل نشر التطبيقات عليه وإتاحتها للعامة. سنشارك في هذا المقال بعض التوصيات التي يمكننا تنفيذها على الخادم لحمايته من الهجمات الإلكترونية وجعله بيئة آمنة للنشر. بالطبع لن تغني هذه التوصيات العامة عن التدابير المصممة خصيصًا للتطبيق والتي يمكن تنفيذها بعد النشر، لكنها تُعَدّ انطلاقة جيدة يمكن البناء عليها.
</p>

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

<p>
	<abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> هي اختصار لعبارة Secure Shell، وهو بروتوكول آمن ومُشفر للاتصال بالخوادم وإدارتها، وهو شائع الاستخدام فأي شخص يتعامل مع <a href="https://academy.hsoub.com/devops/servers/" rel="">الخوادم</a> سيقضي معظم وقته متصلًا بالخادم عبر جلسة اتصال طرفية terminal تستخدم <a href="https://academy.hsoub.com/devops/security/ssh/" rel="">برتوكول <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr></a>، أما مفاتيح <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> أو <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> Keys فهي بديل آمن لعمليات تسجيل الدخول المستندة إلى كلمة مرور أي تلك التي تعتمد الاستيثاق بكلمة المرور، لأن هذه المفاتيح تستخدم <a href="https://academy.hsoub.com/apps/general/%D8%A7%D9%84%D8%AA%D8%B4%D9%81%D9%8A%D8%B1-%D9%88%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84%D8%A7%D8%AA%D9%87-%D9%81%D9%8A-%D8%A7%D9%84%D8%B9%D8%A7%D9%84%D9%85-%D8%A7%D9%84%D8%B1%D9%82%D9%85%D9%8A-r380/" rel="">التشفير</a> لتأمين تسجيل الدخول إلى الخادم، وتُعَدُّ إجراءً ضروريًا يوصى به لجميع مستخدمي <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr>.
</p>

<p>
	لإجراء الاستيثاق authentication من خلال مفاتيح <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> نحتاج لتوليد مفتاحين، مفتاح عام public key مكن مشاركته مع الطرف الآخر، ومفتاح خاص private key سري يحتفظ به المستخدم ولا يشاركه مع أحد، تُسمى هذه الآلية التشفير غير المتماثل asymmetric encryption وقد تصادفنا في حالات استخدام أخرى.
</p>

<p style="text-align: center;">
	<img alt="001 مفاتيح SSH" class="ipsImage ipsImage_thumbnailed" data-fileid="170414" data-ratio="37.43" data-unique="9ztex9pt6" style="width: 700px; height: auto;" width="806" src="https://academy.hsoub.com/uploads/monthly_2025_04/img01-ssh-key-auth.png.83a792dc369aa79961ef4a141e170218.png">
</p>

<p>
	بعد توليد مفتاح <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> العام ينبغي لنا وضعه على الخادم ضمن المسار المخصص له وهو عادةً المجلد <code>‎~/.<abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr></abbr>/authorized_keys</code>، وبعدها يمكننا الاتصال بالخادم باستخدام مفاتيح <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr>، ومعرفة المزيد عن الاستيثاق باستخدام كلمة المرور والاستيثاق باستخدام المفاتيح ننصح بمشاهدة الفيديو التالي:
</p>

<p>
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen="" frameborder="0" height="400" id="ips_uid_6520_6" referrerpolicy="strict-origin-when-cross-origin" src="https://academy.hsoub.com/applications/core/interface/index.html" title="الاتصال بخادم Linux عبر SSH" width="930" data-embed-src="https://www.youtube.com/embed/NqKdCONHNgE"></iframe>
</p>

<h3 id="ssh-1">
	كيف تعزز مفاتيح <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> أمان الاتصال مع الخادم
</h3>

<p>
	إن جميع أنواع الاستيثاق في <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> مُشفرة بالكامل حتى تلك المعتمدة على كلمات المرور فقط، لكن بالرغم من التشفير لن يُعدّ الاستيثاق باستخدام كلمة المرور آمنًا بما فيه كفاية، فالمخترق سيحاول تخمين كلمة المرور مرارًا وتكرارًا باستخدام برمجيات متخصصة وقد ينجح في كسرها والوصول إلى الخادم وخاصةً إذا كان للخادم عنوان IP عام، وعلى الرغم من إمكانية تقليل عدد المحاولات المتاحة أمام المخترق بضبط إعدادات الخادم ليمنع تلقائيًا الاتصالات الواردة من أي عنوان IP يجري عددًا معينًا من محاولات الاتصال الفاشلة، إلّا أن ذلك يبقى غير آمن تمامًا فترك الخادم عرضة <a href="https://academy.hsoub.com/programming/php/wordpress/%D9%87%D8%AC%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D9%82%D9%88%D8%A9-%D8%A7%D9%84%D8%BA%D8%A7%D8%B4%D9%85%D8%A9-%D8%B9%D9%84%D9%89-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D9%88%D8%A7%D9%84%D8%AD%D9%85%D8%A7%D9%8A%D8%A9-%D9%85%D9%86%D9%87%D8%A7-r1440/" rel="">لهجمات القوة الغاشمة brute force attacks</a> يُعدّ خطرًا أمنيًا لا يستهان به.
</p>

<p>
	وهنا تبرز أهمية الاستيثاق باستخدام مفاتيح <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> فهو يسمح بتعطيل الاستيثاق المستند إلى كلمة المرور ويلغي المخاطر المرتبطة به، وحتى إذا عينا كلمة مرور لمفتاح <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> الخاص بنا فإنها تُعدّ هدفًا صعب المنال في هجوم القوة الغاشمة بسبب عدد المحارف الكبير إذ يمكننا إنشاء <a href="https://academy.hsoub.com/programming/advanced/%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%AF%D9%88%D8%A7%D9%84-%D8%A7%D9%84%D8%AA%D9%82%D8%B7%D9%8A%D8%B9-hash-functions-%D9%81%D9%8A-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%B1%D8%B2%D9%85%D9%8A%D8%A7%D8%AA-r1428/" rel="">تقطيع أو تجزئة hash</a> بطول يصل إلى 128 محرف لمفتاح <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> ذو كلمة مرور بطول 12 محرف فقط،
</p>

<p>
	ورغم أن التشفير يُستخدم لحماية كلمات المرور، إلا أن بعض خوارزميات التشفير ليست آمنة بالكامل. فبعضها يمكن اختراقه باستخدام تقنيات الهندسة العكسية، وذلك من خلال تحليل <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AA%D8%B1%D9%85%D9%8A%D8%B2-encoding%D8%8C-%D8%A7%D9%84%D8%AA%D8%B9%D9%85%D9%8A%D8%A9-encryption%D8%8C-%D8%A7%D9%84%D8%AA%D8%AC%D8%B2%D8%A6%D8%A9-hashing-%D9%88%D8%A7%D9%84%D8%AA%D8%B4%D9%88%D9%8A%D8%B4-obfuscation%D8%9F-r308/" rel="">تجزئات كلمات المرور password hashes</a> على أجهزة قوية لفترات طويلة حتى الوصول إلى كلمة مرور مطابقة. في المقابل، توجد خوارزميات أكثر أمانًا حتى الآن، مثل خوارزمية RSA الافتراضية التي تعتمدها تطبيقات <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> الحديثة.
</p>

<h3 id="ssh-2">
	تنفيذ الاستيثاق بمفاتيح <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> على الخادم
</h3>

<p>
	يوصى باستخدام مفاتيح <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> للاتصال عن بعد بأي <a href="https://academy.hsoub.com/devops/linux/" rel="">خادم لينكس</a>، ويمكنك تنفيذ ذلك بخطوتين: توليد زوج من مفاتيح <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> على الحاسوب المحلي باستخدام الأمر <code><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr></abbr></code> وفق الخطوات الواردة في مقال <a href="https://academy.hsoub.com/devops/security/ssh/%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%85%D8%B9-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-ssh-%D8%A7%D9%84%D8%B9%D9%85%D9%84%D8%A7%D8%A1-%D9%88%D8%A7%D9%84%D9%85%D9%81%D8%A7%D8%AA%D9%8A%D8%AD-r55/" rel="">العمل مع خواديم <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr>: العملاء والمفاتيح</a>، ثم نقل المفتاح العام public key إلى الخادم البعيد.
</p>

<p>
	أما في أجزاء النظام التي تحتاج لاستخدام كلمة مرور أو التي تكون عرضةً لهجمات القوة الغاشمة brute force attacks فيمكن تنفيذ حلول مخصصة لذلك مثل استخدام Fail2ban للحد من محاولات تخمين كلمة المرور، ولمطالعة المزيد ننصح بمطالعة مقال <a href="https://academy.hsoub.com/devops/security/firewalls/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AD%D9%85%D8%A7%D9%8A%D8%A9-ssh-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-fail2ban-%D8%B9%D9%84%D9%89-ubuntu-r113/" rel="">كيفية حماية <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> باستخدام Fail2Ban على Ubuntu</a>.
</p>

<p>
	من ناحية أخرى يُعدّ عدم السماح لمستخدم الجذر <code>root</code> بتسجيل الدخول مباشرةً عبر <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> واحدًا من أفضل الممارسات الأمنية الموصى بها، وذلك طبقًا <a href="https://en.wikipedia.org/wiki/Principle_of_least_privilege" rel="external nofollow">لمبدأ إعطاء الامتيازات الأقل</a> فبدلاً من المستخدم <code>root</code> نسجل الدخول بمستخدم عادي لا يملك امتيازات عالية، ثم نرفع امتيازاته حسب الحاجة بواسطة أداة مثل <a href="https://academy.hsoub.com/devops/linux/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-sudo-%D9%84%D8%AA%D9%81%D9%88%D9%8A%D8%B6-%D8%A7%D9%84%D8%B5%D9%84%D8%A7%D8%AD%D9%8A%D8%A7%D8%AA-%D9%81%D9%8A-linux-r379/" rel=""><code>sudo</code></a>، ويمكن تطبيق ذلك كما يلي: بعد التأكد من الاتصال بالخادم وإنشاء حساب لا يتمتع بامتيازات عالية لكنه قادر على العمل مع <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr>، يمكن تعطيل عمليات تسجيل الدخول بواسطة مستخدم الجذر عبر تعديل قيمة السطر الخاص بذلك ضمن الملف <code>‎/etc/<abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr></abbr>/sshd_config</code> على الخادم ليصبح <code>PermitRootLogin no</code> ثم نعيد تشغيل <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> باستخدام أمر مثل <code>Sudo systemctl Restart sshd</code> ليأخذ التعديل مفعوله.
</p>

<h2 id="firewalls">
	الجدران النارية Firewalls
</h2>

<p>
	الجدار الناري <a href="https://academy.hsoub.com/devops/security/firewalls/%D9%85%D8%A7-%D9%87%D9%88-%D8%A7%D9%84%D8%AC%D8%AF%D8%A7%D8%B1-%D8%A7%D9%84%D9%86%D8%A7%D8%B1%D9%8A-%D9%88%D9%83%D9%8A%D9%81-%D9%8A%D8%B9%D9%85%D9%84%D8%9F-r114/" rel="">Firewall</a> هو تطبيق برمجي أو عتاد يتحكم بإتاحة الخدمات على الشبكة، وبأنواع حركة مرور البيانات المسموح لها بالدخول والخروج من وإلى خادم معين أو مجموعة خوادم معينة، وعند ضبطه بشكل صحيح، يعمل الجدار الناري على حماية النظام بفعالية، حيث يمنع أي اتصال وارد من خارج الشبكة ما لم يكن مصرحًا به، ولا يسمح إلا بالوصول إلى الخدمات المخصصة لذلك فقط.
</p>

<p style="text-align: center;">
	<img alt="002 الجدار الناري" class="ipsImage ipsImage_thumbnailed" data-fileid="170421" data-ratio="38.67" data-unique="cbtvlgy2o" style="width: 600px; height: auto;" width="742" src="https://academy.hsoub.com/uploads/monthly_2025_04/img02-firewall.png.8ffcfe76112681fe896b534452f23d1c.png">
</p>

<p>
	تُصَنَّف الخدمات الموجودة على أي خادم تقليدي إلى الفئات التالية:
</p>

<ul>
	<li>
		خدمات عامة Public متاحة لأي شخص عبر الإنترنت مثل خوادم الويب
	</li>
	<li>
		خدمات خاصة Private محصورة بالاتصالات من مواقع محددة أو حسابات مصرح لها بالوصول مثل لوحات تحكم قواعد البيانات
	</li>
	<li>
		خدمات داخلية Internal غير متاحة للعامة وتقبل الاتصالات المحلية فقط، مثل قواعد البيانات المحلية
	</li>
</ul>

<p>
	تتحكم <a href="https://academy.hsoub.com/devops/security/firewalls/" rel="">الجدران النارية</a> بالوصول إلى التطبيقات تبعًا للفئات المذكورة أعلاه، فتساعد على إتاحة الخدمات العامة للجميع عبر الإنترنت، وعلى تقييد الوصول إلى الخدمات الخاصة بناءً على معايير مختلفة مثل أنواع الاتصالات أو غيرها، بالإضافة إلى عزل الخدمات الداخلية تمامًا عن الإنترنت، وإغلاق المنافذ غير المستخدمة التي عادة ما تغلق في معظم إعدادات الحماية.
</p>

<h3 id="-1">
	كيف يحمي الجدار الناري التطبيقات
</h3>

<p>
	لا غنى عن استخدام الجدار الناري لحماية الأنظمة البرمجية، حتى وإن كانت التطبيقات نفسها مزوّدة بميزات أمنية أو تقيّد الوصول إلى واجهات معينة فقط. فالجدار الناري يشكّل طبقة حماية أساسية تعمل على تصفية الاتصالات الواردة والصادرة، وتمنع حركة المرور غير المصرح بها من الوصول إلى التطبيق أساسًا، قبل معالجتها من قبل النظام أو الخوادم المعنية.
</p>

<p>
	ويتحكم الجدار الناري المُعَدّ بطريقة سليمة بإمكانية الوصول إلى مكونات النظام الخاص بنا حسب طبيعة العمل، فلا يتيح الوصول لكل الخدمات والاتصالات على الخادم، بل يسمح بالوصول إلى خدمات معينة ويمنع الوصول إلى سواها، وذلك عبر فتح المنافذ ports الخاصة بها وإغلاق بقية المنافذ، مثلًا يمكن فتح المنفذ 22 لبروتوكول الاتصال <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr>، والمنفذين 80 و 443 لخدمات الويب <a href="https://academy.hsoub.com/devops/servers/web/" rel="">HTTP/HTTPS</a> التي تعمل من المتصفح وغيرها، عمومًا كلما اختصرنا عدد المنافذ أو الخدمات المفتوحة كلما قللنا من الثغرات الأمنية التي يمكن أن يستغلها المخترق ومن احتمالية تعرضنا للهجمات الإلكترونية.
</p>

<h3 id="-2">
	تشغيل الجدار الناري على الخادم
</h3>

<p>
	يوفر نظام <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r799/" rel="">لينكس</a> أنواع متعددة من جدران الحماية تختلف عن بعضها في درجة التعقيد وطبيعة الحماية التي تؤمنها، وكل ما علينا هو فهمها وضبط إعداداتها بحسب خدماتنا ثم التعديل عليها مع أي تغيير تجريه على هذه الخدمات، ومن أشهر الخيارات المتاحة الجدار الناري غير المُعقَّد Uncomplicated Firewall -أو UFW اختصارًا- حيث يتوفر هذا النوع افتراضيًا على بعض توزيعات لينكس مثل أوبنتو، ويمكن إعداده بالرجوع إلى مقال <a href="https://academy.hsoub.com/devops/security/firewalls/%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/" rel="">كيف تضبط جدارًا ناريًا في أوبنتو باستخدام UFW</a> ومقال <a href="https://academy.hsoub.com/devops/security/firewalls/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-ufw-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D9%88%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D8%B4%D8%A7%D8%A6%D8%B9%D8%A9-%D9%84%D9%84%D8%AC%D8%AF%D8%A7%D8%B1-%D8%A7%D9%84%D9%86%D8%A7%D8%B1%D9%8A-r121/" rel="">أساسيات UFW: قواعد وأوامر شائعة للجدار الناري</a>.
</p>

<p>
	تحتفظ العديد من الجدران النارية البرمجية مثل UFW و <a href="https://academy.hsoub.com/devops/linux/%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%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-centos-7-%D8%A7%D9%84%D8%AC%D8%AF%D9%8A%D8%AF%D8%A9-r346/" rel="">firewalld</a> بقواعدها rules ضمن ملف خاص يدعى <code>iptables</code>، ويمكن مطالعة المزيد عن هذا الموضوع بقراءة مقال <a href="https://academy.hsoub.com/devops/security/firewalls/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AC%D8%AF%D8%A7%D8%B1-%D9%86%D8%A7%D8%B1%D9%8A-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-iptables-%D8%B9%D9%84%D9%89-ubuntu-1404-r38/" rel="">كيفية إعداد جدار ناري باستخدام IPTables على Ubuntu 14.04</a>، ومقال <a href="https://academy.hsoub.com/devops/security/firewalls/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-iptables-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D9%88%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D8%B4%D8%A7%D8%A6%D8%B9%D8%A9-%D9%84%D9%84%D8%AC%D8%AF%D8%A7%D8%B1-%D8%A7%D9%84%D9%86%D8%A7%D8%B1%D9%8A-r119/" rel="">أساسيات IPTables - قواعد وأوامر شائعة للجدار الناري</a>، إذ يساعد فهم <code>iptables</code> على التعامل مع حالات التعارض التي قد تنشأ من تسجيل بعض البرمجيات مثل <a href="https://academy.hsoub.com/devops/cloud-computing/docker/" rel="">Docker</a> قواعدها الأمنية الخاصة بالتحكم بمنافذ الخادم ضمن الملف <code>iptables</code> إلى جوانب قواعد UFW المُسجلَّة فيه أيضًا.
</p>

<p>
	<strong>ملاحظة</strong>:توفر العديد من شركات الاستضافة خدمة جدار ناري خارجي يمكن تفعيله أمام الخادم السحابي لحمايته، بدلًا من الاعتماد فقط على الجدار الناري الموجود داخل نظام التشغيل، وهذا النوع من الجدران النارية يُدار من خلال لوحة التحكم الخاصة بمزود الخدمة، وتختلف أدوات التحكم فيه وطريقة إعداده من مزود لآخر.
</p>

<p>
	أهم ما يجب الانتباه إليه هو أن تكون الإعدادات الافتراضية للجدار الناري قائمة على مبدأ الحظر، أي أن يتم منع أي حركة مرور مجهولة أو غير مصرح بها بشكل تلقائي، فهذا الإجراء يحمي الخدمات الجديدة من الظهور على الإنترنت عن طريق الخطأ أو من أن تكون متاحة لأطراف غير مخولين. وعندما نقرر إطلاق خدمة جديدة، سيكون علينا حينها إعداد قواعد واضحة ومحددة في الجدار الناري تسمح بالوصول إليها وهذا يدفعنا بشكل طبيعي إلى التفكير المسبق في طريقة تشغيل الخدمة، وكيفية الوصول إليها، والتأكد من جميع الجوانب الأمنية قبل طرحها.
</p>

<h2 id="vpcnetworks">
	شبكات السحابة الافتراضية الخاصة VPC Networks
</h2>

<p>
	شبكات السحابة الافتراضية الخاصة Virtual Private Cloud -أو VPC اختصارًا- ههي شبكات مخصصة لربط موارد البنية التحتية في السحابة، وتوفر اتصالًا آمنًا ومعزولًا عن الإنترنت العام.
</p>

<h3 id="vpc">
	كيف تعزز شبكات VPC أمان نظامنا
</h3>

<p>
	عند حجز استضافة سحابية، يقوم بعض مزودي الخدمة بتخصيص واجهتين للشبكة تلقائيًا: واحدة عامة public network interface للتواصل مع الإنترنت، وأخرى خاصة private network interface للتواصل داخل الشبكة السحابية فقط. يمكننا تعطيل الواجهة العامة لبعض الخوادم والسماح لها بالتواصل فقط عبر الواجهة الخاصة. بذلك نحمي البيانات المتبادلة بين هذه الخوادم لأن الحركة لا تمر عبر الإنترنت العام، مما يقلل من خطر تعرضها للاختراق أو الكشف
</p>

<p>
	يساعدنا الاستخدام المدروس لعدد بوابات الإنترنت أو بوابات الدخول ingress gateways التي تعد نقاط الاتصال الوحيدة بين موارد شبكتنا السحابية الخاصة VPC والإنترنت العام على مراقبة حركة المرور العامة التي تتصل مع الموارد والتحكم بها بأفضل طريقة ممكنة، وتتوافق بعض أنظمة تنسيق الحاويات الحديثة مثل <a href="https://academy.hsoub.com/devops/cloud-computing/%D9%86%D8%B8%D8%A7%D9%85-%D9%83%D9%88%D8%A8%D9%8A%D8%B1%D9%86%D8%AA%D8%B3-kubernetes-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%B9%D9%85%D9%84%D9%87-r598/" rel="">Kubernetes</a> جيدًا مع مفهوم بوابات الدخول فلها إعداداتها الخاصة في هذا المجال، إذ تنشئ العديد من واجهات الشبكة الخاصة افتراضيًا، ويعود القرار لنا بما نريد إتاحته أو الكشف عنه منها.
</p>

<h3 id="vpc-1">
	تطبيق شبكات VPC
</h3>

<p>
	يتيح العديد من مزودي <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%AA%D8%B9%D9%84%D9%85-%D8%A7%D9%84%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D9%91%D8%A9-%D8%A7%D9%84%D9%85%D8%AA%D8%B7%D9%84%D8%A8%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D9%91%D8%A9%D8%8C-%D9%88%D9%83%D9%8A%D9%81-%D8%AA%D8%B5%D8%A8%D8%AD-%D9%85%D9%87%D9%86%D8%AF%D8%B3-%D8%AD%D9%88%D8%B3%D8%A8%D8%A9-%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D9%91%D8%A9-r457/" rel="">الخدمات السحابية</a> المتخصصين بخدمات البنية التحتية إمكانية إنشاء مواردنا الخاصة وإضافتها إلى شبكة VPC حسب ما نريد لكن بالطبع على أنظمتهم الأساسية وداخل مراكز بياناتهم، أما بناء شبكتك الخاصة من VPC يدويًا من دون أي مزود خدمة فهو أمرٌ صعب وبتطلب إعدادات ومزايا متقدمة على الخادم ومعرفة عميقة بالشبكات، لذا يمكن استخدام أحد بدائل VPC الموجودة في المتناول وهو إعداد اتصال <abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية"><abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية">VPN</abbr></abbr> بين الخوادم كما سنشرح في فقرتنا التالية.
</p>

<h2 id="vpn">
	شبكات <abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية"><abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية">VPN</abbr></abbr> والشبكات الخاصة
</h2>

<p>
	الشبكة الافتراضية الخاصة virtual private network -أو  <abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية"><abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية">VPN</abbr></abbr> اختصارًا- هي وسيلة لإنشاء اتصالات آمنة بين الحواسيب البعيدة تكافئ الاتصالات ضمن شبكة محلية خاصة local private network، يساعدك ذلك على إعداد خدماتك كما لو أنها في شبكة خاصة وأيضًا على الاتصال مع خوادمنا البعيدة بطريقة آمنة.
</p>

<p style="text-align: center;">
	<img alt="003 " class="ipsImage ipsImage_thumbnailed" data-fileid="170429" data-ratio="38.00" data-unique="p1162i0yd" style="width: 600px; height: auto;" width="780" src="https://academy.hsoub.com/uploads/monthly_2025_04/img03-vpn.png.e02557976ce8f9886651f769beb705dd.png">
</p>

<h3 id="vpn-1">
	كيف تحسِّن شبكات <abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية"><abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية">VPN</abbr></abbr> أمان النظام
</h3>

<p>
	يُعَدُّ استخدام <abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية"><abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية">VPN</abbr></abbr> طريقةً فعالة لبناء شبكة خاصة لا يراها إلَّا خوادمنا، وتتمتع الاتصالات ضمنها بالأمان والخصوصية التامة، يمكن تمرير حركة مرور بعض التطبيقات عبر الواجهة الافتراضية التي توفرها برمجيات <abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية"><abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية">VPN</abbr></abbr>، وستكون عندها الخدمات الوحيدة المتاحة عبر الشبكة العامة هي تلك التي يُفترض بالعملاء أن يستخدموها عبر الإنترنت العام.
</p>

<h3 id="vpn-2">
	تنفيذ شبكات <abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية"><abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية">VPN</abbr></abbr> عمليًا
</h3>

<p>
	يعتمد إعداد الشبكة الخاصة private network على التخطيط وضبط الإعدادات المناسبة لمشروعنا على التطبيقات والواجهات الشبكية والجدران النارية التي نستخدمها، وذلك في بداية العمل عند نشر الخوادم لأول مرة، بالمقابل يتطلب <a href="https://academy.hsoub.com/devops/security/vpn/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-tinc-%D9%84%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%B4%D8%A8%D9%83%D8%A9-%D8%AE%D8%A7%D8%B5%D8%A9-%D8%A7%D9%81%D8%AA%D8%B1%D8%A7%D8%B6%D9%8A%D8%A9-vpn-%D8%B9%D9%84%D9%89-ubuntu-1404-r143/" rel="">إعداد شبكات <abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية"><abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية">VPN</abbr></abbr></a> ونشرها تثبيت أدوات إضافية على بنيتنا الحالية وبناء مسارات شبكة network routes إضافية، كما ينبغي أن يمتلك كل خادم في شبكة <abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية"><abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية">VPN</abbr></abbr> الخاصة بنا البيانات والإعدادات التي تمَكِّنُه من تأسيس اتصال <abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية"><abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية">VPN</abbr></abbr> مع مكونات الشبكة، وبعد إتمام كافة الإعدادات وتشغيل <abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية"><abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية">VPN</abbr></abbr> بنجاح يمكن ضبط إعدادات تطبيقاتنا لتمرر كافة بياناتها عبر نفق <abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية"><abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية">VPN</abbr></abbr> tunnel. ولمزيد من المعلومات ننصح بمطالعة المقالات الموجودة في قسم <a href="https://academy.hsoub.com/devops/security/vpn/" rel=""><abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية"><abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية">VPN</abbr></abbr></a>.
</p>

<p>
	هناك العديد من الأدوات مفتوحة المصدر التي تساعدنا على بناء شبكات <abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية"><abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية">VPN</abbr></abbr> مثل <a href="https://www.digitalocean.com/community/tutorials/how-to-set-up-wireguard-on-ubuntu-20-04" rel="external nofollow">وايرجارد Wireguard</a> وغيرها، وتتبع شبكات <abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية"><abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية">VPN</abbr></abbr> عمومًا المبدأ نفسه الذي ناقشناه في فقرة VPC والخاص بتقييد الوصول إلى <a href="https://academy.hsoub.com/devops/cloud-computing/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D8%A9-r807/" rel="">الخوادم السحابية</a> بعدد محدود من المداخل ingress وذلك عبر تنفيذها سلسلة من واجهات الشبكة الخاصة خلف عدد قليل من نقاط الدخول entry points، ويمكننا تنفيذ التقنيتين معًا أي <abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية"><abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية">VPN</abbr></abbr> ضمن بنية تحتية أساسها VPC من بناء شبكات <abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية"><abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية">VPN</abbr></abbr> أكثر تخصيصًا.
</p>

<h2 id="serviceauditing">
	تدقيق الخدمات ومراجعتها
</h2>

<p>
	يُعدّ تحليل الأنظمة المستخدمة وفهم ثغراتها واحتمالات الهجمات التي قد تتعرض لها من أهم <a href="https://academy.hsoub.com/devops/security/7-%D8%AA%D8%AF%D8%A7%D8%A8%D9%8A%D8%B1-%D8%A3%D9%85%D9%86%D9%8A%D8%A9-%D9%84%D8%AD%D9%85%D8%A7%D9%8A%D8%A9-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85%D9%83-r60/" rel="">تدابير الحماية</a> التي تساعدك على تأمين الخودام وبقية مكونات النظام بأفضل طريقة ممكنة.
</p>

<p style="text-align: center;">
	<img alt="004 قائمة مراجعة الخدمات" class="ipsImage ipsImage_thumbnailed" data-fileid="170435" data-ratio="90.50" data-unique="zqjgyx5vg" style="width: 200px; height: auto;" width="299" src="https://academy.hsoub.com/uploads/monthly_2025_04/img04-service-audit.png.f21958faac2b6bbb111a4416d064431f.png">
</p>

<p>
	ويُعدّ تدقيق الخدمات Service auditing ومراجعتها من أبرز أساليب هذا التحليل، فهو يوفر معلومات عن الخدمات العاملة على نظام معين، وأرقام المنافذ التي تستخدمها، والبروتوكولات التي تتخاطب بها وما إلى ذلك، وتساعدنا هذه المعلومات في ضبط إعدادات الخدمات الموجهة للعامة، وإعدادات الجدران النارية، وأيضًا في المراقبة، والإنذار بحدوث أي طارئ.
</p>

<h3 id="-3">
	كيف يساهم تدقيق الخدمات ومراجعتها بتعزيز أمان الأنظمة؟
</h3>

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

<p>
	عند توفر فكرة أساسية عن الخدمات الشبكية العاملة على جهازنا يمكن البدء بتحليلها، وطرح الأسئلة التالية عن كل خدمة نود تدقيقها:
</p>

<ul>
	<li>
		هل من الضروري تشغيل هذه الخدمة
	</li>
	<li>
		هل تعمل هذه الخدمة على واجهات الشبكة الصحيحة أم على واجهات لا ينبغي لها العمل عليها
	</li>
	<li>
		هل ينبغي ربط هذه الخدمة بواجهة شبكة عامة أم خاصة
	</li>
	<li>
		هل قواعد الجدار الناري مضبوطة بطريقة صحيحة فتمرر حركة البيانات المسموحة فقط إلى هذه الخدمة وتمنع غير المسموحة
	</li>
	<li>
		هل النظام مجهز بآلية تنبيه تعلمنا بالتحذيرات الأمنية المرتبطة بنقاط ضعف كل خدمة من هذه الخدمات
	</li>
</ul>

<p>
	ننصح بإجراء هذا النوع من تدقيق الخدمات عند بناء أي خادم جديد، وتكرراه دوريًا كل بضعة أشهر مثلًا ليساعدنا على اكتشاف أي تغيير طرأ على الخدمات بقصد أو بغير قصد لنتخذ الإجراءات المناسبة حياله.
</p>

<h3 id="-4">
	تنفيذ تدقيق الخدمات ومراجعتها
</h3>

<p>
	نستخدم الأمر <code>ss</code> لتدقيق خدمات الشبكة العاملة على نظامنا، إذ يعرض هذا الأمر كافة منافذ <a href="https://academy.hsoub.com/devops/networking/%D8%A8%D8%B1%D8%AA%D9%88%D9%83%D9%88%D9%84%D8%A7%D8%AA-%D8%AA%D8%AF%D9%81%D9%82-%D8%A7%D9%84%D8%A8%D8%A7%D9%8A%D8%AA%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%88%D8%AB%D9%88%D9%82%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8%D9%8A%D8%A9-%D8%A8%D8%B1%D9%88%D8%AA%D9%88%D9%83%D9%88%D9%84-tcp-%D9%85%D8%AB%D8%A7%D9%84%D8%A7-r515/" rel="">TCP</a> و UDP المستخدمة على الخادم. لنلقِ نظرة على المثال التالي المتضمن استخدام هذا الأمر مع الخيارات الخاصة بإظهار اسم البرنامج، ورقم العملية <abbr title="Process IDentifier | معرّف العملية أو البرنامج"><abbr title="Process IDentifier | معرّف العملية أو البرنامج">PID</abbr></abbr>، والعناوين الشبكية المستخدمة للاستماع أو لتلقي اتصالات TCP و UDP:
</p>

<pre class="ipsCode">$ sudo ss -plunt
</pre>

<p>
	وهذه دلالة كل واحد من الخيارات <code>p</code> و <code>l</code> و <code>u</code> و <code>n</code> و <code>t</code> المستخدمة أعلاه:
</p>

<ul>
	<li>
		الخيار <code>p</code> مسؤول عن إظهار رقم العملية <abbr title="Process IDentifier | معرّف العملية أو البرنامج"><abbr title="Process IDentifier | معرّف العملية أو البرنامج">PID</abbr></abbr> المقابل لكل مِقبس socket
	</li>
	<li>
		يعرض الخيار <code>l</code> المقابس الفعالة التي تستمع listening حاليًّا للاتصالات
	</li>
	<li>
		يعمل <code>u</code> على تضمين مقابس UDP في المعلومات المعروضة عن الخدمات بالإضافة إلى مقابس TCP
	</li>
	<li>
		يعرض <code>n</code> بيانات رقمية عن حركة مرور البيانات
	</li>
	<li>
		يعمل <code>t</code> على تضمين مقابس TCP في المعلومات المعروضة عن الخدمات بالإضافة إلى مقابس UDP
	</li>
</ul>

<p>
	وستحصل بعد تنفيذ الأمر على خرج يشبه التالي:
</p>

<pre class="ipsCode">Netid       State        Recv-Q       Send-Q             Local Address:Port             Peer Address:Port      Process
tcp         LISTEN       0            128                      0.0.0.0:22                    0.0.0.0:*         users:(("sshd",pid=812,fd=3))
tcp         LISTEN       0            511                      0.0.0.0:80                    0.0.0.0:*         users:(("nginx",pid=69226,fd=6),("nginx",pid=69225,fd=6))
tcp         LISTEN       0            128                         [::]:22                       [::]:*         users:(("sshd",pid=812,fd=4))
tcp         LISTEN       0            511                         [::]:80                       [::]:*         users:(("nginx",pid=69226,fd=7),("nginx",pid=69225,fd=7))
</pre>

<p>
	الأعمدة الرئيسية في الخرج السابق هي: <code>Netid</code> و <code>Local Address:Port</code> و <code>Process</code> وهي الأجدر بالاهتمام، فإذا كانت قيمة العمود <code>Local Address:Port</code> هي <code>0.0.0.0</code> فإن الخدمة ستستقبل الاتصالات الواردة إليها على جميع واجهات الشبكة IPv4، وإذا كانت قيمته <code>[::]</code> فستتلقى الخدمة الاتصالات على جميع واجهات الشبكة من نوع IPv6، إذا طبقنا ذلك على المثال أعلاه سنجد أن كل من <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> و <a href="https://academy.hsoub.com/devops/servers/web/nginx/" rel="">Nginx</a> يستقبلان الاتصالات على جميع الواجهات العامة وبكلا النوعين IPv4 و IPv6.
</p>

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

<h2 id="-5">
	التحديثات التلقائية غير المراقبة
</h2>

<p>
	يُعد التحديث المنتظم للخوادم وتطبيق الإصلاحات الأمنية بشكل دوري أمرًا أساسيًا للحفاظ على مستوى جيد من الأمان، حيث إن الخوادم غير المُحدَّثة أو الإصدارات القديمة من البرامج قد تحتوي على ثغرات أمنية معروفة للمهاجمين، مما يسهل عليهم استغلالها لاختراق الأنظمة. من خلال تفعيل التحديثات التلقائية أو التحديثات غير المراقبة Unattended Updates التي لا تتطلب تدخلاً بشريًا، يمكن ضمان تحديث معظم حزم النظام بشكل تلقائي وفوري، مما يساهم في معالجة الثغرات الأمنية وحماية النظام من مخاطرها.
</p>

<h3 id="-6">
	كيف تُحسّن التحديثات التلقائية أمان النظام
</h3>

<p>
	تُحسن التحديثات التلقائية أمان النظام من خلال تقليل الفترات التي يكون فيها الخادم عرضة للاختراق بسبب الثغرات الأمنية المعروفة. فبفضل التحديثات التلقائية، يجري تثبيت الإصلاحات الأمنية التي تصدرها الشركات المطورة بشكل فوري، مما يحد من التأخير الذي قد يحدث عند تعطيل التحديثات. فحتى لو كان التأخير بسيطًا، فإنه يزيد من الفترة التي يكون فيها النظام عرضة للاستغلال. فمع التحديثات اليومية غير المُراقَبة، نضمن عدم تفويت أي تحديث أو إصلاح وتثبيته فور صدوره، مما يحسن أمان الخادم ويحميه من المخاطر الأمنية.
</p>

<h3 id="-7">
	تنفيذ التحديثات غير التلقائية على الخادم
</h3>

<p>
	ننصح بقراءة مقال <a href="https://academy.hsoub.com/devops/linux/%D8%A7%D9%84%D8%AA%D8%AD%D8%AF%D9%8A%D8%AB-%D8%A7%D9%84%D8%AA%D9%84%D9%82%D8%A7%D8%A6%D9%8A-%D9%84%D8%AE%D8%A7%D8%AF%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r840/" rel="">التحديث التلقائي لخادم أوبنتو</a> فهو يعرفكم بأفضل استراتيجيات التحديثات التلقائية على نظام أوبنتو، سواء تحديثات الحزم أو نواة النظام kernel.
</p>

<h2 id="ssltls">
	البنية التحتية للمفتاح العام والتشفير بواسطة <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr> أو <abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل"><abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل">TLS</abbr></abbr>
</h2>

<p>
	إن البنية التحتية للمفتاح العام Public key infrastructure -أو PKI اختصارًا- هي نظام مخصص لإنشاء وإدارة الشهادات certificates والتحقق من صحتها بهدف تحديد هويات الأفراد وتشفير الاتصالات بينهم. تُستخدم شهادات <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr> أو <abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل">TLS</abbr> في البداية لإجراء الاستيثاق authentication بين مكونات النظام، ثم تُستخدم بعد ذلك لإنشاء اتصالات مشفرة بين هذه المكونات لضمان الأمان وحماية البيانات المتبادلة.
</p>

<p style="text-align: center;">
	<img alt="005 خادم HTTPS" class="ipsImage ipsImage_thumbnailed" data-fileid="170432" data-ratio="39.83" data-unique="7wep2g1ob" style="width: 600px; height: auto;" width="722" src="https://academy.hsoub.com/uploads/monthly_2025_04/img05-ssl-tls-pki.png.4aa76d8db8d895d3b2cf510be6f56949.png">
</p>

<h3 id="pki">
	دور PKI في تحسين أمان الأنظمة
</h3>

<p>
	يساعد إنشاء سُلطَة تصديق الشهادات Certificate Authority -أو AC اختصارًا- في تحسين أمان النظام عن طريق السماح لكل خادم بالتحقق من هويات الخوادم الأخرى وتشفير البيانات المتبادلة معها. هذا يمنع هجمات الرجل في المنتصف man-in-the-middle حيث يحاول المهاجم انتحال شخصية خادم آخر لاعتراض البيانات. يُضبَط كل خادم ليثق في سُلطَة التصديق المركزية، وبالتالي يثق في الشهادات التي تصدرها هذه السُلطَة، مما يزيد الأمان ويحمي البيانات.
</p>

<h3 id="pki-1">
	إعداد بنية تحتية للمفتاح العام PKI
</h3>

<p>
	في الواقع يتطلب إعداد سلطة لتصديق الشهادات وبناء البنية التحتية للمفتاح العام PKI جهدًا كبيرًا، كما أن إدارة الشهادات مثل إصدارها أو إبطالها قد تضيف عبئًا إداريًا إضافيًا، هذا الجهد لن يكون مفيدًا جدًا للمستخدم العادي، ولا يستحق كل هذه التكاليف، إلا إذا كان النظام كبيرًا ويزداد تعقيده مع الوقت، مما يجعل من الضروري وجود بنية خاصة لتأمينه. أما بالنسبة لمعظم المستخدمين، فإن استخدام الشبكات الخاصة الافتراضية <abbr title="Virtual Private Network | الشبكة الخاصة الافتراضية">VPN</abbr> لتأمين الاتصال بين أجزاء النظام يُعد خيارًا مناسبًا ويوفر حماية كافية، إلى أن يكبر النظام ويصبح بحاجة فعلية لبنية مفاتيح عامة متقدمة.
</p>

<h2 id="-8">
	الخلاصة
</h2>

<p>
	نستخلص من هذا المقال فكرتين: الأولى هي أن التدابير الأمنية الأساسية التي عرضناها وغيرها ينبغي أن تكون لبنة أساسية في أي نظام نبنيه مهما كان حجمه وتعقيده، ومن الضروي أن نفكر بها ونجهزها في بداية المشروع قبل نشر التطبيقات وتقديم الخدمات لإعداد بيئة آمنة قدر الإمكان. والثانية هي أنه لا يوجد أمان دائم في أي نظام تقني فإجراءات الحماية هي عمليات مستمرة ومتكررة وتخضع دائماً للمراجعة، وخاصةً بعد أي تغيير يطرأ على بنية النظام، لذا علينا أن نسأل أنفسنا دومًا عن التأثير الأمني الذي قد يقع عند إجراء أي تغيير مهما كان بسيطًا، ونسأل نفس السؤال قبل إطلاق أي خدمة أو ميزة جديدة.
</p>

<p>
	ترجمة -وبتصرف- لمقال <a href="https://www.digitalocean.com/community/tutorials/recommended-security-measures-to-protect-your-servers" rel="external nofollow">Recommended Security Measures to Protect Your Servers</a> لصاحبيه Justin Ellingwood و Alex Garnett.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/networking/%D8%A7%D9%84%D9%87%D8%AC%D9%85%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D9%85%D9%86%D9%8A%D8%A9-security-attacks-%D9%81%D9%8A-%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8%D9%8A%D8%A9-r540/" rel="">الهجمات الأمنية Security Attacks في الشبكات الحاسوبية</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/security/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%A3%D9%85%D9%8A%D9%86-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D9%8A%D8%A9-%D8%B6%D8%AF-%D9%87%D8%AC%D9%85%D8%A7%D8%AA-%D8%AD%D9%82%D9%86-sql-r98/" rel="">كيفية تأمين الخوادم السحابية ضد هجمات حقن SQL</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/security/%D9%85%D8%A7-%D9%87%D9%88-%D8%A7%D9%84%D8%A3%D9%85%D9%86-%D8%A7%D9%84%D8%B3%D9%8A%D8%A8%D8%B1%D8%A7%D9%86%D9%8A-%D9%88%D9%85%D8%A7-%D8%A3%D9%87%D9%85%D9%8A%D8%AA%D9%87%D8%9F-r664/" rel="">ما هو الأمن السيبراني وما أهميته؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/security/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D9%81%D9%8A-%D8%AA%D8%A3%D9%85%D9%8A%D9%86-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r51/" rel="">مقدمة في تأمين خادم لينكس</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">841</guid><pubDate>Sun, 06 Apr 2025 15:00:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x645;&#x631;&#x627;&#x642;&#x628;&#x629; &#x645;&#x648;&#x627;&#x631;&#x62F; &#x627;&#x644;&#x62E;&#x627;&#x62F;&#x645; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x627;&#x644;&#x623;&#x62F;&#x648;&#x627;&#x62A; Top &#x648; Netstat &#x648; Du</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D9%85%D8%B1%D8%A7%D9%82%D8%A8%D8%A9-%D9%85%D9%88%D8%A7%D8%B1%D8%AF-%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-top-%D9%88-netstat-%D9%88-du-r804/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_03/------Top--Netstat--Du-d2-4.png.00504bfa9604d7f3fade68f7f24e7050.png" /></p>
<p>
	تتطلب الأنظمة الحاسوبية الإدارة والمراقبة المناسبة، إذ تساعد مراقبة عمل النظام على اكتشاف المشكلات وحلها بسرعة. وثمة عدة أدوات أُنشئت لهذا الغرض، سنُعَرّفك في هذا المقال على أهم هذه الأدوات والتطبيقات.
</p>

<h2 id="">
	المتطلبات الأساسية
</h2>

<p>
	لمتابعة خطوات هذا المقال، ستحتاج إلى ما يلي:
</p>

<p>
	حاسوب يعمل بنظام تشغيل لينكس Linux. يمكنك استخدام خادم خاص افتراضي VPS والاتصال به باستخدام بروتوكول <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة"><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></abbr> أو استخدام جهازك المحلي. استخدمنا في مقالنا خادم أوبنتو 20.04، لكن يمكنك اتباع أمثلتنا باستخدام أي من توزيعات لينكس. إن كنت تستخدم خادمًا بعيدًا فننصحك بالإطلاع على <a href="https://academy.hsoub.com/devops/linux/%D8%A7%D9%84%D8%AA%D9%87%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%A3%D9%88%D9%84%D9%8A%D8%A9-%D9%84%D8%AE%D8%A7%D8%AF%D9%85-%D8%A3%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88-1804-r431/" rel="">دليل إعداد الخادم الأولي</a> لإعداد بيئة عمل آمنة على الخادم، ومستخدم غير جذري ذي صلاحيات sudo وجدار حماية، كما أن ذلك سيحسن مهاراتك في التعامل مع أنظمة لينكس.
</p>

<h2 id="runningprocesses">
	الخطوة الأولى: عرض العمليات الجارية Running Processes في لينكس
</h2>

<p>
	يمكنك استعراض العمليات قيد التنفيذ في خادمك باستخدام الأمر <code>top</code>:
</p>

<pre class="ipsCode">top
</pre>

<p>
	وستحصل على الخرج التالي:
</p>

<pre class="ipsCode">Output
top - 15:14:40 up 46 min,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  56 total,   1 running,  55 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1019600k total,   316576k used,   703024k free,     7652k buffers
Swap:        0k total,        0k used,        0k free,   258976k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND           
    1 root      20   0 24188 2120 1300 S  0.0  0.2   0:00.56 init               
    2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd           
    3 root      20   0     0    0    0 S  0.0  0.0   0:00.07 ksoftirqd/0        
    6 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0        
    7 root      RT   0     0    0    0 S  0.0  0.0   0:00.03 watchdog/0         
    8 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 cpuset             
    9 root       0 -20     0    0    0 S  0.0  0.0   0:00.00 khelper            
   10 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kdevtmpfs          
</pre>

<p>
	لاحظ أن الأسطر الأولى من الخرج تزودنا بمعلومات أو إحصائيات statistics عن النظام، مثل حمل استخدام وحدة المعالجة المركزية والذاكرة والعدد الإجمالي للمهام قيد التشغيل. لاحظ أن هناك عملية واحدة قيد التشغيل، و 55 عملية خاملة Sleeping لأنها لا تستخدم وحدة المعالجة المركزية ويُظهر باقي الخرج العمليات الجارية وإحصائيات استخدامها.
</p>

<p>
	يرتب الأمر <code>top</code> هذه العمليات تلقائيًا حسب استخدام <a href="https://academy.hsoub.com/programming/os-embedded-systems/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%88%D8%AD%D8%AF%D8%A9-%D8%A7%D9%84%D9%85%D8%B9%D8%A7%D9%84%D8%AC%D8%A9-%D8%A7%D9%84%D9%85%D8%B1%D9%83%D8%B2%D9%8A%D8%A9-%D9%88%D8%B9%D9%85%D9%84%D9%8A%D8%A7%D8%AA%D9%87%D8%A7-%D9%81%D9%8A-%D9%85%D8%B9%D9%85%D8%A7%D8%B1%D9%8A%D8%A9-%D8%A7%D9%84%D8%AD%D8%A7%D8%B3%D9%88%D8%A8-r1716/" rel="">وحدة المعالجة المركزية</a>، كي ترى العمليات الأكثر استهلاكًا للموارد أولاً. يستمر <code>top</code> في العمل في سطر الأوامر shell إلى أن توقفه باستخدام المفتاحين Ctrl + C للخروج من العملية الجارية.إذ يُرسل هذا إشارة إيقاف <code>kill</code>، ويطلب من العملية التوقف بأمان إذا كان ذلك ممكنًا.
</p>

<p>
	كما تتوفر في معظم مستودعات الحزم نسخة محسنة من الأمر <code>top</code>، تدعى <code>htop</code>. يمكنك تثبيت هذا الأمر على <a href="https://academy.hsoub.com/devops/linux/%D8%A3%D8%AA%D9%85%D8%AA%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A3%D9%88%D9%84%D9%8A-%D8%A3%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88-%D8%A8%D8%A5%D8%B5%D8%AF%D8%A7%D8%B1-1804-r443/" rel="">خادم أوبنتو</a> باستخدام الأمر <code>apt</code>:
</p>

<pre class="ipsCode">sudo apt install htop
</pre>

<p>
	شغّل بعد ذلك الأمر <code>htop</code> إذ أصبح متاحًا على جهازك:
</p>

<pre class="ipsCode">htop
</pre>

<p>
	وستحصل على الخرج التالي:
</p>

<pre class="ipsCode">  Mem[|||||||||||           49/995MB]     Load average: 0.00 0.03 0.05
  CPU[                          0.0%]     Tasks: 21, 3 thr; 1 running
  Swp[                         0/0MB]     Uptime: 00:58:11

  PID USER      PRI  NI  VIRT   RES   SHR S CPU% MEM%   TIME+  Command
 1259 root       20   0 25660  1880  1368 R  0.0  0.2  0:00.06 htop
    1 root       20   0 24188  2120  1300 S  0.0  0.2  0:00.56 /sbin/init
  311 root       20   0 17224   636   440 S  0.0  0.1  0:00.07 upstart-udev-brid
  314 root       20   0 21592  1280   760 S  0.0  0.1  0:00.06 /sbin/udevd --dae
  389 messagebu  20   0 23808   688   444 S  0.0  0.1  0:00.01 dbus-daemon --sys
  407 syslog     20   0  243M  1404  1080 S  0.0  0.1  0:00.02 rsyslogd -c5
  408 syslog     20   0  243M  1404  1080 S  0.0  0.1  0:00.00 rsyslogd -c5
  409 syslog     20   0  243M  1404  1080 S  0.0  0.1  0:00.00 rsyslogd -c5
  406 syslog     20   0  243M  1404  1080 S  0.0  0.1  0:00.04 rsyslogd -c5
  553 root       20   0 15180   400   204 S  0.0  0.0  0:00.01 upstart-socket-br
</pre>

<p>
	يزودنا <code>htop</code> بتصور أفضل لخيوط وحدة المعالجة المركزية CPU threads وبدعم أفضل للعمليات في الطرفيات الحديثة، وخيارات فرز أوسع، بالإضافة لعدة ميزات أخرى. وبخلاف الأمر <code>top</code>، لا تجد <code>htop</code> مُنَزَلًا تلقائيًا ولكن عليك تنزيله، ويمكن أن تَعُده بديلًا عن <code>top</code>. كما يمكنك الخروج من الأمر <code>htop</code> باستخدام المفتاحين Ctrl+C.
</p>

<p>
	إليك بعض الاختصارات التي ستساعدك في استخدام <code>htop</code> بفاعلية أكبر:
</p>

<ul>
	<li>
		<strong>M:</strong> فرز العمليات حسب استهلاك المساحة
	</li>
	<li>
		<strong>P:</strong> فرز العمليات حسب استهلاك المعالج
	</li>
	<li>
		<strong>?:</strong> المساعدة
	</li>
	<li>
		<strong>K:</strong> إيقاف العملية الجارية
	</li>
	<li>
		<strong>F2:</strong> ضبط إعدادات htop وضبط خيارات العرض
	</li>
	<li>
		<strong>/::</strong> البحث في العمليات
	</li>
</ul>

<p>
	كما توجد عدة خيارات أخرى يمكنك الوصول إليها من خلال خيار المساعدة أو الضبط، ارجع إليها لاستكشاف وظائف <code>htop</code>. أما عن خطوتنا التالية، فسنتعلم فيها كيفية مراقبة النطاق الترددي للشبكة.
</p>

<h2 id="-1">
	الخطوة الثانية: مراقبة النطاق الترددي للشبكة
</h2>

<p>
	إذا شعرت بازدياد الحمل على اتصال الشبكة، ولم تدرِ ما هو التطبيق الذي يستهلك الاتصال فيمكنك الاستعانة ببرنامج <code>nethogs</code> لمعرفة ذلك. ثبّت nethogs على خادم أوبنتو باستخدام الأمر التالي:
</p>

<pre class="ipsCode">sudo apt install nethogs
</pre>

<p>
	سيصبح بعدها الأمر <code>nethogs</code> متاحًا للاستخدام:
</p>

<pre class="ipsCode">nethogs
</pre>

<p>
	وستحصل عند تشغيله على الخرج التالي:
</p>

<pre class="ipsCode">NetHogs version 0.8.0

  PID USER     PROGRAM                      DEV        SENT      RECEIVED       
3379  root     /usr/sbin/sshd               eth0       0.485       0.182 KB/sec
820   root     sshd: root@pts/0             eth0       0.427       0.052 KB/sec
?     root     unknown TCP                             0.000       0.000 KB/sec

  TOTAL    
</pre>

<p>
	يعرض برنامج nethogs استخدام كل برنامج للشبكة. إليك بعض الاختصارات التي ستسهل عليك التعامل معه:
</p>

<ul>
	<li>
		<strong>M:</strong> تغيير واحدة عرض النطاق الترددي إلى “kb/s” أو “kb” أو “b” أو “mb”
	</li>
	<li>
		<strong>R:</strong> الفرز حسب حجم البيانات المستلمة
	</li>
	<li>
		<strong>S:</strong> الفرز حسب حجم البيانات المُرسَلة
	</li>
	<li>
		<strong>Q:</strong> خروج
	</li>
</ul>

<p>
	كما يمكنك استخدام <code>iptraf-ng</code> لمراقبة استهلاك الشبكة، إذ يوفر عدة واجهات مراقبة تفاعلية.
</p>

<p>
	ملاحظة: يتطلب IPTraf حجم شاشة لا يقل عن 80 عمودًا و 24 سطرًا.
</p>

<p>
	ثبّت <code>iptraf-ng</code> على خادم أوبنتو باستخدام الأمر التالي:
</p>

<pre class="ipsCode">sudo apt install iptraf-ng
</pre>

<p>
	لتشغيل الأمر <code>iptraf-ng</code> يجب أن تعطيه صلاحيات المستخدم الجذري، لذا عليك أن تستخدمه مع <code>sudo</code>:
</p>

<pre class="ipsCode">sudo iptraf-ng
</pre>

<p>
	ستظهر قائمة تستخدم إطار عمل واجهة الطرفية الشائع المسمى <code>ncurses</code>:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="146556" href="https://academy.hsoub.com/uploads/monthly_2024_03/iptraf-ng.png.ff5133aeac831b97ae16096b182b9d34.png" rel=""><img alt="iptraf ng" class="ipsImage ipsImage_thumbnailed" data-fileid="146556" data-unique="8ira6ilkr" src="https://academy.hsoub.com/uploads/monthly_2024_03/iptraf-ng.png.ff5133aeac831b97ae16096b182b9d34.png"> </a>
</p>

<p>
	يمكنك بواسطة هذه القائمة اختيار الواجهة التي تود الوصول إليها. مثلًا، لإلقاء نظرة عامة على حركة البيانات في الشبكة، يمكنك اختيار القائمة الأولى ثم النقر على خيار جميع الواجهات "All interfaces"، وبعدها ستظهر لك شاشة كالتالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="146554" href="https://academy.hsoub.com/uploads/monthly_2024_03/alltraffic.png.bcafc6eb6adf056c211aab5063096005.png" rel=""><img alt="alltraffic" class="ipsImage ipsImage_thumbnailed" data-fileid="146554" data-unique="ubdllug7f" src="https://academy.hsoub.com/uploads/monthly_2024_03/alltraffic.png.bcafc6eb6adf056c211aab5063096005.png"> </a>
</p>

<p>
	سترى في هذه الواجهة جميع عناوين IP المستخدمة في واجهات شبكتك. إذا أردت تحويل عناوين IP هذه إلى نطاقات، فيمكنك تفعيل البحث العكسي عن DNS عن طريق الخروج من شاشة حركة بيانات الشبكة، ثم النقر على خيار الضبط <code>configure</code>، ثم <code>Reverse DNS lookups</code>. كما يمكنك تفعيل <code>TCP/UDP service names</code> أي أسماء خدمات بروتوكولي TCP/UDP لعرض أسماء الخدمات الحالية بدلًا عن أرقام منافذها. ستبدو الشاشة كالتالي، عند تفعيل الخيارين السابقين:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="146555" href="https://academy.hsoub.com/uploads/monthly_2024_03/alltraffic-named.png.2d6c1c8240add60e1e92b56d034d8153.png" rel=""><img alt="alltraffic named" class="ipsImage ipsImage_thumbnailed" data-fileid="146555" data-unique="d59426o2x" src="https://academy.hsoub.com/uploads/monthly_2024_03/alltraffic-named.png.2d6c1c8240add60e1e92b56d034d8153.png"> </a>
</p>

<p>
	ولدينا أيضًا <a href="https://academy.hsoub.com/devops/linux/%D8%B9%D8%B4%D8%B1%D9%88%D9%86-%D8%A3%D9%85%D8%B1%D8%A7-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D9%8A%D9%81%D8%AA%D8%B1%D8%B6-%D8%A3%D9%86-%D9%8A%D8%B9%D8%B1%D9%81%D9%87%D8%A7-%D9%83%D9%84-%D9%85%D8%AF%D9%8A%D8%B1-%D9%86%D8%B8%D9%85-r355/" rel="">الأمر netstat</a> الذي يُعد أداةً متعددة الاستخدامات للحصول على معلومات عن الشبكة. والذي يوجد عادةً تلقائيًا في الأنظمة الحديثة، كما يمكنك تثبيته يدويًا من مستودع حزم الخادم الافتراضي package repository. الحزمة التي تحتوي على الأمر <code>netstat</code> في معظم أنظمة لينكس ومن ضمنها أوبنتو، هي <code>net-tools</code>:
</p>

<pre class="ipsCode">sudo apt install net-tools
</pre>

<p>
	يطبع الأمر <code>netstat</code> من تلقاء نفسه قائمة بالمآخذ sockets المفتوحة:
</p>

<pre class="ipsCode">netstat
</pre>

<p>
	ويعرض لك الخرج التالي:
</p>

<pre class="ipsCode">Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 192.241.187.204:ssh     ip223.hichina.com:50324 ESTABLISHED
tcp        0      0 192.241.187.204:ssh     rrcs-72-43-115-18:50615 ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  5      [ ]         DGRAM                    6559     /dev/log
unix  3      [ ]         STREAM     CONNECTED     9386     
unix  3      [ ]         STREAM     CONNECTED     9385     
. . .
</pre>

<p>
	إذا أضفت الخيار <code>a-</code>، فسوف يعرض جميع المنافذ المفتوحة listening والمغلقة not listening
</p>

<pre class="ipsCode">netstat -a
</pre>

<p>
	وستحصل على النتيجة التالية:
</p>

<pre class="ipsCode">Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:ssh                   *:*                     LISTEN     
tcp        0      0 192.241.187.204:ssh     rrcs-72-43-115-18:50615 ESTABLISHED
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     6195     @/com/ubuntu/upstart
unix  2      [ ACC ]     STREAM     LISTENING     7762     /var/run/acpid.socket
unix  2      [ ACC ]     STREAM     LISTENING     6503     /var/run/dbus/system_bus_socket
. . .
</pre>

<p>
	إذا أردت تصفية النتائج لعرض اتصال TCP فقط أو UDP فقط، فعليك استخدام الراية <code>t-</code> أو <code>u-</code> :
</p>

<pre class="ipsCode">netstat -at
</pre>

<pre class="ipsCode">الخرج
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 *:ssh                   *:*                     LISTEN     
tcp        0      0 192.241.187.204:ssh     rrcs-72-43-115-18:50615 ESTABLISHED
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN
</pre>

<p>
	ولاحظ النتائج عند استخدام الراية <code>s-</code>
</p>

<pre class="ipsCode">netstat -s
</pre>

<pre class="ipsCode">الخرج
Ip:
    13500 total packets received
    0 forwarded
    0 incoming packets discarded
    13500 incoming packets delivered
    3078 requests sent out
    16 dropped because of missing route
Icmp:
    41 ICMP messages received
    0 input ICMP message failed.
    ICMP input histogram:
        echo requests: 1
        echo replies: 40
. . .
</pre>

<p>
	إذا أردت تحديث الخرج باستمرار، يمكنك استخدام الراية <code>c-</code>. ثمة عدة خيارات متاحة للأمر <code>netstat</code> يمكنك التعرف عليها من خلال مراجعة صفحة <a href="https://linux.die.net/man/8/netstat" rel="external nofollow">دليلها التعليمي</a>.
</p>

<p>
	سنتعرف، في الخطوة التالية، على بعض الطرق المفيدة لمراقبة استخدام قرص التخزين
</p>

<h2 id="-2">
	الخطوة الثالثة: مراقبة استخدام القرص
</h2>

<p>
	استخدم الأمر <code>df</code> لإلقاء نظرة سريعة على مساحة القرص المتبقية على محرك الأقراص المرفق:
</p>

<pre class="ipsCode">df
</pre>

<p>
	وستحصل على الخرج التالي:
</p>

<pre class="ipsCode">Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/vda        31383196 1228936  28581396   5% /
udev              505152       4    505148   1% /dev
tmpfs             203920     204    203716   1% /run
none                5120       0      5120   0% /run/lock
none              509800       0    509800   0% /run/shm
</pre>

<p>
	يعرض هذا الأمر المساحة المستخدمة بالبايتات، مما قد يجعلها صعبة القراءة، لحل هذه المشكلة اعرض الخرج بطريقة يَسهُل قراءتها على البشر <strong>h</strong>uman-readable، وذلك بإضافة الخيار <code>h-</code>:
</p>

<pre class="ipsCode">df -h
</pre>

<p>
	وستحصل على الخرج التالي:
</p>

<pre class="ipsCode">Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         30G  1.2G   28G   5% /
udev            494M  4.0K  494M   1% /dev
tmpfs           200M  204K  199M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            498M     0  498M   0% /run/shm
</pre>

<p>
	استخدم الخيار <code>total--</code> لعرض إجمالي مساحة القرص المتاحة في جميع أنظمة الملفات، حينها ستُعرض المعلومات في سطر جديد في الأسفل، كما يلي:
</p>

<pre class="ipsCode">df -h --total
</pre>

<pre class="ipsCode">الخرج
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         30G  1.2G   28G   5% /
udev            494M  4.0K  494M   1% /dev
tmpfs           200M  204K  199M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            498M     0  498M   0% /run/shm
total            32G  1.2G   29G   4%
</pre>

<p>
	لاحظ أن الأمر <code>df</code> يزوّدنا بمعلومات مفيدة، أما الأمر <code>du</code> فيستخدم التصنيف حسب المجلد، إذ يحلل الاستخدام للمجلد الحالي والمجلدات الفرعية. يبدو خرج <code>du</code> عند تشغيله في مجلد رئيسي فارغ كما يلي:
</p>

<pre class="ipsCode">du
</pre>

<pre class="ipsCode">الخرج
4    ./.cache
8    ./.ssh
28    .
</pre>

<p>
	كما يمكنك عرض الخرج بطريقة سهلة القراءة، وذلك بإضافة الخيار <code>h-</code>:
</p>

<pre class="ipsCode"> du -h
</pre>

<p>
	وستحصل على الخرج التالي:
</p>

<pre class="ipsCode">4.0K    ./.cache
8.0K    ./.ssh
28K    .
</pre>

<p>
	ولعرض حجم الملفات والمجلدات، استخدم الخيار <code>a-</code>
</p>

<pre class="ipsCode">du -a
</pre>

<pre class="ipsCode">الخرج
0    ./.cache/motd.legal-displayed
4    ./.cache
4    ./.ssh/authorized_keys
8    ./.ssh
4    ./.profile
4    ./.bashrc
4    ./.bash_history
28    .
</pre>

<p>
	استخدم الخيار <code>c-</code> لإضافة سطر لعرض المحصلة:
</p>

<pre class="ipsCode">du -c
</pre>

<p>
	وسيصبح الخرج كالتالي:
</p>

<pre class="ipsCode">4    ./.cache
8    ./.ssh
28    .
28    total
</pre>

<p>
	إذا أردت الحصول على المحصلة فقط دون التفاصيل استخدم الخيار <code>s-</code>
</p>

<pre class="ipsCode">du -s
</pre>

<p>
	وسيكون الخرج كالتالي:
</p>

<pre class="ipsCode">28    .
</pre>

<p>
	كما توجد واجهة <code>ncurses</code> للأمر <code>du</code> تدعى <code>ncdu</code> ويمكنك تثبيتها باستخدام الأمر التالي:
</p>

<pre class="ipsCode">sudo apt install ncdu
</pre>

<p>
	والذي سيمثل استخدام القرص بيانيًا كالتالي:
</p>

<pre class="ipsCode">ncdu
</pre>

<pre class="ipsCode">الخرج
--- /root ----------------------------------------------------------------------
    8.0KiB [##########] /.ssh                                                   
    4.0KiB [#####     ] /.cache
    4.0KiB [#####     ]  .bashrc
    4.0KiB [#####     ]  .profile
    4.0KiB [#####     ]  .bash_history
</pre>

<p>
	يمكنك التنقل في نظام الملفات باستخدام مفتاح السهم العلوي والسهم السفلي في لوحة المفاتيح والنقر على مفتاح enter لاستعراض المجلد. ستتعلم في الفقرة الأخيرة كيفية مراقبة استخدام الذاكرة.
</p>

<h2 id="-3">
	الخطوة الرابعة: مراقبة استخدام الذاكرة
</h2>

<p>
	يمكنك عرض استخدام الذاكرة الحالي على نظام التشغيل باستخدام الأمر <code>free</code>:
</p>

<pre class="ipsCode">free
</pre>

<p>
	وسيبدو الخرج كما يلي:
</p>

<pre class="ipsCode">              total        used        free      shared  buff/cache   available
Mem:        1004896      390988      123484        3124      490424      313744
Swap:             0           0           0
</pre>

<p>
	لتسهيل قراءة الخرج، استخدم الخيار <code>m-</code> لعرض الحجم بواحدة الميغا بايت:
</p>

<pre class="ipsCode">free -m
</pre>

<pre class="ipsCode">الخرج
              total        used        free      shared  buff/cache   available
Mem:            981         382         120           3         478         306
Swap:             0           0           0
</pre>

<p>
	يحتوي سطر <code>mem</code> على تفاصيل الذاكرة المستخدمة للتخزين المؤقت buffering and caching التي تفرغ محتوياتها عند الحاجة لاستخدامها في عملية أخرى. أما ذاكرة سواب <code>swap</code> فهي مكتوبة على ملف <code>swapfile</code> على القرص للمحافظة على الذاكرة النشطة Active memory. يعرض الأمر <code>vmstat</code> معلومات متعددة عن النظام بما في ذلك معلومات الذاكرة، ومعلومات الذاكرة swap، ومعلومات وحدة المعالجة المركزية، ومداخل ومخارج الأقراص.
</p>

<p>
	يمكنك استخدام <code>vmstat</code> لعرض معلومات استخدام الذاكرة:
</p>

<pre class="ipsCode">Vmstat
</pre>

<pre class="ipsCode">الخرج
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0      0  99340 123712 248296    0    0     0     1    9    3  0  0 100  0
</pre>

<p>
	اعرض الخرج بواحدة الميغا بايت عن طريق كتابة الواحدة <code>M</code> بعد الراية <code>S-</code>
</p>

<pre class="ipsCode">vmstat -S M
</pre>

<pre class="ipsCode" id="ips_uid_3598_12">Output
          495 M total memory
          398 M used memory
          252 M active memory
          119 M inactive memory
           96 M free memory
          120 M buffer memory
          242 M swap cache
            0 M total swap
            0 M used swap
            0 M free swap
. . .
</pre>

<p>
	استخدم الأمر التالي للحصول على معلومات عامة عن استخدام الذاكرة:
</p>

<pre class="ipsCode" id="ips_uid_3598_10">vmstat -s -S M</pre>

<pre class="ipsCode" id="ips_uid_3598_14">Output
Cache                       Num  Total   Size  Pages
ext4_groupinfo_4k           195    195    104     39
UDPLITEv6                     0      0    768     10
UDPv6                        10     10    768     10
tw_sock_TCPv6                 0      0    256     16
TCPv6                        11     11   1408     11
kcopyd_job                    0      0   2344     13
dm_uevent                     0      0   2464     13
bsg_cmd                       0      0    288     14
. . .
</pre>

<p>
	أما للحصول على معلومات عن استخدام عمليات النظام الفردية لذاكرة التخزين المؤقت cache فاستخدم الأمر التالي:
</p>

<pre class="ipsCode">vmstat -m -S M
</pre>

<p>
	وستحصل على الخرج التالي:
</p>

<pre class="ipsCode">Cache                       Num  Total   Size  Pages
ext4_groupinfo_4k           195    195    104     39
UDPLITEv6                     0      0    768     10
UDPv6                        10     10    768     10
tw_sock_TCPv6                 0      0    256     16
TCPv6                        11     11   1408     11
kcopyd_job                    0      0   2344     13
dm_uevent                     0      0   2464     13
bsg_cmd                       0      0    288     14
. . .
</pre>

<p>
	الذي سيزودك بتفاصيل حول المعلومات المخزنة في ذاكرة التخزين المؤقت.
</p>

<h2 id="-4">
	الخاتمة
</h2>

<p>
	أصبحت الآن قادرًا على مراقبة خادمك من سطر الأوامر باستخدام الأدوات التي تعلمتها في مقالنا. وعلى الرغم أنه ثمة عدة أدوات مراقبة أخرى تُستخدم لأغراض مختلفة، إلا أن هذه تُعد انطلاقةًجيدة. ننصحك بعد قراءة هذا المقال بالتعرف على إدارة عمليات لينكس باستخدام <a href="https://www.digitalocean.com/community/tutorials/how-to-use-ps-kill-and-nice-to-manage-processes-in-linux" rel="external nofollow">ps وkill وnice</a>. لمزيد من الاستفسارات حول ما ورد في مقالنا، أو للحصول على الدعم والمساعدة أضف سؤالك في قسم الأسئلة والأجوبة في <a href="https://academy.hsoub.com/questions/" rel="">أكاديمية حسوب</a>.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-use-top-netstat-du-other-tools-to-monitor-server-resources" rel="external nofollow">How To Use Top, Netstat, Du, &amp; Other Tools to Monitor Server Resources</a> لصاحبيه Justin Ellingwood و Alex Garnett.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D8%AE%D8%AA%D8%A8%D8%A7%D8%B1-%D9%85%D8%AD%D9%84%D9%8A-r609/" rel="">إعداد خادم اختبار محلي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%B1%D8%A7%D9%82%D8%A8%D8%A9-%D8%B4%D9%87%D8%A7%D8%AF%D8%A7%D8%AA-ssltls-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D9%88%D9%82%D8%B9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D8%AF%D8%A7%D8%A9-checkmk-r684/" rel="">مراقبة شهادات <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr>/<abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل">TLS</abbr> في الموقع باستخدام أداة Checkmk</a>
	</li>
	<li>
		 <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r574/" rel="">مدخل إلى خادم الويب</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%D8%B9%D8%B4%D8%B1%D9%88%D9%86-%D8%A3%D9%85%D8%B1%D8%A7-%D9%81%D9%8A-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D9%8A%D9%81%D8%AA%D8%B1%D8%B6-%D8%A3%D9%86-%D9%8A%D8%B9%D8%B1%D9%81%D9%87%D8%A7-%D9%83%D9%84-%D9%85%D8%AF%D9%8A%D8%B1-%D9%86%D8%B8%D9%85-r355/" rel="">عشرون أمرا في لينكس يفترض أن يعرفها كل مدير نظم</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/networking/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%B9%D9%86%D8%A7%D9%88%D9%8A%D9%86-%D8%A8%D8%B1%D9%88%D8%AA%D9%88%D9%83%D9%88%D9%84-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-%D9%88%D8%A7%D9%84%D8%B4%D8%A8%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D9%81%D8%B1%D8%B9%D9%8A%D8%A9-%D9%88%D8%A7%D9%84%D8%AA%D9%88%D8%AC%D9%8A%D9%87-%D8%BA%D9%8A%D8%B1-%D8%A7%D9%84%D8%B5%D9%86%D9%81%D9%8A-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D9%86%D8%B7%D8%A7%D9%82%D8%A7%D8%AA-r593/" rel="">تعرف على عناوين بروتوكول الإنترنت والشبكات الفرعية والتوجيه غير الصنفي بين النطاقات</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">804</guid><pubDate>Tue, 12 Mar 2024 12:03:01 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x625;&#x635;&#x644;&#x627;&#x62D; &#x627;&#x644;&#x623;&#x62E;&#x637;&#x627;&#x621; &#x627;&#x644;&#x634;&#x627;&#x626;&#x639;&#x629; &#x639;&#x646;&#x62F; &#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x62E;&#x62F;&#x645;&#x629; LetsEncrypt</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B5%D9%84%D8%A7%D8%AD-%D8%A7%D9%84%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-%D8%A7%D9%84%D8%B4%D8%A7%D8%A6%D8%B9%D8%A9-%D8%B9%D9%86%D8%AF-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AE%D8%AF%D9%85%D8%A9-letsencrypt-r801/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2024_01/How-To-Fix-Common-LetsEncrypt-Errors2-1.png.33773441a4af092249712f7beb645fba.png" /></p>
<p>
	قد تواجه عدة أخطاء شائعة عند ضبط نطاق موقعك أو عند ضبط إعدادات دعم بروتوكول HTTPS. وإن إصلاح مشاكل بروتوكول DNS أو ما يُعرف ببروتوكول نظام تسمية النطاقات (Domain Name System) ليس بالأمر السهل، إذ يصعُب الجزم أن سبب الأخطاء هو بروتوكول DNS، فقد يكون سببها قد يكون في مكان آخر في بنيتك الشبكية.
</p>

<p>
	وفي حال طلبت من مسؤول الصيانة حل المشكلات المرتبطة بضبط نطاق موقعك ستسمع غالبًا منه العبارات التالية تباعًا:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<ul data-gramm="false">
		<li>
			الخطأ ليس من بروتوكول DNS
		</li>
		<li>
			يستحيل أن يكون الخطأ من بروتوكول DNS
		</li>
		<li>
			الخطأ هو من بروتوكول DNS
		</li>
	</ul>
</blockquote>

<p>
	فكثيرًا ما تتكرر مشكلات <a href="https://academy.hsoub.com/devops/servers/dns/%D9%85%D8%A7-%D9%87%D9%88-dns%D8%9F-r787/" rel="">DNS</a> عند محاولة <a href="https://academy.hsoub.com/devops/servers/%D8%AA%D9%86%D8%B5%D9%8A%D8%A8-%D8%B4%D9%87%D8%A7%D8%AF%D8%A9-ssl-%D9%85%D8%AC%D8%A7%D9%86%D9%8A%D8%A9-%D8%B9%D8%A8%D8%B1-%D8%AE%D8%AF%D9%85%D8%A9-lets-encrypt-%D8%B9%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r151/" rel="">تنصيب شهادة <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr>/HTTPS</a> وضبط إعداداتها على خوادمك، عند استخدامك لخدمة Let's Encrypt على سبيل المثال. وسنراجع في هذا المقال بعض الأخطاء الشائعة التي قد تواجهها عند التعامل مع بروتوكولي DNS و HTTPS عند التعامل مع خدمة Let's Encrypt على وجه الخصوص، وسنُقدّم لك مجموعة نصائح وتوصيات يمكن تطبيقها سواء أكنت تستخدم خدمة DNS من مزود ديجيتال أوشن DigitalOcean أو من أي مزود آخر.
</p>

<h2 id="dns">
	سجلات DNS
</h2>

<p>
	إن بروتوكول DNS هو المسؤول عن تعيين وتوجيه حركة البيانات إلى خوادم الويب باستخدام أسماء النطاقات، مثل <code>your_domain.com</code> بدلًا من الحاجة لاستخدام عناوين IP للمواقع. وتزوّد جميع مزودات النطاقات مستخدميها بواجهة خاصة لإدارة سجلات DNS. ولمطالعة مزيد من المعلومات حول أنواع سجلات نظام أسماء النطاق (DNS) يمكنك الرجوع إلى مقالنا  <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/" rel="">مقدّمة إلى مُصطَلحات وعناصر ومفاهيم نظام أسماء النطاقات</a>.
</p>

<p>
	إن أحد أكثر سجلات الـ DNS شيوعًا هو <strong>السجل A</strong>، والذي يشكّل رابطًا أساسيًا من اسم النطاق domain name إلى عنوان الخادم server address. لذا سنرّكز في هذا المقال على <strong>السجل A</strong> لكونه السجل الذي تحتاج إليه لإسناد أسماء النطاقات الأساسية إلى عناوين IP للخوادم. عند استخدام خدمة DNS من مزود DigitalOcean على سبيل المثال سيكون <strong>السجل A</strong> مضبوطًا كما في الصورة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="141887" href="https://academy.hsoub.com/uploads/monthly_2024_01/my-website-recs.png.4ef9560c658490b652e2a60de0fb933c.png" rel=""><img alt="my website recs" class="ipsImage ipsImage_thumbnailed" data-fileid="141887" data-unique="fs3i4ys5a" src="https://academy.hsoub.com/uploads/monthly_2024_01/my-website-recs.thumb.png.86947646269a6a65fc31fc13056527c0.png"> </a>
</p>

<h2 id="dns-1">
	تحديث أو ترحيل سجلات DNS
</h2>

<p>
	إذا جربت تعديل سجلات DNS، فقد يستغرق تطبيق هذه التعديلات بعض الوقت بحدود نصف ساعة، ونظرًا لأنه لا يمكنك اختبار DNS مباشرةً بعد تطبيق التعديلات، فقد تكون الأخطاء مضللة. ولن تتمكن من ضبط إعدادات خدمة LetsEncrypt على نطاقك حتى تنتقل إعدادات DNS نطاقك إلى معظم أو جميع خوادم أسماء النطاقات العالمية المسؤولة عن توجيه حركة المرور عبر الإنترنت وتحويل طلبات البحث عن عناوين IP للنطاقات إلى سجلات DNS المتعلقة بها.
</p>

<p>
	يمكنك الاستعانة بموقع <a href="https://www.whatsmydns.net/" rel="external nofollow">whatsmydns.net</a> للتحقق من أن تعديلات سجل DNS قد نُشرت إلى معظم خوادم أسماء النطاقات العالمية المستخدمة للبحث عن سجلات DNS. فإذا لم تعدل السجلات لديك محليًا يمكنك التحقق فيما إذا كانت قد عدلت في معظم المواقع العالمية، فقد يكون سبب المشكلة هو أن مزود خدمة الانترنت الذي تستخدمه ربما يكون أبطأ في إجراء التعديلات من المخدمات العالمية، لكن لن يستغرق الأمر أكثر من بضع دقائق في معظم الحالات.
</p>

<p>
	إن أردت التحقق من سجل DNS بعد فترة قصيرة من نشر التعديلات، فقد تحصل على نتائج مختلفة ومربكة من خادمك البعيد ومن متصفح الانترنت المحلي، ويحدث هذا الأمر عندما يطبق الخادم البعيد التعديلات قبل مزود خدمة الإنترنت الذي تتعامل معه. لاستبعاد احتمال حدوث هذا، استخدم الأمر <code>nslookup</code> لمعرفة ما هو عنوان IP الذي يشير إليه اسم النطاق، كالتالي:
</p>

<pre class="ipsCode"> nslookup digitalocean.com $ 
Output
…
Name:    digitalocean.com
Addresses:  2606:4700::6810:b50f
          2606:4700::6810:b60f
          104.16.181.15
          104.16.182.15
</pre>

<p>
	يمكنك بهذه الطريقة التأكد أن النتائج المحلية تطابق نتائج خوادم أسماء النطاقات العالمية. إن استخدام قيمة <code>TTL</code> مرتفعة أو ما يعرف بمدة البقاء Time-To-Live عند ضبط DNS، سيجعل التحديث يستغرق وقتًا أطول. إذ إن قيمة TTL الافتراضية المعتمدة في معظم مسجلي أسماء النطاقات هي 3600 ثانية، أو ساعة واحدة، وتُدرج عادةً هذه القيمة بجوار سجل A. تساعد قيمة مدة البقاء TTL الطويلة على تخزين الطلبات بفاعلية أكبر، ولكنها بالمقابل قد تجعل تغييرات DNS تستغرق وقتًا أطول في النشر. ننصحك في ضبط مدة TTL قصيرة مؤقتًا إذا أردت إجراء أو اختبار بعض التغييرات على DNS.
</p>

<h2 id="https">
	أخطاء المتصفح ومشاكل إعدادات بروتوكول HTTPS
</h2>

<p>
	قد تظن أحيانًا أنك ضبطت إعدادات بروتوكول HTTPS وإعدادات DNS على نحو صحيح، لكن قد تظهر لك رسائل خطأ في <a href="https://academy.hsoub.com/apps/operating-systems/linux/%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-%D8%AE%D9%81%D9%8A%D9%81%D8%A9-%D9%88%D9%85%D9%81%D8%AA%D9%88%D8%AD%D8%A9-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-%D9%84%D9%86%D8%B8%D8%A7%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r789/" rel="">متصفح الويب</a> عند طلب الموقع.
</p>

<p>
	للحصول على دليل عام حول رموز أخطاء HTTP، ننصحك بمراجعة المقال التالي حول <a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D9%83%D8%B4%D8%A7%D9%81-%D9%88%D8%A5%D8%B5%D9%84%D8%A7%D8%AD-%D8%B1%D9%85%D9%88%D8%B2-%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-http-%D8%A7%D9%84%D8%B4%D8%A7%D8%A6%D8%B9%D8%A9-r116/" rel="">كيفية إصلاح رموز أخطاء HTTP الشائعة</a>. لا تشير معظم هذه الرموز إلى الخطأ بشكل صريح ومباشر ولكنها تنتج عن الإعدادات غير الصحيحة. على سبيل المثال، إذا استخدمت خادم إنجن إكس كوسيط عكسي <a href="https://academy.hsoub.com/devops/servers/web/nginx/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-nginx-%D9%83%D9%88%D8%B3%D9%8A%D8%B7-%D8%B9%D9%83%D8%B3%D9%8A-reverse-proxy-%D9%84%D9%80apache-r19/" rel="">Nginx Reverse Proxy</a> لتوفير بوابة HTTPS لتطبيق آخر يعمل على خادمك، ولم تضبط إعدادات البوابة على نحو صحيح، فقد يظهر لك الخطأ ذو الرمز 502 الذي يدل على أن إنجن إكس غير قادر على إحالة الطلب.
</p>

<p>
	وأحد الأخطاء التي قد تظهر لك هو رسالة انتهاء صلاحية الشهادة، إذ إن شهادات LeysEncrypt تبقى صالحة لمدة ثلاثة أشهر فقط، على عكس شهادات HTTPS التجارية. وعند عدم تجديد الشهادة قبل انتهاء مدة الصلاحية يتسبب في ظهور الخطأ <code>ERR_CERT_DATE_INVALID</code> لكل من يحاول الوصول إلى موقعك.
</p>

<p>
	يبدو هذا الخطأ، عند استخدام متصفح كروم Chrome على النحو التالي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="141885" href="https://academy.hsoub.com/uploads/monthly_2024_01/cert_expired.png.984c74bb0b4d29c6884653bc9cdad031.png" rel=""><img alt="cert expired" class="ipsImage ipsImage_thumbnailed" data-fileid="141885" data-unique="hvyki65i3" src="https://academy.hsoub.com/uploads/monthly_2024_01/cert_expired.png.984c74bb0b4d29c6884653bc9cdad031.png"> </a>
</p>

<p>
	عندما تضبط إعدادات LetsEncrypt لأول مرة، تُفَعّل خاصيّة تجديد الشهادة تلقائيًا. كما ترسل خدمة LetsEncrypt بريدًا إلكترونيًا لتذكيرك عندما تكون شهادتك على وشك الانتهاء، لكن إن ضبطت هذه العملية بشكل خاطئ، أو لم ينجح تشغيلها، يمكنك تجديد الشهادة يدويًا عن طريق إعادة تشغيل الأمر <code>certbot</code> باستخدام الوسيط <code>renew</code>:
</p>

<pre class="ipsCode">sudo certbot renew --nginx -d example.com -d www.example.com
</pre>

<p>
	ربما ستحتاج إلى إعادة تشغيل <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r574/" rel="">خادم الويب</a> بعد تجديد الشهادة،وفي حال لم تقم بإجراء أي تعديلات أخرى على إعدادات خادمك يمكنك عندها أتمتة هذه العملية (عن طريق إضافته إلى أداة الجدولة <a href="https://academy.hsoub.com/devops/general/%D9%85%D8%A7-%D9%87%D9%8A-%D8%AA%D9%82%D9%86%D9%8A%D8%A9-cron-%D9%84%D8%AC%D8%AF%D9%88%D9%84%D8%A9-%D8%A7%D9%84%D9%85%D9%87%D8%A7%D9%85%D8%9F-r791/" rel="">cron</a>) بواسطة تشغيل الأمر <code>systemctl restart nginx</code> بعد تجديد الشهادة.
</p>

<h2 id="">
	المحتوى المختلط
</h2>

<p>
	عند تهجير محتوى برمجي معقد أو مختلط من بروتوكول HTTP إلى HTTPS قد تلاحظ فشلًا في عرض بعض الصور أو بعض مكونات الموقع. عندما تفتح طرفيّة أدوات المطور Developer Console ستجد أن هذه الأخطاء تعزى إلى "المحتوى المختلط"، كما في الصورة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="141886" href="https://academy.hsoub.com/uploads/monthly_2024_01/mixed_content_webconsole.png.9a7b8b10a2e82591edfa0ada2463eec1.png" rel=""><img alt="mixed content webconsole" class="ipsImage ipsImage_thumbnailed" data-fileid="141886" data-unique="vxy0xv29y" src="https://academy.hsoub.com/uploads/monthly_2024_01/mixed_content_webconsole.thumb.png.c446cba86fac306d49e5bcf0870250c9.png"> </a>
</p>

<p>
	وسبب ذلك هو سياسة الويب الافتراضية التي تنص على عدم استخدام أو تضمين محتوى بروتوكول HTTP في المواقع التي تستخدم بروتوكول HTTPS. قد يظهر هذا الخطأ عندما يُحَمل موقع ما محتوىً من خادمي ويب مختلفين، أو عندما نُخَدّم تطبيق ويب بواسطة بوابة خادم Nginx لكن إعادة توجيه <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr> لا تعمل على وجه صحيح. إذا كنت تستخدم خادم Nginx وتوجه البيانات/حركة البيانات إلى تطبيق آخر يعمل خلف خادم الويب، وظهرت لك رسالة تحذير المحتوى المختلط، يمكنك حينها إضافة معلومات لضبط توجيه <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr> وذلك ضمن كتلة الموقع <code>location</code>:
</p>

<pre class="ipsCode">…
    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Proto https;
    }
</pre>

<p>
	وعدا عن ذلك، احرص على استخدام بروتوكول HTTPS في جميع المواقع التي تُخَدمها. كما يمكنك الاطلاع على <a href="https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content" rel="external nofollow">المقال التالي عن أخطاء المحتوى المختلط</a>
</p>

<h2 id="letsencryptcertbot">
	الأخطاء التي تظهر عند تشغيل سكربت LetsEncrypt Certbot
</h2>

<p>
	قد تظهر لك بعض الأخطاء عند تشغيل سكربت <code>Certbot</code> المتوفر من خدمة LetsEncrypt، بعض الأخطاء لها خرج يشرح سبب الخطأ ويمكنك اتباع الإرشادات المذكورة، وبعضها الآخر قد لا يكون واضحًا. على سبيل المثال، إذا ظهر لك خطأ انتهاء المدة أو Timing out في السكربت، فالأرجح أن المشكلة متعلقة بجدار الحماية <a href="https://academy.hsoub.com/devops/security/firewalls/" rel="">Firewall</a> :
</p>

<pre class="ipsCode">certbot --nginx -d example.com -d www.example.com
</pre>

<pre class="ipsCode">الخرج
Press Enter to Continue
Waiting for verification…
Cleaning up challenges
Failed authorization procedure. example.com (http-01): urn:ietf:params:acme:error:connection :: The server could not connect to the client to verify the domain :: Fetching http://example.com/.well-known/acme-challenge/EWbLNaAWwRZGM1UCqSvbIIxFFaoH09wPUEwVuYucCb0: 93 Timeout during connect (likely firewall problem)
</pre>

<p>
	وتحدث عادةً أخطاء انتهاء المدة أو Timeout بسبب عدم قدرة الاتصال على الحصول على استجابة أو تأكيد للعملية لأن جدار الحماية يهمل أو يتخلص من حركة البيانات. لتلافي حدوث هذا الخطأ، تأكد أن جدار الحماية لا يحجب المنفذ رقم <strong>80</strong> ولا المنفذ <strong>443</strong> قبل تشغيل <code>certbot</code>. تشير بعض الوثائق أنك ستحتاج إلى فتح واحد من المنفذين، إما المنفذ <strong>80</strong> أو المنفذ <strong>443</strong>، ولكن افتح كلا المنفذين لاستبعاد إمكانية حدوث الأخطاء. إن كنت تستخدم <strong>UFW</strong>، أو Uncomplicated Firewall أي الجدار الناري غير المعقَّد، يمكنك تنفيذ ما سبق عن طريق تفعيل أمر الضبط الكامل <code>Nginx Full</code>:
</p>

<pre class="ipsCode">sudo ufw allow 'Nginx Full'
</pre>

<p>
	ثم أعد تشغيل <code>certbot</code> بعد أن غيّرت إعدادات جدار الحماية. لكن، إن أعدت تشغيل <code>certbot</code> عدة مرات متتالية خلال مدة قصيرة فقد يظهر لك خطأ “failed validation limit” الذي يخبرك أنك وصلت إلى الحد المسموح به من محاولات التحقق:
</p>

<pre class="ipsCode">الخرج
too many failed authorizations recently: see https://letsencrypt.org/docs/failed-validation-limit/
</pre>

<p>
	يجب عليك الانتظار لمدة ساعة قبل أن تستطيع إعادة المحاولة مجددًا من حسابك. يمكنك الاطلاع على <a href="https://letsencrypt.org/docs/failed-validation-limit/" rel="external nofollow">التوثيق التالي</a> للحصول على معلومات أكثر عن الحد المسموح به لمحاولات التحقق وأخطاء <code>certbot</code> الأخرى. إذا تلقيت أخطاء أخرى عند تشغيل <a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%88%D8%B6%D8%B9-certbot-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D9%82%D9%84-%D9%84%D9%84%D8%AD%D8%B5%D9%88%D9%84-%D8%B9%D9%84%D9%89-%D8%B4%D9%87%D8%A7%D8%AF%D8%A7%D8%AA-ssl-%D9%85%D9%86-let%E2%80%99s-encrypt-%D8%B9%D9%84%D9%89-%D8%AF%D8%A8%D9%8A%D8%A7%D9%86-10-r466/" rel="">certbot</a> غير الأخطاء المتعلقة بالمدة Timeout أو أخطاء DNS أو مشاكل الاتصال، فمن المحتمل أن يكون سبب هذه الأخطاء مشكلةً في بيئة<a href="https://wiki.hsoub.com/Python" rel="external">Python</a> على خادمك والتي ضُبطت إعداداتها بواسطة certbot. يمكن إصلاح هذه الأخطاء دائمًا عن طريق إزالة <code>certbot</code> ثم إعادة تنزيله من الصفر. لن يؤثر ذلك على إعدادات HTTPS الحالية، بل سيؤثر فقط على الأدوات المستخدمة للحفاظ على تلك الإعدادات وتجديدها. لتنفيذ ذلك، يمكن اتباع الإرشادات في مقال <a href="https://academy.hsoub.com/devops/servers/web/nginx/%D9%83%D9%8A%D9%81-%D8%AA%D8%A4%D9%85%D9%91%D9%86-%D8%AE%D8%A7%D8%AF%D9%85-%D9%88%D9%8A%D8%A8-nginx-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1604-r365/" rel="">كيف تؤمّن خادم ويب NGINX على أوبنتو</a>
</p>

<h2 id="https-1">
	حالة عدم عمل بروتوكول HTTPS مع عدم ظهور أخطاء مرئية
</h2>

<p>
	إن تأكدت من أن Certbot وDNS يعملان على نحو صحيح، لكن موقعك لم ينتقل من استخدام HTTP إلى استخدام HTTPS، فسبب هذا عادةً هو مشكلة في إعدادات خادم الويب. يحدث certbot تلقائيًا إعدادات ضبط خادم الويب أولًا ثم يعمل بعدها، ولهذا يجب عليك تحديد الخادم <code>nginx</code> عند كتابة أمر تشغيل certbot كي يعلم ما هو نوع إعدادات الخادم الذي عليه تحديثها بعد تجديد الشهادة. لكن، إن كانت إعدادات خادم الويب الحالية معقدةً جدًا، فقد يفشل Certbot في تحديثه للانتقال إلى استخدام بروتوكول HTTPS، وستحتاج حينها إلى إجراء التغييرات بنفسك. أولًا، تأكد من إضافة كتلة اسم خادمك <code>server_name</code> في ملف <a href="https://academy.hsoub.com/devops/deployment/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%B6%D8%A8%D8%B7-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%AF%D9%85-configuration-management-r689/" rel="">ضبط إعدادات الخادم</a>، إذ إنه بدون هذه الخطوة، لن يعلم <code>certbot</code> ما هي الإعدادات الواجب تحديثها. إن واجهت مشاكل بعد هذه الخطوة، فقد تحتاج إلى تشغيل <code>certbot</code> في الوضع المستقل Standalone mode يجلب الشهادة فقط، ثم ستحتاج إلى ضبط إعدادات خادم الويب يدويًا لاستخدام بروتوكول HTTPS. تتضمن الإعدادات الأساسية لخادم Ngnix الذي يستخدم بروتوكول HTTPS السطر التالي <code>listen 443 <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">ssl</abbr></abbr></code> ومسار شهادة <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr> والمفتاح Key كما يلي:
</p>

<pre class="ipsCode">…
    listen 443 ssl;
    # RSA certificate
    ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;

    # Redirect non-https traffic to https
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    }
…
</pre>

<p>
	عند ضبط إعدادات خادم Nginx تذكر أنه يمكنك التحقق من التعديلات التي أجريتها على إعدادات خادم Nginx وتأكيدها بواسطة الأمر <code>nginx -t</code> قبل إعادة تشغيل الخادم. عند الانتهاء من التعديلات بإمكانك إعادة تشغيل خادم Nginx كي تأخذ الإعدادات الجديدة مفعولها باستخدام الأمر <code>systemctl restart nginx</code>
</p>

<pre class="ipsCode">sudo systemctl restart nginx
</pre>

<h2 id="-1">
	ختامًا
</h2>

<p>
	راجعنا في هذا المقال عدة أخطاء شائعة قد تظهر عند استخدام خدمة LetsEncrypt وتعلمنا خطوات إصلاحها، إذ إن الهدف من خدمة LetsEncrypt هو إتاحة استخدام البروتوكول الآمن HTTPS لجميع الأفراد في أي مكان ودون دفع أي تكاليف، وهي تُعد خدمةً سهلة الاستخدام عندما تعمل تلقائيًا بدون ظهور أيّة أخطاء، ولكن قد يكون التعامل معها مربكًا لمن لا يملك خبرةً كافية في ضبط إعدادات شهادة <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr> أو DNS. إذا واجهت أي مشكلات عند استخدام خدمة LetsEncrypt يمكنك الحصول على الدعم والمساعدة عبر إضافة سؤالك في قسم الأسئلة والأجوبة في <a href="https://academy.hsoub.com/questions/" rel="">أكاديمية حسوب</a>.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-fix-common-letsencrypt-errors" rel="external nofollow">How To Fix Common LetsEncrypt Errors</a> من <a href="https://www.digitalocean.com/" rel="external nofollow">موقع DigitalOcean</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AE%D8%AF%D9%85%D8%A9-let%E2%80%99s-encrypt-r352/" rel="">مقدمة إلى خدمة Let’s Encrypt</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D8%AA%D9%86%D8%B5%D9%8A%D8%A8-%D8%B4%D9%87%D8%A7%D8%AF%D8%A9-ssl-%D9%85%D8%AC%D8%A7%D9%86%D9%8A%D8%A9-%D8%B9%D8%A8%D8%B1-%D8%AE%D8%AF%D9%85%D8%A9-lets-encrypt-%D8%B9%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r151/" rel="">تنصيب شهادة <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr> مجانية عبر خدمة Let's encrypt على خادوم لينكس</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%88%D8%B6%D8%B9-certbot-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D9%82%D9%84-%D9%84%D9%84%D8%AD%D8%B5%D9%88%D9%84-%D8%B9%D9%84%D9%89-%D8%B4%D9%87%D8%A7%D8%AF%D8%A7%D8%AA-ssl-%D9%85%D9%86-let%E2%80%99s-encrypt-%D8%B9%D9%84%D9%89-%D8%AF%D8%A8%D9%8A%D8%A7%D9%86-10-r466/" rel="">كيفية استخدام وضع Certbot المستقل للحصول على شهادات <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr> من Let’s Encrypt على دبيان 10</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/web/wordpress/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%AA%D8%B9%D9%85%D9%84-ssl-%D9%88-https-%D9%85%D8%B9-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r278/" rel="">كيف تستعمل <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr> و HTTPS مع ووردبريس</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">801</guid><pubDate>Wed, 24 Jan 2024 12:03:00 +0000</pubDate></item><item><title>&#x623;&#x637;&#x631; &#x639;&#x645;&#x644; &#x627;&#x644;&#x648;&#x64A;&#x628; &#x645;&#x646; &#x637;&#x631;&#x641; &#x627;&#x644;&#x62E;&#x627;&#x62F;&#x645;</title><link>https://academy.hsoub.com/devops/servers/%D8%A3%D8%B7%D8%B1-%D8%B9%D9%85%D9%84-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%85%D9%86-%D8%B7%D8%B1%D9%81-%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-r784/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_07/-----.png.8f0ae75fb10832bbf61859504ab086e4.png" /></p>
<p>
	وضّحنا في <a href="https://academy.hsoub.com/devops/servers/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B9%D9%84%D9%89-%D8%AA%D9%81%D8%A7%D8%B9%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-%D9%85%D8%B9-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%84-%D9%81%D9%8A-%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%8A%D8%A8-%D8%AF%D9%8A%D9%86%D8%A7%D9%85%D9%8A%D9%83%D9%8A-r782/" rel="">المقال السابق</a> كيف يبدو الاتصال بين عملاء وخوادم الويب، وطبيعة طلبات واستجابات HTTP، وما يحتاج تطبيق الويب من طرف الخادم لتنفيذه بهدف الاستجابة للطلبات القادمة من متصفح الويب. حان الوقت الآن لاستكشاف كيف يمكن لأطر عمل الويب تبسيط هذه المهام، وإعطائك فكرةً عن كيفية اختيار إطار عمل لتطبيقك الأول من طرف الخادم.
</p>

<ul>
	<li>
		<strong>المتطلبات الأساسية</strong>: المهارات الحاسوبية الأساسية، والفهم الأساسي لكيفية معالجة الشيفرة البرمجية من طرف الخادم لطلبات HTTP والاستجابة لها (اطّلع على <a href="https://academy.hsoub.com/devops/servers/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B9%D9%84%D9%89-%D8%AA%D9%81%D8%A7%D8%B9%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-%D9%85%D8%B9-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%84-%D9%81%D9%8A-%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%8A%D8%A8-%D8%AF%D9%8A%D9%86%D8%A7%D9%85%D9%8A%D9%83%D9%8A-r782/" rel="">تفاعلات الخادم مع العميل في موقع ويب ديناميكي</a>).
	</li>
	<li>
		<strong>الهدف</strong>: فهم كيف يمكن لأطر عمل الويب تبسيط تطوير أو صيانة الشيفرة البرمجية من طرف الخادم وجعل القارئ يفكر في اختيار إطار عمل لعملية التطوير الخاصة به.
	</li>
</ul>

<p>
	سنوضّح في الأقسام التالية بعض النقاط باستخدام أجزاء من الشيفرة البرمجية المأخوذة من أطر عمل ويب حقيقية. لا تقلق إن لم تفهم كل شيء الآن، إذ سنعمل معك لاحقًا باستخدام شيفرة برمجية عند التعرّف على أطر عمل الويب من طرف الخادم.
</p>

<h2>
	مقدمة عامة
</h2>

<p>
	تُعَد <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%85%D9%86-%D8%B7%D8%B1%D9%81-%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-r783/" rel="">أطر عمل الويب من طرف الخادم</a> -المعروفة أيضًا باسم "أطر عمل تطبيقات الويب"- أطر عمل برمجية تسهّل كتابة تطبيقات الويب وصيانتها وتوسيعها، وتوفّر الأدوات والمكتبات التي تبسّط المهام الشائعة لتطوير الويب، مثل توجيه عناوين URL إلى المعالجات المناسبة والتفاعل مع قواعد البيانات ودعم الجلسات والتصريح للمستخدمين وتنسيق الخرج، مثل ملفات <a href="https://academy.hsoub.com/programming/html/%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-html-r1702/" rel="">HTML</a> و <a href="https://academy.hsoub.com/programming/javascript/%D8%AA%D8%B9%D9%84%D9%85-json-r604/" rel="">JSON</a> و <a href="https://academy.hsoub.com/programming/java/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D9%85%D8%AE%D8%AA%D8%B5%D8%B1%D8%A9-%D9%84%D9%84%D8%BA%D8%A9-xml-%D9%88%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84%D9%87%D8%A7-%D9%81%D9%8A-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%AC%D8%A7%D9%81%D8%A7-r1475/" rel="">XML</a>، وتحسين الأمان في مواجهة هجمات الويب.
</p>

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

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة تطوير تطبيقات الويب باستخدام لغة PHP
		</p>

		<p class="banner-subtitle">
			احترف تطوير النظم الخلفية والووردبريس وتطبيقات الويب من الألف إلى الياء دون الحاجة لخبرة برمجية مسبقة
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/php-web-application-development/" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<img alt="دورة تطوير تطبيقات الويب باستخدام لغة PHP" src="https://academy.hsoub.com/learn/assets/images/courses/php-web-application-development.png">
	</div>
</div>

<h2>
	فوائد أطر عمل الويب
</h2>

<p>
	توفّر أطر عمل الويب أدوات ومكتبات لتبسيط عمليات تطوير الويب الشائعة. لا يُعَد استخدام إطار عمل ويب من طرف الخادم أمرًا ضروريًا، ولكن يُنصح بشدة بذلك، لأنه يسهّل الأمور عليك كثيرًا. سنناقش في هذا القسم بعض الوظائف التي توفرها أطر عمل الويب في أغلب الأحيان، إذ لن توفر جميع أطر العمل بالضرورة جميع هذه الميزات.
</p>

<h3>
	العمل المباشر مع طلبات واستجابات HTTP
</h3>

<p>
	تتواصل خوادم الويب والمتصفحات باستخدام <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-http-r73/" rel="">بروتوكول HTTP</a>، إذ تنتظر الخوادم طلبات HTTP من المتصفح ثم تعيد المعلومات في استجابات HTTP. تسمح لك أطر عمل الويب بكتابة صيغة مبسّطة من شأنها أن تنشِئ شيفرةً برمجيةً من طرف الخادم للعمل مع هذه الطلبات والاستجابات، وهذا يعني أنه سيكون لديك وظيفة أسهل، وستتفاعل مع شيفرة برمجية أسهل وأعلى مستوًى بدلًا من أساسيات الشبكات ذات المستوى الأدنى.
</p>

<p>
	يوضح المثال الآتي كيفية عمل ذلك في إطار عمل <a href="https://academy.hsoub.com/programming/python/django/" rel="">جانغو Django</a> باستخدام لغة بايثون Python، إذ تتلقى كل دالة عرض (أو معالج طلب) الكائن <code>HttpRequest</code> الذي يحتوي على معلومات الطلب، وتكون هذه الدالة مطلوبة لإعادة الكائن <code>HttpResponse</code> مع الخرج المُنسَّق (سلسلة نصية في هذه الحالة).
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1414_8" style=""><span class="com"># دالة عرض جانغو</span><span class="pln">
</span><span class="kwd">from</span><span class="pln"> django</span><span class="pun">.</span><span class="pln">http </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">HttpResponse</span><span class="pln">

</span><span class="kwd">def</span><span class="pln"> index</span><span class="pun">(</span><span class="pln">request</span><span class="pun">):</span><span class="pln">
    </span><span class="com"># الحصول على كائن‫ HttpRequest (طلب)</span><span class="pln">
    </span><span class="com"># إجراء العمليات باستخدام المعلومات الواردة في الطلب.</span><span class="pln">
    </span><span class="com"># إعادة الكائن‫ HttpResponse</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> </span><span class="typ">HttpResponse</span><span class="pun">(</span><span class="str">'Output string to return'</span><span class="pun">)</span></pre>

<h3>
	توجيه الطلبات إلى المعالج المناسب
</h3>

<p>
	ستوفِّر معظم المواقع عددًا من الموارد المختلفة التي يمكن الوصول إليها من خلال عناوين URL مميزة. يمكن أن يكون الحفاظ على التعامل مع جميع هذه الموارد باستخدام دالة واحدة أمرًا صعبًا، لذلك توفر أطر عمل الويب آليات بسيطة لربط أنماط عنوان URL مع دوال معالجة محدَّدة. لهذا النهج فوائد من حيث الصيانة، لأنه يمكنك تغيير عنوان URL المُستخدَم لتقديم ميزة معينة دون الحاجة إلى تغيير الشيفرة البرمجية الأساسية.
</p>

<p>
	تستخدم أطر العمل المختلفة آليات مختلفة للربط Mapping، فمثلًا يضيف إطار عمل الويب <a href="https://academy.hsoub.com/programming/python/flask/" rel="">فلاسك Flask</a> باستخدام لغة بايثون مسارات لعرض الدوال باستخدام مزخرِف Decorator.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1414_10" style=""><span class="lit">@app</span><span class="pun">.</span><span class="pln">route</span><span class="pun">(</span><span class="str">"/"</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">def</span><span class="pln"> hello</span><span class="pun">():</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> </span><span class="str">"Hello World!"</span></pre>

<p>
	بينما يتوقع إطار عمل جانغو من المطورين تحديد قائمة بروابط عناوين URL بين نمط URL ودالة عرض.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1414_12" style=""><span class="pln">urlpatterns </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
    url</span><span class="pun">(</span><span class="pln">r</span><span class="str">'^$'</span><span class="pun">,</span><span class="pln"> views</span><span class="pun">.</span><span class="pln">index</span><span class="pun">),</span><span class="pln">
    </span><span class="com"># مثال : /best/myteamname/5/</span><span class="pln">
    url</span><span class="pun">(</span><span class="pln">r</span><span class="str">'^best/(?P&lt;team_name&gt;\w.+?)/(?P&lt;team_number&gt;[0-9]+)/$'</span><span class="pun">,</span><span class="pln"> views</span><span class="pun">.</span><span class="pln">best</span><span class="pun">),</span><span class="pln">
</span><span class="pun">]</span></pre>

<h3>
	تسهيل الوصول إلى البيانات في الطلب
</h3>

<p>
	يمكن تشفير البيانات في طلب HTTP بعدة طرق، إذ يمكن أن يشفِّر طلب HTTP من النوع "GET" البيانات المطلوبة في معاملات عنوان URL أو ضمن بنية عنوان URL للحصول على ملفات أو بيانات من الخادم؛ بينما سيتضمن طلب HTTP من النوع "POST" معلومات التحديث بوصفها "بيانات POST" ضمن متن الطلب لتحديث موردٍ على الخادم. كما يمكن أن يتضمن طلب HTTP معلومات حول الجلسة أو المستخدم الحالي في <a href="https://academy.hsoub.com/programming/javascript/%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D8%AA%D8%B9%D8%B1%D9%8A%D9%81-%D8%A7%D9%84%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%D9%88%D8%B6%D8%A8%D8%B7%D9%87%D8%A7-%D9%81%D9%8A-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r1330/" rel="">ملف تعريف الارتباط Cookie</a> من طرف العميل.
</p>

<p>
	توفر أطر عمل الويب آليات مناسبة للغة البرمجة للوصول إلى هذه المعلومات، فمثلًا يحتوي كائن <code>HttpRequest</code> الذي يمرره إطار عمل جانغو إلى كل دالة عرض على توابع وخاصيات للوصول إلى عنوان URL الهدف ونوع الطلب، مثل طلب HTTP من النوع "GET"، ومعاملات "GET" أو "POST" وملف تعريف الارتباط وبيانات الجلسة وغير ذلك. كما يمكن لإطار عمل جانغو تمرير المعلومات المُشفَّرة في بنية عنوان URL من خلال تحديد "الأنماط الملتقَطة" في رابط Mapper عنوان URL (ألقِ نظرةً على الجزء الأخير من الشيفرة البرمجية في القسم السابق).
</p>

<h3>
	تجريد وتبسيط الوصول إلى قاعدة البيانات
</h3>

<p>
	تستخدم مواقع الويب قواعد البيانات لتخزين معلومات عن المستخدمين ومعلومات لمشاركتها معهم. توفّر أطر عمل الويب في أغلب الأحيان طبقة قاعدة بيانات تجرّد عمليات القراءة والكتابة والاستعلام والحذف لقاعدة البيانات، إذ يُشار إلى طبقة التجريد هذه باسم رابط الكائنات بالعلاقات Object-Relational Mapper -أو اختصارًا ORM.
</p>

<p>
	توجد فائدتان لاستخدام رابط ORM، هما:
</p>

<ul>
	<li>
		يمكنك استبدال قاعدة البيانات الأساسية دون الحاجة بالضرورة إلى تغيير الشيفرة البرمجية التي تستخدمها، مما يتيح للمطورين تحسين خصائص قواعد البيانات المختلفة بناءً على استخدامها.
	</li>
	<li>
		يمكن تطبيق التحقق validation الأساسي من صحة البيانات ضمن إطار العمل، مما يجعل من الأسهل والأكثر أمانًا التحقق من تخزين البيانات في النوع الصحيح لحقل قاعدة البيانات وبالتنسيق الصحيح (مثل عنوان البريد الإلكتروني) وكذلك التحقق من أنها غير ضارة بأيّ شكل من الأشكال، إذ يمكن للمخترقين استخدام أنماط معينة من الشيفرة البرمجية ليفعلوا أمورًا سيئة مثل حذف سجلات قاعدة البيانات.
	</li>
</ul>

<p>
	يوفر إطار عمل الويب جانغو رابط ORM مثلًا، ويشير إلى الكائن المُستخدَم لتعريف بنية السجل بوصفه نموذجًا Model، بحيث يحدّد هذا النموذج أنواع الحقول المراد تخزينها والتي يمكن أن توفر تحققًا على مستوى الحقل لصحة المعلومات الممكن تخزينها، فمثلًا سيسمح حقل البريد الإلكتروني بعناوين البريد الإلكتروني الصالحة فقط، كما يمكن أن تحدّد تعريفات الحقول حجمها الأقصى وقيمها الافتراضية وخيارات قائمة التحديد ونص التعليمات للوثائق ونص التسمية للاستمارات وإلخ. لا يذكر النموذج أيّ معلومات حول قاعدة البيانات الأساسية لأنه يُعَد ضبطًا لإعدادٍ يمكن تغييره بصورة منفصلة عن شيفرتنا البرمجية.
</p>

<p>
	يُظهر مقتطف الشيفرة البرمجية الأول التالي نموذج جانغو بسيط جدًا للكائن <code>Team</code> الذي يخزن اسم الفريق ومستوى الفريق بوصفهما حقولًا محرفية ويحدّد الحد الأقصى لعدد المحارف التي ستُخزَّن لكل سجل. يُعَد الحقل <code>team_level</code> حقل اختيار، لذلك سنقدّم ربطًا بين الاختيارات المُراد عرضها والبيانات المراد تخزينها إلى جانب القيمة الافتراضية.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1414_14" style=""><span class="com">#best/models.py</span><span class="pln">

</span><span class="kwd">from</span><span class="pln"> django</span><span class="pun">.</span><span class="pln">db </span><span class="kwd">import</span><span class="pln"> models

</span><span class="kwd">class</span><span class="pln"> </span><span class="typ">Team</span><span class="pun">(</span><span class="pln">models</span><span class="pun">.</span><span class="typ">Model</span><span class="pun">):</span><span class="pln">
    team_name </span><span class="pun">=</span><span class="pln"> models</span><span class="pun">.</span><span class="typ">CharField</span><span class="pun">(</span><span class="pln">max_length</span><span class="pun">=</span><span class="lit">40</span><span class="pun">)</span><span class="pln">

    TEAM_LEVELS </span><span class="pun">=</span><span class="pln"> </span><span class="pun">(</span><span class="pln">
        </span><span class="pun">(</span><span class="str">'U09'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Under 09s'</span><span class="pun">),</span><span class="pln">
        </span><span class="pun">(</span><span class="str">'U10'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Under 10s'</span><span class="pun">),</span><span class="pln">
        </span><span class="pun">(</span><span class="str">'U11'</span><span class="pun">,</span><span class="pln"> </span><span class="str">'Under 11s'</span><span class="pun">),</span><span class="pln">
        </span><span class="com"># قائمة فرقنا الأخرى</span><span class="pln">
    </span><span class="pun">)</span><span class="pln">
    team_level </span><span class="pun">=</span><span class="pln"> models</span><span class="pun">.</span><span class="typ">CharField</span><span class="pun">(</span><span class="pln">max_length</span><span class="pun">=</span><span class="lit">3</span><span class="pun">,</span><span class="pln">choices</span><span class="pun">=</span><span class="pln">TEAM_LEVELS</span><span class="pun">,</span><span class="pln">default</span><span class="pun">=</span><span class="str">'U11'</span><span class="pun">)</span></pre>

<p>
	يوفّر نموذج جانغو <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-%D9%84%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-api%D8%9F-r1512/" rel="">واجهة برمجة تطبيقات <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr></a> بسيطة للاستعلام بهدف البحث في قاعدة البيانات، إذ يمكن أن تتطابق هذه الواجهة مع عدد من الحقول في وقت واحد باستخدام معايير مختلفة، مثل التطابق التام، وعدم الحساسية لحالة الأحرف، وأكبر من وإلخ، ويمكن أيضًا دعم العبارات المعقدة، فمثلًا يمكنك تحديد بحثٍ عن فِرق U11 التي اسمها يبدأ بالحرفين "Fr"، أو ينتهي بالحرفين "al".
</p>

<p>
	يوضّح مقتطف الشيفرة البرمجية الثاني دالة عرض (معالج موارد) لعرض جميع فِرق U09، إذ نحدّد في هذه الحالة أننا نريد ترشيح جميع السجلات عندما يحتوي الحقل <code>team_level</code> على النص "U09" تمامًا. لاحظ فيما يلي كيفية تمرير هذه المعايير إلى الدالة <code>filter()‎</code> بوصفها وسيطًا مع اسم الحقل ونوع التطابق ومفصولٌ بينها شرطة سفلية <code>team_level__exact</code>.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_1414_16" style=""><span class="com">#best/views.py</span><span class="pln">

</span><span class="kwd">from</span><span class="pln"> django</span><span class="pun">.</span><span class="pln">shortcuts </span><span class="kwd">import</span><span class="pln"> render
</span><span class="kwd">from</span><span class="pln"> </span><span class="pun">.</span><span class="pln">models </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">Team</span><span class="pln">

</span><span class="kwd">def</span><span class="pln"> youngest</span><span class="pun">(</span><span class="pln">request</span><span class="pun">):</span><span class="pln">
    list_teams </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Team</span><span class="pun">.</span><span class="pln">objects</span><span class="pun">.</span><span class="pln">filter</span><span class="pun">(</span><span class="pln">team_level__exact</span><span class="pun">=</span><span class="str">"U09"</span><span class="pun">)</span><span class="pln">
    context </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'youngest_teams'</span><span class="pun">:</span><span class="pln"> list_teams</span><span class="pun">}</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> render</span><span class="pun">(</span><span class="pln">request</span><span class="pun">,</span><span class="pln"> </span><span class="str">'best/index.html'</span><span class="pun">,</span><span class="pln"> context</span><span class="pun">)</span></pre>

<h3>
	تصيير البيانات
</h3>

<p>
	توفر أطر عمل الويب أنظمة إنشاء قوالب تتيح لك تحديد بنية مستند الخرج باستخدام العناصر البديلة للبيانات التي ستُضاف عند إنشاء صفحة. تُستخدم القوالب في أغلب الأحيان لإنشاء مستند HTML، ولكن يمكنها إنشاء أنواع أخرى من المستندات.
</p>

<p>
	توفر أطر عمل الويب آلية لتسهيل إنشاء تنسيقات أخرى من البيانات المخزنة بما في ذلك تنسيقات <a href="https://academy.hsoub.com/programming/javascript/%D8%AA%D8%B9%D9%84%D9%85-json-r604/" rel="">JSON</a> و <a href="https://academy.hsoub.com/programming/java/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D9%85%D8%AE%D8%AA%D8%B5%D8%B1%D8%A9-%D9%84%D9%84%D8%BA%D8%A9-xml-%D9%88%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84%D9%87%D8%A7-%D9%81%D9%8A-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%AC%D8%A7%D9%81%D8%A7-r1475/" rel="">XML</a>، فمثلًا يتيح لك نظام قوالب جانغو تحديد المتغيرات باستخدام صيغة "تعابير موضوعة بين قوسين معقوصين Double-handlebars"، مثل <code>{{ variable_name }}</code>، والتي ستُستبدَل بالقيم المُمرَّرة من دالة العرض عند عرض الصفحة. كما يوفّر نظام القوالب دعمًا للتعابير ذات الصيغة <code>{% expression %}</code> التي تسمح للقوالب بإجراء عمليات بسيطة، مثل تكرار قيم القائمة المُمرَّرة في القالب.
</p>

<p>
	<strong>ملاحظة</strong>: تستخدم العديد من أنظمة إنشاء القوالب الأخرى البنية نفسها مثل Jinja2 بلغة بايثون و Handlebars بلغة جافا سكريبت و Moustache بلغة جافا سكريبت وغيرها.
</p>

<p>
	يوضّح مقتطف الشيفرة البرمجية التالي كيف يعمل ذلك، فاستمرارًا لمثال "فريق الناشئين" من القسم السابق، يُمرَّر قالب HTML إلى متغير قائمة يسمى <code>youngest_teams</code> باستخدام العرض view. لدينا ضمن بنية ملف HTML تعبير يتحقق أولًا من وجود المتغير <code>youngest_teams</code>، ثم يكرّره في حلقة <code>for</code>. يعرض القالب في كل تكرار قيمة اسم الفريق <code>team_name</code> الخاص بالفريق في عنصر قائمة.
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_1414_18" style=""><span class="pln">#best/templates/best/index.html

</span><span class="dec">&lt;!DOCTYPE html&gt;</span><span class="pln">
</span><span class="tag">&lt;html</span><span class="pln"> </span><span class="atn">lang</span><span class="pun">=</span><span class="atv">"en"</span><span class="tag">&gt;</span><span class="pln">
</span><span class="tag">&lt;body&gt;</span><span class="pln">

 {% if youngest_teams %}
    </span><span class="tag">&lt;ul&gt;</span><span class="pln">
    {% for team in youngest_teams %}
        </span><span class="tag">&lt;li&gt;</span><span class="pln">{{ team.team_name }}</span><span class="tag">&lt;/li&gt;</span><span class="pln">
    {% endfor %}
    </span><span class="tag">&lt;/ul&gt;</span><span class="pln">
{% else %}
    </span><span class="tag">&lt;p&gt;</span><span class="pln">No teams are available.</span><span class="tag">&lt;/p&gt;</span><span class="pln">
{% endif %}

</span><span class="tag">&lt;/body&gt;</span><span class="pln">
</span><span class="tag">&lt;/html&gt;</span></pre>

<h2>
	كيفية اختيار إطار عمل الويب
</h2>

<p>
	توجد العديد من أطر عمل الويب لكل لغة برمجة تقريبًا ترغب في استخدامها، وسنوضّح عددًا من أطر العمل الأكثر شيوعًا في القسم التالي، ولكن يمكن أن يصبح تحديد إطار العمل الذي يوفر أفضل نقطة بداية لتطبيقك الويب الجديد أمرًا صعبًا مع وجود العديد من الخيارات.
</p>

<p>
	إليك بعض العوامل التي يمكن أن تؤثر على قرارك:
</p>

<ul>
	<li>
		<strong>حجم الجهد المبذول للتعلم</strong>: يعتمد الجهد المبذول لتعلم إطار عمل الويب على مدى معرفتك بلغة البرمجة الأساسية وتناسق واجهة برمجة التطبيقات الخاصة به وجودة توثيقه وحجم ونشاط مجتمعه. إذا لم تكن لديك خبرةٌ في البرمجة إطلاقًا، ففكر في إطار عمل جانغو الذي يُعَد من أسهل أطر العمل للتعلم بناءً على المعايير التي ذكرناها سابقًا؛ بينما إذا كنت جزءًا من فريق تطوير لديه خبرةٌ فعلية كبيرة في إطار عمل ويب معين أو لغة برمجة معينة، فلا بُد أنك ستتمسّك بها طبعًا.
	</li>
	<li>
		<strong>الإنتاجية</strong>: هي مقياس لمدى السرعة التي يمكنك بها إنشاء ميزات جديدة بمجرد أن تكون على دراية بإطار العمل، وتتضمن كلًا من الجهد المبذول لكتابة الشيفرة البرمجية وصيانتها، إذ لا يمكنك كتابة ميزات جديدة عندما تكون الميزات القديمة معطلة. تتشابه العديد من العوامل التي تؤثر على الإنتاجية مع عوامل حجم الجهد المبذول للتعلم، مثل التوثيق والمجتمع والخبرة في البرمجة وغيرها من العوامل التي نوضّحها فيما يلي:
		<ul>
			<li>
				هدف أو أصل إطار العمل: اُنشِأت بعض أطر عمل الويب في البداية لحل أنواع معينة من المشاكل والعمل بصورة أفضل على إنشاء تطبيقات الويب ذات القيود المماثلة؛ فمثلًا أُنشِئ إطار عمل جانغو لدعم تطوير موقع ويب لصحيفة، لذا يُعَد جيدًا للمدونات والمواقع الأخرى التي تتضمن عمليات نشر؛ بينما يُعَد إطار عمل فلاسك أخف بكثير وهو رائع لإنشاء تطبيقات الويب التي تعمل على الأجهزة المُضمَّنة.
			</li>
			<li>
				إطار العمل القائم على رأيه Opinionated وغير القائم على رأيه Unopinionated: إطار العمل القائم على رأيه هو إطار العمل الذي توجد فيه طرق أفضل موصَى بها لحل مشكلة معينة، وتميل إلى أن تكون أكثر إنتاجية عندما تحاول حل المشاكل الشائعة، لأنها تقودك في الاتجاه الصحيح، ولكنها تكون أقل مرونة أحيانًا.
			</li>
			<li>
				إطار العمل الذي يتضمن كل شيء Batteries included وإطار العمل الذي تضطر للبحث فيه عن كل شيء بنفسك get it yourself: تتضمن بعض أطر عمل الويب أدوات أو مكتبات تعالج كل مشكلة يمكن لمطوريها التفكير فيها افتراضيًا، مثل إطار عمل جانغو، بينما تتوقع الأطر الأخف وزنًا أن يحدد ويختار مطورو الويب حلًا للمشاكل من مكتبات منفصلة مثل إطار عمل فلاسك خفيف الوزن. يكون البدء في أطر العمل التي تتضمن كل شيء أسهل لأن لديك كل ما تحتاجه فعليًا، ويُحتمَل أن تكون متكاملة وذات توثيق جيد، لكن إذا احتوى إطار العمل الأصغر على كل ما تحتاجه، فيمكن تشغيله في بيئات أكثر تقييدًا وسيكون لديه مجموعةً أصغر وأسهل من الأشياء لتعلّمها.
			</li>
			<li>
				إطار العمل الذي يشجع ممارسات التطوير الجيدة وإطار العمل الذي لا يشجع ذلك، إذ ينتج مثلًا عن إطار العمل -الذي يشجّع بنية <a href="https://developer.mozilla.org/en-US/docs/Glossary/MVC" rel="external nofollow">نموذج-عرض-مُتحكِّم Model-View-Controller</a> لفصل الشيفرة البرمجية إلى دوال منطقية- شيفرةٌ برمجية أكثر قابلية للصيانة من الشيفرة البرمجية التي ليس لديها أيّ توقعات بشأن المطورين، كما يمكن أن يكون لتصميم إطار العمل تأثير كبير على مدى سهولة اختبار وإعادة استخدام الشيفرة البرمجية.
			</li>
		</ul>
	</li>
	<li>
		<strong>أداء لغة البرمجة أو إطار العمل</strong>: لا تُعَد السرعة عادةً العامل الأكبر في الاختيار لأن أوقات التشغيل البطيئة نسبيًا مثل <a href="https://academy.hsoub.com/files/15-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86/" rel="">لغة بايثون</a> تكون أكثر من "جيدة" للمواقع متوسطة الحجم التي تعمل على عتاد متوسط. يمكن تعويض فوائد هذه السرعة المحسوسة للغة أخرى مثل لغة C++‎ أو <a href="https://academy.hsoub.com/files/27-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D9%84%D8%BA%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA/" rel="">جافا سكريبت</a> من خلال تكاليف التعلم والصيانة.
	</li>
	<li>
		<strong>دعم التخزين المؤقت Caching</strong>: يمكن أن يصبح موقعك الويب أنجح، وبالتالي ستجد أنه لم يعد قادرًا على التعامل مع عدد الطلبات التي يتلقاها عندما يصل المستخدمون إليه، وبالتالي يمكن أن تفكر في إضافة دعم للتخزين المؤقت الذي يمثّل تحسينًا عندما تخزّن كل استجابة الويب أو جزءًا منها بحيث لا يلزم إعادة حسابها في الطلبات اللاحقة. تُعَد استعادة استجابة مُخزَّنة مؤقتًا أسرع بكثير من حساب الاستجابة. يمكن تقديم التخزين المؤقت في شيفرتك البرمجية أو الخادم (اطّلع على <a href="https://academy.hsoub.com/devops/servers/web/apache/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-apache-%D9%84%D9%8A%D8%B9%D9%85%D9%84-%D9%88%D8%B3%D9%8A%D8%B7%D9%8B%D8%A7-%D8%B9%D9%83%D8%B3%D9%8A%D9%91%D9%8B%D8%A7-reverse-proxy-%D8%B9%D9%84%D9%89-ubuntu-1604-r339/" rel="">الوسيط العكسي Reverse Proxy</a>)، وسيكون لأطر عمل الويب مستويات مختلفة من الدعم لتحديد المحتوى الممكن تخزينه مؤقتًا.
	</li>
	<li>
		<strong>قابلية التوسع</strong>: إذا أصبح موقعك ناجحًا جدًا، فستُستنفَد فوائد التخزين المؤقت ويمكن أن تصل إلى حدود التوسع الرأسي Vertical Scaling أي تشغيل تطبيق الويب على عتاد أقوى، وبالتالي ستحتاج إلى التوسع أفقيًا (مشاركة الحِمل من خلال توزيع موقعك على عدد من خوادم الويب وقواعد البيانات)، أو التوسع جغرافيًا، إذ يقيم بعض عملائك بعيدًا عن خادمك. يمكن أن يُحدِث إطار عمل الويب الذي تختاره فرقًا كبيرًا في مدى سهولة توسيع نطاق موقعك.
	</li>
	<li>
		<strong>أمان الويب</strong>: توفر بعض أطر عمل الويب دعمًا أفضل للتعامل مع هجمات الويب الشائعة. يعقّم Sanitize إطار عمل جانغو مثلًا جميع مدخلات المستخدم من قوالب HTML، وبالتالي لا يمكن تشغيل شيفرة جافا سكريبت التي أدخلها المستخدم. توفر أطر العمل الأخرى حمايةً مماثلة، ولكن لا تُفعَّل دائمًا افتراضيًا.
	</li>
</ul>

<p>
	هناك عدة عوامل محتملة أخرى بما في ذلك منح التراخيص Licensing سواءً كان إطار العمل قيد التطوير النشط أم لا وغير ذلك.
</p>

<p>
	إذا كنت مبتدئًا في البرمجة، فيُحتمَل أن تختار إطار عملك بناءً على أساس سهولة التعلم. يُعَد التوثيق أو البرامج التعليمية عالية الجودة والمجتمع النشط الذي يساعد المستخدمين الجدد أكثر مواردك قيمةً، إضافةً إلى سهولة استخدام اللغة نفسها. اخترنا إطار عمل <a href="https://academy.hsoub.com/programming/python/django/" rel="">جانغو</a> بلغة بايثون و <a href="https://academy.hsoub.com/programming/javascript/nodejs/express/" rel="">Express</a> باستخدام Node/JavaScript لكتابة أمثلتنا، ويرجع ذلك أساسًا إلى أنها سهلة التعلم ولديها دعمٌ جيد.
</p>

<p>
	<strong>ملاحظة</strong>: يمكننا زيارة مواقع الويب الرسمية لإطار عمل <a href="https://www.djangoproject.com/" rel="external nofollow">جانغو</a> بلغة بايثون و <a href="https://expressjs.com/" rel="external nofollow">Express</a> باستخدام Node/JavaScript للتحقق من توثيقها ومجتمعها.
</p>

<ol>
	<li>
		انتقل إلى المواقع الرسمية.
		<ul>
			<li>
				انقر على روابط قائمة التوثيق التي تحتوي أشياءً بأسماء مثل "Documentation و Guide و <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr> Reference و Getting Started" وغير ذلك.
			</li>
			<li>
				هل يمكنك رؤية موضوعات توضّح كيفية إعداد توجيه عناوين URL والقوالب وقواعد البيانات والنماذج؟
			</li>
			<li>
				هل التوثيق واضح؟
			</li>
		</ul>
	</li>
	<li>
		انتقل إلى القوائم البريدية الخاصة بكل موقع (يمكن الوصول إليها من روابط المجتمع).
		<ul>
			<li>
				كم عدد الأسئلة المنشورة في الأيام القليلة الماضية؟
			</li>
			<li>
				كم عدد الردود؟
			</li>
			<li>
				هل لديها مجتمع نشط؟
			</li>
		</ul>
	</li>
</ol>

<h2>
	أطر عمل الويب الجيدة
</h2>

<p>
	لننتقل الآن ونناقش بعض أطر عمل الويب من طرف الخادم، إذ تمثل أطر العمل من طرف الخادم الآتية بعضًا من أكثر أطر العمل المتاحة شيوعًا، فلديها كل ما تحتاجه لتكون منتِجًا، فهي مفتوحة المصدر وقيد التطوير النشط ولديها مجتمعات نشطة تنشِئ توثيقًا وتساعد المستخدمين في لوحات المناقشة، وتُستخدَم في عدد كبير من مواقع الويب رفيعة المستوى. هناك العديد من أطر العمل الرائعة الأخرى من طرف الخادم التي يمكنك اكتشافها بنفسك.
</p>

<h3>
	إطار عمل جانغو Django باستخدام لغة بايثون
</h3>

<p>
	يُعَد <a href="https://academy.hsoub.com/programming/python/django/" rel="">جانغو</a> إطار عمل ويب <a href="https://academy.hsoub.com/python/" rel="">بلغة بايثون</a> عالي المستوى ويشجّع التطوير السريع والتصميم النظيف والعملي، وقد أنشأه مطورون ذوو خبرة، وهو يعتني بالكثير من متاعب تطوير الويب، بحيث يمكنك التركيز على كتابة تطبيقك دون الحاجة إلى إعادة اختراع العجلة، وهو مجاني ومفتوح المصدر.
</p>

<p>
	يتبع جانغو فلسفة "أنه يتضمن كل شيء Batteries Included" التي تنص على أن إطار عمل جانغو يتضمن جميع الأجزاء الممكنة والمطلوبة للاستخدام الكامل، ويوفر تقريبًا كل شيء يمكن أن يرغب معظم المطورين في تطبيقه. بما أنه يتضمّن كل شيء، سيعمل كل شيء مع بعضه بعضًا. يتبع إطار عمل جانغو أيضًا مبادئ تصميم متناسقة، ويحتوي على توثيق شامل وحديث، وهو سريع وآمن وقابل للتوسّع. تُعَد شيفرة جانغو البرمجية سهلة القراءة والصيانة لأنه يعتمد على لغة بايثون.
</p>

<p>
	تشمل المواقع الشهيرة التي تستخدم إطار عمل جانغو (من صفحته الرئيسية): ديسكاس Disqus وإنستغرام Instagram و Knight Foundation و MacArthur Foundation وموزيلا Mozilla وناشونال جيوغرافيك National Geographic و Open Knowledge Foundation وبنترست Pinterest وأوبن ستاك Open Stack.
</p>

<h3>
	إطار عمل فلاسك باستخدام لغة بايثون
</h3>

<p>
	يُعَد <a href="https://academy.hsoub.com/programming/python/flask/" rel="">فلاسك</a> إطار عمل مصغّر للغة بايثون، وهو إطار عمل بسيط، إلّا أنه يمكنه إنشاء مواقع ويب جادة ومميزة. يحتوي فلاسك على خادم تطوير ومنقح أخطاء، ويتضمن دعمًا لإنشاء قوالب <a href="https://academy.hsoub.com/programming/python/flask/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D9%85%D8%AD%D8%B1%D9%83-%D8%A7%D9%84%D9%82%D9%88%D8%A7%D9%84%D8%A8-jinja-%D8%A7%D9%84%D8%AF%D9%88%D8%A7%D9%84-%D9%88%D8%A7%D9%84%D9%85%D8%B1%D8%B4%D8%AD%D8%A7%D8%AA-r440/" rel="">Jinja2</a> وملفات تعريف الارتباط الآمنة و<a href="https://en.wikipedia.org/wiki/Unit_testing" rel="external nofollow">اختبار الوحدات</a> وإرسال طلبات <a href="https://www.restapitutorial.com/lessons/restfulresourcenaming.html" rel="external nofollow">RESTful</a>، ولديه توثيق جيد ومجتمع نشط.
</p>

<p>
	أصبح فلاسك شائعًا جدًا خاصة للمطورين الذين يحتاجون إلى تقديم خدمات الويب على أنظمة صغيرة محدودة الموارد مثل تشغيل خادم ويب على <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%B1%D8%A7%D8%B3%D8%A8%D9%8A%D8%B1%D9%8A%20%D8%A8%D8%A7%D9%8A/" rel="">راسبيري باي Raspberry Pi</a> وأجهزة التحكم بدون طيار وغير ذلك.
</p>

<h3>
	إطار عمل Express باستخدام Node.js/JavaScript
</h3>

<p>
	يُعَد Express إطار عمل ويب سريع وغير قائم على رأيه ومرن وبسيط لبيئة <a href="https://academy.hsoub.com/programming/javascript/nodejs/" rel="">Node.js</a> التي تمثل بيئةً دون متصفح لتشغيل شيفرة جافا سكريبت، ويوفر مجموعةً قويةً من الميزات لتطبيقات الويب والهاتف المحمول ويوفر طرقًا لاستخدام HTTP وبرامجًا وسيطة مفيدة.
</p>

<p>
	إطار عمل Express شائع الاستخدام، ويرجع ذلك إلى أنه يسهل عملية التهجير migration على مبرمجي الويب باستخدام لغة جافا سكريبت من طرف العميل إلى التطوير من طرف الخادم، ولأنه فعّال في استخدام الموارد، إذ تستخدم بيئة Node الأساسية مهامًا متعددة خفيفة الوزن ضمن خيط Thread بدلًا من إنتاج عمليات منفصلة لكل طلب ويب جديد.
</p>

<p>
	نظرًا لبساطة إطار عمل Express، فإنه لا يدمج كل مكوِّن ترغب في استخدامه، فهو يوفّر مثلًا الوصول إلى قاعدة البيانات والدعم للمستخدمين والجلسات من خلال مكتبات مستقلة. هناك العديد من المكونات المستقلة الممتازة، ولكن يمكن أن يكون في بعض الأحيان من الصعب تحديد أيها الأفضل لغرض معين.
</p>

<p>
	تعتمد العديد من أطر العمل الشائعة من طرف الخادم والشاملة (التي تتضمن أطر عمل من طرف الخادم والعميل) على إطار عمل Express بما في ذلك أطر عمل Feathers و ItemsAPI و KeystoneJS و Kraken و LoopBack و MEAN و Sails، كما تستخدم الكثير من الشركات المرموقة إطار عمل Express بما في ذلك شركات أوبر Uber و Accenture و IBM وغيرها. اطّلع على <a href="https://expressjs.com/en/resources/companies-using-express.html" rel="external nofollow">قائمة هذه الشركات الكاملة</a>.
</p>

<h3>
	إطار عمل دينو Deno باستخدام لغة جافا سكريبت
</h3>

<p>
	دينو هو إطار عمل بسيط وحديث وآمن في وقت التنفيذ خاص بلغتي جافا سكريبت و <a href="https://wiki.hsoub.com/TypeScript" rel="external">TypeScript</a>، وأُنشِئ على محرك Chrome V8 ولغة رست <a href="https://academy.hsoub.com/programming/rust/" rel="">Rust</a>.
</p>

<p>
	إطار عمل دينو مدعوم من طرف مكتبة Tokio التي توفّر وقت تنفيذ غير متزامن قائم على لغة رست وتتيح لإطار عمل دينو خدمة صفحات الويب بصورة أسرع، وتدعم <a href="https://academy.hsoub.com/programming/general/%D9%83%D9%84-%D9%85%D8%A7-%D8%AA%D8%B1%D9%8A%D8%AF-%D9%85%D8%B9%D8%B1%D9%81%D8%AA%D9%87-%D8%B9%D9%86-webassembly-r869/" rel="">WebAssembly</a> داخليًا، والذي يتيح تصريف Compilation الشيفرة الثنائية لاستخدامها من طرف العميل. يهدف دينو إلى سد بعض الثغرات في بيئة Node.js من خلال توفير آلية تحافظ على أمان أفضل.
</p>
<iframe allowfullscreen="" data-controller="core.front.core.autosizeiframe" data-embedauthorid="3889" data-embedcontent="" src="https://academy.hsoub.com/files/32-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-nodejs/?do=embed" style="margin: auto;"></iframe>

<p>
	تشمل ميزات إطار عمل دينو ما يلي:
</p>

<ul>
	<li>
		الأمان افتراضيًا، إذ تقيّد وحدات دينو أذونات الوصول إلى الملفات، أو الشبكة، أو البيئة ما لم يُسمَح بذلك صراحةً.
	</li>
	<li>
		يدعم لغة TypeScript.
	</li>
	<li>
		آلية انتظار من الدرجة الأولى.
	</li>
	<li>
		أداة اختبار ومنسّق شيفرة برمجية مُدمَجَين (<code>deno fmt</code>).
	</li>
	<li>
		التوافق مع المتصفحات (جافا سكريبت): يجب أن تعمل برامج دينو المكتوبة كاملًا بلغة جافا سكريبت باستثناء فضاء الأسماء <code>Deno</code>، أو ميزاتها التي جرى اختبارها، مباشرةً في أيّ متصفح حديث.
	</li>
	<li>
		تجميع السكريبت في ملف جافا سكريبت واحد.
	</li>
</ul>

<p>
	يوفّر إطار عمل دينو طريقةً سهلةً لكنها قويةً لاستخدام لغة جافا سكريبت لكل من البرمجة من طرف العميل وطرف الخادم.
</p>

<h3>
	إطار عمل روبي أون ريلز Ruby on Rails باستخدام لغة روبي Ruby
</h3>

<p>
	<a href="https://wiki.hsoub.com/Rails" rel="external">ريلز</a> -أو كما يشار إليه عادةً باسم روبي أون ريلز- هو إطار عمل ويب مكتوب للغة البرمجة <a href="https://wiki.hsoub.com/Ruby" rel="external">روبي</a>. يتبع ريلز فلسفة تصميم مشابهة جدًا لفلسفة إطار عمل جانغو من خلال توفير آليات معيارية لتوجيه عناوين URL والوصول إلى البيانات من قاعدة بيانات وإنشاء شيفرة HTML من القوالب وتنسيق البيانات بتنسيق JSON أو XML. يشجّع إطار عمل ريلز على استخدام أنماط التصميم، مثل نمط DRY "لا تكرر نفسك Don't Repeat Yourself" -أي كتابة الشيفرة البرمجية مرة واحدة فقط إذا كان ذلك ممكنًا- ونمط MVC وهو نموذج-عرض-متحكِّم Model-View-Controller وغير ذلك.
</p>

<p>
	هناك طبعًا عدة اختلافات بسبب قرارات التصميم وطبيعة لغات البرمجة.
</p>

<p>
	اُستخدِم إطار عمل ريلز للمواقع البارزة مثل Basecamp وغيت هب GitHub و Shopify و Airbnb و Twitch وساوند كلاود SoundCloud وهولو Hulu و Zendesk و Square و Highrise.
</p>

<h3>
	إطار عمل لارافيل Laravel باستخدام لغة PHP
</h3>

<p>
	<a href="https://wiki.hsoub.com/Laravel" rel="external">لارافيل</a> هو إطار عمل لتطبيق ويب يستخدم صياغةً معبرةً وأنيقة، فهو يحاول التخلص من مصاعب التطوير من خلال تسهيل المهام الشائعة المُستخدَمة في غالبية مشاريع الويب مثل:
</p>

<ul>
	<li>
		محرّك توجيه بسيط وسريع.
	</li>
	<li>
		حاوية حقن اعتماديات قوية.
	</li>
	<li>
		نهايات خلفية متعددة لتخزين الجلسة والذاكرة المؤقتة.
	</li>
	<li>
		قاعدة بيانات ORM معبّرة وبديهية.
	</li>
	<li>
		عمليات تهجير حيادية لمخطط قاعدة البيانات.
	</li>
	<li>
		معالجة خلفية قوية.
	</li>
	<li>
		بث الحدث في الوقت الفعلي.
	</li>
</ul>

<p>
	يُعَد إطار عمل لارافيل شاملًا، وهو قوي ويوفر الأدوات اللازمة للتطبيقات الكبيرة والقوية.
</p>

<h3>
	إطار عمل ASP.NET
</h3>

<p>
	<a href="https://academy.hsoub.com/programming/c-sharp/dotnet/" rel="">ASP.NET</a> هو إطار عمل ويب مفتوح المصدر طوّرته مايكروسوفت لبناء تطبيقات وخدمات الويب الحديثة. يمكنك باستخدام إطار عمل ASP.NET إنشاء مواقع ويب تعتمد على لغات HTML و CSS وجافا سكريبت بسرعة وتوسيع نطاقها ليستخدمها ملايين المستخدمين وإضافة إمكانات أكثر تعقيدًا بسهولة مثل واجهات Web <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr>، أو النماذج عبر البيانات، أو الاتصالات في الوقت الفعلي.
</p>

<p>
	أحد العوامل المميزة لإطار عمل ASP.NET هو أنه مبني على وقت التنفيذ المشترك للغات <a href="https://en.wikipedia.org/wiki/Common_Language_Runtime" rel="external nofollow">Common Language Runtime</a> -أو CLR اختصارًا، مما يسمح للمبرمجين بكتابة شيفرة ASP.NET باستخدام أي لغة "‎.NET" مدعومة مثل C#‎ وفيجوال بيسك Visual Basic وغيرها.
</p>

<p>
	يستفيد إطار عمل ASP.NET -مثل العديد من منتجات مايكروسوفت- من أدوات ممتازة ومجانية غالبًا ومجتمع مطورين نشط وتوثيق جيد، وتستخدم العديد من الشركات إطار عمل ASP.NET مثل مايكروسوفت و Xbox.com و Stack Overflow وغيرها الكثير.
</p>

<h3>
	إطار عمل Mojolicious باستخدام لغة بيرل Perl
</h3>

<p>
	<a href="https://mojolicious.org/" rel="external nofollow">Mojolicious</a> هو إطار عمل ويب من الجيل التالي للغة برمجة بيرل Perl.
</p>

<p>
	تعلّم الكثير من الناس لغة بيرل بسبب مكتبتها الرائعة التي تُدعَى <a href="https://metacpan.org/pod/CGI" rel="external nofollow">CGI</a> في الأيام الأولى للويب، وكان الأمر بسيطًا بما يكفي للبدء دون معرفة الكثير عن اللغة ومناسبًا بما يكفي للاستمرار، إذ يطبّق إطار عمل Mojolicious هذه الفكرة باستخدام تقنيات حد النزيف Bleeding Edge، وهي نوع من التقنيات التي تصدر للجميع بالرغم من عدم اكتمال اختبارها ويمكن أن تكون غير موثوقة.
</p>

<p>
	بعض الميزات التي يوفرها إطار عمل Mojolicious هي:
</p>

<ul>
	<li>
		إطار عمل ويب في الوقت الفعلي لتنمية نماذج الملف الواحد الأولية بسهولة إلى تطبيقات ويب MVC جيدة التنظيم.
	</li>
	<li>
		وجهات RESTful، وإضافات، وأوامر، وقوالب Perl-ish، ومفاوضات المحتوى، وإدارة الجلسات وكذلك التحقق من صحة النموذج، واختبار إطار العمل، وخادم الملفات الساكن، واكتشاف CGI/PSGI، ودعم الترميز الموحّد Unicode من الدرجة الأولى.
	</li>
	<li>
		تقديم بروتوكول HTTP الشامل وبروتوكول WebSocket للعميل/الخادم مع دعم بروتوكولات IPv6 و <abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل"><abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل">TLS</abbr></abbr> و SNI و IDNA، ووسيط HTTP/SOCKS5، ومقبس Socket نطاق يونيكس UNIX، وتقنية Comet (الاستطلاع المفتوح Long Polling)، واستمرار النشاط Keep-alive، وتجمّع الاتصالات Connection Pooling، والمهلة الزمنية، وملف تعريف الارتباط Cookie، وتعدد الأجزاء، وطريقة الضغط Gzip.
	</li>
	<li>
		محللات ومولّدات ملفات JSON و HTML و XML مع دعم محدّدات CSS.
	</li>
	<li>
		واجهة برمجة تطبيقات Pure-Perl النقية والقابلة للنقل وكائنية التوجّه دون أيّ سحر خفي.
	</li>
	<li>
		شيفرة برمجية حديثة تعتمد على سنوات من الخبرة، وهي مجانية ومفتوحة المصدر.
	</li>
</ul>

<h3>
	إطار عمل Spring Boot باستخدام لغة جافا
</h3>

<p>
	يُعَد إطار عمل <a href="https://spring.io/projects/spring-boot" rel="external nofollow">Spring Boot</a> أحد المشاريع التي قدمتها منصة Spring، وهو نقطة انطلاق جيدة لتطوير الويب من طرف الخادم باستخدام لغة <a href="https://academy.hsoub.com/tags/%D9%85%D8%AF%D8%AE%D9%84%20%D8%A5%D9%84%D9%89%20%D8%AC%D8%A7%D9%81%D8%A7/" rel="">جافا</a>.
</p>

<p>
	ليس إطار عمل Spring Boot إطار العمل الوحيد الذي يعتمد على لغة جافا، ولكن من السهل استخدامه لإنشاء تطبيقات قائمة بذاتها في مرحلة الإنتاج وتعتمد على منصة Spring، إذ يمكنك تشغيل هذه التطبيقات مباشرةً. كما يُعَد بمثابة وجهة نظر راسخة مستندة إلى منصة Spring ومكتبات الجهات الخارجية، ولكنه يسمح بالبدء بأقل قدر من الاضطراب والإعداد.
</p>

<p>
	يمكن استخدام إطار عمل Spring Boot للمشاكل الصغيرة، ولكن تكمن قوته في بناء تطبيقات واسعة النطاق تستخدم نهج السحابة، ويمكن تشغيل تطبيقات متعددة بالتوازي مع بعضها بعضًا، إذ يوفّر بعضها تفاعل المستخدم ويطبّق البعض الآخر أعمال الواجهة الخلفية مثل الوصول إلى قواعد البيانات أو الخدمات الأخرى. تساعد موازنات الأحمال على ضمان وجود قدرة تعويضية Redundancy وموثوقية أو السماح بمعالجة محددة جغرافيًا لطلبات المستخدم بهدف ضمان الاستجابة.
</p>

<h2>
	الخلاصة
</h2>

<p>
	أظهر هذا المقال أن أطر عمل الويب يمكن أن تسهّل تطوير الشيفرة البرمجية من طرف الخادم وصيانتها، وقدّم نظرةً عامةً عالية المستوى على عدد من أطر العمل الشائعة، وناقش معايير اختيار إطار عمل تطبيق الويب. يجب أن يكون لديك الآن على الأقل فكرة عن كيفية اختيار إطار عمل الويب لتطوير تطبيقك من طرف الخادم. إذا لم يكن الأمر كذلك، فلا داعٍ للقلق، إذ سنقدم لك لاحقًا دروسًا تفصيلية حول إطاري عمل جانغو و Express لمنحك بعض الخبرة العملية مع إطار عمل ويب.
</p>

<p>
	سنغير الاتجاه قليلًا في المقال التالي وسنتعمّق أكثر في مجال أمان الويب.
</p>

<p>
	ترجمة -وبتصرُّف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/Server-side/First_steps/Web_frameworks" rel="external nofollow">Server-side web frameworks</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/devops/servers/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B9%D9%84%D9%89-%D8%AA%D9%81%D8%A7%D8%B9%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-%D9%85%D8%B9-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%84-%D9%81%D9%8A-%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%8A%D8%A8-%D8%AF%D9%8A%D9%86%D8%A7%D9%85%D9%8A%D9%83%D9%8A-r782/" rel="">نظرة على تفاعلات الخادم مع العميل في موقع ويب ديناميكي</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A5%D8%B7%D8%A7%D8%B1-%D8%B9%D9%85%D9%84-framework/" rel="">تعرف على مفهوم إطار العمل Framework وأهميته في البرمجة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/python/flask/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D8%B7%D8%B1-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%81%D9%8A-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%81%D9%84%D8%A7%D8%B3%D9%83-%D9%86%D9%85%D9%88%D8%B0%D8%AC%D8%A7-r1547/" rel="">استخدام أطر العمل في برمجة تطبيقات الويب: فلاسك نموذجا</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">784</guid><pubDate>Tue, 18 Jul 2023 13:07:00 +0000</pubDate></item><item><title>&#x646;&#x638;&#x631;&#x629; &#x639;&#x644;&#x649; &#x62A;&#x641;&#x627;&#x639;&#x644;&#x627;&#x62A; &#x627;&#x644;&#x62E;&#x627;&#x62F;&#x645; &#x645;&#x639; &#x627;&#x644;&#x639;&#x645;&#x64A;&#x644; &#x641;&#x64A; &#x645;&#x648;&#x642;&#x639; &#x648;&#x64A;&#x628; &#x62F;&#x64A;&#x646;&#x627;&#x645;&#x64A;&#x643;&#x64A;</title><link>https://academy.hsoub.com/devops/servers/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B9%D9%84%D9%89-%D8%AA%D9%81%D8%A7%D8%B9%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-%D9%85%D8%B9-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%84-%D9%81%D9%8A-%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%8A%D8%A8-%D8%AF%D9%8A%D9%86%D8%A7%D9%85%D9%8A%D9%83%D9%8A-r782/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_07/----------.png.f76c7a98eab62feab14168770ca98129.png" /></p>
<p>
	تعرّفنا في <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%85%D9%86-%D8%B7%D8%B1%D9%81-%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-r2019/" rel="">المقال السابق</a> من هذه السلسلة <a href="https://academy.hsoub.com/tags/%D8%AA%D8%B9%D9%84%D9%85%20%D8%AA%D8%B7%D9%88%D9%8A%D8%B1%20%D8%A7%D9%84%D9%88%D9%8A%D8%A8/" rel="">تعلم تطوير الويب</a> على الغرض والفوائد المُحتمَلة من البرمجة من طرف الخادم، وسنوضّح الآن تفصيليًا ما يحدث عندما يتلقى الخادم طلبًا ديناميكيًا من المتصفح. تتعامل معظم الشيفرات البرمجية من طرف خادم موقع الويب مع الطلبات والاستجابات بطرق مماثلة، فسيساعدك ذلك على فهم ما عليك تطبيقه عند كتابة شيفرتك البرمجية.
</p>

<ul>
	<li>
		<strong>المتطلبات الأساسية</strong>: المهارات الحاسوبية الأساسية، وفهم أساسي لخادم الويب.
	</li>
	<li>
		<strong>الهدف</strong>: فهم تفاعلات الخادم مع العميل في موقع ويب ديناميكي وخاصةً العمليات التي يجب أن تجريها الشيفرة البرمجية من طرف الخادم.
	</li>
</ul>

<p>
	لن نضع شيفرة برمجية حقيقية في هذه المناقشة لأننا لم نختر بعد إطار عمل ويب لاستخدامه في كتابة شيفرتنا البرمجية، ولكن لا تزال هذه المناقشة وثيقة الصلة بالموضوع، لأنه يجب تقديم السلوك الموصوف من خلال شيفرة برمجية من طرف الخادم بغض النظر عن لغة البرمجة أو إطار عمل الويب الذي تحدده.
</p>

<h2>
	مفهوم خوادم الويب وبروتوكول HTTP
</h2>

<p>
	تتواصل متصفحات الويب مع خوادم الويب باستخدام بروتوكول نقل النص التشعبي HyperText Transfer Protocol -أو اختصارًا HTTP. إذا نقرتَ على رابط في صفحة ويب أو أرسلتَ نموذجًا أو أجريتَ بحثًا، سيرسل المتصفح <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-http-r73" rel="">طلب HTTP</a> إلى الخادم، ويشمل هذا الطلب ما يلي:
</p>

<ul>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%B9%D9%86%D9%88%D8%A7%D9%86-url-%D9%88%D8%A3%D9%86%D9%88%D8%A7%D8%B9%D9%87-r1435/" rel="">عنوان URL</a> الذي يعرِّف الخادم والمورد الهدف مثل ملف HTML، أو نقطة بيانات معينة على الخادم، أو أداة للتشغيل.
	</li>
	<li>
		طريقة تحدد الإجراء المطلوب للحصول على ملف، أو حفظ، أو تحديث بعض البيانات مثلًا. الطرق أو الأفعال المختلفة والإجراءات المرتبطة بها هي ما يلي:
		<ul>
			<li>
				<code>GET</code>: الحصول على مورد معين مثل ملف HTML يحتوي على معلومات حول منتج أو قائمة منتجات.
			</li>
			<li>
				<code>POST</code>: إنشاء مورد جديد مثل إضافة مقال جديد إلى مواقع ويكي Wiki، أو إضافة جهة اتصال جديدة إلى قاعدة بيانات.
			</li>
			<li>
				<code>HEAD</code>: الحصول على معلومات البيانات الوصفية حول مورد معين دون الحصول على المتن كما تفعل الطريقة <code>GET</code>. يمكنك مثلًا استخدام طلب الطريقة <code>HEAD</code> لمعرفة آخر تحديث لأحد الموارد، ثم استخدام طلب الطريقة <code>GET</code> (الأكثر تكلفة) لتنزيل المورد عند تغييره فقط.
			</li>
			<li>
				<code>PUT</code>: تحديث مورد موجود مسبقًا أو إنشاء مورد جديد إن لم يكن موجودًا مسبقًا.
			</li>
			<li>
				<code>DELETE</code>: حذف المورد المحدد.
			</li>
			<li>
				<code>TRACE</code> و <code>OPTIONS</code> و <code>CONNECT</code> و <code>PATCH</code>: تُستخدَم هذه الأفعال لمهام أقل شيوعًا وتقدمًا، لذلك لن نشرحها هنا.
			</li>
		</ul>
	</li>
</ul>

<p>
	يمكن ترميز المعلومات الإضافية مع الطلب مثل بيانات نموذج HTML، إذ يمكن ترميز هذه المعلومات على النحو التالي:
</p>

<ul>
	<li>
		معاملات URL: تطلب الطريقة <code>GET</code> تشفير البيانات في عنوان URL المُرسَل إلى الخادم من خلال إضافة أزواج الاسم/القيمة في نهايته مثل العنوان <code><a href="http://example.com?name=Fred&amp;age=11" ipsnoembed="false" rel="external nofollow">http://example.com?name=Fred&amp;age=11</a></code>. لديك دائمًا علامة استفهام (<code>?</code>) تفصل بقية عنوان URL عن معاملات URL، وإشارة مساواة (<code>=</code>) تفصل كل اسم عن القيمة المرتبطة به، وعلامة العطف (<code>&amp;</code>) التي تفصل بين الأزواج. تُعَد معاملات URL غير آمنة بطبيعتها، إذ يمكن للمستخدمين تغييرها ثم إعادة إرسالها، ولذلك لا تُستخدَم معاملات عنوان URL أو طلبات <code>GET</code> مع الطلبات التي تحدّث البيانات على الخادم.
	</li>
	<li>
		بيانات <code>POST</code>: تضيف طلبات <code>POST</code> مواردًا جديدة، وتُشفَّر بياناتها ضمن متن الطلب.
	</li>
	<li>
		ملفات تعريف الارتباط Cookies من طرف العميل: تحتوي ملفات تعريف الارتباط على بيانات جلسة العميل بما في ذلك المفاتيح التي يمكن للخادم استخدامها لتحديد حالة تسجيل الدخول والأذونات أو الوصول إلى الموارد.
	</li>
</ul>

<p>
	تنتظر خوادم الويب رسائل طلب العميل وتعالجها عند وصولها، وترد على متصفح الويب برسالة استجابة HTTP، إذ تحتوي الاستجابة على رمز حالة استجابة HTTP الذي يشير إلى نجاح الطلب من عدمه مثل "200‎ OK" للنجاح و "‎404 Not Found" إذا تعذر العثور على المورد و "‎403 Forbidden" إذا كان المستخدم غير مصرَّح له برؤية الموارد وغير ذلك. يمكن أن يحتوي متن الاستجابة الناجحة لطلب "GET" على المورد المطلوب.
</p>

<p>
	يعرض متصفح الويب <a href="https://academy.hsoub.com/programming/html/%D8%AA%D8%B9%D9%84%D9%85-%D9%84%D8%BA%D8%A9-html-r1702/" rel="">صفحة HTML</a> المُعادة، ويمكن أن يكتشف المتصفح روابطًا إلى موارد أخرى بمثابة جزء من المعالجة، إذ تشير صفحة HTML عادةً إلى صفحات جافا سكريبت و CSS مثلًا، وسيرسِل طلبات HTTP منفصلة لتنزيل هذه الملفات.
</p>

<p>
	تستخدم كل من مواقع الويب الساكنة والديناميكية التي سنناقشها لاحقًا بروتوكول أو أنماط الاتصال نفسها تمامًا.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة تطوير تطبيقات الويب باستخدام لغة PHP
		</p>

		<p class="banner-subtitle">
			احترف تطوير النظم الخلفية والووردبريس وتطبيقات الويب من الألف إلى الياء دون الحاجة لخبرة برمجية مسبقة
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/php-web-application-development/" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<img alt="دورة تطوير تطبيقات الويب باستخدام لغة PHP" src="https://academy.hsoub.com/learn/assets/images/courses/php-web-application-development.png">
	</div>
</div>

<h2>
	مثال عن طلب/استجابة GET
</h2>

<p>
	يمكنك تقديم طلب GET بسيط من خلال النقر على رابط أو البحث في موقع (مثل الصفحة الرئيسية لمحرّك البحث)، فمثلًا سيبدو طلب HTTP المُرسَل عند إجراء بحث على موقع MDN للمصطلح "client-server overview" إلى حد كبير مثل النص الذي سنوضّحه لاحقًا (لن يكون متطابقًا لاعتماد أجزاء من الرسالة على متصفحك أو إعداداتك).
</p>

<p>
	<strong>ملاحظة</strong>: يُحدَّد تنسيق رسائل HTTP في معيار الويب RFC9110. لست بحاجة إلى معرفة هذا المستوى من التفاصيل، ولكنك تعرف الآن على الأقل من أين أتى كل ذلك.
</p>

<h3>
	الطلب request
</h3>

<p>
	يحتوي كل سطر من الطلب على معلومات عنه. يُطلَق على الجزء الأول اسم الترويسة header، ويحتوي على معلومات مفيدة حول الطلب بالطريقة نفسها التي تحتوي بها <a href="https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML/The_head_metadata_in_HTML" rel="external nofollow">ترويسة HTML</a> على معلومات مفيدة حول مستند HTML، ولكن ليس المحتوى الفعلي نفسه الموجود في المتن.
</p>

<pre class="ipsCode">GET /en-US/search?q=client+server+overview&amp;topic=apps&amp;topic=html&amp;topic=css&amp;topic=js&amp;topic=api&amp;topic=webdev HTTP/1.1
Host: developer.mozilla.org
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: https://developer.mozilla.org/en-US/
Accept-Encoding: gzip, deflate, sdch, br
Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7
Accept-Language: en-US,en;q=0.8,es;q=0.6
Cookie: sessionid=6ynxs23n521lu21b1t136rhbv7ezngie; csrftoken=zIPUJsAZv6pcgCBJSCj1zU6pQZbfMUAT; dwf_section_edit=False; dwf_sg_task_completion=False; _gat=1; _ga=GA1.2.1688886003.1471911953; ffo=true
</pre>

<p>
	يحتوي السطران الأول والثاني على معظم المعلومات التي تحدثنا عنها سابقًا وهي:
</p>

<ul>
	<li>
		نوع الطلب (<code>GET</code>).
	</li>
	<li>
		عنوان URL للمورد الهدف (<code>‎/en-US/search</code>).
	</li>
	<li>
		معاملات عنوان URL:
	</li>
</ul>

<pre class="ipsCode">q=client%2Bserver%2Boverview&amp;topic=apps&amp;topic=html&amp;topic=css&amp;topic=js&amp;topic=api&amp;topic=webdev
</pre>

<ul>
	<li>
		موقع الويب الهدف أو المضيف (developer.mozilla.org).
	</li>
	<li>
		تتضمن نهاية السطر الأول سلسلة نصية قصيرة تحدد إصدار البروتوكول المُحدَّد (<code>HTTP/1.1</code>).
	</li>
</ul>

<p>
	يحتوي السطر الأخير على معلومات حول ملفات تعريف الارتباط من طرف العميل، إذ يمكنك أن ترى في هذه الحالة أن ملف تعريف الارتباط يتضمن معرّفًا لإدارة الجلسات:
</p>

<pre class="ipsCode">sessionid=6ynxs23n521lu21b1t136rhbv7ezngie; …‎
</pre>

<p>
	تحتوي الأسطر المتبقية على معلومات حول المتصفح المُستخدَم ونوع الاستجابات التي يمكنه التعامل معها، إذ يمكنك أن ترى هنا مثلًا ما يلي:
</p>

<ul>
	<li>
		المتصفح (<code>User-Agent</code>) هو موزيلا فايرفوكس (<code>Mozilla/5.0</code>).
	</li>
	<li>
		يمكن للمتصفح قبول معلومات Gzip المضغوطة (<code>Accept-Encoding: gzip</code>).
	</li>
	<li>
		يمكنه قبول مجموعة محدَّدة من المحارف (<code>Accept-Charset: ISO-8859-1,UTF-8;q=0.7,*;q=0.7</code>) واللغات (<code>Accept-Language: en-US,en;q=0.8,es;q=0.6</code>).
	</li>
	<li>
		يشير السطر <code>Referer</code> إلى عنوان صفحة الويب التي تحتوي على رابط هذا المورد (مثل أصل الطلب <code><a href="https://developer.mozilla.org/en-US/%E2%80%8E" ipsnoembed="false" rel="external nofollow">https://developer.mozilla.org/en-US/‎</a></code>).
	</li>
</ul>

<p>
	يمكن أن تحتوي طلبات HTTP على متن، ولكنه فارغ في هذه الحالة.
</p>

<h3>
	الاستجابة
</h3>

<p>
	سنعرض لاحقًا الجزء الأول من الاستجابة لهذا الطلب، إذ تحتوي الترويسة على معلومات كما يلي:
</p>

<ul>
	<li>
		يتضمن السطر الأول رمز الاستجابة "200‎ OK‎" الذي يمثل نجاح الطلب.
	</li>
	<li>
		يمكننا أن نرى أن الاستجابة بتنسيق "text/html" (نوع المحتوى <code>Content-Type</code>).
	</li>
	<li>
		يمكننا أن نرى استخدام مجموعة محارف UTF-8 بالشكل: <code>Content-Type: text/html; charset=utf-8</code>.
	</li>
	<li>
		تخبرنا الترويسة عن حجمها (<code>Content-Length: 41823</code>).
	</li>
</ul>

<p>
	نرى في نهاية الرسالة محتوى المتن الذي يحتوي على شيفرة HTML الفعلية التي يعيدها الطلب.
</p>

<pre class="ipsCode">HTTP/1.1 200 OK
Server: Apache
X-Backend-Server: developer1.webapp.scl3.mozilla.com
Vary: Accept, Cookie, Accept-Encoding
Content-Type: text/html; charset=utf-8
Date: Wed, 07 Sep 2016 00:11:31 GMT
Keep-Alive: timeout=5, max=999
Connection: Keep-Alive
X-Frame-Options: DENY
Allow: GET
X-Cache-Info: caching
Content-Length: 41823

&lt;!DOCTYPE html&gt;
&lt;html lang="en-US" dir="ltr" class="redesign no-js"  data-ffo-opensanslight=false data-ffo-opensans=false &gt;
&lt;head prefix="og: http://ogp.me/ns#"&gt;
  &lt;meta charset="utf-8"&gt;
  &lt;meta http-equiv="X-UA-Compatible" content="IE=Edge"&gt;
  &lt;script&gt;(function(d) { d.className = d.className.replace(/\bno-js/, ''); })(document.documentElement);&lt;/script&gt;
  …
</pre>

<p>
	يتضمن الجزء المتبقي من ترويسة الاستجابة معلومات حول الاستجابة (مثل وقت إنشائها) والخادم وكيف يتوقع أن يتعامل المتصفح مع الصفحة (مثل السطر <code>X-Frame-Options: DENY</code> الذي يخبر المتصفح بعدم السماح لتلك الصفحة بتضمينها ضمن العنصر <code>&lt;iframe&gt;</code> في موقع آخر).
</p>

<h2>
	مثال عن طلب/استجابة POST
</h2>

<p>
	يمكن إجراء الطريقة "POST" الخاصة ببروتوكول HTTP عند إرسال نموذج يحتوي على معلومات لحفظها على الخادم.
</p>

<h3>
	الطلب
</h3>

<p>
	يوضّح النص التالي طلب HTTP، الذي يُجرَى عندما يرسل المستخدم تفاصيل جديدة للملف الشخصي على هذا الموقع. يماثل تنسيق الطلب تقريبًا طلب "GET" الموضح سابقًا، بالرغم من أن السطر الأول يعرِّف هذا الطلب على أنه طلب "POST".
</p>

<pre class="ipsCode">POST /en-US/profiles/hamishwillee/edit HTTP/1.1
Host: developer.mozilla.org
Connection: keep-alive
Content-Length: 432
Pragma: no-cache
Cache-Control: no-cache
Origin: https://developer.mozilla.org
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: https://developer.mozilla.org/en-US/profiles/hamishwillee/edit
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.8,es;q=0.6
Cookie: sessionid=6ynxs23n521lu21b1t136rhbv7ezngie; _gat=1; csrftoken=zIPUJsAZv6pcgCBJSCj1zU6pQZbfMUAT; dwf_section_edit=False; dwf_sg_task_completion=False; _ga=GA1.2.1688886003.1471911953; ffo=true

csrfmiddlewaretoken=zIPUJsAZv6pcgCBJSCj1zU6pQZbfMUAT&amp;user-username=hamishwillee&amp;user-fullname=Hamish+Willee&amp;user-title=&amp;user-organization=&amp;user-location=Australia&amp;user-locale=en-US&amp;user-timezone=Australia%2FMelbourne&amp;user-irc_nickname=&amp;user-interests=&amp;user-expertise=&amp;user-twitter_url=&amp;user-stackoverflow_url=&amp;user-linkedin_url=&amp;user-mozillians_url=&amp;user-facebook_url=
</pre>

<p>
	لكن الاختلاف الرئيسي بينهما هو عدم احتواء عنوان URL على أية معاملات، وتُرمَّز المعلومات من النموذج في متن الطلب، فمثلًا يُضبَط الاسم الكامل للمستخدم الجديد باستخدام:
</p>

<pre class="ipsCode">‎&amp;user-fullname=Hamish+Willee
</pre>

<h3>
	الاستجابة response
</h3>

<p>
	يوضّح النص التالي استجابة الطلب، إذ يخبر رمز الحالة "302‎ Found" المتصفح بنجاح الإرسال، وأنه يجب عليه إصدار طلب HTTP ثانٍ لتحميل الصفحة المُحدَّدة في الحقل <code>Location</code>. تكون معلومات الاستجابة مشابهة للمعلومات الخاصة بالاستجابة على طلب "GET".
</p>

<pre class="ipsCode">HTTP/1.1 302 FOUND
Server: Apache
X-Backend-Server: developer3.webapp.scl3.mozilla.com
Vary: Cookie
Vary: Accept-Encoding
Content-Type: text/html; charset=utf-8
Date: Wed, 07 Sep 2016 00:38:13 GMT
Location: https://developer.mozilla.org/en-US/profiles/hamishwillee
Keep-Alive: timeout=5, max=1000
Connection: Keep-Alive
X-Frame-Options: DENY
X-Cache-Info: not cacheable; request wasn't a GET or HEAD
Content-Length: 0
</pre>

<p>
	<strong>ملاحظة</strong>: اُلتقِطت استجابات وطلبات HTTP الموضَّحة في هذه الأمثلة باستخدام تطبيق <a href="https://www.telerik.com/download/fiddler" rel="external nofollow">Fiddler</a>، ولكن يمكنك الحصول على معلومات مماثلة باستخدام أدوات التعرّف على متصفحات الويب Web Sniffers (مثل الأداة <a href="https://websniffer.com/" rel="external nofollow">Websniffer</a>)، أو أدوات تحليل الحزم مثل <a href="https://www.wireshark.org/" rel="external nofollow">Wireshark</a> التي يمكنك تجربتها بنفسك. استخدم أيًا من هذه الأدوات، ثم تنقّل عبر الموقع وعدّل معلومات الملف الشخصي لمشاهدة الطلبات والاستجابات المختلفة. تحتوي معظم المتصفحات الحديثة على أدوات مراقبة طلبات الشبكة مثل <a href="https://firefox-source-docs.mozilla.org/devtools-user/network_monitor/index.html" rel="external nofollow">أداة مراقبة الشبكة Network Monitor</a> في فايرفوكس.
</p>

<h2>
	المواقع الساكنة
</h2>

<p>
	الموقع الساكن Static Site هو الموقع الذي يعيد المحتوى الثابت نفسه من الخادم كلما طُلِب مورد معين. لذلك، إذا كانت لديك صفحةٌ عن منتجٍ ما في الوجهة "‎/static/myproduct1.html" مثلًا، ستُعاد هذه الصفحة نفسها إلى جميع المستخدمين. إذا أضفت منتجًا مشابهًا آخر إلى موقعك، فيجب إضافة صفحة أخرى (مثل الصفحة "myproduct2.html") وهكذا. يمكن لذلك أن يفقد فعاليته عندما يكون لديك آلاف صفحات المنتجات، إذ ستكِّرر الكثير من الشيفرة البرمجية عبر كل صفحة (قالب الصفحة الأساسي وبنيتها وغير ذلك)، وإذا أردت تغيير أي شيء يتعلق ببنية الصفحة مثل إضافة قسم جديد للمنتجات ذات الصلة، فيجب تغيير كل صفحة على حدة.
</p>

<p>
	<strong>ملاحظة</strong>: تُعَد المواقع الساكنة ممتازة عندما يكون لديك عددٌ قليلٌ من الصفحات وتريد إرسال المحتوى نفسه إلى جميع المستخدمين، ولكن يمكن أن يكون لها تكلفة صيانة كبيرة عندما يصبح عدد الصفحات أكبر.
</p>

<p>
	لنلخص كيفية عمل ذلك من خلال الاطلاع مرةً أخرى على مخطط معمارية الموقع الساكن الذي تحدثنا عنه في <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%85%D9%86-%D8%B7%D8%B1%D9%81-%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-r2019/" rel="">المقال السابق</a>.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="130199" href="https://academy.hsoub.com/uploads/monthly_2023_07/01_basic_static_app_server.png.fb1bc834b3a5c46ab3ccba205597c4d5.png" rel=""><img alt="01_basic_static_app_server.png" class="ipsImage ipsImage_thumbnailed" data-fileid="130199" data-unique="aqqa92xt9" src="https://academy.hsoub.com/uploads/monthly_2023_07/01_basic_static_app_server.thumb.png.239e5f38b747dcef4d1932e068a8dd62.png"> </a>
</p>

<p>
	إذا أراد المستخدم الانتقال إلى صفحةٍ ما، فسيرسل المتصفح طلب HTTP من النوع "GET" الذي يحدّد عنوان URL لصفحة HTML. يسترجع الخادم المستند المطلوب من نظام ملفاته ويعيد استجابة HTTP تحتوي على المستند و<a href="https://academy.hsoub.com/programming/general/%D8%B1%D9%85%D9%88%D8%B2-%D8%A7%D9%84%D8%A5%D8%AC%D8%A7%D8%A8%D8%A9-%D9%81%D9%8A-http-r75/" rel="">رمز حالة استجابة HTTP</a> الذي يشير إلى النجاح "200‎ OK". يمكن أن يعيد الخادم رمز حالة مختلف مثل "‎404 Not Found" إذا لم يكن الملف موجودًا على الخادم أو الرمز "301‎ Moved Permanently" إذا كان الملف موجودًا ولكن أُعيد توجيهه إلى موقع مختلف.
</p>

<p>
	يحتاج خادم الموقع الساكن فقط إلى معالجة طلبات GET، لأن الخادم لا يخزّن أيّ بيانات قابلة للتعديل، ولا يغيّر استجاباته بناءً على بيانات طلب HTTP (مثل معاملات URL أو ملفات تعريف الارتباط)، لكن يُعَد فهم كيفية عمل المواقع الساكنة مفيدًا عند تعلم البرمجة من طرف الخادم، لأن المواقع الديناميكية تتعامل مع طلبات الملفات الساكنة (ملفات CSS وجافا سكريبت والصور الساكنة وغير ذلك) بالطريقة نفسها تمامًا.
</p>

<h2>
	المواقع الديناميكية
</h2>

<p>
	الموقع الديناميكي Dynamic Site هو الموقع الذي يمكنه إنشاء المحتوى وإعادته بناءً على عنوان URL والبيانات المحدَّدة للطلب بدلًا من إعادة الملف الثابت نفسه لعنوان URL معين. يخزّن الخادم في مثال موقع المنتجات بيانات المنتج في قاعدة بيانات بدلًا من ملفات HTML الفردية، ويحدّد معرّف المنتج ويجلب البيانات من قاعدة البيانات، ثم يبني صفحة HTML للاستجابة من خلال إدراج البيانات في <a href="https://academy.hsoub.com/programming/php/wordpress/%D9%83%D9%8A%D9%81-%D8%AA%D8%AD%D9%88%D9%91%D9%90%D9%84-%D9%82%D8%A7%D9%84%D8%A8-html-%D8%B3%D8%A7%D9%83%D9%90%D9%86-%D8%A5%D9%84%D9%89-%D9%82%D8%A7%D9%84%D8%A8-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D9%85%D8%AA%D8%AC%D8%A7%D9%88%D8%A8-%D8%AA%D8%AE%D8%B5%D9%8A%D8%B5-%D8%A7%D9%84%D9%85%D9%88%D9%82%D8%B9-r592/" rel="">قالب HTML</a> عند تلقي طلب HTTP من النوع "GET" لمنتجٍ ما. للموقع الديناميكي مزايا كبيرة يتفوق بها على الموقع الساكن، وهي:
</p>

<ul>
	<li>
		يسمح استخدام قاعدة البيانات بتخزين معلومات المنتج بكفاءة بطريقة قابلة للتوسّع والتعديل والبحث بسهولة.
	</li>
	<li>
		يسهّل استخدام قوالب HTML تغيير بنية ملف HTML، لأنه يُطبَّق في مكان واحد فقط وفي قالب واحد، وليس عبر آلاف الصفحات الساكنة المُحتمَلة.
	</li>
</ul>

<h3>
	تحليل الطلب الديناميكي
</h3>

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

<p>
	يوضح الشكل التالي العناصر الرئيسية لموقع مدرب الفريق مع تسميات مرقَّمة لتسلسل العمليات عندما يصل المدرب إلى قائمة "أفضل فريق". أجزاء الموقع التي تجعله ديناميكيًا هي تطبيق الويب Web Application (وهو الطريقة التي سنشير بها إلى الشيفرة البرمجية من طرف الخادم الذي يعالج طلبات HTTP ويعيد استجابات HTTP)، وقاعدة البيانات التي تحتوي على معلومات حول اللاعبين والفرق والمدربين وعلاقاتهم، وقوالب HTML.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="130198" href="https://academy.hsoub.com/uploads/monthly_2023_07/02_web_application_with_html_and_steps.png.3695616758922b38536f5962f06da83a.png" rel=""><img alt="02_web_application_with_html_and_steps.png" class="ipsImage ipsImage_thumbnailed" data-fileid="130198" data-unique="ipvxf6ash" src="https://academy.hsoub.com/uploads/monthly_2023_07/02_web_application_with_html_and_steps.thumb.png.55ae9e2ee6adc4395932029631e831a8.png"> </a>
</p>

<p>
	يكون تسلسل العمليات كما يلي بعد أن يرسل المدرب النموذج مع اسم الفريق وعدد اللاعبين:
</p>

<ol>
	<li>
		ينشئ متصفح الويب طلب HTTP من النوع "GET" للخادم باستخدام عنوان URL الأساسي للمورد (<code>‎/best</code>) ويرمّز الفريق ورقم اللاعب إما مثل معاملات URL (مثل <code>‎/best?team=my_team_name&amp;show=11</code>) أو مثل جزء من عنوان URL للنمط (مثل <code>/best/my_team_name/11/</code>). يُستخدَم طلب "GET" لأن الطلب يجلب البيانات فقط ولا يعدّلها.
	</li>
	<li>
		يكتشف خادم الويب أن الطلب ديناميكي ويوجّهه إلى تطبيق الويب للمعالجة. يحدّد خادم الويب كيفية التعامل مع عناوين URL المختلفة بناءً على قواعد مطابقة الأنماط المُعرّفة في ضبطه.
	</li>
	<li>
		يحدد تطبيق الويب أن القصد من الطلب هو الحصول على "قائمة أفضل فريق" استنادًا إلى عنوان URL (وهو <code>/best/</code>) ويكتشف اسم الفريق المطلوب وعدد اللاعبين من عنوان URL. يحصل تطبيق الويب بعد ذلك على المعلومات المطلوبة من قاعدة البيانات باستخدام معاملات داخلية إضافية لتحديد اللاعبين الأفضل، ويمكن أن يحصل على هوية المدرب الذي سجّل الدخول من ملف تعريف الارتباط من طرف العميل.
	</li>
	<li>
		ينشئ تطبيق الويب صفحة HTML ديناميكيًا من خلال وضع البيانات (من قاعدة البيانات) في عناصر بديلة ضمن قالب HTML.
	</li>
	<li>
		يعيد تطبيق الويب ملف HTML المُنشَأ إلى متصفح الويب (عبر خادم الويب) مع رمز حالة HTTP التي تمثل النجاح وهي 200. إذا كان هناك أي شيء يمنع إعادة ملف HTML، فسيعيد تطبيق الويب رمزًا آخر مثل الرمز "404" للإشارة إلى أن الفريق غير موجود.
	</li>
	<li>
		يبدأ متصفح الويب بعد ذلك بمعالجة ملف HTML المُعاد، وإرسال طلبات منفصلة للحصول على أيّ ملفات CSS أو جافا سكريبت أخرى يشير إليها (راجع الخطوة 7).
	</li>
	<li>
		يحمّل خادم الويب الملفات الساكنة من نظام الملفات ويعيدها إلى المتصفح مباشرةً. تعتمد المعالجة الصحيحة للملفات على قواعد الإعداد ومطابقة نمط عنوان URL.
	</li>
</ol>

<p>
	تُعالَج عملية تحديث سجل في قاعدة البيانات بصورة مشابهة باستثناء أنه يجب ترميز طلب HTTP من المتصفح بوصفه طلب "POST" مثل أيّ تحديث لقاعدة البيانات.
</p>

<h3>
	تنفيذ أعمال أخرى
</h3>

<p>
	تتمثل مهمة تطبيق الويب في استقبال طلبات HTTP وإعادة استجابات HTTP. يكون التفاعل مع قاعدة بيانات للحصول على المعلومات أو تحديثها مهامًا شائعة جدًا، ولكن يمكن أن تطبّق الشيفرة البرمجية أشياءً أخرى في الوقت نفسه أو يمكن ألّا تتفاعل مع قاعدة بيانات إطلاقًا.
</p>

<p>
	من الأمثلة الجيدة على المهمة الإضافية التي يمكن أن يؤدّيها تطبيق الويب إرسال بريد إلكتروني إلى المستخدمين لتأكيد تسجيلهم في الموقع، كما يمكن أن يطبّق الموقع عمليات التسجيل، أو عمليات أخرى.
</p>

<h3>
	إعادة شيء آخر غير ملف HTML
</h3>

<p>
	لا يتعين على شيفرة موقع الويب البرمجية من طرف الخادم إعادة أجزاء أو ملفات HTML في الاستجابة، بل يمكنها بدلًا من ذلك إنشاء وإعادة أنواع أخرى من الملفات ديناميكيًا (نصوص وملفات PDF و CSV وغيرها) أو حتى بيانات (<a href="https://academy.hsoub.com/programming/javascript/%D8%AA%D8%B9%D9%84%D9%85-json-r604/" rel="">JSON</a> و XML وغير ذلك).
</p>

<p>
	كانت فكرة إعادة البيانات إلى متصفح الويب ليتمكّن من تحديث محتواه <a href="https://academy.hsoub.com/programming/javascript/jquery/%D9%85%D9%8F%D9%82%D8%AF%D9%91%D9%85%D8%A9-%D8%A5%D9%84%D9%89-ajax-%D9%88%D8%A7%D9%84%D9%83%D8%A7%D8%A6%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D9%8F%D8%A4%D8%AC%D9%91%D9%84%D8%A9-deferred-objects-%D8%B9%D9%84%D9%89-jquery-r64/" rel="">AJAX</a> ديناميكيًا موجودةٌ منذ فترة طويلة، ولكن أصبحت "التطبيقات أحادية الصفحة Single-page Apps" شائعةً في الآونة الأخيرة، إذ يُكتَب كامل موقع الويب باستخدام ملف HTML واحد يُحدَّث ديناميكيًا عند الحاجة. تدفع مواقع الويب المُنشَأة باستخدام هذا الأسلوب من التطبيقات الكثير من التكلفة الحوسبية من الخادم إلى متصفح الويب، ويمكن أن تؤدي إلى ظهور مواقع الويب التي يبدو أنها تتصرف كثيرًا مثل التطبيقات الأصيلة native (سريعة الاستجابة وما إلى ذلك).
</p>

<h2>
	تبسيط أطر عمل الويب لبرمجة الويب من طرف الخادم
</h2>

<p>
	تسهّل أطر عمل الويب من طرف الخادم كثيرًا كتابة الشيفرة البرمجية للتعامل مع العمليات التي وضّحناها سابقًا، وتتمثل إحدى أهم العمليات التي تطبّقها أطر عمل الويب في توفير آليات بسيطة لربط عناوين URL لمصادر أو صفحات مختلفة مع دوال معالجة محددة، مما يسهّل الاحتفاظ بالشيفرة البرمجية المرتبطة بكل نوعٍ من الموارد بصورة منفصلة، كما توجد فوائد من حيث الصيانة، إذ يمكنك تغيير عنوان URL المستخدَم لتقديم ميزة معينة في مكانٍ واحد دون الحاجة إلى تغيير دالة المعالجة.
</p>

<p>
	افترض مثلًا الشيفرة البرمجية التالية باستخدام إطار عمل <a href="https://academy.hsoub.com/programming/python/django/" rel="">جانغو Django</a> (باستخدام لغة بايثون Python)، الذي يربط نمطي عنوان URL مع دالتي عرض. يضمن النمط الأول تمرير طلب HTTP مع عنوان URL للمورد <code>‎/best</code> إلى الدالة <code>index()‎</code> في الوحدة <code>views</code>. بينما سيُمرَّر الطلب الذي يحتوي على النمط <code>‎/best/junior</code> إلى دالة العرض <code>junior()‎</code>.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5075_8" style=""><span class="com"># الملف: best/urls.py</span><span class="pln">
</span><span class="com">#</span><span class="pln">

</span><span class="kwd">from</span><span class="pln"> django</span><span class="pun">.</span><span class="pln">conf</span><span class="pun">.</span><span class="pln">urls </span><span class="kwd">import</span><span class="pln"> url

</span><span class="kwd">from</span><span class="pln"> </span><span class="pun">.</span><span class="pln"> </span><span class="kwd">import</span><span class="pln"> views

urlpatterns </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="pln">
    </span><span class="com"># مثال: /best/</span><span class="pln">
    url</span><span class="pun">(</span><span class="pln">r</span><span class="str">'^$'</span><span class="pun">,</span><span class="pln"> views</span><span class="pun">.</span><span class="pln">index</span><span class="pun">),</span><span class="pln">
    </span><span class="com"># مثال: /best/junior/</span><span class="pln">
    url</span><span class="pun">(</span><span class="pln">r</span><span class="str">'^junior/$'</span><span class="pun">,</span><span class="pln"> views</span><span class="pun">.</span><span class="pln">junior</span><span class="pun">),</span><span class="pln">
</span><span class="pun">]</span></pre>

<p>
	<strong>ملاحظة</strong>: يمكن أن تبدو المعاملات الأولى في دوال <code>url()‎</code> غريبةً بعض الشيء (مثل المعامل <code>r'^junior/$'‎</code>) لأنها تستخدم تقنية مطابقة النمط التي تسمى <a href="https://academy.hsoub.com/programming/general/%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D8%A8%D9%8A%D8%B1-%D8%A7%D9%84%D9%86%D9%85%D8%B7%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-r1374/" rel="">التعابير النمطية Regular Expressions</a> -أو RegEx أو RE اختصارًا. لست بحاجة إلى معرفة كيفية عمل التعابير النمطية حاليًا، ولكن يجب أن تعرف أنها تسمح بمطابقة الأنماط في عنوان URL (عوضًا عن القيم الثابتة) وتُستخدَم بوصفها معاملات في دوال العرض. يمكن أن يقول التعبير النمطي RegEx البسيط: "التطابق مع حرف كبير واحد متبوع بما بين 4 إلى 7 أحرف صغيرة" مثلًا.
</p>

<p>
	يسهّل إطار عمل الويب على دالة العرض إحضار المعلومات من قاعدة البيانات. تُعرّف بنية بياناتنا في النماذج وهي أصناف بايثون تعرّف الحقول المراد تخزينها في قاعدة البيانات الأساسية. إذا كان لدينا نموذج يسمى "Team" مع الحقل "team_type"، فيمكننا استخدام صيغة استعلام بسيطة لاستعادة جميع الفرق التي لديها نوع معين.
</p>

<p>
	يحصل المثال التالي على قائمة بجميع الفرق التي يكون لديها الحقل <code>team_type</code> له القيمة "junior" تمامًا (حساسة لحالة الأحرف). لاحظ تنسيق اسم الحقل <code>team_type</code> متبوع بشرطة سفلية مزدوجة ثم نوع التطابق المراد استخدامه وهو <code>exact</code> في هذه الحالة. هناك العديد من أنواع التطابقات الأخرى ويمكننا ترتيبها ضمن سلسلة تعاقبية والتحكم في ترتيبها وعدد النتائج المُعادة.
</p>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_5075_6" style=""><span class="com">#best/views.py</span><span class="pln">

</span><span class="kwd">from</span><span class="pln"> django</span><span class="pun">.</span><span class="pln">shortcuts </span><span class="kwd">import</span><span class="pln"> render

</span><span class="kwd">from</span><span class="pln"> </span><span class="pun">.</span><span class="pln">models </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">Team</span><span class="pln">

</span><span class="kwd">def</span><span class="pln"> junior</span><span class="pun">(</span><span class="pln">request</span><span class="pun">):</span><span class="pln">
    list_teams </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Team</span><span class="pun">.</span><span class="pln">objects</span><span class="pun">.</span><span class="pln">filter</span><span class="pun">(</span><span class="pln">team_type__exact</span><span class="pun">=</span><span class="str">"junior"</span><span class="pun">)</span><span class="pln">
    context </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="str">'list'</span><span class="pun">:</span><span class="pln"> list_teams</span><span class="pun">}</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> render</span><span class="pun">(</span><span class="pln">request</span><span class="pun">,</span><span class="pln"> </span><span class="str">'best/index.html'</span><span class="pun">,</span><span class="pln"> context</span><span class="pun">)</span></pre>

<p>
	تستدعي الدالة <code>junior()‎</code> الدالة <code>render()‎</code> بعد أن تحصل على قائمة الفرق الناشئة، وتمرّر كائن <code>HttpRequest</code> الأصلي وقالب HTML وكائن السياق الذي يعرّف المعلومات التي ستُضمَّن في القالب. تُعَد الدالة <code>render()‎</code> دالةً ملائمةً تنشئ ملف HTML باستخدام سياق وقالب HTML وتعيده ضمن كائن <code>HttpResponse</code>.
</p>

<p>
	يمكن أن تساعدك أطر عمل الويب في كثيرٍ من المهام الأخرى، وسنناقش الكثير من الفوائد وبعض خيارات أطر عمل الويب الشائعة في المقال القادم.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة تطوير تطبيقات الويب باستخدام لغة PHP
		</p>

		<p class="banner-subtitle">
			احترف تطوير النظم الخلفية والووردبريس وتطبيقات الويب من الألف إلى الياء دون الحاجة لخبرة برمجية مسبقة
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/php-web-application-development/" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<img alt="دورة تطوير تطبيقات الويب باستخدام لغة PHP" src="https://academy.hsoub.com/learn/assets/images/courses/php-web-application-development.png">
	</div>
</div>

<h2>
	الخلاصة
</h2>

<p>
	يجب أن يكون لديك الآن فهمٌ جيدٌ للعمليات التي يجب أن تطبّقها الشيفرة البرمجية من طرف الخادم، ومعرفة بعض الطرق التي يمكن من خلالها لإطار عمل الويب من طرف الخادم تسهيل ذلك. سنساعدك في المقال التالي في اختيار أفضل إطار عمل ويب لموقعك الأول.
</p>

<p>
	ترجمة -وبتصرُّف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/Server-side/First_steps/Client-Server_overview" rel="external nofollow">Client-Server Overview</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%85%D9%86-%D8%B7%D8%B1%D9%81-%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-r2019/" rel="">مدخل إلى برمجة مواقع الويب من طرف الخادم</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D8%AF%D9%84%D9%8A%D9%84-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D8%A7%D8%AF%D9%85-%D9%88%D9%8A%D8%A8-%D9%85%D8%AD%D9%84%D9%8A-%D8%AE%D8%B7%D9%88%D8%A9-%D8%A8%D8%AE%D8%B7%D9%88%D8%A9-r422/" rel="">دليل إعداد خادم ويب محلي خطوة بخطوة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/javascript/nodejs/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%AE%D8%A7%D8%AF%D9%85-%D9%88%D9%8A%D8%A8-%D9%81%D9%8A-nodejs-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A7%D9%84%D9%88%D8%AD%D8%AF%D8%A9-http-r1745/" rel="">إنشاء خادم ويب في Node.js باستخدام الوحدة HTTP</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">782</guid><pubDate>Mon, 10 Jul 2023 13:08:00 +0000</pubDate></item><item><title>&#x645;&#x62F;&#x62E;&#x644; &#x625;&#x644;&#x649; &#x628;&#x631;&#x645;&#x62C;&#x629; &#x645;&#x648;&#x627;&#x642;&#x639; &#x627;&#x644;&#x648;&#x64A;&#x628; &#x645;&#x646; &#x637;&#x631;&#x641; &#x627;&#x644;&#x62E;&#x627;&#x62F;&#x645;</title><link>https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%85%D9%86-%D8%B7%D8%B1%D9%81-%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-r783/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_07/Server-side-website-programming-first-steps-and-Introduction-to-the-server-side.png.d5bb37c079a1a0d3769d33b6fe6ded51.png" /></p>
<p>
	سنجيب في هذه السلسلة من المقالات <a href="https://academy.hsoub.com/tags/%D8%AA%D8%B9%D9%84%D9%85%20%D8%AA%D8%B7%D9%88%D9%8A%D8%B1%20%D8%A7%D9%84%D9%88%D9%8A%D8%A8/" rel="">سلسلة تعلم تطوير الويب</a> على بعض الأسئلة الأساسية حول برمجة موقع الويب من طرف الخادم، مثل ماهية البرمجة من طرف الخادم واختلافها عن البرمجة من طرف العميل وسبب فائدتها الكبيرة، كما سنقدم نظرةً عامةً على بعض أكثر أطر عمل الويب من طرف الخادم شيوعًا مع إرشادات حول كيفية اختيار إطار العمل الأنسب لإنشاء مشروعك الأول، وسنقدم مقدمةً تمهيديةً عالية المستوى حول أمان خادم الويب.
</p>

<h2>
	المتطلبات الأساسية
</h2>

<p>
	لا تحتاج إلى معرفة برمجة مواقع الويب من طرف الخادم أو أيّ نوع آخر من البرمجة قبل البدء، ولكن يجب أن تفهم شيئًا ما عن طريقة عمل مواقع الويب وخوادم الويب، لذلك نوصي بقراءة المقالات التالية:
</p>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r574/" rel="">مدخل إلى خادم الويب</a>.
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%84%D9%84%D8%A7%D9%86%D8%B7%D9%84%D8%A7%D9%82-%D9%81%D9%8A-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1671/" rel="">تثبيت البرمجيات الأساسية للانطلاق في تطوير الويب</a>.
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D8%B1%D9%81%D8%B9-%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-r610/" rel="">رفع ملفات موقع الويب إلى خادم على الإنترنت</a>.
	</li>
</ul>

<p>
	ستكون جاهزًا للعمل من خلال الفهم الأساسي الذي تكتسبه من هذه المقالات.
</p>

<p>
	تتألف هذه السلسلة الفرعية من المقالات التالية:
</p>

<ul>
	<li>
		مدخل إلى برمجة مواقع الويب من طرف الخادم: يتناول المقال الأول برمجة موقع الويب من طرف الخادم عالية المستوى، وتجيب على أسئلة، مثل ماهية البرمجة من طرف الخادم واختلافها عن البرمجة من طرف العميل وسبب فائدتها الكبيرة. ستفهم بعد قراءة هذا المقال القدرات الإضافية المتاحة لمواقع الويب من خلال كتابة الشيفرة البرمجية من طرف الخادم.
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%86%D8%B8%D8%B1%D8%A9-%D8%B9%D9%84%D9%89-%D8%AA%D9%81%D8%A7%D8%B9%D9%84%D8%A7%D8%AA-%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-%D9%85%D8%B9-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%84-%D9%81%D9%8A-%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%8A%D8%A8-%D8%AF%D9%8A%D9%86%D8%A7%D9%85%D9%8A%D9%83%D9%8A-r782/" rel="">نظرة عامة على تفاعلات الخادم مع العميل في موقع ويب ديناميكي</a>: سنختبر ما يحدث عندما يتلقى الخادم طلبًا ديناميكيًا من متصفح بعد معرفة الغرض والفوائد المحتملة من البرمجة من طرف الخادم. بما أن معظم الشيفرة البرمجية من طرف الخادم لمواقع الويب تتعامل مع الطلبات والاستجابات بطريقة مماثلة، سيساعدك ذلك على فهم ما عليك فعله عند كتابة شيفرتك البرمجية.
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D8%A3%D8%B7%D8%B1-%D8%B9%D9%85%D9%84-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%85%D9%86-%D8%B7%D8%B1%D9%81-%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-r784/" rel="">أطر عمل الويب من طرف الخادم</a>: أوضح المقال السابق ما يجب على تطبيق الويب من طرف الخادم فعله للاستجابة لطلبات متصفح الويب، ويشرح هذا المقال كيف يمكن لأطر عمل الويب تبسيط هذه المهام، ويساعدك على اختيار إطار العمل المناسب لأول تطبيق ويب من طرف الخادم.
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/advanced/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A3%D9%85%D8%A7%D9%86-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r2020/" rel="">تعرف على أمان مواقع الويب</a>: يتطلب أمان الموقع الحذر في جميع جوانب بناء الموقع وتشغيله. يساعدك هذا المقال التمهيدي في فهم الخطوات الأولى المهمة الممكن اتخاذها لحماية تطبيق الويب من الهجمات الأكثر شيوعًا.
	</li>
</ul>

<p>
	<strong>ملاحظة</strong>: يتناول هذا المقال أطر العمل من طرف الخادم، وكيفية استخدامها لإنشاء مواقع الويب. إذا كنت تبحث عن معلومات حول أطر عمل جافا سكريبت JavaScript من طرف العميل، فاطلع على مقال <a href="https://academy.hsoub.com/programming/workflow/%D9%81%D9%87%D9%85-%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%85%D9%86-%D8%B7%D8%B1%D9%81-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%84-r1462/" rel="">فهم أدوات تطوير الويب من طرف العميل</a>.
</p>

<p>
	لا تحتوي هذه السلسلة من المقالات على أي تقييم لأننا لم نعرض لك أي شيفرة برمجية بعد، إذ يجب أن يكون لديك في هذه المرحلة فهمٌ عام للوظائف التي يمكنك تقديمها من خلال البرمجة من طرف الخادم مع اتخاذ قرار بشأن إطار عمل الويب من طرف الخادم الذي ستستخدمه لإنشاء أول تطبيق من طرف الخادم.
</p>

<p>
	لنبدأ بمقالنا الأول من هذه السلسلة من خلال التعرُّف على مفهوم برمجة مواقع الويب من طرف الخادم.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة تطوير تطبيقات الويب باستخدام لغة PHP
		</p>

		<p class="banner-subtitle">
			احترف تطوير النظم الخلفية والووردبريس وتطبيقات الويب من الألف إلى الياء دون الحاجة لخبرة برمجية مسبقة
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/php-web-application-development/" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<img alt="دورة تطوير تطبيقات الويب باستخدام لغة PHP" src="https://academy.hsoub.com/learn/assets/images/courses/php-web-application-development.png">
	</div>
</div>

<h2>
	تمهيد إلى برمجة مواقع الويب من طرف الخادم server-side
</h2>

<ul>
	<li>
		<strong>المتطلبات الأساسية</strong>: المهارات الحاسوبية الأساسية، وفهم أساسي لخادم الويب.
	</li>
	<li>
		<strong>الهدف</strong>: التعرف على مفهوم برمجة مواقع الويب من طرف الخادم، وما يمكن أن تفعله، وكيف تختلف عن البرمجة من طرف العميل.
	</li>
</ul>

<p>
	تستخدم معظمُ مواقع الويب واسعة النطاق الشيفرةَ البرمجية من طرف الخادم لعرض بيانات مختلفة ديناميكيًا عند الحاجة، وتُسحَب من قاعدة البيانات المخزنة على الخادم وتُرسَل إلى العميل لعرضها باستخدام شيفرة برمجية مثل شيفرة لغتي HTML وجافا سكريبت.
</p>

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

<p>
	<strong>ملاحظة</strong>: يُوصَى بشدة بالتعرف على تطوير مواقع الويب من طرف الخادم في العالم الحديث لتطوير الويب.
</p>

<h2>
	ما هي برمجة مواقع الويب من طرف الخادم؟
</h2>

<p>
	تتواصل متصفحات الويب مع خوادم الويب باستخدام بروتوكول نقل النص التشعبي HyperText Transfer Protocol -أو اختصارًا <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-http-r73/" rel="">HTTP</a>، إذ يُرسَل طلب HTTP من متصفحك إلى الخادم الهدف عند النقر على رابط على صفحة ويب، أو إرسال نموذج، أو إجراء بحث.
</p>

<p>
	يتضمن الطلب عنوان URL يحدد المورد المتأثر، وطريقةً تحدد الفعل المطلوب، مثل الحصول على المورد، أو حذفه، أو نشره، ويمكن أن يتضمن الطلب أيضًا معلومات إضافية مشفرة في معاملات URL (أزواج حقل-قيمة field-value المرسَلة عبر <a href="https://en.wikipedia.org/wiki/Query_string" rel="external nofollow">سلسلة الاستعلام query string</a>)، مثل بيانات POST (البيانات المرسَلة باستخدام <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST" rel="external nofollow">طريقة POST لبروتوكول HTTP</a>) أو في ملفات تعريف الارتباط Cookies المرتبطة بها.
</p>

<p>
	تنتظر خوادم الويب رسائل طلب العميل وتعالجها عند وصولها وترد على متصفح الويب برسالة استجابة HTTP، إذ تحتوي الاستجابة على سطر حالة يشير إلى نجاح الطلب من عدمه مثل السطر "HTTP/1.1 200 OK"، الذي يشير إلى النجاح. يمكن أن يحتوي متن الاستجابة على الطلب الناجح للمورد المطلوب (مثل صفحة HTML جديدة أو صورة)، والذي يمكن عرضه بعد ذلك باستخدام متصفح الويب.
</p>

<h3>
	المواقع الساكنة static sites
</h3>

<p>
	يوضّح الشكل الآتي معمارية خادم الويب الأساسية لموقع ساكن Static Site يعيد المحتوى الثابت نفسه من الخادم كلما طلب موردًا معينًا؛ فإذا أراد المستخدم الانتقال إلى صفحة ما، فسيرسل المتصفح طلب HTTP من النوع "GET" يحدد عنوان URL الخاص به.
</p>

<p>
	يسترجع الخادمُ المستندَ المطلوب من نظام ملفاته ويعيد استجابة HTTP التي تحتوي على المستند وحالة النجاح (عادةً ‎200 OK). إذا تعذّر استرجاع الملف لسبب ما، ستُعاد حالة خطأ (اطلع على <a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D9%83%D8%B4%D8%A7%D9%81-%D9%88%D8%A5%D8%B5%D9%84%D8%A7%D8%AD-%D8%B1%D9%85%D9%88%D8%B2-%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-http-%D8%A7%D9%84%D8%B4%D8%A7%D8%A6%D8%B9%D8%A9-r116/" rel="">كيفية استكشاف وإصلاح رموز أخطاء HTTP الشائعة</a>).
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="130202" href="https://academy.hsoub.com/uploads/monthly_2023_07/01_basic_static_app_server.png.d6e1949fad6c393c3c97672b7dbb8ef9.png" rel=""><img alt="01_basic_static_app_server.png" class="ipsImage ipsImage_thumbnailed" data-fileid="130202" data-unique="p1kk9k4w0" src="https://academy.hsoub.com/uploads/monthly_2023_07/01_basic_static_app_server.thumb.png.b0bc15a347a9b71684844728c956f082.png"> </a>
</p>

<h3>
	المواقع الديناميكية dynamic sites
</h3>

<p>
	موقع الويب الديناميكي هو الموقع الذي يُنشَأ فيه بعضٌ من محتوى الاستجابة ديناميكيًا عند الحاجة فقط، إذ تُنشَأ صفحات HTML من خلال إدخال بيانات من قاعدة بيانات إلى عناصر بديلة في قوالب HTML، وتُعَد هذه الطريقة أكثر فاعلية من استخدام مواقع الويب الساكنة لتخزين كميات كبيرة من المحتوى.
</p>

<p>
	يمكن للموقع الديناميكي إعادة بيانات مختلفة <a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%B9%D9%86%D9%88%D8%A7%D9%86-url-%D9%88%D8%A3%D9%86%D9%88%D8%A7%D8%B9%D9%87-r1435/" rel="">لعنوان URL</a> بناءً على المعلومات التي يقدّمها المستخدم أو التفضيلات المخزنة ويمكنه إجراء عمليات أخرى بوصفها جزءًا من إعادة الاستجابة مثل إرسال الإشعارات. يجب تشغيل معظم الشيفرة البرمجية لدعم موقع ويب ديناميكي على الخادم، ويُعرَف إنشاء هذه الشيفرة البرمجية باسم "البرمجة من طرف الخادم" أو "كتابة سكريبتات الواجهة الخلفية" أحيانًا.
</p>

<p>
	يوضّح الشكل الآتي معمارية بسيطة لموقع ويب ديناميكي، إذ ترسل المتصفحات طلبات HTTP إلى الخادم الذي يعالجها ويعيد استجابات HTTP المناسبة. يجري التعامل مع طلبات الموارد الساكنة باستخدام طريقة التعامل مع المواقع الساكنة نفسها، فالموارد الساكنة هي ملفات لا تتغير مثل ملفات CSS وجافا سكريبت والصور وملفات PDF المُنشَأة مسبقًا وإلخ.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="130201" href="https://academy.hsoub.com/uploads/monthly_2023_07/02_web_application_with_html_and_steps.png.d06cf11de4ccf17f7a02d624de80ee8c.png" rel=""><img alt="02_web_application_with_html_and_steps.png" class="ipsImage ipsImage_thumbnailed" data-fileid="130201" data-unique="gye73kwzc" src="https://academy.hsoub.com/uploads/monthly_2023_07/02_web_application_with_html_and_steps.thumb.png.ba1ca63106dbe338daf6556467023a85.png"> </a>
</p>

<p>
	تُمرّر طلبات الموارد الديناميكية (الخطوة رقم 2) إلى الشيفرة البرمجية من طرف الخادم (الموضحة في الشكل السابق بوصفها تطبيق ويب)، بينما يفسّر الخادم الطلب الديناميكي، ويقرأ المعلومات المطلوبة من قاعدة البيانات (الخطوة رقم 3)، ويجمع البيانات المسترجعة مع قوالب HTML (الخطوة رقم 4)‎، ويرسل استجابة تحتوي على ملف HTML المُنشَأ (الخطوتين 5 و 6).
</p>

<h2>
	هل تتشابه البرمجة من طرف الخادم مع البرمجة من طرف العميل؟
</h2>

<p>
	لنوجّه انتباهنا الآن إلى الشيفرة البرمجية الموجودة في البرمجة من طرف الخادم وطرف العميل، فهما مختلفتان كثيرًا للأسباب التالية:
</p>

<ul>
	<li>
		لديهما أغراض واهتمامات مختلفة.
	</li>
	<li>
		لا تستخدمان لغات البرمجة نفسها باستثناء لغة جافا سكريبت التي يمكن استخدامها من طرف الخادم ومن طرف العميل.
	</li>
	<li>
		تعملان ضمن بيئات أنظمة تشغيل مختلفة.
	</li>
</ul>

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

<p>
	تُكتَب الشيفرة البرمجية من طرف العميل باستخدام لغات <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> و<a href="https://wiki.hsoub.com/CSS" rel="external">CSS</a> و<a href="https://wiki.hsoub.com/JavaScript" rel="external">جافا سكريبت</a>، وتعمل ضمن متصفح ويب ولديها وصول ضئيل أو معدوم إلى نظام التشغيل الأساسي بما في ذلك الوصول المحدود إلى نظام الملفات. لا يستطيع مطورو الويب التحكم في المتصفح الذي يمكن أن يستخدمه كل مستخدم لعرض موقع الويب، إذ توفر المتصفحات مستويات غير متناسقة من التوافق مع ميزات الشيفرة البرمجية من طرف العميل، ويُعَد التعامل مع الاختلافات في دعم المتصفحات بسلاسة جزءًا من التحدي المتمثل في البرمجة من طرف العميل.
</p>

<p>
	يمكن كتابة الشيفرة البرمجية من طرف الخادم باستخدام لغات برمجة متعددة، إذ تشمل أمثلة لغات الويب الشائعة من طرف الخادم لغات <a href="https://wiki.hsoub.com/PHP" rel="external">PHP</a> و<a href="https://wiki.hsoub.com/Python" rel="external">بايثون Python</a> و<a href="https://wiki.hsoub.com/Ruby" rel="external">روبي Ruby</a> و<a href="https://academy.hsoub.com/programming/c-sharp/" rel="">C#</a>‎ و<a href="https://wiki.hsoub.com/Node.js" rel="external">جافا سكريبت (NodeJS)</a>، وتتمتع الشيفرة البرمجية من طرف الخادم بالوصول الكامل إلى نظام تشغيل الخادم ويمكن للمطور اختيار لغة البرمجة (والإصدار المحدد) التي يرغبون في استخدامها.
</p>

<p>
	يكتب المطورون شيفرتهم البرمجية باستخدام <a href="https://academy.hsoub.com/programming/javascript/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%A3%D8%B7%D8%B1-%D8%B9%D9%85%D9%84-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%85%D9%86-%D8%B7%D8%B1%D9%81-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%84-r1567/" rel="">أطر عمل الويب</a> التي هي مجموعات من الدوال والكائنات والقواعد وبنيات الشيفرات البرمجية الأخرى المُصمَّمة لحل المشاكل الشائعة وتسريع التطوير وتبسيط الأنواع المختلفة من المهام التي تواجه مجالًا معينًا.
</p>

<p>
	تستخدم الشيفرة البرمجية لكل من العميل والخادم أطر عمل، ولكن المجالات مختلفة جدًا، وبالتالي تكون أطر العمل مختلفة أيضًا، إذ تعمل أطر عمل الويب من طرف العميل على تبسيط مهام التخطيط والعرض، بينما توفر أطر عمل الويب من طرف الخادم الكثير من وظائف خادم الويب الشائعة التي يمكن أن تضطر إلى تقديمها بنفسك، مثل دعم الجلسات ودعم المستخدمين والاستيثاق Authentication والوصول السهل إلى قاعدة البيانات ومكتبات القوالب وما إلى ذلك.
</p>

<p>
	<strong>ملاحظة</strong>: تُستخدَم أطر العمل من طرف العميل للمساعدة لتسريع تطوير الشيفرة البرمجية من طرف العميل، لكن يمكنك اختيار كتابة شيفرتك البرمجية يدويًا، والتي من الممكن أن تكون أسرع وأكثر فاعلية إذا أردتَ واجهة مستخدم موقع ويب صغيرة وبسيطة؛ بينما لن تفكر أبدًا في كتابة مكوِّن من طرف الخادم لتطبيق ويب بدون إطار عمل، فمن الصعب تقديم ميزة أساسية مثل خادم HTTP من الصفر باستخدام لغة بايثون، ولكن توفر أطر عمل الويب باستخدام لغة بايثون مثل إطار عمل <a href="https://academy.hsoub.com/programming/python/django/" rel="">جانغو Django</a> ميزات مهمة إلى جانب أدوات أخرى مفيدة.
</p>

<h2>
	فوائد واستخدامات البرمجة من طرف الخادم
</h2>

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

<p>
	تستخدم شركات مثل أمازون Amazon البرمجة من طرف الخادم لإنشاء نتائج البحث عن المنتجات، وتقديم اقتراحات المنتجات المستهدفة بناءً على تفضيلات العميل وعادات الشراء السابقة وتبسيط عمليات الشراء وما إلى ذلك؛ بينما تستخدم البنوك البرمجة من طرف الخادم لتخزين معلومات الحسابات والسماح للمستخدمين المُصرَّح لهم فقط بمشاهدة المعاملات وإجرائها؛ وتستخدم خدمات أخرى، مثل فيسبوك Facebook وتويتر Twitter وإنستغرام Instagram وويكيبيديا Wikipedia البرمجة من طرف الخادم لإظهار المحتوى ومشاركته والتحكم في الوصول إليه.
</p>

<p>
	سنذكر الآن بعض الاستخدامات والفوائد الشائعة للبرمجة من طرف الخادم، إذ ستلاحظ بعض التداخل بينها.
</p>

<h3>
	تخزين المعلومات وتسليمها بفعالية
</h3>

<p>
	هناك الكثير من المنتجات المتوفرة على أمازون والمنشورات المكتوبة على فيسبوك، وبالتالي سيكون إنشاء صفحة ساكنة منفصلة لكل منتج أو منشور غير عملي. تسمح البرمجة من طرف الخادم بتخزين المعلومات في قاعدة بيانات وبناء ملفات HTML وأنواع أخرى من الملفات (مثل ملفات PDF والصور وغيرها) وإعادتها ديناميكيًا. يمكن إعادة بيانات (JSON و XML وغيرها) لعرضها باستخدام أطر عمل الويب المناسبة من طرف العميل، وهذا يقلل من عبء المعالجة على الخادم وكمية البيانات التي يجب إرسالها.
</p>

<p>
	لا يقتصر عمل الخادم على إرسال المعلومات من قواعد البيانات، إذ يمكن أن يعيد نتيجة الأدوات البرمجية أو البيانات من خدمات الاتصالات، ويمكن استهداف المحتوى حسب نوع جهاز العميل الذي يستقبله. توجد المعلومات في قاعدة بيانات، لذا يمكن مشاركتها وتحديثها بسهولة أكبر مع أنظمة الأعمال الأخرى، فمثلًا يمكن أن يحدّث المتجر قاعدة بيانات مُخزنة عند بيع المنتجات إما عبر الإنترنت أو ضمن متجر.
</p>

<p>
	يمكنك معرفة فائدة الشيفرة البرمجية من طرف الخادم لتخزين المعلومات الفعال وتسليمها من خلال المثال التالي:
</p>

<ol>
	<li>
		اذهب إلى موقع أمازون أو أي موقع تجارة إلكترونية آخر.
	</li>
	<li>
		ابحث عن عدد من الكلمات الرئيسية ولاحظ عدم تغيّر بنية الصفحة بالرغم من تغيّر النتائج.
	</li>
	<li>
		افتح منتجين أو ثلاثة منتجات مختلفة، ولاحظ كيف أن لديها بنيةً وتخطيطًا مشتركًا مع سحب محتوى المنتجات المختلفة من قاعدة البيانات.
	</li>
</ol>

<p>
	يمكنك أن ترى فعليًا ملايين القيم المُعادة بالنسبة لمصطلح بحث شائع مثل "السمك"، إذ يسمح استخدام قاعدة البيانات بتخزينها ومشاركتها بفاعلية، كما يسمح بالتحكم في عرض المعلومات في مكان واحد فقط.
</p>

<h3>
	تجربة مستخدم مخصصة
</h3>

<p>
	يمكن للخوادم تخزين واستخدام المعلومات المتعلقة بالعملاء لتوفير تجربة مستخدم ملائمة ومُخصَّصة، فمثلًا تخزّن العديد من المواقع بطاقات الائتمان دون إدخال التفاصيل مرةً أخرى. يمكن لمواقع مثل خرائط جوجل استخدام المواقع المحفوظة أو الحالية لتوفير معلومات التوجيه والبحث، أو سجل السفر لإظهار الأنشطة التجارية المحلية في نتائج البحث.
</p>

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

<p>
	تحفظ <a href="https://www.google.com/maps/" rel="external nofollow">خرائط جوجل</a> سجل البحث والزيارة، وتميّز المواقع التي تتكرر زيارتها، أو التي يتكرر البحث عنها أكثر من المواقع الأخرى.
</p>

<p>
	تُحسَّن نتائج بحث جوجل بناءً على عمليات البحث السابقة كما في المثال التالي:
</p>

<ol>
	<li>
		اذهب إلى بحث جوجل.
	</li>
	<li>
		ابحث عن "كرة القدم".
	</li>
	<li>
		حاول الآن كتابة كلمة "كرة" في مربع البحث ولاحظ توقعات البحث التي جرى إكمالها تلقائيًا.
	</li>
</ol>

<p>
	هل تعتقد أن هذه صدفة؟ حسنًا، إنها ليست كذلك.
</p>

<h3>
	الوصول المتحكم فيه إلى المحتوى
</h3>

<p>
	تسمح البرمجة من طرف الخادم للمواقع بتقييد الوصول إلى المستخدمين المُصرَّح لهم وتقديم المعلومات التي يُسمَح للمستخدم برؤيتها فقط. تشمل الأمثلة الواقعية مواقع الشبكات الاجتماعية التي تسمح للمستخدمين بتحديد مَن يمكنه رؤية المحتوى الذي ينشرونه على الموقع ويظهر على صفحتهم الرئيسية.
</p>

<p>
	<strong>ملاحظة</strong>: هناك أمثلة حقيقية أخرى، إذ يمكن التحكم في الوصول إلى المحتوى، مثل ما يمكنك رؤيته إذا ذهبت إلى موقع الإنترنت الخاص بالمصرف الذي تتعامل معه. سجّل الدخول إلى حسابك ولاحظ ما هي المعلومات الإضافية التي يمكنك رؤيتها وتعديلها، وما هي المعلومات التي يمكنك رؤيتها والتي يمكن للمصرف تغييرها فقط.
</p>

<h3>
	تخزين معلومات الجلسة أو الحالة
</h3>

<p>
	تسمح البرمجة من طرف الخادم للمطورين بالاستفادة من الجلسات sessions، والتي هي آلية تسمح للخادم بتخزين معلومات عن المستخدم الحالي للموقع وإرسال استجابات مختلفة بناءً على تلك المعلومات. يسمح ذلك لموقع ما مثلًا بمعرفة أن مستخدمًا قد سجل الدخول مسبقًا وعرض روابطًا إلى رسائل بريده الإلكتروني، أو رتب السجل، أو حفظ حالة لعبة بسيطة بحيث يمكن للمستخدم الانتقال إلى الموقع مرةً أخرى والمتابعة من حيث تركه.
</p>

<p>
	<strong>ملاحظة</strong>: زُر موقع صحيفة يحتوي على نموذج اشتراك وافتح مجموعة من النوافذ مثل موقع <a href="https://www.theage.com.au/" rel="external nofollow">The Age</a>. استمر في زيارة الموقع على مدار بضع ساعات أو أيام، ثم سيُعاد توجيهك إلى صفحات تشرح كيفية الاشتراك، ولن تتمكن من الوصول إلى المقالات. تمثل هذه المعلومات مثالًا عن معلومات الجلسة المخزنة في ملفات تعريف الارتباط.
</p>

<h3>
	الإشعارات والاتصالات
</h3>

<p>
	يمكن للخوادم إرسال إشعارات عامة أو خاصة بالمستخدم من خلال موقع الويب نفسه، أو عبر البريد الإلكتروني، أو الرسائل القصيرة، أو الرسائل الفورية، أو محادثات الفيديو، أو خدمات الاتصالات الأخرى، ومن الأمثلة على ذلك ما يلي:
</p>

<ul>
	<li>
		يرسل فيسبوك وتويتر رسائل بريد إلكتروني ورسائل قصيرة لإعلامك بالاتصالات الجديدة.
	</li>
	<li>
		يرسل أمازون بانتظام رسائل بريد إلكتروني خاصة بالمنتجات بحيث ثقترح منتجات مشابهة لتلك التي اشتريتها أو شاهدتها مسبقًا والتي يمكن أن تكون مهتمًا بها.
	</li>
	<li>
		يمكن أن يرسل خادم الويب رسائل تحذير إلى مسؤولي الموقع لتنبيههم بانخفاض الذاكرة على الخادم أو نشاط مستخدم مريب.
	</li>
</ul>

<p>
	<strong>ملاحظة</strong>: أكثر أنواع الإشعارات شيوعًا هو "تأكيد التسجيل". اختر أيّ موقع كبير تهتم به مثل جوجل وأمازون وإنستغرام وأنشئ حسابًا جديدًا باستخدام عنوان بريدك الإلكتروني، وستتلقى بعدها بريدًا إلكترونيًا يؤكد تسجيلك أو يطلب تأكيدًا لتفعيل حسابك.
</p>

<h3>
	تحليل البيانات
</h3>

<p>
	يمكن أن يجمع <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D8%AD%D8%B1%D9%83-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-r572/" rel="">موقع الويب</a> الكثير من البيانات حول المستخدمين مثل ما الذي يبحثون عنه وماذا يشترون وما يوصون به ومدة بقائهم في كل صفحة. يمكن استخدام البرمجة من طرف الخادم لتحسين الاستجابات بناءً على تحليل هذه البيانات، فمثلًا تعلن كلًا من أمازون وجوجل عن منتجات بناءً على عمليات البحث السابقة وعمليات الشراء.
</p>

<p>
	<strong>ملاحظة</strong>: إذا كنت من مستخدمي فيسبوك، فانتقل إلى الصفحة الرئيسية وانظر إلى المنشورات. لاحظ كيف أن بعض المنشورات ليست مرتبةً عدديًا، إذ تكون في أغلب الأحيان المشاركات التي تحتوي على عدد أكبر من الإعجابات أعلى في القائمة من المشاركات الأحدث. ألقِ نظرةً على نوع الإعلانات المعروضة، إذ يمكن أن تشاهد إعلانات عن الأشياء التي اطّلعتَ عليها على مواقع أخرى. يمكن أن تكون خوارزمية فيسبوك لإظهار المحتوى والإعلانات غامضةً بعض الشيء، ولكنها تعتمد على إعجاباتك وعادات المشاهدة.
</p>

<h2>
	الخلاصة
</h2>

<p>
	تعلمت الآن أن الشيفرة البرمجية من طرف الخادم تعمل على خادم ويب وأن دورها الرئيسي هو التحكم في المعلومات المُرسَلة إلى المستخدم، بينما تتعامل الشيفرة البرمجية من طرف العميل مع بنية تلك البيانات وعرضها للمستخدم، كما يجب أن تفهم أن الشيفرة البرمجية من طرف الخادم مفيدةٌ، لأنها تتيح إنشاء مواقع الويب التي تقدم معلومات مُخصَّصة لكل مستخدم بكفاءة ولديها فكرةٌ جيدةٌ عن بعض الأشياء التي يمكن أن تكون قادرًا على تطبيقها عندما تكون مبرمجًا من طرف الخادم. أخيرًا، يجب أن تفهم أنه يمكن كتابة الشيفرة البرمجية من طرف الخادم باستخدام عدد من لغات البرمجة وأنه يجب عليك استخدام إطار عمل ويب لتسهيل تلك العملية.
</p>

<p>
	سنساعدك في المقال التالي على اختيار أفضل إطار عمل ويب لموقعك الأول، وسنأخذك في جولة حول التفاعلات الرئيسية بين العميل والخادم بمزيدٍ من التفاصيل.
</p>

<p>
	ترجمة -وبتصرُّف- للمقالين <a href="https://developer.mozilla.org/en-US/docs/Learn/Server-side/First_steps" rel="external nofollow">Server-side website programming first steps</a> و <a href="https://developer.mozilla.org/en-US/docs/Learn/Server-side/First_steps/Introduction" rel="external nofollow">Introduction to the server side</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/programming/general/%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D9%84%D8%A8%D9%8A%D8%A6%D8%A9-%D9%84%D9%84%D8%A7%D8%AE%D8%AA%D8%A8%D8%A7%D8%B1%D8%A7%D8%AA-%D8%A7%D9%84%D8%A2%D9%84%D9%8A%D8%A9-%D9%81%D9%8A-%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%84%D9%84%D8%AA%D9%88%D8%A7%D9%81%D9%82-%D9%85%D8%B9-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-r1990/" rel="">إعداد البيئة للاختبارات الآلية في مشاريع الويب للتوافق مع المتصفحات</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D9%84%D9%85-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8/" rel="">المدخل الشامل لتعلم تطوير الويب وبرمجة المواقع</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/html/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%8A%D8%A8-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%AA%D8%B9%D9%84%D9%8A%D9%85%D8%A7%D8%AA-html-r1894/" rel="">أساسيات إنشاء موقع ويب باستخدام تعليمات HTML</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D8%B1%D9%81%D8%B9-%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-r610/" rel="">رفع ملفات موقع الويب إلى خادم على الإنترنت</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">783</guid><pubDate>Mon, 03 Jul 2023 13:00:00 +0000</pubDate></item><item><title>&#x645;&#x631;&#x627;&#x642;&#x628;&#x629; &#x634;&#x647;&#x627;&#x62F;&#x627;&#x62A; SSL/TLS &#x641;&#x64A; &#x627;&#x644;&#x645;&#x648;&#x642;&#x639; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x623;&#x62F;&#x627;&#x629; Checkmk</title><link>https://academy.hsoub.com/devops/servers/%D9%85%D8%B1%D8%A7%D9%82%D8%A8%D8%A9-%D8%B4%D9%87%D8%A7%D8%AF%D8%A7%D8%AA-ssltls-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D9%88%D9%82%D8%B9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D8%AF%D8%A7%D8%A9-checkmk-r684/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2023_02/851027361_--SSL-TLS--Checkmk.jpg.22660363ef38c5d86cd31206b2370dca.jpg" /></p>
<p>
	مهما كان نوع الموقع أو النظام الذي تديره، سواءَ كان متجر إلكتروني أو موقع لشركة أو مدونة، فإن من أولويات ميزاته سيكون أمان زيارة الموقع واستخدامه، لهذا السبب أصبح الاعتماد على <a href="https://academy.hsoub.com/apps/web/wordpress/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B4%D8%A7%D9%85%D9%84-%D9%84%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-https-%D9%88-ssl-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r685/" rel="">HTTPS</a> أساسيًا ضمن شبكة الإنترنت، حيث تمنع معظم المتصفحات الوصول إلى موقعك في حال لم يكن الاتصال به آمنًا، وحتى سينخفض ترتيب SEO للموقع أيضًا، لذا من المهام المهمة لمسؤول الخادم هي إدارة شهادات <a href="https://academy.hsoub.com/devops/servers/%D8%AA%D9%86%D8%B5%D9%8A%D8%A8-%D8%B4%D9%87%D8%A7%D8%AF%D8%A9-ssl-%D9%85%D8%AC%D8%A7%D9%86%D9%8A%D8%A9-%D8%B9%D8%A8%D8%B1-%D8%AE%D8%AF%D9%85%D8%A9-lets-encrypt-%D8%B9%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r151/" rel=""><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr>/<abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل"><abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل">TLS</abbr></abbr></a> وتحديثها دوريًا قبل انتهاء صلاحيتها.
</p>

<p>
	سنتحدث في هذا المثال عن أداة المراقبة Checkmk من tribe29 وكيف يمكن استخدامها لمراقبة شهادات <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr>/<abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل"><abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل">TLS</abbr></abbr>، حيث ستراقب Checkmk الشهادات وتخبرنا بموعد استبدالها وتحديثها، فاستخدام أداة مراقبة خاصة أفضل عادةً من تسجيل تلك المواعيد ضمن <a href="https://academy.hsoub.com/apps/productivity/office/microsoft-excel/%D9%83%D9%8A%D9%81-%D8%AA%D8%AA%D8%AD%D9%83%D9%85-%D8%A8%D8%B7%D8%B1%D9%8A%D9%82%D8%A9-%D8%B9%D8%B1%D8%B6-%D8%A3%D9%88%D8%B1%D8%A7%D9%82-%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%81%D9%8A-microsoft-excel-r192/" rel="">ورقة إكسل</a> أو في مكان آخر، ما يسمح لنا بالاهتمام بأمور أخرى.
</p>

<p>
	يمكن تطبيق الخطوات ضمن هذا المقال على أي <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r574/" rel="">خادم</a> لموقع أو تطبيق، فطريقة التحقق من HTTPS الفاعلة لا تحتاج للدخول كمسؤول إلى الخادم، فقط نحتاج لموقع Checkmk وأن يكون مضيف الموقع المراد مراقبته يعمل ومتصل بالإنترنت.
</p>

<p>
	سنستخدم إصدار Checkmk المجاني <a href="https://checkmk.com/l/t/enterprise-free-trial" rel="external nofollow">Checkmk Free Edition version 2.0.0.p20</a> ويمكن تطبيق نفس الخطوات على الإصدار مفتوح المصدر Checkmk Raw ،Edition ويمكن استخدام أي من الإصدارين مجانًا، كمثال في هذا المقال سنراقب شهادة الموقع www.checkmk.com.
</p>

<h2>
	الخطوة الأولى: إضافة الموقع كمضيف إلى Checkmk
</h2>

<ul>
	<li>
		بعد الدخول إلى الأداة Checkmk، نذهب إلى الضبط Setup ثم الاستضافات Hosts ونضغط زر إضافة مضيف "Add host".
	</li>
	<li>
		في حقل اسم المضيف ندخل عنوان الموقع الإلكتروني المراد مراقبته، في حالتنا العنوان هو "www.checkmk.com".
	</li>
	<li>
		نفعل الخيار "Checkmk agent / <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr> integrations" لنختار من قائمة الخيارات بجانبه الخيار "No <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr> integration, No agent".
	</li>
	<li>
		نضغط على زر الحفظ لحفظ المضيف والذهاب إلى الإعدادات "Save &amp; go to service configuration"
	</li>
</ul>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="118514" href="https://academy.hsoub.com/uploads/monthly_2023_02/Add-your-website-as-host-Checkmk.png.74cdfc47ca77fb1810dbdcb0289e7291.png" rel=""><img alt="طريقة إضافة الموقع كمضيف إلى Checkmk" class="ipsImage ipsImage_thumbnailed" data-fileid="118514" data-ratio="46.71" data-unique="2ukkgane6" style="width: 700px; height: 327px;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/Add-your-website-as-host-Checkmk.thumb.png.0a24eea9457308070ef496f30ffaf91d.png"> </a>
</p>

<p>
	في الصفحة التالية سيظهر لنا مستكشف الخدمة، ولن يُظهر لنا أي خدمات لأننا لم نُثبت أي عميل أو <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%8A-%D9%88%D8%A7%D8%AC%D9%87%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-%D9%84%D9%84%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-api%D8%9F-r1512/" rel="">واجهة برمجية <abbr title="Application Programming Interface | واجهة برمجية"><abbr title="Application Programming Interface | واجهة برمجية">API</abbr></abbr></a> توفر بيانات على خادم موقعنا، ولهذا سيقوم Checkmk بالتحقق عبر إرسال طلبات متكررة إلى الموقع للاستكشاف، أي ما نسميه الطريقة الفاعلة، بهذا نكون قد أضفنا مضيف واحد بخدمة واحدة.
</p>

<h2>
	الخطوة الثانية: إضافة تحقق HTTPS للمضيف
</h2>

<p>
	نستخدم "check_http" للتحقق من شهادة <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr>/<abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل"><abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل">TLS</abbr></abbr> للموقع كالتالي:
</p>

<ul>
	<li>
		نضغط مرة أخرى على Setup ونبحث عن "http" ضمن شريط البحث.
	</li>
	<li>
		سيظهر لنا خيار التحقق من HTTP التالي "Check HTTP service". نضغط عليه.
	</li>
</ul>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="118513" href="https://academy.hsoub.com/uploads/monthly_2023_02/Add-HTTPS-check-host.png.f3ebb562bb446a8235a3262b7391644b.png" rel=""><img alt="كيفية إضافة تحقق HTTPS للمضيف" class="ipsImage ipsImage_thumbnailed" data-fileid="118513" data-ratio="43.29" data-unique="3c5egrlhy" style="width: 700px; height: 303px;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/Add-HTTPS-check-host.thumb.png.fef374fd9b1b8a904ec3fc42d84530bf.png"> </a>
</p>

<p>
	يَستخدم Checkmk مراقبة معتمدة على القواعد، لذا سيتم سؤالك عن المجلد الذي تريد إنشاء قاعدة المراقبة داخله، يمكن ترك قيمة الخيار إلى المجلد الرئيسي "Main directory" ثم الضغط على زر الإنشاء "Create rule in folder".
</p>

<ul>
	<li>
		ضمن خصائص القاعدة "Rule Properties" يمكن إضافة تفاصيل، لكن هذه الخطوة اختيارية ويمكن ترك الحقل الوصف فارغًا.
	</li>
	<li>
		ضمن قسم خدمة التحقق من HTTP ‏"Check HTTP service" يجب إضافة اسم فريد لتلك الخدمة، مثلًا "<abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr>.check".
	</li>
	<li>
		ضمن قسم إعدادات المضيف "Host Settings" نفعل خيار اسم وعنوان IP للمضيف "Host name / IP address" ونُدخل عنوان موقعنا، في مثالنا القيمة هي "www.checkmk.com".
	</li>
	<li>
		نُفعل خيار منفذ TCP ‏"TCP port" ونُدخل رقم منفذ الاتصال <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr>/<abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل"><abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل">TLS</abbr></abbr> للموقع، افتراضيًا رقم منفذ HTTPS هو 443، يمكن تخصيص هذا المنفذ وتفاصيل أخرى بحسب إعدادات الموقع لديك.
	</li>
	<li>
		يمكن ضبط وضعية التحقق ضمن الخيار "Mode of the Check" للتحقق من عمر شهادة <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr> باختيار الخيار "Check <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr> Certificate age" وإضافة العتبة التي سيعدل عندها Checkmk حالة الشهادة من المقبولة إلى التحذير أو الحالة الحرجة، مثلًا يمكن إعدادها بالقيم 7 أيام و 14 يومًا، وقبل الضغط على زر الحفظ Save هناك إعدادات أخرى سنقوم بضبطها.
	</li>
</ul>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="118516" href="https://academy.hsoub.com/uploads/monthly_2023_02/check-https-status.png.b1bb894f5cf7ca3151d47e241c6e96ad.png" rel=""><img alt="طريقة إضافة تحقق HTTPS للمضيف" class="ipsImage ipsImage_thumbnailed" data-fileid="118516" data-ratio="56.71" data-unique="fb22in1hg" style="width: 700px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/check-https-status.thumb.png.38c4b2662bceeb8a2427ae0455c03458.png"> </a>
</p>

<ul>
	<li>
		ضمن قسم الحالات "Conditions" نُفعل الخيار "Explicit hosts" ونربط هذه القاعدة بالمضيف الذي يراقب الموقع، في حالتنا نضيف "www.checkmk.com" لأننا أدخلنا عنوان الموقع كاسم المضيف في الخطوة السابقة.
	</li>
	<li>
		نضغط على زر الحفظ Save.
	</li>
</ul>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="118515" href="https://academy.hsoub.com/uploads/monthly_2023_02/check-https-status-2.png.531f6ff6160b8cf8ee7dd89d4fe5f951.png" rel=""><img alt=" إضافة تحقق HTTPS للمضيف" class="ipsImage ipsImage_thumbnailed" data-fileid="118515" data-ratio="44.29" data-unique="y85fhri6o" style="width: 700px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/check-https-status-2.thumb.png.4e1f91619fb01aa3fbbe56828c7f9377.png"> </a>
</p>

<p>
	يستطيع Checkmk حل اسم المضيف باستخدام DNS، لذا يمكن الاكتفاء بإدخال اسم المضيف للموقع بدلًا من عنوان IP، وفي حال استخدامنا لعميل Checkmk لمراقبة الموقع يمكن ضمن المراقبة ربط خدمة التحقق من HTTPS مع خادم الموقع، يبرز الاعتماد على القواعد في حال إدارتنا لعدد أكبر من الاستضافات، لأنه يمكن إضافةً إلى ربط الإعدادات إلى مجلدات معينة استخدام الوسوم ومجموعات الاستضافات، لن نتطرق لتلك الأمور ضمن هذا المقال.
</p>

<p>
	بعد الضغط على زر الحفظ "Save" سنرى القاعدة التي أنشأناها للتو، والآن يجب قبول التغييرات:
</p>

<ul>
	<li>
		نضغط على الحقل الذي يظهر فيه جملة وجود تعديلين "changes 2" مع علامة تعجب صفراء ("!") في الزاوية اليمينية العليا لعرض التغييرات التي في الانتظار.
	</li>
	<li>
		نضغط على التفعيل للمواقع المحددة "Activate on selected sites".
	</li>
</ul>

<p>
	وبهذا نكون قد انتهينا، ونذهب الآن إلى المراقبة "Monitor" ثم نختار كل الاستضافات "All hosts" ونختار موقعنا، سنلاحظ وجود خدمة واحدة، وفي مثالنا حالة الشهادة مقبولة "OK"، وفي حال ستنتهي صلاحية الشهادة بعد أقل من 14 يومًا ستظهر حالة تحذير "WARN"، وفي حال بقاء 7 أيام فقط ستكون حالة الشهادة حرجة "CRIT".
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="118517" href="https://academy.hsoub.com/uploads/monthly_2023_02/ssl-check-checkmk.png.97460b23e6a7101ab45bc5fa008bf048.png" rel=""><img alt="ظهور الخدمة المضافة" class="ipsImage ipsImage_thumbnailed" data-fileid="118517" data-ratio="24.71" data-unique="3dtd7o169" style="width: 700px; height: auto;" width="700" src="https://academy.hsoub.com/uploads/monthly_2023_02/ssl-check-checkmk.thumb.png.a42cc9673bf45b3e76bcf44ce0b36793.png"> </a>
</p>

<h2>
	الخطوة التالية: أكثر من مجرد مراقبة <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr>/<abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل"><abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل">TLS</abbr></abbr> للخادم
</h2>

<p>
	رأينا في هذا المقال كيف يمكن مراقبة شهادات <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr>/<abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل"><abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل">TLS</abbr></abbr> باستخدام Checkmk عبر طريقة التحقق الفاعل، بالإضافة إلى مراقبة تاريخ انتهاء صلاحية الشهادة يمكننا مراقبة خصائص أخرى، فيمكن لخدمة التحقق من HTTPS متابعة وقت الرد بعد عتبة معينة، وتحديد الصفحات التي نحتاج مراقبتها أو تجاهلها باستخدام بعض النصوص والتعابير النمطية، والعمر الأقصى لصفحة النتيجة وتفاصيل أخرى، ولا يمكن التحقق من سلسلة الثقة للشهادات، ويوجد الكثير مما يمكن مراقبته على الخادم إلى جانب عملية المراقبة الأساسية لشهادات <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr>/<abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل"><abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل">TLS</abbr></abbr>، فباستخدام Checkmk يمكن إجراء مراقبة شاملة لخادم الويب وللموقع الإلكتروني.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://linuxhandbook.com/monitor-ssl-certificates-checkmk/" rel="external nofollow">How to Monitor <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr>/<abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل"><abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل">TLS</abbr></abbr> Certificates with Checkmk</a> لفئة من المؤلفين.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AE%D8%AF%D9%85%D8%A9-let%E2%80%99s-encrypt-r352/" rel="">مقدمة إلى خدمة Let’s Encrypt</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D8%AA%D9%86%D8%B5%D9%8A%D8%A8-%D8%B4%D9%87%D8%A7%D8%AF%D8%A9-ssl-%D9%85%D8%AC%D8%A7%D9%86%D9%8A%D8%A9-%D8%B9%D8%A8%D8%B1-%D8%AE%D8%AF%D9%85%D8%A9-lets-encrypt-%D8%B9%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r151/" rel="">تنصيب شهادة <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr> مجانية عبر خدمة Let's encrypt على خادوم لينكس</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%B4%D9%87%D8%A7%D8%AF%D8%A9-ssl-%D9%85%D9%86-%D8%B3%D9%84%D8%B7%D8%A9-%D8%B4%D9%87%D8%A7%D8%AF%D8%A7%D8%AA-%D8%AA%D8%AC%D8%A7%D8%B1%D9%8A%D8%A9-%D8%A7%D9%84%D8%AD%D8%B5%D9%88%D9%84-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%B4%D9%87%D8%A7%D8%AF%D8%A9-%D9%88%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA%D9%87%D8%A7-r148/" rel="">كيفية تثبيت شهادة <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr></abbr> من سلطة شهادات تجارية: الحصول على الشهادة وتثبيتها</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">684</guid><pubDate>Fri, 10 Feb 2023 17:00:00 +0000</pubDate></item><item><title>&#x631;&#x641;&#x639; &#x645;&#x644;&#x641;&#x627;&#x62A; &#x645;&#x648;&#x642;&#x639; &#x627;&#x644;&#x648;&#x64A;&#x628; &#x625;&#x644;&#x649; &#x62E;&#x627;&#x62F;&#x645; &#x639;&#x644;&#x649; &#x627;&#x644;&#x625;&#x646;&#x62A;&#x631;&#x646;&#x62A;</title><link>https://academy.hsoub.com/devops/servers/%D8%B1%D9%81%D8%B9-%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-r610/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_05/627b918fbad8f_-------.png.20b98626cf5af4d0520884068beffb4f.png" /></p>

<p>
	قد ترغب في نشر صفحة الويب البسيطة التي بنيتها ليزورها الجميع وذلك برفعها إلى خادم ويب، لهذا سنناقش في هذا المقال طريقة تنفيذ الأمر مستخدِمين عدة خيارات وأدوات متاحة، مثل عميل SFTP وRSync وGitHub وGoogle App Engine، كما يُنصح قبل متابعة القراءة بالاطلاع على <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r574/" rel="">مفهوم خادم الويب</a> و<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/" rel="">آلية عمل أسماء النطاقات</a>، كما ينبغي أن تكون على دراية بطريقة إعداد بيئة عمل بسيطة من أجل <a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D9%84%D9%85-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8/" rel="">تطوير الويب</a> وكيفية كتابة صفحات ويب.
</p>

<h2>
	بروتوكول نقل الملفات الآمن SFTP
</h2>

<p>
	ستجد العديد من الأدوات التي تخدم مثل عميل لبروتوكول SFTP، وسنغطي في مقالنا <a href="https://filezilla-project.org/" rel="external nofollow">FileZilla</a> كونها أداةً مجانيةً متاحةً للاستخدام في ويندوز وماك ولينوكس، ولتثبيت الأداة FileZilla، انتقل إلى صفحة التنزيل الرئيسية الخاصة بها، ثم انقر الزر الكبير الذي يحمل العنوان تنزيل Download، بعد ذلك ثبتها من خلال ملف التثبيت الذي نزّلته بالطريقة الاعتيادية.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p>
		ملاحظة: ستجد بالطبع الكثير من الخيارات، ويمكنك الاطلاع على مقال التكلفة المادية الكاملة لبناء موقع ويب لمعلومات أكثر.
	</p>
</blockquote>

<p>
	افتح تطبيق FileZilla وسترى نافذةً تشبه النافذة في الصورة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="98448" href="https://academy.hsoub.com/uploads/monthly_2022_05/01_filezilla_app.png.3a5d0fe5459530f433b5d9d6f1e38131.png" rel=""><img alt="01_filezilla_app.png" class="ipsImage ipsImage_thumbnailed" data-fileid="98448" data-unique="y4jdb9xav" src="https://academy.hsoub.com/uploads/monthly_2022_05/01_filezilla_app.png.3a5d0fe5459530f433b5d9d6f1e38131.png"></a>
</p>

<h3>
	تسجيل الدخول
</h3>

<p>
	سنفترض في مثالنا أنّ مزود خدمة الاستضافة -أي الخدمة التي تستضيف خادم ويب <a href="https://academy.hsoub.com/programming/general/%d9%85%d8%af%d8%ae%d9%84-%d8%a5%d9%84%d9%89-http-r73/" rel="">HTTP</a> الخاص بنا- هي الشركة الوهمية "Example Hosting Provider" التي تعطي لمواردها <a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%B9%D9%86%D9%88%D8%A7%D9%86-url-%D9%88%D8%A3%D9%86%D9%88%D8%A7%D8%B9%D9%87-r1435/" rel="">عناوين URL</a>.
</p>

<p>
	لنفترض أننا أنشأنا حسابًا وتلقينا المعلومات التالية:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p>
		تهانينا لاختيارك إنشاء حساب على Example Hosting Provider.
	</p>

	<p>
		حسابك هو: <code>demozilla</code>.
	</p>

	<p>
		يمكنك متابعة موقعك الإلكتروني على العنوان: <code>demozilla.examplehostingprovider.net</code>.
	</p>

	<p>
		الرجاء استخدام SFTP لكي تنشر مواردك على هذا الحساب مستخدمًا الثبوتيات التالية:
	</p>

	<ul>
<li>
			خادم SFTP المخصص: <code>sftp://demozilla.examplehostingprovider.net</code>.
		</li>
		<li>
			اسم المستخدِم: <code>demozilla</code>.
		</li>
		<li>
			كلمة المرور: <code>quickbrownfox</code>.
		</li>
		<li>
			المنفذ: <code>5548</code>.
		</li>
		<li>
			ضع ملفاتك في المجلد <code>Public/htdocs</code> من أجل النشر على الويب.
		</li>
	</ul>
</blockquote>

<p>
	لنلق نظرةً في البداية على العنوان <code>/http://demozilla.examplehostingprovider.net</code>، وبالطبع لن تجد شيئًا فيه.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="98449" href="https://academy.hsoub.com/uploads/monthly_2022_05/02_website_is_empty.png.9931cd2654e95d9c97505b46d17db38b.png" rel=""><img alt="02_website_is_empty.png" class="ipsImage ipsImage_thumbnailed" data-fileid="98449" data-unique="hxhs93nvl" src="https://academy.hsoub.com/uploads/monthly_2022_05/02_website_is_empty.png.9931cd2654e95d9c97505b46d17db38b.png"></a>
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p>
		ملاحظة: لن تجد غالبًا صفحةً فارغةً عندما تزور موقعك للمرة الأولى وإنما عبارات من قبيل "هذا الموقع مُستضاف من قِبَل (شركة استضافة)"، ويختلف ذلك من مزود خدمة استضافة إلى آخر.
	</p>
</blockquote>

<p>
	اتبع الآن الخطوات التالية لتتصل بالخادم البعيد عبر عميل SFTP الذي ثبتّه:
</p>

<ol>
<li>
		اختر من القائمة الرئيسية: ملف File &gt; مدير الموقع Site Manager.
	</li>
	<li>
		انقر على الزر "موقع جديد New Site" في نافذة "مدير الموقع Site Manager" وسمِّ الموقع "demozilla" ضمن المساحة المخصصة لذلك.
	</li>
	<li>
		ضع في حقل "المضيف Host" اسم خادم SFTP الذي زودتك به الشركة.
	</li>
	<li>
		اختر "عادي Normal" من قائمة نمط تسجيل الدخول Logon Type المنسدلة، ثم اكتب اسم المستخدِم وكلمة المرور في الأماكن المخصصة لذلك.
	</li>
	<li>
		ضع رقم المنفذ وبقية المعلومات المطلوبة في أماكنها المخصصة.
	</li>
</ol>
<p style="text-align: center;">
	<img alt="03_setup_new_site.png" class="ipsImage ipsImage_thumbnailed" data-fileid="98450" data-unique="m5z10tkox" src="https://academy.hsoub.com/uploads/monthly_2022_05/03_setup_new_site.png.732f3d787029bf830002d3d0655dff41.png" style="width: 500px; height: auto;"></p>

<p>
	انقر الآن على زر "اتصال Connect" لتتصل بالخادم.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p>
		ملاحظة: تأكد من دعم مزود خدمة الاستضافة لبروتوكول SFTP أو بروتوكول FTP الآمن، ولا تستخدم FTP فهو غير آمن.
	</p>
</blockquote>

<h3>
	العرض المشترك للموارد على حاسوبك وعلى الخادم
</h3>

<p>
	ستبدو نافذة التطبيق كما يلي عند نجاح الاتصال بالخادم، والصورة التالية ما هي إلا مثال خاص لإيضاح الفكرة فقط:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="98451" href="https://academy.hsoub.com/uploads/monthly_2022_05/04_joint_view_local_far.png.a9265b0084fb98dc7bec31e537b4efc5.png" rel=""><img alt="04_joint_view_local_far.png" class="ipsImage ipsImage_thumbnailed" data-fileid="98451" data-unique="amh81adc9" src="https://academy.hsoub.com/uploads/monthly_2022_05/04_joint_view_local_far.png.a9265b0084fb98dc7bec31e537b4efc5.png"></a>
</p>

<p>
	لنلق نظرةً على ما تعرضه الصورة:
</p>

<ul>
<li>
		ستجد في القسم اليساري نافذة الملفات المحلية، حيث تستطيع من خلالها الانتقال إلى المجلد الذي تخزّن فيه موقعك.
	</li>
	<li>
		ستجد في القسم اليميني اليساري نافذة الملفات الموجودة على الخادم -أي البعيدة- بعد دخولنا إلى المجلد الخاص بالموقع على الخادم عبر بروتوكول SFTP.
	</li>
	<li>
		يمكنك تجاهل الأقسام العليا والسفلى حاليًا، وهي بالترتيب نافذة سجل الرسائل التي تعرض حالة الاتصال بين حاسوبك وخادم SFTP، وتمثل الأخرى سجلًا آنيًا لمعلومات التفاعل بين عميل SFTP الخاص بك والخادم.
	</li>
</ul>
<h3>
	رفع الموارد إلى الخادم
</h3>

<p>
	تخبرنا إرشادات خادم الاستضافة في مثالنا أنه علينا وضع الموارد في المجلد البعيد <code>Public/htdocs</code> حتى تُنشَر على الويب، إذًا لا بدّ من الانتقال إلى المجلد المحدَّد ضمن القسم اليساري من نافذة العميل. ويمثِّل هذا المجلد جذر موقع الويب، إذ ينبغي وجود الملف الرئيسي للموقع index.html، وبقية الموارد الداعمة له ضمن هذا المجلد، وعندما تصل إلى المجلد الجذر، اسحب الملفات والموارد التي تريد رفعها إلى الخادم من القسم الأيسر لنافذة العميل إلى القسم الأيمن من النافذة.
</p>

<h3>
	التحقق من وجود الملفات على ويب بعد رفعها
</h3>

<p>
	يمكنك التحقق من وجود الملفات التي رفعتها بطلب عنوان موقعك عبر المتصفح في مثالنا.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_2612_8" style="">
<span class="pun">/</span><span class="pln">http</span><span class="pun">:</span><span class="com">//demozilla.examplehostingprovider.net</span><span class="pln">
</span></pre>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="98452" href="https://academy.hsoub.com/uploads/monthly_2022_05/05_check_uploaded_files.png.f060db83687137b952172b9b61ec8319.png" rel=""><img alt="05_check_uploaded_files.png" class="ipsImage ipsImage_thumbnailed" data-fileid="98452" data-unique="7ww9qore7" src="https://academy.hsoub.com/uploads/monthly_2022_05/05_check_uploaded_files.png.f060db83687137b952172b9b61ec8319.png"></a>
</p>

<p>
	وبهذا تكون العملية قد اكتملت بنجاح.
</p>

<h2>
	استخدام الأداة Rsync
</h2>

<p>
	تُستخدَم الأداة <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%AA%D8%AE%D8%AF%D9%90%D9%85-rsync-%D9%84%D9%85%D8%B2%D8%A7%D9%85%D9%86%D8%A9-%D9%85%D8%AC%D9%84%D9%91%D8%AF%D8%A7%D8%AA-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AC%D9%87%D8%A7%D8%B2-%D8%A7%D9%84%D9%85%D8%AD%D9%84%D9%91%D9%8A-%D9%88%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%88%D9%85-r50/" rel="">Rsync</a> لمزامنة الملفات المحلية والبعيدة، وتتوفر الأداة عمومًا في معظم الأنظمة المبنية على يونكس مثل ماك ولينوكس، كما تتواجد نسخ تعمل على ويندوز أيضًا، ويُنظَر إلى هذه الأداة على أنها أكثر تقدمًا من عملاء SFTP لأنها تستخدَم في سطر الأوامر افتراضيًا، إذ يبدو الأمر الأساسي كما يلي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8221_23" style="">
<span class="pln">rsync </span><span class="pun">[-</span><span class="pln">options</span><span class="pun">]</span><span class="pln"> SOURCE user@x</span><span class="pun">.</span><span class="pln">x</span><span class="pun">.</span><span class="pln">x</span><span class="pun">.</span><span class="pln">x</span><span class="pun">:</span><span class="pln">DESTINATION</span></pre>

<ul>
<li>
		<code>‎-options‎‎‎</code>: وهي عبارة عن شرطة <code>-</code> يتبعها حرف أو أكثر مثل <code>v-</code> لإظهار رسائل الخطأ الطويلة و<code>b-</code> لإجراء نسخ احتياطي، كما يمكنك الاطلاع على قائمة الخيارات ضمن <a href="https://linux.die.net/man/1/rsync" rel="external nofollow">الصفحة الرئيسية للأداة Rsync</a>.
	</li>
	<li>
		<code>SOURCE</code>: يمثِّل المسار إلى الملف أو المجلد المحلي الذي تريد نسخ الملفات منه.
	</li>
	<li>
		<code>@user</code>: يمثِّل ثبوتيات المستخدِم على الخادم البعيد الذي تريد نسخ الملفات إليه.
	</li>
	<li>
		<code>x.x.x.x</code>: عنوان IP الخاص بالخادم البعيد.
	</li>
	<li>
		<code>DESTINATION</code>: يمثِّل المسار أو الموقع على الخادم البعيد الذي تريد نسخ الملفات أو المجلدات إليه.
	</li>
</ul>
<p>
	عليك الحصول على المعلومات السابقة من مزود خدمة الاستضافة، كما من الجيد دائمًا استخدام اتصال آمن كما هو الحال مع FTP، لذلك يمكن تحديد التفاصيل الخاصة ببروتوكول <a href="https://academy.hsoub.com/devops/security/ssh/%D8%AF%D9%84%D9%8A%D9%84-%D8%A8%D8%B5%D8%B1%D9%8A-%D9%84%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D9%86%D9%81%D8%A7%D9%82-ssh-r508/" rel=""><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></a> لتنفيذ الاتصال باستخدامه من خلال الخيار <code>e-</code>، وإليك المثال التالي:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_8221_18" style="">
<span class="pln">rsync </span><span class="pun">[-</span><span class="pln">options</span><span class="pun">]</span><span class="pln"> </span><span class="pun">-</span><span class="pln">e </span><span class="str">"<abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">ssh</abbr> [هنا <abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr> ضع تفاصيل]"</span><span class="pln"> SOURCE user@x</span><span class="pun">.</span><span class="pln">x</span><span class="pun">.</span><span class="pln">x</span><span class="pun">.</span><span class="pln">x</span><span class="pun">:</span><span class="pln">DESTINATION</span></pre>

<h3>
	واجهات رسومية للأداة Rsync
</h3>

<p>
	أدوات الواجهات الرسومية متوفرة لهؤلاء الذين لا يرتاحون بالتعامل مع سطر الأوامر مثل الأداة <a href="https://acrosync.com/mac.html" rel="external nofollow">Acrosync</a> المتاحة في نظامَي التشغيل ويندوز وماك، وتذكَّر أنه عليك الحصول على الثبوتيات اللازمة للوصول إلى موقعك من خادم الاستضافة، إذ سيكون دور الواجهة الرسومية تسهيل إدخال هذه الثبوتيات.
</p>

<h2>
	نشر موقع ويب على جيت هاب GitHub
</h2>

<p>
	يُعَدّ جيت هاب <a href="https://github.com/" rel="external nofollow">GitHub</a> موقع ويب لكتابة الشيفرة بصورة جماعية، حيث يمكّنك من رفع الشيفرة وتخزينها في مستودعات <a href="https://git-scm.com/book/en/v2/Getting-Started-About-Version-Control" rel="external nofollow">منظومة إدارة النُسخ</a> الخاصة بالموقع، كما يتيح لك هذا الموقع المفتوح المصدر لاحقًا إمكانية التعاون مع أطراف أخرى للعمل على شيفرتك، حيث يمكن لأيّ كان الوصول إلى شيفرتك واستخدامها والتعلم منها وتطويرها أيضًا، كما يمكنك بالطبع فعل الأمر ذاته مع أيّ شيفرة ضمن الموقع، وسيرشدك هذا المقال إلى كيفية نشر المحتوى على الويب باستخدام الميّزات التي تقدمها صفحات جيت هاب GitHub-pages.
</p>

<h3>
	نشر المحتوى
</h3>

<p>
	يُعَدّ جيت هاب مجتمعًا غايةً في الأهمية والفائدة، كما تُعَدّ جيت <a href="ttps://git-scm.com/" rel="external nofollow">Git</a> منظومة إدارة نُسخ شعبيةً جدًا تستخدِمها معظم الشركات حاليًا أثناء تطوير برمجياتها، كما يمتلك جيت هاب ميزةً هامةً تُدعى صفحات <a href="https://pages.github.com/" rel="external nofollow">جيت هاب</a> تتيح لك نشر شيفرة المواقع على الويب مباشرةً.
</p>

<h4>
	الإعدادات الأساسية
</h4>

<ol>
<li>
		<a href="https://git-scm.com/downloads" rel="external nofollow">ثبّت جيت</a> أولًا على حاسوبك، فهي البنية البرمجية التحتية لمنظومة إدارة النسخ ويعمل جيت هاب اعتمادًا عليها.
	</li>
	<li>
		سجّل بعد ذلك <a href="https://github.com/join" rel="external nofollow">حسابًا جديدًا على جيت هاب</a>، وهذه العملية بسيطة وسهلة.
	</li>
	<li>
		سجّل دخولك إلى <a href="https://github.com/" rel="external nofollow">الموقع</a> عندما يكتمل حسابك الجديد باستخدام كلمة السر واسم المستخدِم الخاصَّين بك.
	</li>
</ol>
<h4>
	تحضير الشيفرة لرفعها
</h4>

<p>
	يمكنك تخزين الشيفرة التي تريد في مستودعات جيت هاب، لكن لا بدّ من تنظيم شيفرتك على أساس شيفرة موقع ويب تقليدي حتى تستفيد من ميزة صفحات جيت هاب بكامل طاقتها، إذ ينبغي مثلًا وجود نقطة دخول إلى موقعك على شكل ملف <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> يحمل الاسم <code>index.html</code>، كما يجب أيضًا تهيئة مجلد الشيفرة ليصبح مستودع جيت قبل متابعة العمل، واتبع الخطوات التالية لتنفيذ الأمر:
</p>

<ol>
<li>
		انتقل من خلال سطر الأوامر إلى المجلد الذي يحتوي على موقعك مستخدِمًا تعليمة تغيير المجلد <code>cd</code> وسنفترض أنه يحمل الاسم test-site وموجود على سطح المكتب:
	</li>
</ol>
<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8221_26" style="">
<span class="pln">cd </span><span class="typ">Desktop</span><span class="pun">/</span><span class="pln">test</span><span class="pun">-</span><span class="pln">site</span></pre>

<ol start="2">
<li>
		نفّذ التعليمة التالية عندما تصل إلى داخل المجلد المطلوب، والتي تطلب من الأداة <code>git</code> تحويل مجلدك إلى مستودع جيت:
	</li>
</ol>
<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_8221_28" style="">
<span class="pln">git init</span></pre>

<h5>
	واجهات سطر الأوامر
</h5>

<p>
	ستكون أفضل الطرق لرفع الشيفرة إلى جيت هاب هي عبر <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%A7-%D9%87%D9%88-%D8%B3%D8%B7%D8%B1-%D8%A7%D9%84%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D8%9F-r353/" rel="">سطر الأوامر</a>، إذ سيظهر على صورة نافذة تكتب فيها التعليمات التي تنفذ وظائف معينة مثل إنشاء ملفات أو تنفيذ برنامج معيّن، بدلًا من النقر على أزرار واجهة مستخدِم ما، وستبدو نافذة سطر الأوامر مشابهةً للصورة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="98453" href="https://academy.hsoub.com/uploads/monthly_2022_05/06_command_line_interface.png.d59a521e6332a0bb71b22d3c1223c267.png" rel=""><img alt="06_command_line_interface.png" class="ipsImage ipsImage_thumbnailed" data-fileid="98453" data-unique="lnmwecynt" src="https://academy.hsoub.com/uploads/monthly_2022_05/06_command_line_interface.png.d59a521e6332a0bb71b22d3c1223c267.png"></a>
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p>
		ملاحظة: يمكنك أيضًا استخدام <a href="https://git-scm.com/downloads/guis" rel="external nofollow">واجهة جيت الرسومية</a> لتنفيذ العمل ذاته إذا لم تعتد العمل على سطر الأوامر.
	</p>
</blockquote>

<p>
	يحتوي أي نظام تشغيل على أداة سطر الأوامر:
</p>

<ul>
<li>
		<strong>ويندوز</strong>: وتُدعى موجِّه الأوامر Command Prompt، ويمكن الوصول إلى الأداة بالضغط على المفتاح Windows ثم كتابة Command Prompt واختياره من القائمة التي ستظهر، وتذكّر أنّ سطر أوامر ويندوز مختلف عن مثلائه في لينوكس وماك، لذلك قد تختلف التعليمات التي ستراها تاليًا وفقًا لنظام التشغيل.
	</li>
	<li>
		<strong>OS X</strong>: وتُدعى طرفية Terminal، وللوصول إليها انتقل إلى تطبيقات Applications، ثم مرافق Utilities.
	</li>
	<li>
		<strong>لينوكس</strong>: وتُدعى طرفية Terminal أيضًا، ويمكن الوصول إليها عادةً بضغط المفاتيح Ctrl + Alt + T، وإذا تعذر ذلك، فابحث عنها ضمن شريط التطبيقات أو في القائمة.
	</li>
</ul>
<p>
	قد يخيفك الأمر في البداية، لكنك ستعتاد على هذه المهام الروتينية، فكل ما عليك فعله هو إخبار الحاسوب بما تحتاج من خلال كتابة الأمر المناسب ثم الضغط على المفتاح Enter.
</p>

<h4>
	بناء مستودع خاص بشيفرتك
</h4>

<p>
	لا بدّ من إنشاء مستودع جديد لملفاتك على أساس خطوة ثانية.
</p>

<ol>
<li>
		انقر على زر الإضافة (+) في أعلى يمين صفحة جيت هاب الرئيسية، بعد ذلك اختر مستودعًا جديدًا.
	</li>
	<li>
		اكتب اسم المستودع المناسب لشيفرتك في صندوق اسم المستودع Repository name عندما تنتقل إلى صفحة إنشاء مستودع جديد، ليكون مثلًا my-repository.
	</li>
	<li>
		اكتب معلومات عن المحتويات التي ستضعها في المستودع في حقل الوصف Description كما في الصورة التالية:
	</li>
</ol>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="98454" href="https://academy.hsoub.com/uploads/monthly_2022_05/07_create_new_repo.png.4a7caeeded4dc74adddda39f40683bc7.png" rel=""><img alt="07_create_new_repo.png" class="ipsImage ipsImage_thumbnailed" data-fileid="98454" data-unique="17ao7yjzu" src="https://academy.hsoub.com/uploads/monthly_2022_05/07_create_new_repo.png.4a7caeeded4dc74adddda39f40683bc7.png"></a>
</p>

<ol start="4">
<li>
		انقر على زر إنشاء مستودع Create repository وستظهر لك الصفحة التالية:
	</li>
</ol>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="98455" href="https://academy.hsoub.com/uploads/monthly_2022_05/08_new_repo_page.png.e9c3269ce307cf93b5f7806725e4aa98.png" rel=""><img alt="08_new_repo_page.png" class="ipsImage ipsImage_thumbnailed" data-fileid="98455" data-unique="mt3fnmwct" src="https://academy.hsoub.com/uploads/monthly_2022_05/08_new_repo_page.png.e9c3269ce307cf93b5f7806725e4aa98.png"></a>
</p>

<h4>
	رفع الملفات إلى جيت هاب
</h4>

<ol>
<li>
		سترى سطرين من الشيفرة في صفحة المستودع الجديد وفق القسم الذي يحمل العنوان "… أو ادفع مستودعًا موجودًا عبر سطر الأوامر or push an existing repository from the command line…"؛ انسخ السطر الأول بالكامل والصقه في نافذة سطر الأوامر، ثم اضغط المفتاح Enter، إذ سيبدو الأمر مشابهًا للصورة التالية:
	</li>
</ol>
<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_8221_32" style="">
<span class="pln">git remote add origin https</span><span class="pun">:</span><span class="com">//github.com/chrisdavidmills/my-repository.git</span></pre>

<ol start="2">
<li>
		اكتب سطرَي الأوامر التاليين ثم اضغط المفتاح Enter بعد كل سطر، حيث تحضِّر التعليمات السابقة الشيفرة للرفع إلى جيت هاب وتطلب من جيت إدارة ملفات الشيفرة.
	</li>
</ol>
<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_8221_34" style="">
<span class="pln">git add </span><span class="pun">--</span><span class="pln">all
git commit </span><span class="pun">-</span><span class="pln">m </span><span class="str">'adding my files to my repository'</span></pre>

<ol start="3">
<li>
		ادفع الشيفرة في النهاية إلى جيت هاب بالانتقال إلى صفحة الويب جيت هاب التي كنا فيها، ثم أدخل السطر الثاني من الشيفرة الموجودة في القسم "… أو ادفع مستودعًا موجودًا عبر سطر الأوامر or push an existing repository from the command line…" إلى الطرفية أو موجِّه سطر الأوامر واضغط المفتاح Enter.
	</li>
</ol>
<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_8221_36" style="">
<span class="pln">git push </span><span class="pun">-</span><span class="pln">u origin main</span></pre>

<ol start="4">
<li>
		علينا الآن تفعيل ميزة صفحات جيت هاب في المستودع الجديد الذي رفعت إليه ملفات الشيفرة، لذلك اختر الأمر "إعدادات Setting" في صفحة الويب الخاصة بمستودعك ثم الأمر "صفحات Pages" من الشريط الجانبي على يسار الصفحة، واختر بعد ذلك الفرع "رئيسي Main" أسفل الأمر مصدر Source، إذ سيسبب ذلك تحديث الصفحة.
	</li>
	<li>
		انتقل إلى قسم صفحات جيت هاب مجددًا، وسترى سطرًا جديدًا مفاده أنّ موقعك أصبح جاهزًا ليُنشر على العنوان https://xxxxxx.
	</li>
	<li>
		إذا نقرت على عنوان URL السابق، فستنتقل إلى نسخة حية لموقعك تُعرض فيها محتويات الصفحة التي تُدعى <code>index.html</code>، والتي تُعرض افتراضيًا؛ لكن إذا كانت الصفحة الرئيسية لموقعك لا تحمل الاسم السابق وإنما <code>myPage.html</code> مثلًا، فعليك حينها الانتقال إليها بنفسك بطلب عنوانها <code>https://xxxxxx/myPage.html</code>.
	</li>
</ol>
<h4>
	معلومات أكثر عن جيت هاب
</h4>

<p>
	إذا أردت إجراء تعديلات أكثر على موقعك ومن ثم رفع الشيفرة المعدَّلة إلى جيت هاب، فعليك تطبيق التغييرات التي أجريتها سابقًا على ملفات موقعك كما فعلت سابقًا، ثم إدخال الأوامر التالية مع الضغط على المفتاح"Enter" بعد كل أمر لدفع التعديلات إلى جيت هاب:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_8221_38" style="">
<span class="pln">git add </span><span class="pun">--</span><span class="pln">all
git commit </span><span class="pun">-</span><span class="pln">m </span><span class="str">'another commit'</span><span class="pln">
git push</span></pre>

<p>
	ضع مكان العبارة another commit أيّ رسالة أخرى تراها مناسبة لوصف التعديلات التي أجريتها.
</p>

<p>
	يُعَدّ ما قدمناه عن جيت بدايةً متواضعةً جدًا، ولتتعمق أكثر عليك الاطلاع على المزيد من المقالات والدورات التعليمية حول جيت وجيت هاب.
</p>

<h2>
	استضافة مواقع ويب على محرك جوجل آب
</h2>

<p>
	يُعَدّ محرك جوجل آب <a href="https://cloud.google.com/appengine/" rel="external nofollow">Google App Engine</a> منصةً فعالةً لبناء وتشغيل التطبيقات بالاستفادة من البنية التحتية لجوجل، سواءً أردت بناء موقع ويب من الصفر، أو استضافة موقع ويب ساكن static website، كما سنرشدك فيما يأتي إلى طريقة استضافة موقعك على جوجل آب خطوةً بخطوة.
</p>

<h3>
	إنشاء مشروع على منصة جوجل السحابية
</h3>

<p>
	لا بدّ من إنشاء مشروع جديد على منصة جوجل السحابية Google Cloud Platform قبل البدء باستخدام أدوات جوجل، ويتطلب ذلك بالطبع امتلاك حساب على جوجل.
</p>

<ol>
<li>
		انتقل إلى لوحة محرك التطبيقات <a href="https://console.cloud.google.com/projectselector/appengine" rel="external nofollow">App Engine dashboard</a> ضمن طرفية منصة جوجل السحابية، وانقر زر إنشاء Create.
	</li>
	<li>
		إذا لم تنشئ مشروعًا من قبل، فعليك تحديد ما إذا أردت استقبال بريد إلكتروني عن آخر التحديثات أم لا، ثم الموافقة على شروط الخدمة. ويفترض بعدها أن تكون قادرًا على متابعة العمل.
	</li>
	<li>
		اختر اسمًا للمشروع ثم اعدل على معرفه ID، واحفظه، إذ سنستخدِم القيم التالية في هذه الإرشادات:
	</li>
</ol>
<ul>
<li>
		اسم المشروع: GAE Sample Site.
	</li>
	<li>
		معرّف المشروع: gaesamplesite.
	</li>
</ul>
<ol>
<li>
		انقر على زر إنشاء Create لإنشاء مشروعك.
	</li>
</ol>
<h3>
	إنشاء تطبيق
</h3>

<p>
	يمكن أن يضم كل مشروع سحابي تطبيقًا واحدًا وهذا ما سنفعله الآن:
</p>

<ol>
<li>
		نحتاج إلى تطبيق تجريبي لننشره، فإذا لم يكن لديك تطبيق لاستخدامه، فنزِّل <a href="https://gaesamplesite.appspot.com/downloads.html" rel="external nofollow">التطبيق التجريبي</a> الذي أعددناه لهذا الغرض وفك ضغطه.
	</li>
	<li>
		لنلق نظرةً على هيكلية التطبيق التجريبي، حيث يحتوي المجلد <code>website</code> على ملفات المشروع بالإضافة إلى ملف الإعدادات <code>app.ymal</code>.
	</li>
</ol>
<ul>
<li>
		لا بدّ أن تكون محتويات موقعك ضمن المجلد <code>website</code> وأن تحمل الصفحة الرئيسية للموقع الاسم <code>index.html</code> وما عدا ذلك يمكنها أخذ الشكل الذي تريد.
	</li>
	<li>
		يخبر ملف الإعدادات <code>app.yaml</code> محرك التطبيقات عن كيفية ربط العناوين التي تقود إلى ملفاتك الساكنة، ولا حاجة لتعديل أيّ شيء فيه.
	</li>
</ul>
<h3>
	نشر التطبيق
</h3>

<p>
	سنحاول نشر التطبيق التجريبي الآن بعد تجهيزنا إياه:
</p>

<ol>
<li>
		افتح مفسّر أوامر أو صدفة سحابة جوجل <a href="https://console.cloud.google.com/cloudshell/editor" rel="external nofollow">Google Cloud Shell</a>.
	</li>
	<li>
		اسحب المجلد <code>sample-app</code> وافلته في لوحة محرر الشيفرة.
	</li>
	<li>
		نفِّذ الأمر التالي لاختيار مشروعك:
	</li>
</ol>
<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8221_44" style="">
<span class="pln">gcloud config </span><span class="kwd">set</span><span class="pln"> project gaesamplesite</span></pre>

<ol start="4">
<li>
		نفّذ الأمر التالي للانتقال إلى مجلد تطبيقك:
	</li>
</ol>
<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8221_46" style="">
<span class="pln">cd sample</span><span class="pun">-</span><span class="pln">app</span></pre>

<ol start="5">
<li>
		بهذا تكون قد أصبحتَ جاهزًا الآن لنشر التطبيق، أي لرفع تطبيقك إلى محرك تطبيقات جوجل:
	</li>
</ol>
<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_8221_48" style="">
<span class="pln">gcloud app deploy</span></pre>

<ol start="6">
<li>
		أدخِل رقمًا ليدل على المنطقة التي ستضع فيها تطبيقك.
	</li>
	<li>
		اضغط المفتاح <code>Y</code> لتأكيد ما اخترته.
	</li>
	<li>
		انتقل إلى تطبيقك عبر المتصفح بكتابة عنوانه على الصورة <code>your-project-id.appspot.com</code> لمشاهدة موقعك على الإنترنت، وسنستبدل <code>your-project-id</code> في تطبيقنا التجريبي بمعرِّف التطبيق<code>gaesamplesite</code> ليصبح العنوان على الصورة <code>gaesamplesite.appspot.com</code>.
	</li>
</ol>
<h2>
	طرق أخرى لرفع الملفات
</h2>

<p>
	يّعَدّ بروتوكول FTP من البروتوكولات المعروفة جيدًا لنشر مواقع الويب، لكنه بالطبع ليس الوحيد في هذا المضمار، وإليك بعض الخيارات الأخرى:
</p>

<ul>
<li>
		<strong>واجهات ويب Web interfaces</strong>: وهي واجهة مكتوبة بلغة HTML تعمل على أساس واجهة أمامية لخدمة رفع ملفات عن بعد موجودة على خادم الاستضافة.
	</li>
	<li>
		<strong><a href="https://developer.mozilla.org/en-US/docs/Glossary/WebDAV" rel="external nofollow">WebDAV</a></strong>: وهو توسعة لبروتوكول HTTP يسمح بإدارة أوسع للملفات.
	</li>
</ul>
<h2>
	اقرأ أيضا
</h2>

<ul>
<li>
		اطلع على توثيق محرك تطبيقات جوجل عبر <a href="https://cloud.google.com/appengine/docs" rel="external nofollow">صفحته الرسمية</a>.
	</li>
	<li>
		لابد من الإشارة إلى إمكانية استضافة المواقع على جيت هاب مستخدمًا اسم النطاق الذي تريده، كما يمكنك الاطلاع على معلومات أكثر عن الموضوع من خلال <a href="https://help.github.com/articles/using-a-custom-domain-with-github-pages/" rel="external nofollow">ملفات المساعدة الإلكترونية</a> الخاصة بموقع جيت هاب.
	</li>
</ul>
<p>
	ترجمة -وبتصرف- للمقالات التالية:
</p>

<ul>
<li>
		<a href="https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Upload_files_to_a_web_server" rel="external nofollow">?How do you upload your files to a web server</a>.
	</li>
	<li>
		<a href="https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Using_Github_pages" rel="external nofollow">?How do I use GitHub Pages</a>.
	</li>
	<li>
		<a href="https://developer.mozilla.org/en-US/docs/Learn/Common_questions/How_do_you_host_your_website_on_Google_App_Engine" rel="external nofollow">?How do you host your website on Google App Engine</a>.
	</li>
</ul>
<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%B3%D8%A7%D8%B9%D8%AF%D8%A9-%D8%A7%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D9%81%D9%8A-%D9%81%D9%87%D9%85-%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%B1%D9%81%D8%B9-%D8%A7%D9%84%D9%85%D9%88%D9%82%D8%B9-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-r533/" rel="">مساعدة المبتدئين في فهم كيفية رفع الموقع على الإنترنت</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/networking/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%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-%D9%81%D9%8A-%D8%B4%D8%A8%D9%83%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-r573/" rel="">مدخل إلى أسماء النطاقات في شبكة الإنترنت</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D8%AD%D8%B1%D9%83-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-r572/" rel="">الفرق بين صفحة الويب وموقع الويب وخادم الويب ومحرك البحث</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D9%84%D9%85-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8/" rel="">المدخل الشامل لتعلم تطوير الويب</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">610</guid><pubDate>Tue, 17 May 2022 16:04:00 +0000</pubDate></item><item><title>&#x625;&#x639;&#x62F;&#x627;&#x62F; &#x62E;&#x627;&#x62F;&#x645; &#x627;&#x62E;&#x62A;&#x628;&#x627;&#x631; &#x645;&#x62D;&#x644;&#x64A;</title><link>https://academy.hsoub.com/devops/servers/%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D8%AE%D8%AA%D8%A8%D8%A7%D8%B1-%D9%85%D8%AD%D9%84%D9%8A-r609/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_05/627b87735a3f6_---.png.7a57f70b10725bd8e9f6b6c2527c8e0d.png" /></p>

<p>
	يصف المقال طريقة إعداد خادم اختبار محلي على حاسوبك وكيفية استخدامه، كما ننصحك بدايةً بالاطلاع على <a href="https://academy.hsoub.com/devops/networking/%D8%A2%D9%84%D9%8A%D8%A9-%D8%B9%D9%85%D9%84-%D8%B4%D8%A8%D9%83%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-r571/" rel="">كيفية عمل الإنترنت</a> والتعرُّف على <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r574/" rel="">خادم الويب</a>.
</p>

<h2>
	الملفات على الخادم المحلي موازنة بالملفات على خادم بعيد
</h2>

<p>
	يمكنك بكل بساطة فتح ملف <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> أو صفحة ويب على حاسوبك بالنقر المزدوج عليه، أو من خلال سحبه ثم إفلاته داخل المتصفح، أو من خلال قائمة ملف File ثم فتح Open، ومن ثم الانتقال إلى الملف المطلوب، ولاحظ أنّ أيّ ملف موجود على القرص الصلب لحاسوبك سيبدأ عنوانه بالشكل <code>//:file</code> يلي ذلك مسار الملف، بينما إذا استعرضت ملفًا على جيت هاب GitHub أو على أيّ خادم آخر، فستلاحظ بدء عنوانه بـ <code>//:http</code> أو <code>//:https</code> للدلالة على حصولنا عليه عبر <a href="https://academy.hsoub.com/programming/general/%d9%85%d8%af%d8%ae%d9%84-%d8%a5%d9%84%d9%89-http-r73/" rel="">بروتوكول HTTP</a>.
</p>

<h2>
	مشكلة اختبار الملفات المحلية
</h2>

<p>
	لن تتمكن من فتح بعض الأمثلة إذا عاملتها على أنها ملفات محلية، إذ يعود ذلك إلى أسباب مختلفة أهمها:
</p>

<ul>
<li>
		قد تمثل هذه الملفات ردودًا لطلبات غير متزامنة asynchronous requests: لن تنفِّذ بعض المتصفحات -بما فيها جوجل كروم- الطلبات غير المتزامنة إذا جرى طلبها عن طريق ملف محلي لأسباب تتعلق بقيود أمنية.
	</li>
	<li>
		قد تستخدم هذه الملفات شيفرة لغات تعمل على الخادم: مثل <a href="https://wiki.hsoub.com/PHP" rel="external">PHP</a> أو <a href="https://wiki.hsoub.com/Python" rel="external">بايثون</a>، والتي تتطلب خوادم خاصة لتفسير الشيفرة وإيصال النتائج.
	</li>
	<li>
		تعامل المتصفحات الطلبات التي تحمِّل موارد محلية عبر بروتوكول <code>file://‎</code> على أنها <a href="https://academy.hsoub.com/programming/javascript/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-fetch-%D9%85%D8%B9-%D8%A7%D9%84%D8%B7%D9%84%D8%A8%D8%A7%D8%AA-%D8%B0%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B5%D9%84-%D8%A7%D9%84%D9%85%D8%AE%D8%AA%D9%84%D8%B7-cross-origin-%D9%81%D9%8A-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r1296/" rel="">طلبات ذات أصل مختلط</a> cross-origin requests، لذا إن حمَّلت ملفًأ محليًا يحوي يطلب ملفات محلية أخرى، فقد يولد هذا خطأ CORS (اختصارٌ إلى سياسة مشاركة الموارد ذات الأصول المختلطة).
	</li>
</ul>
<h2>
	تشغيل خادم HTTP محلي بسيط
</h2>

<p>
	لا بدّ من اختبار الأمثلة المشابهة على خادم ويب محلي لتجاوز مشكلة الطلبات غير المتزامنة، إذ سيكون استخدام وحدة خادم HTTP لبايثون <code>http.server</code> من أسهل طرق تنفيذ ذلك.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p>
		<strong>ملاحظة</strong>: تقدِّم النسخ الأقدم من بايثون (حتى 2.7) وحدةً مشابهةً تُدعى <code>SimpleHTTPServer</code>، فإذا كنت تستخدِم بايثون ‎2.x، فاتبع الدليل التالي مبدلًا التعليمة <code>SimpleHTTPServer</code> مكان التعليمة <code>http.server</code>، ولكن مع ذلك يُنصح باستخدام الإصدار الأحدث من بايثون.
	</p>
</blockquote>

<p>
	اتبع الخطوات التالية لإعداد الخادم:
</p>

<ol>
<li>
		ثبِّت بايثون: من المفترض أن تكون حزمة بايثون مثبتةً على جهازك مسبقًا إذا كنت تستخدِم لينوكس Linux أو ماك أو إس macOS‎، بينما إذا كنت تستخدِم ويندوز Windows، فعليك زيارة الصفحة الرسمية لبايثون والحصول على المُثبِّت الخاص بويندوز من خلال الخطوات التالية:
	</li>
</ol>
<ul style="margin-right: 40px;">
<li>
		انتقل إلى العنوان <a href="https://www.python.org/" rel="external nofollow">python.org</a>.
	</li>
	<li>
		انقر على الرابط "Python "3.xxx الموجود ضمن قسم التنزيل Download.
	</li>
	<li>
		انقر على رابط مُثبِِّت ويندوز Windows Installer الموجود أسفل الصفحة لتنزيل ملف التثبيت.
	</li>
	<li>
		شغّل ملف التثبيت عند انتهاء التنزيل.
	</li>
	<li>
		تأكد من تفعيل مربع التحقق الذي يشير إلى إضافة بايثون إلى المسار Add Python 3.xxx to PATH.
	</li>
	<li>
		انقر على تثبيت Install، ثم انقر على إغلاق Close عند انتهاء العملية.
	</li>
</ul>
<ol start="2">
<li>
		افتح موجه <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%A7-%D9%87%D9%88-%D8%B3%D8%B7%D8%B1-%D8%A7%D9%84%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D8%9F-r353/" rel="">سطر الأوامر</a> Command Prompt في ويندوز أو الطرفية Terminal في لينوكس أو ماك لتتحقق من تثبيت بايثون. نفذ الأمر التالي:
	</li>
</ol>
<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_599_18" style="">
<span class="pln">python </span><span class="pun">-</span><span class="pln">V
</span><span class="com"># إن فشلت التعليمة السابقة استخدم التعليمة</span><span class="pln">
python3 </span><span class="pun">-</span><span class="pln">V
</span><span class="com"># إن كان متاحًا "py" أو حاول استخدام الأمر</span><span class="pln">
py </span><span class="pun">-</span><span class="pln">V</span></pre>

<ol start="3">
<li>
		سيعيد إليك الأمر السابق رقم إصدار بايثون الذي ثُبِّت، ثم انتقل بعد ذلك إلى المجلد الذي يحتوي على المثال الذي تريد اختباره باستخدام الأمر <code>cd</code> إذا كان المثال على سطح المكتب أو في مكان آخر، فجرّب الانتقال إليه وفق أحد الأسلوبين التاليين:
	</li>
</ol>
<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_599_20" style="">
<span class="com">#  ضع عنوان المجلد الذي يحوي المثال الذي تريد اختباره</span><span class="pln">
cd </span><span class="typ">Desktop</span><span class="pln">
</span><span class="com"># استخدم النقطتين للانتقال إلى مجلد أعلى بمستوى واحد</span><span class="pln">
cd </span><span class="pun">..</span></pre>

<ol start="4">
<li>
		استخدم الأمر التالي لتشغيل الخادم ضمن المجلد المحدد:
	</li>
</ol>
<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_599_22" style="">
<span class="com"># إذا كان إصدار بايثون 3</span><span class="pln">
</span><span class="com">#  حاول ما يلي على ويندوز</span><span class="pln">
</span><span class="com"># "python -m http.server"</span><span class="pln">
</span><span class="com"># أو</span><span class="pln">
</span><span class="com"># "py -3 -m http.server"</span><span class="pln">
python3 </span><span class="pun">-</span><span class="pln">m http</span><span class="pun">.</span><span class="pln">server
</span><span class="com"># إذا كان إصدار بايثون 2</span><span class="pln">
python </span><span class="pun">-</span><span class="pln">m </span><span class="typ">SimpleHTTPServer</span></pre>

<ol start="5">
<li>
		ستنفِّذ التعليمة السابقة محتوى المجلد على خادم ويب محلي ورقم المنفذ الخاص به 8000، كما يمكن الوصول إلى هذا الخادم من خلال كتابة العنوان <code>localhost:8000</code> ضمن المتصفح الذي سيعرض لك محتويات المجلد، وانقر على ملف HTML الذي تريد تشغيله.
	</li>
</ol>
<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p>
		ملاحظة: إذا كنت تشغّل شيئًا ما على هذا المنفذ، فمن الممكن اختيار منفذ آخر وذلك بتنفيذ تعليمة تشغيل الخادم يليها رقم المنفذ الذي تريد كما في المثال التالي:
	</p>
</blockquote>

<pre class="ipsCode prettyprint lang-py prettyprinted" id="ips_uid_599_24" style="">
<span class="com"># بايثون 3</span><span class="pln">
python3 </span><span class="pun">-</span><span class="pln">m http</span><span class="pun">.</span><span class="pln">server </span><span class="lit">7800</span><span class="pln">
</span><span class="com"># بايثون 2</span><span class="pln">
python </span><span class="pun">-</span><span class="pln">m </span><span class="typ">SimpleHTTPServer</span><span class="pln"> </span><span class="lit">7800</span></pre>

<p>
	ستتمكن من الوصول إلى الخادم على هذا المنفذ بكتابة العنوان <code>localhost:7800</code> ضمن المتصفح.
</p>

<h2>
	تنفيذ شيفرة لغة تعمل على الخادم
</h2>

<p>
	لن تستطيع وحدتَي بايثون <code>http.server</code> أو <code>SimpleHTTPServer</code> التي تعمل على الإصدار 2 على الرغم من فائدتهما من تنفيذ شيفرة مكتوبة بلغات مثل <a href="https://academy.hsoub.com/programming/python/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A8%D8%A7%D9%8A%D8%AB%D9%88%D9%86-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-r211/" rel="">بايثون</a> أو <a href="https://academy.hsoub.com/programming/php/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B3%D8%B1%D9%8A%D8%B9-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-php-r609/" rel="">PHP</a> أو <a href="https://academy.hsoub.com/programming/javascript/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B3%D8%B1%D9%8A%D8%B9-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D9%8A%D8%A8%D8%AA-javascript-r550/" rel="">جافاسكربت</a>، فهي تقدِّم بالكاد خادم ملفات ساكن static file server، ولتنفيذ شيفرات مثل هذه، فلا بدّ من عمل إضافي يتعلق بطبيعة اللغة التي تستخدِمها، وإليك بعض الأمثلة:
</p>

<ul>
<li>
		لتنفيذ شيفرة بايثون، لا بدّ من استخدام إطار عمل بايثون خاص بالويب Python web framework، وستجد الكثير من إطارات العمل هذه مثل <a href="https://academy.hsoub.com/programming/python/django/" rel="">Django</a> أو <a href="https://flask.palletsprojects.com/" rel="external nofollow">Flask</a> أو <a href="https://trypyramid.com/" rel="external nofollow">Pyramid</a>.
	</li>
	<li>
		لتنفيذ شيفرة <a href="https://wiki.hsoub.com/Node.js" rel="external">Node.js</a> -جافاسكربت-، لا بدّ من استخدام Node الأساسي أو أيّ إطار عمل مبني على أساسه مثل <a href="https://academy.hsoub.com/programming/javascript/nodejs/express/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-nodejs-%D9%88express-r1099/" rel="">إكسبرس Express</a> الذي يمثِّل خيارًا جيدًا.
	</li>
	<li>
		لتنفيذ شيفرة PHP، شغّل خادم PHP المدمج كما يلي:
	</li>
</ul>
<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_599_16" style="">
<span class="pln">$ cd path</span><span class="pun">/</span><span class="pln">to</span><span class="pun">/</span><span class="pln">your</span><span class="pun">/</span><span class="pln">php</span><span class="pun">/</span><span class="pln">code
$ php </span><span class="pun">-</span><span class="pln">S localhost</span><span class="pun">:</span><span class="lit">8000</span></pre>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/Common_questions/set_up_a_local_testing_server" rel="external nofollow">?How do you set up a local testing server</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/devops/servers/%D8%AF%D9%84%D9%8A%D9%84-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D8%A7%D8%AF%D9%85-%D9%88%D9%8A%D8%A8-%D9%85%D8%AD%D9%84%D9%8A-%D8%AE%D8%B7%D9%88%D8%A9-%D8%A8%D8%AE%D8%B7%D9%88%D8%A9-r422/" rel="">دليل إعداد خادم ويب محلي خطوة بخطوة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D8%AD%D8%B1%D9%83-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-r572/" rel="">الفرق بين صفحة الويب وموقع الويب وخادم الويب ومحرك البحث</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">609</guid><pubDate>Sat, 14 May 2022 16:05:02 +0000</pubDate></item><item><title>&#x627;&#x644;&#x62A;&#x62D;&#x642;&#x642; &#x645;&#x646; &#x639;&#x645;&#x644; &#x645;&#x648;&#x642;&#x639; &#x648;&#x64A;&#x628; &#x62D;&#x62F;&#x64A;&#x62B; &#x627;&#x644;&#x646;&#x634;&#x631;</title><link>https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D8%AA%D8%AD%D9%82%D9%82-%D9%85%D9%86-%D8%B9%D9%85%D9%84-%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%8A%D8%A8-%D8%AD%D8%AF%D9%8A%D8%AB-%D8%A7%D9%84%D9%86%D8%B4%D8%B1-r608/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_05/627b7d7d104c9_-----.png.af8db045726b589ef6720d860a518097.png" /></p>

<p>
	إن كنت نشرت موقعك الإلكتروني وأصبح متاحًا للجميع، فهل أنت على ثقة بأن كل شيء يجري على ما يرام؟ سنناقش في هذا المقال عدة خطوات قد تتبعها لتتأكد من عمل موقعك، وبعض الإجراءات التي يمكن اتخاذها لتلافي بعض المشاكل التي تظهر.
</p>

<p>
	يملك <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r574/" rel="">خادم الويب</a> البعيد سلوكًا قد يختلف أحيانًا عن سلوك <a href="https://academy.hsoub.com/devops/servers/%D8%AF%D9%84%D9%8A%D9%84-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D8%A7%D8%AF%D9%85-%D9%88%D9%8A%D8%A8-%D9%85%D8%AD%D9%84%D9%8A-%D8%AE%D8%B7%D9%88%D8%A9-%D8%A8%D8%AE%D8%B7%D9%88%D8%A9-r422/" rel="">الخادم المحلي</a> الذي اختبرت عليه موقعك، لهذا من الأفضل اختبار الموقع عند نشره على الويب مباشرةً، وقد تفاجئك كمية المشاكل التي قد تظهر مثل الصور الغير معروضة أو الصفحات الغير محمَّلة أو التي تعاني بطأً في التحميل وغيرها، لكنك ستجد لحسن الحظ أنّ معظم هذه المشاكل ليست بتلك الخطورة، وإنما هي أخطاء بسيطة أو بعض الإشكالات في إعدادات الخادم الذي يستضيف الموقع.
</p>

<p>
	سنطّلع إذًا في مقالنا على الطريقة التي نُشخِّص بها المشاكل التي تعترض موقع الويب إبان نشره وآلية معالجتها، وإليك بعض الاختبارات البسيطة التي لابد من إجرائها فور نشر موقعك على الويب.
</p>

<h2>
	اختبر الموقع على متصفحك
</h2>

<p>
	لا بدّ من تشغيل موقعك الإلكتروني من خلال متصفحك فور نشره على الويب كي تتفحص عمله وتتأكد من سير كل شيء كما هو متوقع له.
</p>

<h3>
	صورة مفقودة
</h3>

<p>
	لنلق نظرةً على هذه <a href="http://demozilla.examplehostingprovider.net/" rel="external nofollow">الصفحة الاختبارية من موزيلّا</a>، حيث ستلاحظ عدم وجود صورة يونيكورن unicorn.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="98437" href="https://academy.hsoub.com/uploads/monthly_2022_05/01_unicorn_image_missing.png.ca8dea5570234099db363956eef8766e.png" rel=""><img alt="01_unicorn_image_missing.png" class="ipsImage ipsImage_thumbnailed" data-fileid="98437" data-unique="azp9yxv6s" src="https://academy.hsoub.com/uploads/monthly_2022_05/01_unicorn_image_missing.png.ca8dea5570234099db363956eef8766e.png"></a>
</p>

<p>
	لنلق نظرةً على الأداة "شبكة الاتصال Network" والتي نصل إليها من خلال: أدوات Tools&gt; أدوات مطوري ويب Web Developers&gt; شبكة الاتصال Network.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="98438" href="https://academy.hsoub.com/uploads/monthly_2022_05/02_network_tool.png.869aa97edd431bae2c3597498933ab96.png" rel=""><img alt="02_network_tool.png" class="ipsImage ipsImage_thumbnailed" data-fileid="98438" data-unique="o8rj098vl" src="https://academy.hsoub.com/uploads/monthly_2022_05/02_network_tool.png.869aa97edd431bae2c3597498933ab96.png" style="width: 500px; height: auto;"></a>
</p>

<p>
	سنجد أنّ المشكلة في الخطأ "404" والذي يشير إلى أنّ المورد المطلوب غير موجود، وبالتالي لن يعرِض المتصفح الصورة.
</p>

<h3>
	حالات HTTP
</h3>

<p>
	يستجيب الخادم برسالة توضِّح حالة الطلب في كل مرة يتلقى طلبًا، وإليك أكثر الرسائل شيوعًا:
</p>

<ul>
<li>
		<strong>200 (موجود OK)</strong>: المورد الذي تطلبه قد أرسل إليك بنجاح.
	</li>
	<li>
		<strong>301 (نُقل نهائيًا Moved Permanently)</strong>: بمعنى أنه قد نُقل المورد إلى مكان آخر، ولن يعرِض متصفحك هذه الرسالة كثيرًا، لكن من المفيد الاطلاع على فحواها، وذلك لأنّ محركات البحث تستخدمها بكثرة من أجل تحديث فهارسها.
	</li>
	<li>
		<strong>304 (لم يتغير Not modified):</strong> لم تطرأ أية تعديلات على المورد منذ آخر مرة طلبته فيها، وبالتالي سيتمكن المتصفح من عرض النسخة التي يحتفظ بها في ذاكرته المؤقتة cache، مما يزيد من سرعة الاستجابة وفعالية استخدام نطاق حزمة التراسل المخصصة.
	</li>
	<li>
		<strong>403 (ممنوع Forbidden):</strong> لا يُسمح لك بالوصول إلى المَورد، وعادةً ما يكون السبب خطأً في الإعدادات، إذ يغفل المضيف عن إعطائك أذونات الوصول إلى المَورد على سبيل المثال.
	</li>
	<li>
		<strong>404 (غير موجود Not found)</strong>: تشرح الحالة نفسها بنفسها وسنناقش حلها لاحقًا.
	</li>
	<li>
		<strong>500 (خطأ داخلي في الخادم Internal Server Error)</strong>: قد تتوقف أحد لغات البرمجة التي تعمل على الخادم مثل <a href="https://wiki.hsoub.com/PHP" rel="external">PHP</a> أو <a href="https://academy.hsoub.com/programming/c-sharp/dotnet/" rel="">Net.</a> عن العمل عندما تحدث مشكلة في الخادم، كما قد يعاني خادم ويب من أخطاء في الإعدادات، وبالتالي عليك العودة في هذه الحالة إلى فريق العمل الذي يُشرف على الاستضافة.
	</li>
	<li>
		<strong>503 (الخدمة غير متوفرة Service unavailable)</strong>: ينتج هذا الخطأ عادةً عن زيادة حمولة مؤقتة على النظام أو حدوث خطأ على الخادم، وبالتالي عليك التجريب مجددًا بعد فترة.
	</li>
</ul>
<p>
	سيواجه المبتدئون الذين يتحققون من مواقعهم البسيطة الحالات 200 و304 و403 و404 غالبًا.
</p>

<h3>
	حل المشكلة 404
</h3>

<p>
	ما الخطأ الذي حدث؟
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="98439" href="https://academy.hsoub.com/uploads/monthly_2022_05/03_fixing_unicoren_missing_image.png.bda6f3a024bba112501c905cd9c934cb.png" rel=""><img alt="03_fixing_unicoren_missing_image.png" class="ipsImage ipsImage_thumbnailed" data-fileid="98439" data-unique="sbc7fhy8d" src="https://academy.hsoub.com/uploads/monthly_2022_05/03_fixing_unicoren_missing_image.png.bda6f3a024bba112501c905cd9c934cb.png"></a>
</p>

<p>
	تبدو الصورة التي نبحث عنها في مكانها للوهلة الأولى، لكن مع ذلك يعيد الخادم الخطأ 404، فإذا دققنا الآن في شيفرة <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a>، فسنلاحظ الخطأ المطبعي الذي ارتكبناه في كتابة اسم الصورة <code>unicorn_pics.png</code> بدلًا من <code>unicorn_pic.png</code>، لذا صحِّح الخطأ ضمن السمة <code>src</code> لوسم الصورة لتحل المشكلة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="98440" href="https://academy.hsoub.com/uploads/monthly_2022_05/04_changing_src_for_missing_img.png.e5e66031994ca9bfbbb1547bb8e49dfd.png" rel=""><img alt="04_changing_src_for_missing_img.png" class="ipsImage ipsImage_thumbnailed" data-fileid="98440" data-unique="8rpxron0c" src="https://academy.hsoub.com/uploads/monthly_2022_05/04_changing_src_for_missing_img.png.e5e66031994ca9bfbbb1547bb8e49dfd.png" style="width: 580px; height: auto;"></a>
</p>

<p>
	احفظ التغييرات وادفع بالملف المصحَّح إلى الخادم، ثم حمِّل الصفحة من جديد على متصفحك:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="98441" href="https://academy.hsoub.com/uploads/monthly_2022_05/05_unicorn_image_loads_correctly.png.d961226cd5d5e0ab250939942b41bc8b.png" rel=""><img alt="05_unicorn_image_loads_correctly.png" class="ipsImage ipsImage_thumbnailed" data-fileid="98441" data-unique="k846eheez" src="https://academy.hsoub.com/uploads/monthly_2022_05/05_unicorn_image_loads_correctly.png.d961226cd5d5e0ab250939942b41bc8b.png" style="width: 550px; height: auto;"></a>
</p>

<p>
	لنلق نظرةً مجددًا على حالتَي <a href="https://academy.hsoub.com/programming/general/%d9%85%d8%af%d8%ae%d9%84-%d8%a5%d9%84%d9%89-http-r73/" rel="">HTTP</a> المعروضتين أسفل الصورة السابقة:
</p>

<ul>
<li>
		<strong>200</strong>: الموافقة لطلبَي الإحضار <code>/</code> و<code>unicorn_pic.png</code>، وهذا يعني أننا نجحنا في إعادة تحميل الصفحة وفي عرض الصورة.
	</li>
	<li>
		<strong>304</strong>: الموافقة لطلب إحضار الملف <code>basic.css</code>، وتعني عدم تغيّر الملف منذ آخر مرة طُلِب فيها، وبالتالي يمكن للمتصفح استخدام النسخة المحفوظة منه ضمن ذاكرته المؤقتة عوض تلقي نسخة جديدة
	</li>
</ul>
<p>
	وهكذا نكون قد أوجدنا حلًا لمشكلتنا وتعلمنا في الوقت نفسه شيئًا مفيدًا عن بعض حالات HTTP.
</p>

<h2>
	أخطاء تحدث باستمرار
</h2>

<p>
	إليك أكثر الأخطاء التي نواجهها تكرارًا:
</p>

<h3>
	أخطاء مطبعية في العناوين
</h3>

<p>
	إذا أردنا مثلًا كتابة العنوان <code><a href="Http://academy.hsoub.com" ipsnoembed="true" rel="external">Http://academy.hsoub.com</a></code> ونسينا كتابة الحرف "u" بسبب السرعة، فلن يتمكن المتصفح من إيجاد العنوان.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="98442" href="https://academy.hsoub.com/uploads/monthly_2022_05/627b7d7fc7263_06_tyops_inaddress.png.6c8beb0af89af8bbc565d0a55db4e76b.png" rel=""><img alt="06_tyops_in address.png" class="ipsImage ipsImage_thumbnailed" data-fileid="98442" data-unique="zy68shc8s" src="https://academy.hsoub.com/uploads/monthly_2022_05/627b7d827b331_06_tyops_inaddress.thumb.png.0f139ba64a990bc46ab046b6531bd258.png" style="width: 700px; height: auto;"></a>
</p>

<h3>
	الخطأ 404
</h3>

<p>
	قد ينتج الخطأ أحيانًا عن خطأ مطبعي، لكنه ينتج في أحيان أخرى عن نسيان رفع المورد إلى الخادم أو عن فقدان الاتصال أثناء رفعه، لذا تحقق من كتابة وصحة مسار الملف، وارفع الملفات مجددًا إذا استمرت المشكلة، إذ ستحل هذه الإجراءات البسيطة المشكلة غالبًا.
</p>

<h3>
	أخطاء جافاسكربت
</h3>

<p>
	أضاف أحد ما -أنت مثلًا- سكربت إلى صفحة ويب وارتكب خطأً، إذ لن يمنع ذلك الخطأ تحميل الصفحة، لكنك ستدرك وجود خطب ما.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p>
		ملاحظة: افتح طرفية تطوير ويب كما يلي: أدوات Tools&gt; أدوات مطوري ويب Web developer&gt; طرفية تطوير ويب Web Console.
	</p>
</blockquote>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="98443" href="https://academy.hsoub.com/uploads/monthly_2022_05/07_java_script_error.png.32caed72abeb9852c809dcd1de9f5c48.png" rel=""><img alt="07_java_script_error.png" class="ipsImage ipsImage_thumbnailed" data-fileid="98443" data-unique="ya4q9n1s0" src="https://academy.hsoub.com/uploads/monthly_2022_05/07_java_script_error.png.32caed72abeb9852c809dcd1de9f5c48.png"></a>
</p>

<p>
	تعرض لك الصورة السابقة الخطأ الذي ارتكبته بدقة، وبالتالي سيسهل علينا إصلاحه.
</p>

<h2>
	أمور إضافية ينبغي التحقق منها
</h2>

<p>
	لقد زودناك ببعض الوسائل البسيطة التي ستساعدك في التحقق من صحة عمل موقعك والأخطاء التي تقع باستمرار وكيفية التعامل معها، كما يمكنك التأكد من تحقيق صفحتك للمعايير التالية:
</p>

<h3>
	أداء الصفحة
</h3>

<p>
	هل تُحمّل الصفحة بسرعة كافية؟ قد تساعدك بعض الموارد مثل <a href="https://www.webpagetest.org/" rel="external nofollow">WebPageTest.org</a> أو بعض إضافات المتصفح مثل <a href="https://addons.mozilla.org/en-US/firefox/addon/yslow/" rel="external nofollow">YSlow</a> في فهم بعض أمور مهمة مثل هذه.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="98444" href="https://academy.hsoub.com/uploads/monthly_2022_05/08_Yslow_tool.png.6c7c8fe1b4283f399ac7293229b27c6c.png" rel=""><img alt="08_Yslow_tool.png" class="ipsImage ipsImage_thumbnailed" data-fileid="98444" data-unique="6533srq5m" src="https://academy.hsoub.com/uploads/monthly_2022_05/08_Yslow_tool.thumb.png.5b7bce00c4acc0190e7b0694a29b8436.png"></a>
</p>

<p>
	لاحظ كيف تصنِّف YSlow الصفحات من الدرجة A حتى F، فقد حققت الصفحة البسيطة في مثالنا معظم معايير الأداء، لذلك صنفت على أنها من الدرجة A مع ملاحظة ضرورة استخدام <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%B4%D8%A8%D9%83%D8%A7%D8%AA-%D8%AA%D8%B3%D9%84%D9%8A%D9%85-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-cdn-%D9%84%D8%AA%D8%B3%D8%B1%D9%8A%D8%B9-%D8%AA%D8%B3%D9%84%D9%8A%D9%85-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A7%D9%84%D8%AB%D8%A7%D8%A8%D8%AA-r393/" rel="">شبكة تسليم محتوى</a> Content Deleivery Ntework -أو <a href="https://academy.hsoub.com/devops/networking/%D8%B4%D8%A8%D9%83%D8%A7%D8%AA-%D8%AA%D9%88%D8%B2%D9%8A%D8%B9-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-content-distribution-networks-r569/" rel="">CDN</a> اختصارًا-، كما لن يكون استخدامها أمرًا ملحًا في صفحتنا التي تعرض صورةً واحدةً، وإنما عندما يقدِّم موقع الويب آلاف الصور ويعاني من زيادة مستمرة في عرض حزمة الاستهلاك.
</p>

<h3>
	استجابة الخادم
</h3>

<p>
	يمكن استخدام الأداة <code>ping</code> الموجودة في مفسِّرات الأوامر في اختبار اسم النطاق والتأكد من استجابة الخادم الذي يستضيفه:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_7810_22" style="">
<span class="pln">$ ping mozilla</span><span class="pun">.</span><span class="pln">org
PING mozilla</span><span class="pun">.</span><span class="pln">org </span><span class="pun">(</span><span class="lit">63.245</span><span class="pun">.</span><span class="lit">215.20</span><span class="pun">):</span><span class="pln"> </span><span class="lit">56</span><span class="pln"> data bytes
</span><span class="lit">64</span><span class="pln"> bytes from </span><span class="lit">63.245</span><span class="pun">.</span><span class="lit">215.20</span><span class="pun">:</span><span class="pln"> icmp_seq</span><span class="pun">=</span><span class="lit">0</span><span class="pln"> ttl</span><span class="pun">=</span><span class="lit">44</span><span class="pln"> time</span><span class="pun">=</span><span class="lit">148.741</span><span class="pln"> ms
</span><span class="lit">64</span><span class="pln"> bytes from </span><span class="lit">63.245</span><span class="pun">.</span><span class="lit">215.20</span><span class="pun">:</span><span class="pln"> icmp_seq</span><span class="pun">=</span><span class="lit">1</span><span class="pln"> ttl</span><span class="pun">=</span><span class="lit">44</span><span class="pln"> time</span><span class="pun">=</span><span class="lit">148.541</span><span class="pln"> ms
</span><span class="lit">64</span><span class="pln"> bytes from </span><span class="lit">63.245</span><span class="pun">.</span><span class="lit">215.20</span><span class="pun">:</span><span class="pln"> icmp_seq</span><span class="pun">=</span><span class="lit">2</span><span class="pln"> ttl</span><span class="pun">=</span><span class="lit">44</span><span class="pln"> time</span><span class="pun">=</span><span class="lit">148.734</span><span class="pln"> ms
</span><span class="lit">64</span><span class="pln"> bytes from </span><span class="lit">63.245</span><span class="pun">.</span><span class="lit">215.20</span><span class="pun">:</span><span class="pln"> icmp_seq</span><span class="pun">=</span><span class="lit">3</span><span class="pln"> ttl</span><span class="pun">=</span><span class="lit">44</span><span class="pln"> time</span><span class="pun">=</span><span class="lit">147.857</span><span class="pln"> ms
</span><span class="pun">^</span><span class="pln">C
</span><span class="pun">---</span><span class="pln"> mozilla</span><span class="pun">.</span><span class="pln">org ping statistics </span><span class="pun">---</span><span class="pln">
</span><span class="lit">4</span><span class="pln"> packets transmitted</span><span class="pun">,</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> packets received</span><span class="pun">,</span><span class="pln"> </span><span class="lit">0.0</span><span class="pun">%</span><span class="pln"> packet loss
round</span><span class="pun">-</span><span class="pln">trip min</span><span class="pun">/</span><span class="pln">avg</span><span class="pun">/</span><span class="pln">max</span><span class="pun">/</span><span class="pln">stddev </span><span class="pun">=</span><span class="pln"> </span><span class="lit">147.857</span><span class="pun">/</span><span class="lit">148.468</span><span class="pun">/</span><span class="lit">148.741</span><span class="pun">/</span><span class="lit">0.362</span><span class="pln"> ms</span></pre>

<p>
	انتبه إلى إمكانية استخدام الاختصار <strong>Ctrl+C</strong> من خلال لوحة المفاتيح في مقاطعة عمل الأداة عندما تحصل على المعلومات التي تريد، إذ ستعمل الأداة إلى ما لانهاية إذا لم توقفها.
</p>

<h2>
	قائمة تحقق بسيطة
</h2>

<ul>
<li>
		تحقق من الأخطاء التي تحمل الرقم 404.
	</li>
	<li>
		تحقق من عمل كل صفحات موقعك كما هو مطلوب.
	</li>
	<li>
		استعرض موقعك ضمن عدة متصفحات لتتأكد من تصييره بالصورة الصحيحة.
	</li>
</ul>
<p>
	لقد رفعت موقعك وأصبح جاهزًا ليستقبل الزوار، إذ أنجزت خطوةً متقدمةً وعليك الآن التعمق في تفاصيل أكثر.
</p>

<ul>
<li>
		قد يزور موقعك أشخاص من مختلف أرجاء العالم، لذلك عليك التفكير في جعله متاحًا للجميع.
	</li>
	<li>
		هل تعتقد أنّ موقعك يحتاج إلى المزيد من الصقل؟ إذًا عليك تعلم المزيد حول لغة <a href="https://academy.hsoub.com/programming/css/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A3%D9%88%D8%B1%D8%A7%D9%82-%D8%A7%D9%84%D8%A3%D9%86%D9%85%D8%A7%D8%B7-%D8%A7%D9%84%D9%85%D8%AA%D8%AA%D8%A7%D9%84%D9%8A%D8%A9-css-r246/" rel="">أوراق الأنماط المتتالية CSS</a>.
	</li>
</ul>
<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Checking_that_your_web_site_is_working_properly" rel="external nofollow">?How do you make sure your website works properly</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/apps/web/%d9%83%d9%8a%d9%81-%d8%aa%d9%86%d8%b4%d8%b1-%d8%b5%d9%81%d8%ad%d8%a9-%d8%a3%d9%88-%d9%85%d9%88%d9%82%d8%b9-%d9%88%d9%8a%d8%a8-%d9%82%d9%85%d8%aa-%d8%a8%d8%aa%d8%b5%d9%85%d9%8a%d9%85%d9%87-%d8%b9%d9%84%d9%89-%d8%a7%d9%84%d8%a5%d9%86%d8%aa%d8%b1%d9%86%d8%aa-r52/" rel="">كيف تنشر صفحة أو موقع ويب قمت بتصميمه على الإنترنت</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D8%AD%D8%B1%D9%83-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-r572/" rel="">الفرق بين صفحة الويب وموقع الويب وخادم الويب ومحرك البحث</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1522/" rel="">كيفية التعامل مع الويب</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%AA%D8%B9%D9%84%D9%85-%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%A7%D9%84%D9%88%D9%8A%D8%A8/" rel="">المدخل الشامل لتعلم تطوير الويب</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">608</guid><pubDate>Wed, 11 May 2022 16:05:00 +0000</pubDate></item><item><title>&#x645;&#x627; &#x647;&#x64A; &#x62A;&#x642;&#x646;&#x64A;&#x629; WebSocket</title><link>https://academy.hsoub.com/devops/servers/%D9%85%D8%A7-%D9%87%D9%8A-%D8%AA%D9%82%D9%86%D9%8A%D8%A9-websocket-r660/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_11/636c8fb36a122_---WebSocket-.png.015fdb5383f5d8e742a8b6e597abd2b6.png" /></p>

<p>
	هذا الفيديو عبارة عن مقدمة لبروتوكول WebSocket وكيفية عمله، والتعريف بالحالات التي تحتاج WebSocket وذلك من خلال الأمثلة العملية باستخدام <a href="https://academy.hsoub.com/programming/javascript/%d9%85%d8%a7-%d9%87%d9%8a-%d8%ac%d8%a7%d9%81%d8%a7-%d8%b3%d9%83%d8%b1%d9%8a%d8%a8%d8%aa-%d8%9f-r524/" rel="">JavaScript</a> و <a href="https://academy.hsoub.com/programming/javascript/nodejs/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-nodejs-r1463/" rel="">Node.js</a>.
</p>

<p style="text-align: center;">
	<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="480" title="ما هي تقنية WebSocket" width="853" src="https://www.youtube.com/embed/69t4zZ7KQ7M"></iframe>
</p>

<p>
	يمكنك التعرف على <a href="https://academy.hsoub.com/programming/javascript/%D8%A2%D9%84%D9%8A%D8%A7%D8%AA-%D8%A7%D9%84%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D9%85%D8%B1-%D9%85%D8%B9-%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-%D9%81%D9%8A-%D8%AC%D8%A7%D9%81%D8%A7%D8%B3%D9%83%D8%B1%D8%A8%D8%AA-r1301/" rel="">آليات الاتصال المستمر مع الخادم في جافاسكربت</a> عبر الأكاديمية، كما يمكنك تعلم التقنيات الحديثة في جافاسكربت مجانًا عبر <a href="https://academy.hsoub.com/programming/" rel="">قسم البرمجة في أكاديمية حسوب</a>، وأيضًا بروتوكولات الاتصال بالخوادم عبر <a href="https://academy.hsoub.com/devops/" rel="">قسم DevOps</a>. 
</p>

<p>
	كذلك، يمكنك التعرف أكثر باحترافية أكبر على WebSocket ومختلف التقنيات الحديثة من خلال الانضمام إلى <a href="https://academy.hsoub.com/learn/javascript-application-development/" rel="">دورة JavaScript</a> المقدمة من أكاديمية حسوب، ولا تنسى دعم رحلة تعلمك وعملك <a href="https://wiki.hsoub.com/JavaScript" rel="external">بتوثيقات موسوعة حسوب لجافاسكربت.</a>
</p>
]]></description><guid isPermaLink="false">660</guid><pubDate>Sun, 24 Apr 2022 15:00:00 +0000</pubDate></item><item><title>&#x625;&#x639;&#x62F;&#x627;&#x62F; &#x627;&#x633;&#x62A;&#x636;&#x627;&#x641;&#x629; &#x644;&#x645;&#x62F;&#x648;&#x646;&#x629; &#x634;&#x62E;&#x635;&#x64A;&#x629; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x631;&#x627;&#x633;&#x628;&#x64A;&#x631;&#x64A; &#x628;&#x627;&#x64A; Raspberry Pi</title><link>https://academy.hsoub.com/devops/servers/%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%A7%D8%B3%D8%AA%D8%B6%D8%A7%D9%81%D8%A9-%D9%84%D9%85%D8%AF%D9%88%D9%86%D8%A9-%D8%B4%D8%AE%D8%B5%D9%8A%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%B1%D8%A7%D8%B3%D8%A8%D9%8A%D8%B1%D9%8A-%D8%A8%D8%A7%D9%8A-raspberry-pi-r605/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_04/62632b6b2b393_--------raspberry-pi.png.0228686c3be785db95460c72e1bf3ae1.png" /></p>

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

<p>
	إن لم تكن تعرف راسبيري باي من قبل، فننصحك بالرجوع أولًا إلى مقال <a href="https://academy.hsoub.com/programming/os-embedded-systems/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%AC%D9%87%D8%A7%D8%B2-%D8%B1%D8%A7%D8%B3%D8%A8%D9%8A%D8%B1%D9%8A-%D8%A8%D8%A7%D9%8A-raspberry-pi-r1356/" rel="">تعرف على جهاز راسبيري باي Raspberry Pi</a> وهو جزء من سلسلة <a href="https://academy.hsoub.com/tags/%D8%AF%D9%84%D9%8A%D9%84%20%D8%B1%D8%A7%D8%B3%D8%A8%D9%8A%D8%B1%D9%8A%20%D8%A8%D8%A7%D9%8A/" rel="">دليل راسبيري باي</a>.
</p>

<h2>
	الأسباب التي دفعتني لإعداد خادم ويب مخصص
</h2>

<p>
	عملت في مجال بناء المواقع وتقديم الدعم الفني لها لمدة طويلة تزيد على عقدين من الزمن جربت خلالها العديد من حلول الاستضافة ولكن ارتفاع التكاليف المادية وكون العمل محدودًا دائمًا بخيارات شركة الاستضافة وأدواتها وسياساتها الأمنية كل ذلك دفعني إلى تجربة إعداد خادم ويب خاص بي أنشأته في منزلي ومجاني بالكامل بكل معنى الكلمة، ولكن هذا النوع من الاستضافة ضمن المنزل معرض دائمًا لمخاطر التوقف بسبب الظروف الطارئة التي تنجم عن انقطاع التغذية الكهربائية أو شبكة الإنترنت في مقر الاستضافة.
</p>

<p>
	ما نعرضه في الفقرات اللاحقة هو خطوات إعداد الخادم لمدونة مبنية عبر منصة دروبال لكن الطريقة نفسها تنطبق على أي نظام إدارة محتوى آخر يعتمد <a href="https://wiki.hsoub.com/PHP" rel="external">PHP</a>.
</p>

<h2>
	إعداد راسبيري باي كخادم ويب
</h2>

<p>
	اخترت حاسب راسبيري باي للمشروع وهو من الجيل الرابع مع ذاكرة عشوائية بسعة 4 جيجابايت وبطاقة MicroSD للتخزين بنوعية جيدة بالإضافة إلى وحدة التغذية والصندوق وكل ذلك بتكلفة معقولة.
</p>

<p>
	وقد اعتمدت توزيعة سينت او اس CentOS من لينكس كنظام تشغيل أما بخصوص خادم الويب فاخترت أباتشي على الرغم وجود خيارات أخرى ممكنة مثل Nginx والذي إن فضلت اختياره يتعين عليك ضبط إعدادات الأمان الخاص به بما يكافئ ملفات htaccess التي تستخدمها دروبال، كما تم إعداد ما يلزم لاستخدام <a href="https://www.php.net/manual/en/book.apcu.php" rel="external nofollow">APCu</a> (user-accessible PHP cache) كذاكرة تخزين مؤقتة من أجل PHP لفوائدها في تسريع التسليم لهذا النوع من المواقع.
</p>

<p>
	باختصار أيًا كانت خياراتك عليك مراجعة <a href="https://www.drupal.org/docs/system-requirements/php-requirements" rel="external nofollow">متطلبات PHP لمنصة دروبال</a> والعمل على تحقيقها ضمن بيئتك وذلك بمساعدة مدير حزمة لينكس الخاص بك مثل Yum، ولا ننسى <a href="https://cockpit-project.org/" rel="external nofollow">Cockpit</a> الإضافة المميزة من راسبيري باي التي تسهل إدارة خادم الويب ومراقبة أدائه وموارده مثل سجلات الوصول والتحديثات المتاحة وغيرها عبر واجهتها الرسومية التي تتضمن أيضًا نافذة خاصة بكتابة الأوامر السطرية.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="96952" href="https://academy.hsoub.com/uploads/monthly_2022_04/img02-the_cockpit_ui.png.fea415286cf715c2d74ba26edccb3210.png" rel=""><img alt="img02-the_cockpit_ui.png" class="ipsImage ipsImage_thumbnailed" data-fileid="96952" data-unique="1lluvq9ws" src="https://academy.hsoub.com/uploads/monthly_2022_04/img02-the_cockpit_ui.thumb.png.4e168cfb5f8e290696e669540aba27c4.png" style="width: 600px; height: auto;"></a>
</p>

<h2>
	تثبيت دروبال على راسبيري باي
</h2>

<p>
	سنثبت دروبال عبر <a href="https://academy.hsoub.com/programming/php/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A7%D9%84%D9%85%D9%84%D8%AD%D9%86-composer-%D9%85%D8%AF%D9%8A%D8%B1-%D8%A7%D9%84%D8%A7%D8%B9%D8%AA%D9%85%D8%A7%D8%AF%D9%8A%D8%A7%D8%AA-%D9%88%D8%A7%D9%84%D8%AD%D8%B2%D9%85-%D9%81%D9%8A-php-r1123/" rel="">composer مدير الاعتماديات والحزم في PHP</a> بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_4816_11" style="">
<span class="pln">composer create</span><span class="pun">-</span><span class="pln">project drupal</span><span class="pun">/</span><span class="pln">recommended</span><span class="pun">-</span><span class="pln">project my_site_name_dir</span></pre>

<p>
	ثانيًا اضبط الإعدادات ليكون المسار my<em>site</em>name_dir المحدد في الأمر السابق هو مسار الجذر للاستضافة الافتراضية الخاصة بخادم الويب أباتشي (ويقابلها كتلة الخادم server block في Nginx). وبمجرد طلبك لمسار استضافة الويب فإن دروبال سيكمل عملية التثبيت.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="96955" href="https://academy.hsoub.com/uploads/monthly_2022_04/img03-drupal_installer_screen.png.5f431df63a57874e0ac6c20d35eabf69.png" rel=""><img alt="img03-drupal_installer_screen.png" class="ipsImage ipsImage_thumbnailed" data-fileid="96955" data-unique="965xc9wg9" src="https://academy.hsoub.com/uploads/monthly_2022_04/img03-drupal_installer_screen.thumb.png.6b042d92d063172f15f2a17361def34e.png" style="width: 580px; height: auto;"></a>
</p>

<p>
	قررت -يقول مؤلف المقال- إنشاء موقعي على حاسب محمول منفصل ومن ثم رفعت الكود على GitLab وحملته من هناك على الخادم، في الواقع لست ملزمًا بإجراء هذه العملية إن كنت تهدف فقط لتجربة دروبال على راسبيري باي.
</p>

<h2>
	إطلاق الموقع على الإنترنت
</h2>

<p>
	الخطوة التالية بعد بناء الموقع وإعداد خادم الويب هي إطلاق الموقع للعلن وهذا يتطلب مجموعة من الإجراءات أولها الإعدادات على موجه الإنترنت لقبول طلبات الاتصال الخارجية الواردة على المنفذين 80 و 443، ومن ثم حجز اسم النطاق للموقع وذلك عبر مزود خدمة يقدم DNS ديناميكي وهي ميزة مناسبة لاتصالات الإنترنت الخاصة بالمنازل لأنها تستخدم عناوين IP متغيرة ولا يتم تخصيصها بعناوين ثابتة. دون أن ننسى جانب الحماية الذي يتطلب تأمين شهادة <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr> لتشفير الاتصال مع الموقع، في الواقع شهادات <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr> مكلفة ربما أكثر من الحاسب الذي أعددته كخادم للموقع بالأخص كونها تحتاج لتجديد سنوي مدفوع، لذلك اتجهت إلى <a href="https://academy.hsoub.com/devops/servers/%D9%85%D9%82%D8%AF%D9%85%D8%A9-%D8%A5%D9%84%D9%89-%D8%AE%D8%AF%D9%85%D8%A9-let%E2%80%99s-encrypt-r352//" rel="">Let's Encrypt</a> وحصلت على شهادة مجانية، ويمكنك بالإضافة لذلك تثبيت <a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%88%D8%B6%D8%B9-certbot-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D9%82%D9%84-%D9%84%D9%84%D8%AD%D8%B5%D9%88%D9%84-%D8%B9%D9%84%D9%89-%D8%B4%D9%87%D8%A7%D8%AF%D8%A7%D8%AA-ssl-%D9%85%D9%86-let%E2%80%99s-encrypt-%D8%B9%D9%84%D9%89-%D8%AF%D8%A8%D9%8A%D8%A7%D9%86-10-r466//" rel="">cretbot</a> لتجديد هذه الشهادة تلقائيًا.
</p>

<h2>
	تقييم خادم الويب الذي تم إعداده على راسبيري باي
</h2>

<p>
	والسؤال الآن هل خادم الويب الذي تم بناؤه يضاهي في السرعة حلول الاستضافة عالية التكاليف؟ في الواقع الإجابة هي لا، ولكنه في النهاية مجاني بالكامل باستثناء تكاليف الطاقة الكهربائية اللازمة لتشغيل الجهاز وهي في الحقيقة لا تُذكر، والأهم من مجانية الحل هي حرية إعداد المخدم بالطريقة التي ترغب بها.
</p>

<p>
	بعد فترة من الاستخدام قد تلاحظ تباطؤ أداء الخادم والسبب كما تبين لي من حالتي عائد لتراجع أداء بطاقة MicroSD مع الزمن. كما ننوه إلى مشكلة أخرى تواجه هذا النوع من الاستضافة الخاصة ضمن المنازل وهي أن تغيير المنزل أو صيانته أو انقطاع الكهرباء أو خدمات الإنترنت كل هذه الأمور الطارئة ستكون سببًا لخروج الموقع عن الخدمة لفترة لا بأس بها، ولكن رغم كل ما سبق يعد الخادم مناسبًا لحركة تبادل البيانات البسيطة مثل نشر المقالات.
</p>

<h2>
	تسريع خادم الويب
</h2>

<p>
	بناءً على التقييم السابق برزت الحاجة لتحسين الأداء ما استدعى ترقية مواصفات العتاد الصلب للخادم فاستخدمت جهاز راسبيري باي مع ذاكرة عشوائية 8 جيجابايت واستبدلت بطاقة MicroSD بقرص تخزين من النوع NVMe SSD (نوع من وحدات التخزين على شكل شريحة يعتمد تقنية SSD لكنه لا يتصل باللوحة الأم بوصلة SATA التقليدية ويستخدم لتسريع أداء الحاسب) مع حافظة USB3، ربما كلفتني وحدة التخزين هذه مع حافظتها أكثر مما دفعته لقاء حاسب راسبيري باي كاملًا مع بطاقة MicroSD ووحدة التغذية والصندوق، ولكن في الواقع أصبح الخادم يعمل جيدًا منذ ما يقارب السنة مع هذه التحسينات المكلفة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="96953" href="https://academy.hsoub.com/uploads/monthly_2022_04/img04-fast_ssd.png.2e2480a86cdbe8c9680e86c5ab2f9602.png" rel=""><img alt="img04-fast_ssd.png" class="ipsImage ipsImage_thumbnailed" data-fileid="96953" data-unique="qwc7relgn" src="https://academy.hsoub.com/uploads/monthly_2022_04/img04-fast_ssd.thumb.png.57319412e31d253f6980a1fdf0f6deb1.png" style="width: 500px; height: auto;"></a>
</p>

<p>
	أما بالنسبة <a href="https://academy.hsoub.com/files/24-%D8%A3%D9%86%D8%B8%D9%85%D8%A9-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%84%D9%85%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D9%86/" rel="">لنظام التشغيل</a> والبرامج فقد أعدت بنائها هذه المرة باستخدام أوبونتو 64 بت كنظام تشغيل ليتناسب مع زيادة الذاكرة العشوائية إلى 8 جيجابايت وبالطبع يوجد أنظمة تشغيل أخرى مناسبة أما خطوات البناء الأساسية فهي نفسها.
</p>

<p>
	ولكن التحسين الأهم على البيئة كان تسريع توصيل الموقع باستخدام <a href="https://academy.hsoub.com/devops/cloud-computing/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%B4%D8%A8%D9%83%D8%A7%D8%AA-%D8%AA%D8%B3%D9%84%D9%8A%D9%85-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-cdn-%D9%84%D8%AA%D8%B3%D8%B1%D9%8A%D8%B9-%D8%AA%D8%B3%D9%84%D9%8A%D9%85-%D8%A7%D9%84%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%A7%D9%84%D8%AB%D8%A7%D8%A8%D8%AA-r393/" rel="">شبكة توصيل المحتوى CDN</a> وهي خدمة تقدمها بعض الشركات وتعتمد على الاحتفاظ بنسخ من ملفات الموقع على خوادم الشبكة المنتشرة في عدة أماكن جغرافية حول العالم ويتوفر أحيانًا بعض العروض المجانية لهذه الخدمة كالتي توفرها Cloudflare على سبيل المثال لا الحصر.
</p>

<h2>
	النتيجة
</h2>

<p>
	الترقية التي تمت على الخادم أظهرت نتائج جيدة جدًا على السرعة انظر المؤشرات في الصور التالية.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="96954" href="https://academy.hsoub.com/uploads/monthly_2022_04/img05-desktop-lighthouse-score.png.fdf0b1dde8e37edc97deb64c43c9f8a5.png" rel=""><img alt="img05-desktop-lighthouse-score.png" class="ipsImage ipsImage_thumbnailed" data-fileid="96954" data-unique="3z1tfkjsa" src="https://academy.hsoub.com/uploads/monthly_2022_04/img05-desktop-lighthouse-score.thumb.png.ae9e8e273beb3eded812384ed97de098.png" style="width: 500px; height: auto;"></a>
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="98315" href="https://academy.hsoub.com/uploads/monthly_2022_05/img06-mobile-lighthouse-score.png.d2b24c9fb83a30ad91aee8ac5812d55a.png" rel=""><img alt="img06-mobile-lighthouse-score.png" class="ipsImage ipsImage_thumbnailed" data-fileid="98315" data-unique="5qw0z3h7g" src="https://academy.hsoub.com/uploads/monthly_2022_05/img06-mobile-lighthouse-score.thumb.png.173e37f60102d8922b48ded30049d9ce.png" style="width: 500px; height: auto;"></a>
</p>

<p>
	بحكم عملي في تطوير مواقع الويب أجريت اختبارات السرعة على العديد من المواقع معظمها من نوع دروبال للأمانة ونتائج هذا الموقع كانت من بين الأفضل، من المؤكد أن لبساطة التصميم أثرًا جيدًا على سرعة الأداء وأن الموقع نفسه كان سيسجل نتائج أقل بوجود المزيد من الصور بالأخص لتصفح الهاتف الجوال (حيث تتم ملائمة اختبار <a href="https://academy.hsoub.com/programming/workflow/%D8%AF%D9%84%D9%8A%D9%84%D9%83-%D8%A5%D9%84%D9%89-%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84-%D8%A7%D9%84%D8%A3%D8%AF%D8%A7%D8%A9-lighthouse-r691/" rel="">Lighthouse</a> ليحاكي سرعة اتصالات 4G).
</p>

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

<h2>
	خاتمة
</h2>

<p>
	وفي الختام إن كنت تخطط لتجربة دروبال في بناء موقعك الشخصي وتوفر لديك جهاز راسبيري باي فهذه المقالة كفيلة بتشجيعك على بناء خادمك الخاص وتجربة هذا النوع من الاستضافة بنفس الخطوات التي عرضناها.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://opensource.com/article/22/3/run-drupal-raspberry-pi" rel="external nofollow">How I run my blog on a Raspberry Pi</a> لصاحبه Martin Anderson-Clutz.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/programming/os-embedded-systems/%D8%AA%D8%AC%D9%85%D9%8A%D8%B9-%D8%B1%D8%A7%D8%B3%D8%A8%D9%8A%D8%B1%D9%8A-%D8%A8%D8%A7%D9%8A-%D9%88%D8%A7%D9%84%D8%AA%D8%AD%D8%B6%D9%8A%D8%B1-%D9%84%D8%A7%D8%B3%D8%AA%D8%B9%D9%85%D8%A7%D9%84%D9%87-r1370/" rel="">تجميع راسبيري باي والتحضير لاستعماله</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r574/" rel="">مدخل إلى خادم الويب</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/workflow/git/%D8%A8%D9%86%D8%A7%D8%A1-%D9%85%D9%88%D9%82%D8%B9%D9%83-%D9%88%D8%A7%D8%B3%D8%AA%D8%B6%D8%A7%D9%81%D8%AA%D9%87-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-git-r862/" rel="">بناء موقعك واستضافته باستخدام Git</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-%D8%AA%D8%AD%D8%AF%D9%8A%D8%AF-%D8%A7%D9%84%D8%AA%D9%83%D9%84%D9%81%D8%A9-%D8%A7%D9%84%D9%85%D8%A7%D8%AF%D9%8A%D8%A9-%D8%A7%D9%84%D9%83%D8%A7%D9%85%D9%84%D8%A9-%D9%84%D8%A8%D9%86%D8%A7%D8%A1-%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%8A%D8%A8-r1437/" rel="">أساسيات تحديد التكلفة المادية الكاملة لبناء موقع ويب</a>.
	</li>
</ul>
]]></description><guid isPermaLink="false">605</guid><pubDate>Sun, 17 Apr 2022 16:00:00 +0000</pubDate></item><item><title>&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; FileZilla &#x644;&#x62A;&#x628;&#x627;&#x62F;&#x644; &#x627;&#x644;&#x645;&#x644;&#x641;&#x627;&#x62A; &#x627;&#x644;&#x622;&#x645;&#x646; &#x645;&#x639; &#x627;&#x644;&#x62E;&#x627;&#x62F;&#x645;</title><link>https://academy.hsoub.com/devops/servers/%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-filezilla-%D9%84%D8%AA%D8%A8%D8%A7%D8%AF%D9%84-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D8%A7%D9%84%D8%A2%D9%85%D9%86-%D9%85%D8%B9-%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-r604/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_04/6263215ac460c_-filezilla------.png.8f709a28e4ac6916e614b60e57b152ee.png" /></p>

<p>
	يُعَد برنامج FileZilla أداةً لتبادل الملفات <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D8%A7%D9%84%D9%85%D9%82%D8%B5%D9%88%D8%AF-%D8%A8%D9%85%D8%B5%D8%B7%D9%84%D8%AD-%D9%85%D9%81%D8%AA%D9%88%D8%AD-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-open-source%D8%9F-r885/" rel="">مفتوح المصدر</a> وشائع الاستخدام يدعم مختلف بروتوكولات تبادل الملفات مثل: FTP و FTPS- بروتوكول FTP عبر طبقة <abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل">TLS</abbr> أو <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr>- بالإضافة إلى SFTP - برتوكول FTP عبر <a href="https://academy.hsoub.com/devops/security/ssh/%D8%A3%D9%86%D9%81%D8%A7%D9%82-ssh%D8%8C-%D9%85%D8%A7%D9%87%D9%8A%D8%AA%D9%87%D8%A7-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF%D9%87%D8%A7-r76/?msclkid=b39548efc28611ecacc4db2d6c75fef5" rel=""><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></a>، وذلك عبر واجهته الرسومية وهي ميزة لطالما فضّلها المستخدم الذي يواجه صعوبة في استخدام الأوامر عبر سطر الأوامر مثل <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%AA%D8%AE%D8%AF%D9%85-%D8%A7%D9%84%D8%A3%D9%85%D8%B1-scp-%D9%84%D8%AA%D8%A3%D9%85%D9%8A%D9%86-%D9%86%D8%B3%D8%AE-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-r321/" rel="">scp</a> و <a href="https://academy.hsoub.com/devops/linux/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%AA%D8%AE%D8%AF%D9%90%D9%85-rsync-%D9%84%D9%85%D8%B2%D8%A7%D9%85%D9%86%D8%A9-%D9%85%D8%AC%D9%84%D9%91%D8%AF%D8%A7%D8%AA-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%AC%D9%87%D8%A7%D8%B2-%D8%A7%D9%84%D9%85%D8%AD%D9%84%D9%91%D9%8A-%D9%88%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%88%D9%85-r50/" rel="">rsync</a>.
</p>

<p>
	سنتعرف في هذا المقال على برنامج FileZilla ومميزاته وطريقة تثبيته.
</p>

<h2>
	تثبيت FileZilla على لينكس
</h2>

<p>
	لديك خيارين لتثبيت FileZilla إما تثبيته باستخدام ملفاته المصدرية أو عبر حزم مخصصة لكل توزيعة من <a href="https://academy.hsoub.com/devops/linux/%d8%a7%d9%84%d8%af%d9%84%d9%8a%d9%84-%d8%a7%d9%84%d9%86%d9%87%d8%a7%d8%a6%d9%8a-%d9%84%d8%a7%d8%ae%d8%aa%d9%8a%d8%a7%d8%b1-%d8%aa%d9%88%d8%b2%d9%8a%d8%b9%d8%a9-%d9%84%d9%8a%d9%86%d9%83%d8%b3-r48/?msclkid=04577929c28711eca41d4a6f1987304c" rel="">توزيعات لينكس</a> وهي الطريقة المفضلة، إذ يفترض توافر التطبيق في مستودع تطبيقات معظم (إن لم يكن كل) توزيعات <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3%D8%9F-r451/?msclkid=04585fe9c28711ecb4a313ff99e14b57" rel="">لينكس</a>، لذا استعن دومًا بمركز التطبيقات ومدير الحزم في عملية التثبيت.
</p>

<p style="text-align: center;">
	<img alt="img01-filezilla-ubuntu-software-center" class="ipsImage ipsImage_thumbnailed" data-fileid="98307" data-unique="qi67abev9" src="https://academy.hsoub.com/uploads/monthly_2022_05/img01-filezilla-ubuntu-software-center.jpg.315a82618b8a951678e41ae5acee496f.jpg" style="width: 600px; height: auto;"></p>

<p>
	بالنسبة لأوبونتو انتقل إلى مركز التطبيقات وثبته منه أو قم بذلك باستخدام الأمر التالي:
</p>

<pre class="ipsCode prettyprint lang-css prettyprinted" id="ips_uid_1464_17" style="">
<span class="pln">sudo apt install filezilla</span></pre>

<p>
	في حال واجهتك أي رسالة خطأ تفيد بعدم العثور على البرنامج، ففعّل المستودع Universe الخاص بأوبونتو إما من مركز التطبيقات من قائمة Ubuntu Software بتفعيل خيار community-maintained free and open-source software أو بتنفيذ الأمر التالي من <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%A7-%D9%87%D9%88-%D8%B3%D8%B7%D8%B1-%D8%A7%D9%84%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D8%9F-r353/?msclkid=b28cb082c28711eca526a4f479f8880d" rel="">سطر الأوامر</a>:
</p>

<pre class="ipsCode prettyprint lang-sql prettyprinted" id="ips_uid_1464_20" style="">
<span class="pln">sudo add</span><span class="pun">-</span><span class="pln">apt</span><span class="pun">-</span><span class="pln">repository universe</span></pre>

<p>
	ابحث بعد انتهاء عملية التثبيت عن البرنامج وشغله وذلك من خلال كتابة اسمه في شريط البحث السريع (بعد الضغط على الزر الخاص برمز ويندوز على لوحة المفاتيح).
</p>

<p style="text-align: center;">
	<img alt="[img02-filezilla-ubuntu.png]" class="ipsImage ipsImage_thumbnailed" data-fileid="98308" data-unique="twu1k69n9" src="https://academy.hsoub.com/uploads/monthly_2022_05/img02-filezilla-ubuntu.jpg.33988080e4e44337adc2413de46b331c.jpg" style="width: 600px; height: auto;"></p>

<h2>
	استخدام FileZilla
</h2>

<p>
	عند تشغيل البرنامج FileZilla لأول مرة ستشاهد الواجهة المبينة أدناه، فالجانب الأيسر منها مخصص للجهاز المحلي أي الحاسب المستضيف للبرنامج، أما الجانب الأيمن فهو مخصص <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r574/?msclkid=d6863ddcc28711ec8c958533031c2734" rel="">للخادم</a> البعيد وسيكون فارغًا قبل <a href="https://academy.hsoub.com/devops/security/ssh/%D9%81%D9%8A%D8%AF%D9%8A%D9%88-%D8%A7%D9%84%D8%A7%D8%AA%D8%B5%D8%A7%D9%84-%D8%A8%D8%AE%D8%A7%D8%AF%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-%D8%B9%D8%A8%D8%B1-ssh-r397/" rel="">الاتصال بالخادم</a> وفور إتمام عملية الاتصال ستظهر ملفات الخادم البعيد ضمنه، وهو ما سنعرض بالتفصيل ولكن قبل ذلك لنتعرف على واجهة استخدام البرنامج.
</p>

<p style="text-align: center;">
	<img alt="[img03-filezilla.png]" class="ipsImage ipsImage_thumbnailed" data-fileid="98309" data-unique="g4vjg9gp6" src="https://academy.hsoub.com/uploads/monthly_2022_05/img03-filezilla.jpg.c33e0d66a58eb6a0727313a3d47b8908.jpg" style="width: 600px; height: auto;"></p>

<h2>
	واجهة استخدام FileZilla
</h2>

<p>
	تنقسم واجهة استخدام البرنامج كما توضح الصورة التالية إلى ستة نوافذ أو أقسام سنشرحها بإيجاز:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="96951" href="https://academy.hsoub.com/uploads/monthly_2022_04/img04-Annotated_main_window.png.1ef098ec922c230b4a75b8785e794b05.png" rel=""><img alt="img04-Annotated_main_window.png" class="ipsImage ipsImage_thumbnailed" data-fileid="96951" data-unique="i1nk1kjcs" src="https://academy.hsoub.com/uploads/monthly_2022_04/img04-Annotated_main_window.png.1ef098ec922c230b4a75b8785e794b05.png" style="width: 650px; height: auto;"></a>
</p>

<ol>
<li>
		<strong>شريط الأدوات</strong>: ويتضمن أزرارًا لتنفيذ مهام متنوعة مثل فتح مدير الموقع أو تحديث قائمة الملفات والمجلدات المعروضة سواء في جانب الجهاز المحلي أو البعيد بالإضافة إلى إعطاء أمر البدء بنقل الملفات أو إيقاف النقل …إلخ.
	</li>
	<li>
		<strong>شريط الاتصال السريع</strong>: ويستخدم لإدخال بيانات الاتصال بالخادم البعيد وهي اسمه أو عنوانه على الشبكة واسم المستخدم وكلمة المرور.
	</li>
	<li>
		<strong>سجل الرسائل</strong>: ويعرض رسائل عن تتبع كافة الأحداث الجارية ضمن البرنامج بغض النظر عن نجاح تأسيس الاتصال من عدمه. وتُميّز هذه الرسائل بالألوان الأخطاء باللون الأحمر والأوامر التنفيذية باللون الأزرق أما الأحداث العادية فهي دون لون.
	</li>
	<li>
		<strong>الموقع المحلي</strong>: هذا الجانب من الشاشة مخصص لعرض ملفات الجهاز المحلي وتنفذ ضمنه أوامر الرفع من الموقع المحلي إلى البعيد.
	</li>
	<li>
		<strong>الموقع البعيد</strong>: يشابه تمامًا جانب الشاشة المحلي في الخصائص لكنه يعرض ملفات الجهاز البعيد وهو مخصص لأوامر التنزيل أي الإرسال من الخادم للنظام المحلي.
	</li>
	<li>
		<strong>رتل عملية النقل</strong>: ويبين كافة العناصر التي يتم تبادلها بين الطرفين مع سرعة النقل لكل عنصر.
	</li>
</ol>
<h2>
	الاتصال بخادم SFTP باستخدام FileZilla
</h2>

<p>
	قبل البدء يجب أن تتوفر متطلبات الاتصال وهي إعداد الخادم البعيد ليقبل هذا النوع من بروتوكولات الاتصال ومعرفتك عنوان بروتوكول الإنترنت للخادم البعيد واسم المستخدم وكلمة المرور للدخول إليه بالإضافة إلى توفر أذونات الوصول للمجلد الهدف، والآن ننتقل لتنفيذ عملية نقل باستخدام البرنامج.
</p>

<p>
	أضف اتصال SFTP جديد من خلال النقر على أيقونة مدير المواقع الموجودة في شريط الأدوات أو عبر اختيارها من قائمة ملف.
</p>

<p style="text-align: center;">
	<img alt="[img05-Site Manager.png]" class="ipsImage ipsImage_thumbnailed" data-fileid="98310" data-unique="3t71h6rwo" src="https://academy.hsoub.com/uploads/monthly_2022_05/627a14fe4c663_img05-SiteManager.jpg.fc40e432f852b54e40ce0d3c75e49540.jpg" style="width: 350px; height: auto;"></p>

<p>
	وبعد أن يفتح مدير المواقع اضغط على موقع جديد ويمكنك إعادة تسميته باسم ذي دلالة، وبعد ذلك اضبط إعدادات الاتصال وفق مايلي:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="98311" href="https://academy.hsoub.com/uploads/monthly_2022_05/627a14ff09389_img06-sitemanagerfull.jpg.92ecd640d38c1f3906015ffbd22088bc.jpg" rel=""><img alt="[img06-site manager full.png]" class="ipsImage ipsImage_thumbnailed" data-fileid="98311" data-unique="itsb752zy" src="https://academy.hsoub.com/uploads/monthly_2022_05/627a14ff1ddc3_img06-sitemanagerfull.thumb.jpg.2d116df89391099c7ee324e1de4e96e1.jpg" style="width: 600px; height: auto;"></a>
</p>

<p>
	اختر أسفل التبويب عام General بروتوكول الاتصال المطلوب وهو في حالتنا SFTP واكتب عنوان الخادم البعيد ورقم بوابة الاتصال في الخانات المخصصة لذلك وفي حال لم تختر رقم بوابة فإن البرنامج سيستخدم البوابة 22 وهي الخاصة باتصالات <a href="https://academy.hsoub.com/devops/security/ssh/%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/?msclkid=1d04f7a9c28811ecb75172b762b1da30" rel=""><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></a>.
</p>

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

<p>
	ثم اضغط على زر اتصال الموجود في أسفل النافذة وستتم عملية اتصالك مع الخادم، ولتسهيل العمل يخزن البرنامج اعدادات الاتصال الخاص بك لتستخدمه مرةً أخرى.
</p>

<p>
	تتبع اتصالك من خلال رسائل الأحداث الظاهرة في سجل الرسائل فهي مؤشر على نجاح الاتصال كما أن مجرد ظهور الملفات على شاشة البرنامج في جانب الخادم البعيد يعتبر مؤشر على نجاح العملية.
</p>

<p style="text-align: center;">
	<img alt="img07-connection.png" class="ipsImage ipsImage_thumbnailed" data-fileid="98312" data-unique="cgmsgbr69" src="https://academy.hsoub.com/uploads/monthly_2022_05/img07-connection.jpg.1c61144a51beb050239252dc7b0044fe.jpg" style="width: 600px; height: auto;"></p>

<h2>
	إرسال الملفات إلى الخادم البعيد
</h2>

<p>
	الخطوة الأهم لدقة التنفيذ هي الوجود في المسار الصحيح للملفات على كلا الجانبين المحلي والبعيد، ومن ثم يكفي لعملية الإرسال النقر المزدوج على الملف أو الضغط على الزر الأيمن من الفأرة واختيار رفع upload، فإذا ضغط على ملف من النافذة اليسرى، فسيُرسل مباشرة إلى المجلد الظاهر في النافذة اليمنى (أو يضاف إلى الطابور منتظرًا دوره ليرسل)، والأمر نفسه لنقل الملفات من النافذة اليمنى إلى اليسرى أي من الخادم البعيد إلى المحلي، وهذا سبب التأكيد على وجودك في المسار الصحيح في كلا النافذتين أي على النظام البعيد والمحلي.
</p>

<p style="text-align: center;">
	<img alt="img08-transfer-queue.png" class="ipsImage ipsImage_thumbnailed" data-fileid="98313" data-unique="i4qtam5zo" src="https://academy.hsoub.com/uploads/monthly_2022_05/img08-transfer-queue.jpg.a9d1eabb8e0e144cea265948b1f58127.jpg" style="width: 600px; height: auto;"></p>

<h2>
	تنزيل الملفات من الخادم البعيد
</h2>

<p>
	تُنزَّل الملفات بنفس آلية الإرسال أو الرفع الواردة في الفقرة السابقة بحيث يتم التأكد من فتح المسارات الصحيحة على الجانبين المحلي والبعيد ومن ثم اختيار تنزيل Download بدلًا عن رفع Upload وستجد أن الملفات نقلت للموضع المحدد في مسارك المفتوح على الجانب المحلي من الشاشة.
</p>

<p>
	ولو راقبت الأداء ستلاحظ أن عمليات الرفع والتنزيل تجري بشكل متناظر وأن البرنامج يدعم عمليات النقل المتبادل على التوازي ما لم يتم تقييد عدد الاتصالات المسموح بها.
</p>

<h2>
	خاتمة
</h2>

<p>
	وبذلك نكون قد أحطنا بأهم الأساسيات الخاصة بعمل البرنامج والتي ستمكن القارئ من إنجاز عمليات تبادل الملفات بين النظام المحلي والخادم بسهولة ويُسر.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://itsfoss.com/filezilla-ubuntu" rel="external nofollow">Using FileZilla for Connecting to SFTP Server Via GUI</a> لصاحبه Pratham Patel.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/apps/web/wordpress/%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-filezilla-%D9%88-phpmyadmin-%D9%84%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D9%88%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r367/" rel="">دليل استخدام FileZilla و phpMyAdmin لإدارة ملفات وقواعد بيانات موقع ووردبريس</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%d9%83%d9%8a%d9%81%d9%8a%d8%a9-%d8%aa%d9%86%d8%b5%d9%8a%d8%a8-%d9%88%d8%a5%d8%b9%d8%af%d8%a7%d8%af-%d8%ae%d8%a7%d8%af%d9%88%d9%85-ftp-%d8%b9%d9%84%d9%89-%d8%a3%d9%88%d8%a8%d9%86%d8%aa%d9%88-r196/?msclkid=890ac6e1c28611ecb12f30e802349e91" rel="">كيفية تنصيب وإعداد خادوم FTP على أوبنتو</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/web/wordpress/3-%D8%A3%D8%AE%D8%B7%D8%A7%D8%A1-%D8%B4%D8%A7%D8%A6%D8%B9%D8%A9-%D8%B9%D9%86%D8%AF-%D8%B1%D9%81%D8%B9-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A8%D8%B1%D9%88%D8%AA%D9%88%D9%83%D9%88%D9%84-ftp-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B5%D9%84%D8%A7%D8%AD%D9%87%D8%A7-r116/?msclkid=890ae306c28611ecbb1072618a4b50d5" rel="">3 أخطاء شائعة عند رفع الملفات باستخدام بروتوكول FTP وكيفية إصلاحها</a>
	</li>
	<li>
		النسخة الكاملة لكتاب <a href="https://academy.hsoub.com/files/20-%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%A3%D9%85%D8%A7%D9%86-%D8%A7%D9%84%D8%B1%D9%82%D9%85%D9%8A/" rel="">دليل الأمان الرقمي</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">604</guid><pubDate>Fri, 08 Apr 2022 16:00:00 +0000</pubDate></item><item><title>&#x637;&#x631;&#x64A;&#x642;&#x629; &#x62A;&#x647;&#x62C;&#x64A;&#x631; &#x645;&#x648;&#x642;&#x639; &#x645;&#x628;&#x646;&#x64A; &#x639;&#x644;&#x649; &#x648;&#x648;&#x631;&#x62F;&#x628;&#x631;&#x64A;&#x633; &#x625;&#x644;&#x649; &#x62E;&#x627;&#x62F;&#x645; &#x645;&#x636;&#x64A;&#x641; &#x62C;&#x62F;&#x64A;&#x62F;</title><link>https://academy.hsoub.com/devops/servers/%D8%B7%D8%B1%D9%8A%D9%82%D8%A9-%D8%AA%D9%87%D8%AC%D9%8A%D8%B1-%D9%85%D9%88%D9%82%D8%B9-%D9%85%D8%A8%D9%86%D9%8A-%D8%B9%D9%84%D9%89-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D9%85%D8%B6%D9%8A%D9%81-%D8%AC%D8%AF%D9%8A%D8%AF-r582/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_02/61fa3cfe11165_---------.png.160f13a2310d6ea0c48196f4bd42a57f.png" /></p>

<p>
	هل سبق أن احتجت إلى أن تنقل موقعك المبني على ووردبريس إلى خادم مضيف جديد؟ سنقدم لك النهج اليسير لتنفيذ ذلك وليس النهج الذي ينصَح به عادةً.
</p>

<p>
	إن عملية النقل (أو التهجير) ليست عمليةً تدميريةً، لذا يسهل الرجوع إلى الخادم الأصلي إذا اضطررت إلى ذلك لأي سبب كان.
</p>

<p>
	اتبع هذا النهج اليسير لتهجير موقعك وضبط إعدادات جدار الحماية.
</p>

<h2>
	مكونات الموقع المبني على ووردبريس
</h2>

<p>
	يتطلب تشغيل موقع على ووردبريس 3 مكونات رئيسية: نظام ووردبريس، وخادم ويب مثل <a href="https://academy.hsoub.com/devops/servers/web/apache/%D8%AA%D9%86%D8%B5%D9%8A%D8%A8-%D9%88%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D8%A3%D8%A8%D8%A7%D8%AA%D8%B4%D9%8A-httpd-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r190/" rel="">أباتشي Apache</a> الذي سنستخدمه في هذه المقالة، و<a href="https://academy.hsoub.com/devops/servers/databases/mysql/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%A3%D9%85%D9%8A%D9%86-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A7%D9%84%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-mysql-mariadb-%D8%B9%D9%84%D9%89-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-%D9%84%D9%8A%D9%86%D9%83%D8%B3-r54/" rel="">قاعدة بيانات MariaDB</a> التي تتفرع عن <a href="https://academy.hsoub.com/devops/servers/databases/mysql/%D8%AA%D8%B9%D9%84%D9%85-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-mysql-r297/" rel="">قواعد البيانات من نوع MySQL</a> وتكافئها وظيفيًا.
</p>

<p>
	في حالة استخدامك لخادم ويب آخر غير أباتشي عليك أن تطبق الإعدادات التي سنضبطها في هذه المقالة بما يتوافق مع أي خادم ويب تستخدمه.
</p>

<h2>
	الإعدادات على الخادم الأصلي
</h2>

<p>
	لدينا خادمان مضيفان أحدهما خادم يعمل <a href="https://academy.hsoub.com/files/24-%D8%A3%D9%86%D8%B8%D9%85%D8%A9-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%84%D9%85%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D9%86/" rel="">بنظام تشغيل</a> لينوكس يمثل جدار الحماية والموجه router في الشبكة، أما الآخر يستضيف خادم الويب ضمن الشبكة. نستخدم في عنونة الشبكة الداخلية ما كان يسمّى سابقًا <a href="https://academy.hsoub.com/devops/servers/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D8%A8%D8%B1%D9%88%D8%AA%D9%88%D9%83%D9%88%D9%84-tcpip-%D9%88%D8%A8%D8%B9%D8%B6-%D9%85%D9%86-%D8%AE%D8%AF%D9%85%D8%A7%D8%AA%D9%87-r169/" rel="">مجال عناوين الشبكة الخاصة من الفئة C</a> أو class C private network address range، والذي يشار إليه في منهج التوجيه غير الصنفي بين النطاقات CIDR بالشكل التالي: 192.168.0.0/24 .
</p>

<p>
	أستخدم برنامج جدار الحماية المعروف <a href="https://academy.hsoub.com/devops/security/firewalls/%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-iptables-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D9%88%D8%A3%D9%88%D8%A7%D9%85%D8%B1-%D8%B4%D8%A7%D8%A6%D8%B9%D8%A9-%D9%84%D9%84%D8%AC%D8%AF%D8%A7%D8%B1-%D8%A7%D9%84%D9%86%D8%A7%D8%B1%D9%8A-r119/" rel="">IPTablesٍ</a> الذي أفضله على برنامج firewalld الأكثر تعقيدًا. ضبطت إحدى الأسطر في إعدادات جدار الحماية ليرسل الحزم Packets التي يتلقاها على المنفذ 80 (منفذ خدمة HTTP) إلى خادم الويب. كما تجد في التعليقات وضعت قواعد لتحويل الاتصالات الأخرى الواردة إلى خادم الويب ذاته على المنافذ المناسبة ضمن ملف <code>‎/etc/sysconfig/iptables</code>.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7809_15" style="">
<span class="com"># Reroute ports for inbound connections to the appropriate web/email/etc server.</span><span class="pln">
</span><span class="com"># HTTPD goes to 192.168.0.75</span><span class="pln">
</span><span class="pun">-</span><span class="pln">A PREROUTING </span><span class="pun">-</span><span class="pln">d </span><span class="lit">45.20</span><span class="pun">.</span><span class="lit">209.41</span><span class="pun">/</span><span class="lit">255.255</span><span class="pun">.</span><span class="lit">255.248</span><span class="pln"> </span><span class="pun">-</span><span class="pln">p tcp </span><span class="pun">-</span><span class="pln">m tcp </span><span class="pun">--</span><span class="pln">dport </span><span class="lit">80</span><span class="pln"> \

  </span><span class="pun">-</span><span class="pln">j DNAT </span><span class="pun">--</span><span class="pln">to</span><span class="pun">-</span><span class="pln">destination </span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">0.75</span><span class="pun">:</span><span class="lit">80</span></pre>

<p>
	ضبطت خادم الويب أباتشي الأصلي باستخدام المضيف الافتراضي القائم على الاسم لأنني أخدّم عدة مواقع من نسخة HTTPD واحدة. يفضل دومًا استخدام أسلوب المضيف الافتراضي القائم على الاسم في ضبط الإعدادات لأنك في حال قررت لاحقًا استضافة مواقع إضافية سيسهل عليك هذا الأسلوب تنفيذ ذلك.
</p>

<p>
	تجد فيما يلي مقطع المضيف الافتراضي ضمن ملف <code>‎/etc/httpd/conf/httpd.conf</code> لنقل الموقع إلى الخادم الجديد. لا يحتوي هذا المقطع على عناوين شبكية IP addresses لذا ليس عليك إجراء أي تعديل لاستخدامه على الخادم الجديد.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7809_17" style="">
<span class="tag">&lt;VirtualHost</span><span class="pln"> *:80</span><span class="tag">&gt;</span><span class="pln">
   ServerName www.website1.org
   ServerAlias server.org

DocumentRoot "/var/website1/html"
   ErrorLog "logs/error_log"
   ServerAdmin me@website1.org

</span><span class="tag">&lt;Directory</span><span class="pln"> </span><span class="atv">"/var/website1/html"</span><span class="tag">&gt;</span><span class="pln">
      Options Indexes FollowSymLinks

AllowOverride None
      Require all granted

</span><span class="tag">&lt;/Directory&gt;</span><span class="pln">
</span><span class="tag">&lt;/VirtualHost&gt;</span></pre>

<p>
	تكون تعليمة <code>listen</code> التي نجدها في بداية ملف httpd.conf تقريبًا مثل المقطع أدناه قبل التهجير. إن العنوان الموجود في المقطع هو عنوان الشبكة الخاص Private IP وليس العنوان العام Public IP.
</p>

<pre class="ipsCode prettyprint lang-javascript prettyprinted" id="ips_uid_7809_19" style="">
<span class="typ">Listen</span><span class="pln"> </span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">0.75</span><span class="pun">:</span><span class="lit">80</span></pre>

<p>
	يجب تعديل هذا العنوان المذكور بعد <code>listen</code> عند نقل الموقع إلى الخادم الجديد.
</p>

<h2>
	تهيئة الخادم الجديد
</h2>

<p>
	يمكنك تهيئة الخادم الجديد لنقل الموقع بثلاث خطوات:
</p>

<ul>
<li>
		تثبيت الخدمات.
	</li>
	<li>
		ضبط إعدادات جدار الحماية.
	</li>
	<li>
		ضبط إعدادات خادم الويب.
	</li>
</ul>
<h3>
	تثبيت خادم الويب أباتشي وقاعدة البيانات MariaDB
</h3>

<p>
	ثبّت خادم الويب أباتشي وقاعدة البيانات MariaDB على خادمك الجديد إذا لم يكونا منصبين مسبقًا عليه، لكن ليس عليك تثبيت ووردبريس.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7809_21" style="">
<span class="pln">dnf </span><span class="pun">-</span><span class="pln">y install httpd mariadb</span></pre>

<h3>
	ضبط إعدادات جدار الحماية على الخادم الجديد
</h3>

<p>
	تأكد من فتح المنفذ 80 على جدار حماية الخادم الجديد. تكون سياسة جدار الحماية المحددة ضمن الإعدادات الافتراضية لمعظم التوزيعات الحديثة هي حجب كافة حركات المرور الواردة لضمان تطبيق درجة أعلى من الحماية.
</p>

<p>
	ربما ستجد مسبقًا أول سطر في المقتطف أدناه ضمن أسطر برنامج جدار الحماية لديك IPTables أو أي نوع آخر من برامج جدار الحماية التي تعمل وفق نظام Netfilter. فهو يتعرف على الحزم الواردة إلى الخادم التي تعرف مسبقًا بأنها واردة من مصدر يسمح له بالمرور، ويتجاوز تطبيق أية قواعد أخرى على الاتصالات الواردة وبالتالي يوفر في الوقت وفي عدد دورات وحدة المعالجة المركزية CPU cycles. يتعرف آخر سطر في المقتطف على الاتصالات الجديدة الواردة إلى خدمة HTTPD على المنفذ 80 ويسمح لها بالمرور.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7809_23" style="">
<span class="pun">-</span><span class="pln">A INPUT </span><span class="pun">-</span><span class="pln">m state </span><span class="pun">--</span><span class="pln">state RELATED</span><span class="pun">,</span><span class="pln">ESTABLISHED </span><span class="pun">-</span><span class="pln">j ACCEPT
</span><span class="str">&lt;snip&gt;</span><span class="pln">
</span><span class="com"># HTTP</span><span class="pln">
</span><span class="pun">-</span><span class="pln">A INPUT </span><span class="pun">-</span><span class="pln">p tcp </span><span class="pun">-</span><span class="pln">m state </span><span class="pun">--</span><span class="pln">state NEW </span><span class="pun">-</span><span class="pln">m tcp </span><span class="pun">--</span><span class="pln">dport </span><span class="lit">80</span><span class="pln"> </span><span class="pun">-</span><span class="pln">j ACCEPT</span></pre>

<p>
	تعد العينة التالية من ملف <code>/etc/sysconfig/iptables</code> نموذجًا مصغرًا عن مجموعة قواعد برنامج جدار الحماية IPTables التي تسمح بمرور الاتصالات الواردة إلى خدمتي <a href="https://academy.hsoub.com/devops/security/ssh/%D8%A3%D9%86%D9%81%D8%A7%D9%82-ssh%D8%8C-%D9%85%D8%A7%D9%87%D9%8A%D8%AA%D9%87%D8%A7-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF%D9%87%D8%A7-r76/" rel=""><abbr title="Secure Shell | القشرة (أو الصَدَفة) الآمنة">SSH</abbr></a> (منفذ 22) و HTTPD (منفذ 80).
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_7809_26" style="">
<span class="pun">*</span><span class="pln">filter
</span><span class="pun">:</span><span class="pln">INPUT ACCEPT </span><span class="pun">[</span><span class="lit">0</span><span class="pun">:</span><span class="lit">0</span><span class="pun">]</span><span class="pln">
</span><span class="pun">:</span><span class="pln">FORWARD ACCEPT </span><span class="pun">[</span><span class="lit">0</span><span class="pun">:</span><span class="lit">0</span><span class="pun">]</span><span class="pln">
</span><span class="pun">:</span><span class="pln">OUTPUT ACCEPT </span><span class="pun">[</span><span class="lit">0</span><span class="pun">:</span><span class="lit">0</span><span class="pun">]</span><span class="pln">
</span><span class="pun">-</span><span class="pln">A INPUT </span><span class="pun">-</span><span class="pln">m state </span><span class="pun">--</span><span class="pln">state RELATED</span><span class="pun">,</span><span class="pln">ESTABLISHED </span><span class="pun">-</span><span class="pln">j ACCEPT
</span><span class="pun">-</span><span class="pln">A INPUT </span><span class="pun">-</span><span class="pln">p icmp </span><span class="pun">-</span><span class="pln">j ACCEPT
</span><span class="pun">-</span><span class="pln">A INPUT </span><span class="pun">-</span><span class="pln">i lo </span><span class="pun">-</span><span class="pln">j ACCEPT
</span><span class="com"># SSHD</span><span class="pln">
</span><span class="pun">-</span><span class="pln">A INPUT </span><span class="pun">-</span><span class="pln">p tcp </span><span class="pun">-</span><span class="pln">m state </span><span class="pun">--</span><span class="pln">state NEW </span><span class="pun">-</span><span class="pln">m tcp </span><span class="pun">--</span><span class="pln">dport </span><span class="lit">22</span><span class="pln"> </span><span class="pun">-</span><span class="pln">j ACCEPT
</span><span class="com"># HTTP</span><span class="pln">
</span><span class="pun">-</span><span class="pln">A INPUT </span><span class="pun">-</span><span class="pln">p tcp </span><span class="pun">-</span><span class="pln">m state </span><span class="pun">--</span><span class="pln">state NEW </span><span class="pun">-</span><span class="pln">m tcp </span><span class="pun">--</span><span class="pln">dport </span><span class="lit">80</span><span class="pln"> </span><span class="pun">-</span><span class="pln">j ACCEPT

</span><span class="com"># Final disposition for unmatched packets</span><span class="pln">
</span><span class="pun">-</span><span class="pln">A INPUT </span><span class="pun">-</span><span class="pln">j REJECT </span><span class="pun">--</span><span class="pln">reject</span><span class="pun">-</span><span class="pln">with icmp</span><span class="pun">-</span><span class="pln">host</span><span class="pun">-</span><span class="pln">prohibited
</span><span class="pun">-</span><span class="pln">A FORWARD </span><span class="pun">-</span><span class="pln">j REJECT </span><span class="pun">--</span><span class="pln">reject</span><span class="pun">-</span><span class="pln">with icmp</span><span class="pun">-</span><span class="pln">host</span><span class="pun">-</span><span class="pln">prohibited
COMMIT</span></pre>

<p>
	كان التعديل الوحيد الذي عليّ إضافته إلى قواعد جدار الحماية على الخادم الجديد هو آخر سطر في المقتطف السابق في ملف <code>‎/etc/sysconfig/iptables</code> ثم إعادة تحميل مجموعة القواعد المعدَّلة.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_7809_28" style="">
<span class="pln">iptables</span><span class="pun">-</span><span class="pln">restore </span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">sysconfig</span><span class="pun">/</span><span class="pln">iptables</span></pre>

<p>
	تستخدم معظم التوزيعات المبنية على <a href="https://academy.hsoub.com/devops/linux/%D9%85%D8%A7-%D9%87%D9%88-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-%D9%84%D9%8A%D9%86%D9%83%D8%B3%D8%9F-r451/" rel="">نظام لينوكس</a> ريدهات RedHat مثل توزيعة فيدورا Fedora، برنامج جدار الحماية <code>firewalld</code>. لم نستخدمه لأن الخدمات المستخدمة في العمل المنزلي أو الشركات الصغيرة والمتوسطة لا تحتاج جدار حماية بهذا التعقيد. لإضافة سماحية وصول إلى الخادم على المنفذ 80 على برنامج جدار الحماية <code>firewalld</code> نقترح أن تطلع على <a href="https://firewalld.org/documentation/howto/open-a-port-or-service.html" rel="external nofollow">صفحة موقع firewalld</a>.
</p>

<p>
	قد يختلف جدار الحماية على خادمك وتفاصيل إعداداته عما ذكرنا سابقًا، لكن غايتك هي السماح للاتصالات الواردة إلى خدمة HTTPD على المنفذ 80 على خادم الويب الجديد.
</p>

<h3>
	إعدادات خدمة HTTPD
</h3>

<p>
	يمكنك ضبط إعدادات خدمة HTTPD في ملف <code>‎/etc/httpd/conf/httpd.conf</code>. اضبط العنوان IP في سطر Listen كما هو موضّح في المقطع التالي، إذ حددنا فيه عنوان خادم الويب الجديد 192.168.0.125.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_7809_30" style="">
<span class="typ">Listen</span><span class="pln"> </span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">0.125</span><span class="pun">:</span><span class="lit">80</span></pre>

<p>
	انسخ مقطع VirtualHost الخاص بالموقع الذي تنقله والصقه في نهاية ملف <code>httpd.conf</code> على الخادم الجديد.
</p>

<h2>
	عملية النقل
</h2>

<p>
	ستحتاج إلى نقل مجموعتين من البيانات فقط وهما قاعدة البيانات وهيكلية مجلدات الموقع. أنشئ ملفات مضغوطة بصيغة <code>tar</code> للمجلدين.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_7809_32" style="">
<span class="pln">cd </span><span class="pun">/</span><span class="pln">var </span><span class="pun">;</span><span class="pln"> tar </span><span class="pun">-</span><span class="pln">cvf </span><span class="pun">/</span><span class="pln">tmp</span><span class="pun">/</span><span class="pln">website</span><span class="pun">.</span><span class="pln">tar website1</span><span class="pun">/</span><span class="pln">
cd </span><span class="pun">/</span><span class="pln">var</span><span class="pun">/</span><span class="pln">lib </span><span class="pun">;</span><span class="pln"> tar </span><span class="pun">-</span><span class="pln">cvf </span><span class="pun">/</span><span class="pln">tmp</span><span class="pun">/</span><span class="pln">database</span><span class="pun">.</span><span class="pln">tar mysql</span><span class="pun">/</span></pre>

<p>
	انسخ هذين الملفين المضغوطين إلى الخادم الجديد. نحفظ الملفات كهذه عادةً في مجلد <code>tmp</code>. نفذ الأوامر التالية على الخادم الجديد لاستخراج الملفات من الملفات المضغوطة إلى المجلدات الصحيحة.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_7809_34" style="">
<span class="pln">cd </span><span class="pun">/</span><span class="pln">var </span><span class="pun">;</span><span class="pln"> tar </span><span class="pun">-</span><span class="pln">xvf </span><span class="pun">/</span><span class="pln">tmp</span><span class="pun">/</span><span class="pln">website</span><span class="pun">.</span><span class="pln">tar
cd </span><span class="pun">/</span><span class="pln">var</span><span class="pun">/</span><span class="pln">lib </span><span class="pun">;</span><span class="pln"> tar </span><span class="pun">-</span><span class="pln">xvf </span><span class="pun">/</span><span class="pln">tmp</span><span class="pun">/</span><span class="pln">database</span><span class="pun">.</span><span class="pln">tar</span></pre>

<p>
	تجد جميع <a href="https://academy.hsoub.com/apps/web/wordpress/%D8%A5%D8%B5%D9%84%D8%A7%D8%AD-%D8%A7%D9%84%D9%85%D9%84%D9%81%D8%A7%D8%AA-%D8%A3%D9%88-%D9%82%D9%88%D8%A7%D8%B9%D8%AF-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-%D8%A7%D9%84%D8%AA%D8%A7%D9%84%D9%81%D8%A9-%D8%A3%D9%88-%D8%A7%D9%84%D9%85%D9%81%D9%82%D9%88%D8%AF%D8%A9-%D9%81%D9%8A-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r240/" rel="">ملفات ووردبريس</a> في مجلد <code>‎/var/website1</code>، لذا لن تضطر إلى تثبيتهم على الخادم الجديد، كما لن تضطر إلى تنفيذ عملية تثبيت نظام ووردبريس عليه.
</p>

<p>
	لن تضطر إلى نقل أي ملف آخر غير هذا المجلد إلى الخادم الجديد.
</p>

<p>
	آخر خطوة عليك اتخاذها قبل التبديل بين الخادمين هي تشغيل (أو إعادة تشغيل) عفاريت daemons خدمتي mysqld و httpd، أما ووردبريس ليست خدمة لذا لا تشغَّل بنفس طريقة تشغيل العفاريت.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_7809_36" style="">
<span class="pln">systemctl start mysqld </span><span class="pun">;</span><span class="pln"> systemctl start httpd</span></pre>

<p>
	ينبغي أن تتحقق من حالة هاتين الخدمتين بعد تشغيلهما.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_7809_38" style="">
<span class="pln">systemctl status mysqld
</span><span class="pun">●</span><span class="pln"> mariadb</span><span class="pun">.</span><span class="pln">service </span><span class="pun">-</span><span class="pln"> </span><span class="typ">MariaDB</span><span class="pln"> </span><span class="lit">10.5</span><span class="pln"> database server
    </span><span class="typ">Loaded</span><span class="pun">:</span><span class="pln"> loaded </span><span class="pun">(/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">lib</span><span class="pun">/</span><span class="pln">systemd</span><span class="pun">/</span><span class="pln">system</span><span class="pun">/</span><span class="pln">mariadb</span><span class="pun">.</span><span class="pln">service</span><span class="pun">;</span><span class="pln"> enabled</span><span class="pun">;</span><span class="pln"> vendor preset</span><span class="pun">:</span><span class="pln"> disabled</span><span class="pun">)</span><span class="pln">
    </span><span class="typ">Active</span><span class="pun">:</span><span class="pln"> active </span><span class="pun">(</span><span class="pln">running</span><span class="pun">)</span><span class="pln"> since </span><span class="typ">Sat</span><span class="pln"> </span><span class="lit">2021</span><span class="pun">-</span><span class="lit">08</span><span class="pun">-</span><span class="lit">21</span><span class="pln"> </span><span class="lit">14</span><span class="pun">:</span><span class="lit">03</span><span class="pun">:</span><span class="lit">44</span><span class="pln"> EDT</span><span class="pun">;</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> days ago
        </span><span class="typ">Docs</span><span class="pun">:</span><span class="pln"> man</span><span class="pun">:</span><span class="pln">mariadbd</span><span class="pun">(</span><span class="lit">8</span><span class="pun">)</span><span class="pln">

https</span><span class="pun">:</span><span class="com">//mariadb.com/kb/en/library/systemd/</span><span class="pln">
   </span><span class="typ">Process</span><span class="pun">:</span><span class="pln"> </span><span class="lit">251783</span><span class="pln"> </span><span class="typ">ExecStartPre</span><span class="pun">=/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">libexec</span><span class="pun">/</span><span class="pln">mariadb</span><span class="pun">-</span><span class="pln">check</span><span class="pun">-</span><span class="pln">socket </span><span class="pun">(</span><span class="pln">code</span><span class="pun">=</span><span class="pln">exited</span><span class="pun">,</span><span class="pln"> status</span><span class="pun">=</span><span class="lit">0</span><span class="pun">/</span><span class="pln">SUCCESS</span><span class="pun">)</span><span class="pln">
   </span><span class="typ">Process</span><span class="pun">:</span><span class="pln"> </span><span class="lit">251805</span><span class="pln"> </span><span class="typ">ExecStartPre</span><span class="pun">=/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">libexec</span><span class="pun">/</span><span class="pln">mariadb</span><span class="pun">-</span><span class="pln">prepare</span><span class="pun">-</span><span class="pln">db</span><span class="pun">-</span><span class="pln">dir mariadb</span><span class="pun">.</span><span class="pln">service </span><span class="pun">(</span><span class="pln">code</span><span class="pun">=</span><span class="pln">exited</span><span class="pun">,</span><span class="pln"> status</span><span class="pun">=</span><span class="lit">0</span><span class="pun">/</span><span class="pln">SUCCESS</span><span class="pun">)</span><span class="pln">
   </span><span class="typ">Process</span><span class="pun">:</span><span class="pln"> </span><span class="lit">251856</span><span class="pln"> </span><span class="typ">ExecStartPost</span><span class="pun">=/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">libexec</span><span class="pun">/</span><span class="pln">mariadb</span><span class="pun">-</span><span class="pln">check</span><span class="pun">-</span><span class="pln">upgrade </span><span class="pun">(</span><span class="pln">code</span><span class="pun">=</span><span class="pln">exited</span><span class="pun">,</span><span class="pln"> status</span><span class="pun">=</span><span class="lit">0</span><span class="pun">/</span><span class="pln">SUCCESS</span><span class="pun">)</span><span class="pln">
 </span><span class="typ">Main</span><span class="pln"> <abbr title="Process IDentifier | معرّف العملية أو البرنامج">PID</abbr></span><span class="pun">:</span><span class="pln"> </span><span class="lit">251841</span><span class="pln"> </span><span class="pun">(</span><span class="pln">mariadbd</span><span class="pun">)</span><span class="pln">
      </span><span class="typ">Status</span><span class="pun">:</span><span class="pln"> </span><span class="str">"Taking your SQL requests now..."</span><span class="pln">
      </span><span class="typ">Tasks</span><span class="pun">:</span><span class="pln"> </span><span class="lit">15</span><span class="pln"> </span><span class="pun">(</span><span class="pln">limit</span><span class="pun">:</span><span class="pln"> </span><span class="lit">19003</span><span class="pun">)</span><span class="pln">
    </span><span class="typ">Memory</span><span class="pun">:</span><span class="pln"> </span><span class="lit">131.8M</span><span class="pln">
        CPU</span><span class="pun">:</span><span class="pln"> </span><span class="lit">1min</span><span class="pln"> </span><span class="lit">31.793s</span><span class="pln">
    </span><span class="typ">CGroup</span><span class="pun">:</span><span class="pln"> </span><span class="pun">/</span><span class="pln">system</span><span class="pun">.</span><span class="pln">slice</span><span class="pun">/</span><span class="pln">mariadb</span><span class="pun">.</span><span class="pln">service
</span><span class="pun">└─</span><span class="lit">251841</span><span class="pln"> </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">libexec</span><span class="pun">/</span><span class="pln">mariadbd </span><span class="pun">--</span><span class="pln">basedir</span><span class="pun">=/</span><span class="pln">usr

</span><span class="typ">Aug</span><span class="pln"> </span><span class="lit">21</span><span class="pln"> </span><span class="lit">14</span><span class="pun">:</span><span class="lit">03</span><span class="pun">:</span><span class="lit">43</span><span class="pln"> simba</span><span class="pun">.</span><span class="pln">stmarks</span><span class="pun">-</span><span class="pln">ral</span><span class="pun">.</span><span class="pln">org systemd</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]:</span><span class="pln"> </span><span class="typ">Starting</span><span class="pln"> </span><span class="typ">MariaDB</span><span class="pln"> </span><span class="lit">10.5</span><span class="pln"> database server</span><span class="pun">...</span><span class="pln">
</span><span class="typ">Aug</span><span class="pln"> </span><span class="lit">21</span><span class="pln"> </span><span class="lit">14</span><span class="pun">:</span><span class="lit">03</span><span class="pun">:</span><span class="lit">43</span><span class="pln"> simba</span><span class="pun">.</span><span class="pln">stmarks</span><span class="pun">-</span><span class="pln">ral</span><span class="pun">.</span><span class="pln">org mariadb</span><span class="pun">-</span><span class="pln">prepare</span><span class="pun">-</span><span class="pln">db</span><span class="pun">-</span><span class="pln">dir</span><span class="pun">[</span><span class="lit">251805</span><span class="pun">]:</span><span class="pln"> </span><span class="typ">Database</span><span class="pln"> </span><span class="typ">MariaDB</span><span class="pln"> is probably initialized in </span><span class="pun">/</span><span class="pln">var</span><span class="pun">/</span><span class="pln">lib</span><span class="pun">/</span><span class="pln">mysql already</span><span class="pun">,</span><span class="pln"> n</span><span class="pun">&gt;</span><span class="pln">
</span><span class="typ">Aug</span><span class="pln"> </span><span class="lit">21</span><span class="pln"> </span><span class="lit">14</span><span class="pun">:</span><span class="lit">03</span><span class="pun">:</span><span class="lit">43</span><span class="pln"> simba</span><span class="pun">.</span><span class="pln">stmarks</span><span class="pun">-</span><span class="pln">ral</span><span class="pun">.</span><span class="pln">org mariadb</span><span class="pun">-</span><span class="pln">prepare</span><span class="pun">-</span><span class="pln">db</span><span class="pun">-</span><span class="pln">dir</span><span class="pun">[</span><span class="lit">251805</span><span class="pun">]:</span><span class="pln"> </span><span class="typ">If</span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> is not the </span><span class="kwd">case</span><span class="pun">,</span><span class="pln"> make sure the </span><span class="pun">/</span><span class="pln">var</span><span class="pun">/</span><span class="pln">lib</span><span class="pun">/</span><span class="pln">mysql is empty before</span><span class="pun">&gt;</span><span class="pln">
</span><span class="typ">Aug</span><span class="pln"> </span><span class="lit">21</span><span class="pln"> </span><span class="lit">14</span><span class="pun">:</span><span class="lit">03</span><span class="pun">:</span><span class="lit">44</span><span class="pln"> simba</span><span class="pun">.</span><span class="pln">stmarks</span><span class="pun">-</span><span class="pln">ral</span><span class="pun">.</span><span class="pln">org mariadbd</span><span class="pun">[</span><span class="lit">251841</span><span class="pun">]:</span><span class="pln"> </span><span class="lit">2021</span><span class="pun">-</span><span class="lit">08</span><span class="pun">-</span><span class="lit">21</span><span class="pln"> </span><span class="lit">14</span><span class="pun">:</span><span class="lit">03</span><span class="pun">:</span><span class="lit">44</span><span class="pln"> </span><span class="lit">0</span><span class="pln"> </span><span class="pun">[</span><span class="typ">Note</span><span class="pun">]</span><span class="pln"> </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">libexec</span><span class="pun">/</span><span class="pln">mariadbd </span><span class="pun">(</span><span class="pln">mysqld </span><span class="lit">10.5</span><span class="pun">.</span><span class="lit">11</span><span class="pun">-</span><span class="typ">MariaDB</span><span class="pun">)</span><span class="pln"> startin</span><span class="pun">&gt;</span><span class="pln">
</span><span class="typ">Aug</span><span class="pln"> </span><span class="lit">21</span><span class="pln"> </span><span class="lit">14</span><span class="pun">:</span><span class="lit">03</span><span class="pun">:</span><span class="lit">44</span><span class="pln"> simba</span><span class="pun">.</span><span class="pln">stmarks</span><span class="pun">-</span><span class="pln">ral</span><span class="pun">.</span><span class="pln">org systemd</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]:</span><span class="pln"> </span><span class="typ">Started</span><span class="pln"> </span><span class="typ">MariaDB</span><span class="pln"> </span><span class="lit">10.5</span><span class="pln"> database server</span><span class="pun">.</span></pre>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_7809_40" style="">
<span class="pln">systemctl status httpd
</span><span class="pun">●</span><span class="pln"> httpd</span><span class="pun">.</span><span class="pln">service </span><span class="pun">-</span><span class="pln"> </span><span class="typ">The</span><span class="pln"> </span><span class="typ">Apache</span><span class="pln"> HTTP </span><span class="typ">Server</span><span class="pln">
   </span><span class="typ">Loaded</span><span class="pun">:</span><span class="pln"> loaded </span><span class="pun">(/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">lib</span><span class="pun">/</span><span class="pln">systemd</span><span class="pun">/</span><span class="pln">system</span><span class="pun">/</span><span class="pln">httpd</span><span class="pun">.</span><span class="pln">service</span><span class="pun">;</span><span class="pln"> enabled</span><span class="pun">;</span><span class="pln"> vendor preset</span><span class="pun">:</span><span class="pln"> disabled</span><span class="pun">)</span><span class="pln">
   </span><span class="typ">Drop</span><span class="pun">-</span><span class="typ">In</span><span class="pun">:</span><span class="pln"> </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">lib</span><span class="pun">/</span><span class="pln">systemd</span><span class="pun">/</span><span class="pln">system</span><span class="pun">/</span><span class="pln">httpd</span><span class="pun">.</span><span class="pln">service</span><span class="pun">.</span><span class="pln">d
</span><span class="pun">└─</span><span class="pln">php</span><span class="pun">-</span><span class="pln">fpm</span><span class="pun">.</span><span class="pln">conf
      </span><span class="typ">Active</span><span class="pun">:</span><span class="pln"> active </span><span class="pun">(</span><span class="pln">running</span><span class="pun">)</span><span class="pln"> since </span><span class="typ">Sat</span><span class="pln"> </span><span class="lit">2021</span><span class="pun">-</span><span class="lit">08</span><span class="pun">-</span><span class="lit">21</span><span class="pln"> </span><span class="lit">14</span><span class="pun">:</span><span class="lit">08</span><span class="pun">:</span><span class="lit">39</span><span class="pln"> EDT</span><span class="pun">;</span><span class="pln"> </span><span class="lit">4</span><span class="pln"> days ago
        </span><span class="typ">Docs</span><span class="pun">:</span><span class="pln"> man</span><span class="pun">:</span><span class="pln">httpd</span><span class="pun">.</span><span class="pln">service</span><span class="pun">(</span><span class="lit">8</span><span class="pun">)</span><span class="pln">
   </span><span class="typ">Main</span><span class="pln"> <abbr title="Process IDentifier | معرّف العملية أو البرنامج">PID</abbr></span><span class="pun">:</span><span class="pln"> </span><span class="lit">252458</span><span class="pln"> </span><span class="pun">(</span><span class="pln">httpd</span><span class="pun">)</span><span class="pln">
      </span><span class="typ">Status</span><span class="pun">:</span><span class="pln"> </span><span class="str">"Total requests: 10340; Idle/Busy workers 100/0;Requests/sec: 0.0294; Bytes served/sec: 616 B/sec"</span><span class="pln">
        </span><span class="typ">Tasks</span><span class="pun">:</span><span class="pln"> </span><span class="lit">278</span><span class="pln"> </span><span class="pun">(</span><span class="pln">limit</span><span class="pun">:</span><span class="pln"> </span><span class="lit">19003</span><span class="pun">)</span><span class="pln">
      </span><span class="typ">Memory</span><span class="pun">:</span><span class="pln"> </span><span class="lit">44.7M</span><span class="pln">
        CPU</span><span class="pun">:</span><span class="pln"> </span><span class="lit">2min</span><span class="pln"> </span><span class="lit">31.603s</span><span class="pln">
   </span><span class="typ">CGroup</span><span class="pun">:</span><span class="pln"> </span><span class="pun">/</span><span class="pln">system</span><span class="pun">.</span><span class="pln">slice</span><span class="pun">/</span><span class="pln">httpd</span><span class="pun">.</span><span class="pln">service
</span><span class="pun">├─</span><span class="lit">252458</span><span class="pln"> </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">sbin</span><span class="pun">/</span><span class="pln">httpd </span><span class="pun">-</span><span class="pln">DFOREGROUND
</span><span class="pun">├─</span><span class="lit">252459</span><span class="pln"> </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">sbin</span><span class="pun">/</span><span class="pln">httpd </span><span class="pun">-</span><span class="pln">DFOREGROUND
</span><span class="pun">├─</span><span class="lit">252460</span><span class="pln"> </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">sbin</span><span class="pun">/</span><span class="pln">httpd </span><span class="pun">-</span><span class="pln">DFOREGROUND
</span><span class="pun">├─</span><span class="lit">252461</span><span class="pln"> </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">sbin</span><span class="pun">/</span><span class="pln">httpd </span><span class="pun">-</span><span class="pln">DFOREGROUND
</span><span class="pun">├─</span><span class="lit">252462</span><span class="pln"> </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">sbin</span><span class="pun">/</span><span class="pln">httpd </span><span class="pun">-</span><span class="pln">DFOREGROUND
</span><span class="pun">└─</span><span class="lit">252676</span><span class="pln"> </span><span class="pun">/</span><span class="pln">usr</span><span class="pun">/</span><span class="pln">sbin</span><span class="pun">/</span><span class="pln">httpd </span><span class="pun">-</span><span class="pln">DFOREGROUND

</span><span class="typ">Aug</span><span class="pln"> </span><span class="lit">21</span><span class="pln"> </span><span class="lit">14</span><span class="pun">:</span><span class="lit">08</span><span class="pun">:</span><span class="lit">39</span><span class="pln"> simba</span><span class="pun">.</span><span class="pln">stmarks</span><span class="pun">-</span><span class="pln">ral</span><span class="pun">.</span><span class="pln">org systemd</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]:</span><span class="pln"> </span><span class="typ">Starting</span><span class="pln"> </span><span class="typ">The</span><span class="pln"> </span><span class="typ">Apache</span><span class="pln"> HTTP </span><span class="typ">Server</span><span class="pun">...</span><span class="pln">
</span><span class="typ">Aug</span><span class="pln"> </span><span class="lit">21</span><span class="pln"> </span><span class="lit">14</span><span class="pun">:</span><span class="lit">08</span><span class="pun">:</span><span class="lit">39</span><span class="pln"> simba</span><span class="pun">.</span><span class="pln">stmarks</span><span class="pun">-</span><span class="pln">ral</span><span class="pun">.</span><span class="pln">org httpd</span><span class="pun">[</span><span class="lit">252458</span><span class="pun">]:</span><span class="pln"> AH00112</span><span class="pun">:</span><span class="pln"> </span><span class="typ">Warning</span><span class="pun">:</span><span class="pln"> </span><span class="typ">DocumentRoot</span><span class="pln"> </span><span class="pun">[/</span><span class="pln">var</span><span class="pun">/</span><span class="pln">teststmarks</span><span class="pun">-</span><span class="pln">ral</span><span class="pun">/</span><span class="pln">html</span><span class="pun">]</span><span class="pln"> does not exist
</span><span class="typ">Aug</span><span class="pln"> </span><span class="lit">21</span><span class="pln"> </span><span class="lit">14</span><span class="pun">:</span><span class="lit">08</span><span class="pun">:</span><span class="lit">39</span><span class="pln"> simba</span><span class="pun">.</span><span class="pln">stmarks</span><span class="pun">-</span><span class="pln">ral</span><span class="pun">.</span><span class="pln">org httpd</span><span class="pun">[</span><span class="lit">252458</span><span class="pun">]:</span><span class="pln"> </span><span class="typ">Server</span><span class="pln"> configured</span><span class="pun">,</span><span class="pln"> listening on</span><span class="pun">:</span><span class="pln"> port </span><span class="lit">80</span><span class="pln">
</span><span class="typ">Aug</span><span class="pln"> </span><span class="lit">21</span><span class="pln"> </span><span class="lit">14</span><span class="pun">:</span><span class="lit">08</span><span class="pun">:</span><span class="lit">39</span><span class="pln"> simba</span><span class="pun">.</span><span class="pln">stmarks</span><span class="pun">-</span><span class="pln">ral</span><span class="pun">.</span><span class="pln">org systemd</span><span class="pun">[</span><span class="lit">1</span><span class="pun">]:</span><span class="pln"> </span><span class="typ">Started</span><span class="pln"> </span><span class="typ">The</span><span class="pln"> </span><span class="typ">Apache</span><span class="pln"> HTTP </span><span class="typ">Server</span><span class="pun">.</span></pre>

<h2>
	التبديل النهائي بين الخادمين
</h2>

<p>
	بعد التأكد من تشغيل الخدمات، عدّل قواعد جدار الحماية المتعلقة بخدمة HTTPD ضمن ملف <code>‎/etc/sysconfig/iptables</code> إلى ما يلي:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_7809_42" style="">
<span class="pun">-</span><span class="pln">A PREROUTING </span><span class="pun">-</span><span class="pln">d </span><span class="lit">45.20</span><span class="pun">.</span><span class="lit">209.41</span><span class="pun">/</span><span class="lit">255.255</span><span class="pun">.</span><span class="lit">255.248</span><span class="pln"> </span><span class="pun">-</span><span class="pln">p tcp </span><span class="pun">-</span><span class="pln">m tcp </span><span class="pun">--</span><span class="pln">dport </span><span class="lit">80</span><span class="pln"> \
  </span><span class="pun">-</span><span class="pln">j DNAT </span><span class="pun">--</span><span class="pln">to</span><span class="pun">-</span><span class="pln">destination </span><span class="lit">192.168</span><span class="pun">.</span><span class="lit">0.125</span><span class="pun">:</span><span class="lit">80</span></pre>

<p>
	ثم أعد تحميل مجموعة قواعد برنامج جدار الحماية IPTables.
</p>

<pre class="ipsCode prettyprint lang-php prettyprinted" id="ips_uid_7809_45" style="">
<span class="pln">iptables</span><span class="pun">-</span><span class="pln">restore </span><span class="pun">/</span><span class="pln">etc</span><span class="pun">/</span><span class="pln">sysconfig</span><span class="pun">/</span><span class="pln">iptables</span></pre>

<p>
	تغنيك قواعد جدار الحماية في الجهة المضيفة عن تعديل توجيه سجلات خادم <a href="https://academy.hsoub.com/devops/servers/dns/%D8%AA%D9%86%D8%B5%D9%8A%D8%A8-%D9%88%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D8%AF%D9%85%D8%A9-%D8%A7%D8%B3%D9%85-%D8%A7%D9%84%D9%86%D8%B7%D8%A7%D9%82-dns-%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-r176/" rel="">DNS</a> الخارجية إلى الخادم الجديد. إذا كنت تستخدم <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/" rel="">خادم DNS</a> داخلي فعليك أن تعدل <a href="https://academy.hsoub.com/certificates/cisco/ccna/%d8%a8%d9%86%d8%a7%d8%a1-%d9%85%d8%ae%d8%b7%d8%b7-%d9%84%d8%b9%d9%86%d8%a7%d9%88%d9%8a%d9%86-ip-%d8%b9%d8%a8%d8%b1-%d8%a7%d9%84%d8%b4%d8%a8%d9%83%d8%a7%d8%aa-%d8%a7%d9%84%d9%81%d8%b1%d8%b9%d9%8a%d8%a9-%d8%b9%d9%86%d8%af-%d8%a8%d9%86%d8%a7%d8%a1-%d8%a7%d9%84%d8%b4%d8%a8%d9%83%d8%a7%d8%aa-r23/" rel="">عنوان IP</a> لسجل A الخاص باسم الموقع في قاعدة بيانات خادم DNS الداخلي. إذا لم تكن تستخدم خادم DNS داخلي احرص على إضافة العنوان الصحيح للخادم الجديد في ملفات <code>‎/etc/hosts</code> لحواسيبك المضيفة.
</p>

<h2>
	اختبار الموقع وإنهاء عملية التهجير
</h2>

<p>
	احرص على اختبار الموقع الجديد الذي نصبته. ابدأ بإيقاف خدمتي <code>mysqld</code> و <code>httpd</code> على الخادم القديم ثم تصفح الموقع على متصفحك، إذا عملت كل روابطه كما يجب يمكنك إبطال خدمتي <code>mysqld</code> و <code>httpd</code> على الخادم القديم. أما إذا واجهتك أية مشكلة يمكنك تغيير قاعدة التوجيه في IPTables لتوجه إلى الخادم القديم مجددًا ريثما تعالج المشكلة.
</p>

<p>
	ثم احذف خدمتي <a href="https://academy.hsoub.com/devops/servers/databases/mysql/%D8%AA%D8%B9%D9%84%D9%85-%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A7%D8%AA-mysql-r297/" rel="">Mysql</a> و <a href="https://academy.hsoub.com/devops/servers/web/apache/%D8%AA%D9%86%D8%B5%D9%8A%D8%A8-%D9%88%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D8%A3%D8%A8%D8%A7%D8%AA%D8%B4%D9%8A-httpd-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r190/" rel="">HTTPD</a> على الخادم القديم لتضمن ألّا يعاد تشغيلهما عن طريق الخطأ.
</p>

<h2>
	الخاتمة
</h2>

<p>
	إن العملية بهذه البساطة. لن تحتاج إلى تنفيذ عمليات استيراد أو تصدير على قاعدة البيانات لأن كل البيانات والملفات الضرورية نٌسخَت مع مجلد <code>mysql</code>. لن تحتاج إلى تنفيذ هذه العمليات إلا إذا كان لديك قواعد بيانات أخرى لموقعك الإلكتروني أو مواقعك على نفس نسخة MariaDB لا تريد أن تنسخها إلى الخادم الجديد.
</p>

<p>
	إن تهجير بقية المواقع من الخادم القديم عملية سهلة أيضًا، فكل قواعد البيانات اللازمة لتشغيل المواقع الإضافية نقِلَت مع خدمة MariaDB. لا عليك إلا أن تنقل المجلدات في مجلد <code>‎/var/website</code> إلى الخادم الجديد، ثم أضف مقطع virtual host المناسب، ثم أعد تشغيل خدمة HTTPD.
</p>

<p>
	اتبعت هذه الطريقة في تهجير المواقع من خادم إلى آخر عدة مرات وكللت العملية دومًا بالنجاح.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://opensource.com/article/21/9/migrate-wordpress" rel="external nofollow">How I migrated a WordPress website to a new host </a> لصاحبه David Both
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/programming/php/wordpress/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-r1248/" rel="">كيفية تثبيت ووردبريس</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/apps/web/wordpress/%D8%AF%D9%84%D9%8A%D9%84-%D9%86%D9%82%D9%84-%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D9%88%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D8%B9%D8%A7%D9%85%D9%84-%D9%85%D8%B9-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF%D8%A7%D8%AA-%D8%A7%D9%84%D8%B1%D9%88%D8%A7%D8%A8%D8%B7-%D8%A7%D9%84%D8%AB%D8%A7%D8%A8%D8%AA%D8%A9-r417/" rel="">دليل نقل موقع ووردبريس وكيفية التعامل مع صفحة إعدادات الروابط الثابتة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/linux/%d8%a7%d9%84%d8%af%d9%84%d9%8a%d9%84-%d8%a7%d9%84%d9%86%d9%87%d8%a7%d8%a6%d9%8a-%d9%84%d8%a7%d8%ae%d8%aa%d9%8a%d8%a7%d8%b1-%d8%aa%d9%88%d8%b2%d9%8a%d8%b9%d8%a9-%d9%84%d9%8a%d9%86%d9%83%d8%b3-r48/" rel="">الدليل النهائي لاختيار توزيعة لينكس</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">582</guid><pubDate>Wed, 02 Feb 2022 08:43:34 +0000</pubDate></item><item><title>&#x645;&#x62F;&#x62E;&#x644; &#x625;&#x644;&#x649; &#x62E;&#x627;&#x62F;&#x645; &#x627;&#x644;&#x648;&#x64A;&#x628;</title><link>https://academy.hsoub.com/devops/servers/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r574/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_01/61dee8795568f_-----.png.710b2cfd0edc43c07515b5a0ec86da37.png" /></p>
<p>
	يمكن أن يشير المصطلح "خادم ويب Web Server" إلى العتاد الصلب أو البرمجيات، أو كلاهما معًا.
</p>

<ol>
	<li>
		من ناحية العتاد الصلب: يُعد خادم الويب حاسوبًا يُخزّن البرمجيات اللازمة لإدارة خادم الويب كما يخزّن الملفات التي تتكون منها مواقع الويب (مثل ملفات HTML وCSS وملفات جافاسكربت). يتصل خادم الويب بالإنترنت ويدعم التبادل الفيزيائي للبيانات مع الأجهزة الأخرى المتصلة بالإنترنت.
	</li>
	<li>
		من ناحية البرمجيات: يتألف خادم الويب من عدة أقسام تتحكم بكيفية دخول مستخدمي ويب إلى الملفات التي يستضيفها. يتكون خادم ويب على الأقل من خادم HTTP ويضم برمجيات قادرة على فهم <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%88-%D8%B9%D9%86%D9%88%D8%A7%D9%86-url-%D9%81%D9%8A-%D8%A7%D9%84%D9%88%D9%8A%D8%A8%D8%9F-r1435/" rel="">عناوين ويب URL</a> وبرتوكول <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-http-r73/" rel="">HTTP</a> (البروتوكول الذي يستخدمه المتصفح لعرض محتوى صفحات الويب). يمكن الولوج إلى <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-http-%D8%B4%D8%B1%D8%AD-%D8%A7%D9%84%D8%AA%D8%AE%D8%A7%D8%B7%D8%A8-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%84-%D9%88%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-r74/" rel="">خادم HTTP</a> من خلال <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/" rel="">أسماء النطاقات</a> الخاصة بمواقع الويب التي يُخزّنها ويعيد محتوى هذه المواقع التي يستضيفها إلى جهاز المستخدم النهائي عندما يطلبها.
	</li>
</ol>

<p>
	ولو أردنا التكلم ببساطة شديدة نقول: عندما يحتاج المتصفح إلى ملف يستضيفه خادم ويب، يطلب المتصفح هذا الملف عبر بروتوكول HTTP، وعندما يصل الطلب إلى خادم الويب الصحيح (خادم الويب كعتاد صلب)، يقبل خادم HTTP (الناحية البرمجية من خادم ويب) الطلب ويبحث عن الملف المطلوب، ويعيده إلى متصفح الخاص بالمستخدم عبر بروتوكول HTTP أيضًا. إن لم يعثر الخادم على الملف فسيستجيبُ برسالة خطأ ذات الرمز <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-http-r73/" rel="">404</a>.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="89026" href="https://academy.hsoub.com/uploads/monthly_2022_01/01_basic_http_connection.png.5ab710301e6e5afacc8fa6b598527455.png" rel="" data-fileext="png"><img alt="01_basic_http_connection.png" class="ipsImage ipsImage_thumbnailed" data-fileid="89026" data-unique="3wnp4ook4" src="https://academy.hsoub.com/uploads/monthly_2022_01/01_basic_http_connection.png.5ab710301e6e5afacc8fa6b598527455.png"></a>
</p>

<p>
	ستحتاج لخادم ويب ساكن Static أو ديناميكي Dynamic لنشر موقع الويب الخاص بك. والفرق بين هذه الخوادم هو:
</p>

<ul>
	<li>
		<strong>خادم الويب الساكن</strong>: هو حاسوب مزوّد بخادم HTTP يعيد الملفات التي يستضيفها كما هي تمامًا إلى المتصفح الذي يطلبها.
	</li>
	<li>
		<strong>خادم الويب الديناميكي</strong>: يتكون من خادم ويب ساكن بالإضافة إلى برمجيات إضافية تتمثل عادة بخادم تطبيقات وقاعدة بيانات، ويُعد هذا الخادم ديناميكيًا لأن خادم التطبيقات سيُحدّثُ الملفات التي يستضيفها قبل إرسال محتوياتها إلى المتصفح عبر خادم HTTP.
	</li>
</ul>

<p>
	لكي ترى صفحة الويب بشكلها النهائي على المتصفح، سيملأ خادم التطبيقات -على سبيل المثال- قالب HTML معين بمحتويات مصدرها قاعدة بيانات ثم يرسلها.
</p>

<p>
	تحتوي مواقع الويب الضخمة مثل MDN أو ويكيبيديا مثلًا على آلاف صفحات الويب، وهذه المواقع مكوّنة أساسًا من عدة قوالب HTML جاهزة وقاعدة بيانات ضخمة جدًا بدلًا من آلاف مستندات HTML الجاهزة للتسليم. إذ تتيح هذه التقنية سهولة في الصيانة وتسليم المحتوى.
</p>

<p>
	سنتعرف في هذا المقال على ماهية خادم الويب وأنواعه ونكتسب فهمًا عامًا لآلية عمله.
</p>

<p>
	ننصحك قبل الشروع في قراءة هذا المقال بالاطلاع على المقال <a href="https://academy.hsoub.com/devops/networking/%D9%83%D9%8A%D9%81-%D8%AA%D8%B9%D9%85%D9%84-%D8%B4%D8%A8%D9%83%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%9F-r571/" rel="">كيف تعمل شبكات الإنترنت؟</a> وأن تكون على دراية بالفرق بين <a href="https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D8%AD%D8%B1%D9%83-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-r572/" rel="">صفحة الويب وموقع الويب وخادم الويب ومحرك البحث</a>.
</p>

<h2>
	الملفات المستضافة
</h2>

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

<p>
	يجب على خادم الويب في البداية أن يخزّن جميع الملفات المرتبطة بموقع ويب معين وتحديدًا جميع مستندات HTML والملفات المساعدة لها كملفات تنسيق الصفحات CSS، وملفات المعالجة كملفات جافاسكربت، وخطوط الكتابة والفيديوهات وغيرها.
</p>

<p>
	بالإمكان استضافة كل أنواع الملفات السابقة تقنيًا على حاسوبك الشخصي، لكن من الأفضل تخزينها على خادم ويب بعيد ومخصص وذلك للأسباب التالية:
</p>

<ul>
	<li>
		خوادم الويب المخصصة لاستضافة الملفات متاحة دومًا (أي في حالة عمل مستمر).
	</li>
	<li>
		خوادم الويب متصلة دومًا بالإنترنت باستثناء أوقات الصيانة وعند حدوث مشاكل آنية في منظوماتها.
	</li>
	<li>
		يبقى لخادم الويب عنوان آي بي ثابت دومًا (ما يعرف بعنوان آي بي مخصص Dedicate IP)، إذ لا تؤمن جميع مزودات خدمة الإنترنت <a href="https://ar.wikipedia.org/wiki/%D9%85%D8%B2%D9%88%D8%AF_%D8%AE%D8%AF%D9%85%D8%A9_%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA" rel="external nofollow">ISPs</a> عنوان آي بي ثابت للخطوط المنزلية.
	</li>
	<li>
		تُصان الخوادم المخصصة تقليديًا من قبل جهة مستقلة (طرف ثالث).
	</li>
</ul>

<p>
	وبالتالي فإن إيجاد مضيف جيد لملفات وموارد موقعك هي خطوة مفتاحية من خطوات بناء الموقع. تفحص الخدمات المتنوعة التي تقدمها <a href="https://academy.hsoub.com/devops/general/%D9%85%D8%B1%D8%A7%D8%AC%D8%B9%D8%A9-%D8%BA%D9%8A%D8%B1-%D9%85%D8%AA%D8%AD%D9%8A%D9%91%D8%B2%D8%A9-%D9%84%D8%A3%D9%81%D8%B6%D9%84-10-%D8%AE%D8%AF%D9%85%D8%A7%D8%AA-%D9%84%D8%A7%D8%B3%D8%AA%D8%B6%D8%A7%D9%81%D8%A9-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r452/" rel="">شركات الاستضافة</a>، واختر الشركة التي تقدم الخدمات التي تحتاجها ضمن حدود ميزانيتك فيمكن أن تكون الاستضافة مجانية ويمكن أن تصل إلى آلاف الدولارات شهريًا.
</p>

<p>
	عليك في الخطوة التالية أن ترفع ملفاتك إلى الخادم بعد أن تؤمن استضافة موقعك على مزود خدمة.
</p>

<h2>
	الاتصال عبر بروتوكول HTTP
</h2>

<p>
	يدعم <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-http-%D8%B4%D8%B1%D8%AD-%D8%A7%D9%84%D8%AA%D8%AE%D8%A7%D8%B7%D8%A8-%D8%A8%D9%8A%D9%86-%D8%A7%D9%84%D8%B9%D9%85%D9%8A%D9%84-%D9%88%D8%A7%D9%84%D8%AE%D8%A7%D8%AF%D9%85-r74/" rel="">خادم ويب بروتوكول النقل HTTP</a> ويأتي الاسم كاختصار للعبارة Hypertext Transfer Protocol وهو بروتوكول نقل النصوص التشعبية. يحدد البروتوكول طريقة نقل النصوص التشعبية (مستندات ويب مترابطة) بين حاسوبين. و<strong>البروتوكول</strong>: هو مجموعة من القواعد التي يجب على حاسوبين اتباعها ليتواصلا بطريقة صحيحة. ويعدّ بروتوكول HTTP بروتوكولًا نصيًا Textual أي لا يتعلق بالحالة Stateless. عمومًا الفرق بين البروتوكول النصي وعديم الحالة هو على الشكل التالي:
</p>

<ul>
	<li>
		بروتوكول نصي Textual: جميع الأوامر على شكل نصوص يمكن للبشر قراءتها.
	</li>
	<li>
		بروتوكول عديم الحالة Stateless: لا يمكن للخادم ولا العميل أن يتذكرا أي شيء عن الاتصال السابق بينهما. فمثلًا بالاعتماد على بروتوكول HTTP لا يمكن أن يتذكر الخادم كلمة السر التي أدخلتها أو المرحلة التي وصلت إليها خلال عملية تحويل غير مكتملة، ولإدارة خدمات كهذه ستحتاج إلى خادم تطبيقات.
	</li>
</ul>

<p>
	يحدد بروتوكول HTTP قواعد واضحة لآلية التواصل بين الخادم والعميل. عليك في هذه المرحلة أن تنتبه إلى النقاط التالية:
</p>

<ul>
	<li>
		عندما يطلب المتصفح ملفًا من خادم ويب عبر بروتوكول HTTP لا بد أن يزود الخادم بعنوان URL للملف.
	</li>
	<li>
		على خادم الويب أن يجيب على كل طلب HTTP يصله برسالة خطأ على الأقل.
	</li>
</ul>

<p>
	يُعد خادم HTTP المثبت على خادم الويب مسؤولًا عن معالجة الطلبات القادمة والرد عليها، ومن مسؤولياته نذكر:
</p>

<ol>
	<li>
		يتحقق خادم HTTP عند استلام الطلب إن كان هناك تطابق بين عنوان URL وأحد الملفات التي يستضيفها الخادم.
	</li>
	<li>
		يعيد الخادم محتوى الملف المطلوب إن وجد تطابقًا، وإن لم يجد يحضّر خادم التطبيقات ملف الاستجابة اللازم لفشل الطلب.
	</li>
	<li>
		إن لم يتمكن الخادم من تنفيذ أي من الخطوتين السابقتين سيعيد رسالة خطأ إلى المتصفح، وهي عادةً رسالة <a href="https://academy.hsoub.com/programming/general/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-http-r73/" rel="">الخطأ 404 الصفحة غير موجودة</a>. يعدّ هذا الخطأ كثير الحدوث لذلك يحاول مصممو مواقع الويب بذل الجهد في إخراج صفحات الخطأ بطريقة لبقة.
	</li>
</ol>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="89027" href="https://academy.hsoub.com/uploads/monthly_2022_01/02_MDN_error_pge.png.c85f073187fcd0592a78d7d15a307216.png" rel="" data-fileext="png"><img alt="02_MDN_error_pge.png" class="ipsImage ipsImage_thumbnailed" data-fileid="89027" data-unique="ky9azn056" src="https://academy.hsoub.com/uploads/monthly_2022_01/02_MDN_error_pge.png.c85f073187fcd0592a78d7d15a307216.png"></a>
</p>

<h2>
	المحتوى الثابت والمحتوى المتغير لصفحة ويب
</h2>

<p>
	يمكن القول أن خادم ويب قادر على التعامل مع المحتويات الثابتة والمتغيرة (الديناميكية). لكن تذكر أن مصطلح "محتوى ساكن (أو ثابت)" يعني "يقدم كما هو". لذلك ستجد أن مواقع الويب الساكنة هي الأسهل إعدادًا ونقترح أن يكون <a href="https://academy.hsoub.com/apps/web/wordpress/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D8%A8%D9%82%D8%A7%D8%A1-%D9%86%D8%B3%D8%AE%D8%A9-%D8%B3%D8%A7%D9%83%D9%86%D8%A9-%D9%85%D9%86-%D9%85%D9%88%D9%82%D8%B9%D9%83-%D8%A3%D8%AB%D9%86%D8%A7%D8%A1-%D8%A8%D9%86%D8%A7%D8%A6%D9%83-%D9%84%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D8%AC%D8%AF%D9%8A%D8%AF-r242/" rel="">موقعك الأول موقع ويب ساكن</a>.
</p>

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

<p>
	هناك العديد من خوادم التطبيقات وكل واحد منها له تقنيات مختلفة لذلك من الصعب أن نقترح عليك خادمًا محددًا. لأن خوادم التطبيقات مثلًا تتعلق بفئة معينة من مواقع الويب مثل المدونات أو مواقع المحتوى القابل للتغيير wikis أو مواقع التجارة الإلكترونية، بينما يكون بعضها الآخر أكثر عموميةً. خذ وقتك في إنتقاء خادم التطبيقات الذي يناسبك عندما تفكر في بناء موقع ديناميكي. إلا إذا رغبت في تعلم برمجة خوادم الويب وبناء خادمك الخاص (وهو أمر مثير بحد ذاته)، وعمومًا لا تُعد اختراع العجلة وانتق خادم تطبيقات جاهز.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/Common_questions/What_is_a_web_server" rel="external nofollow">What is a web server</a>
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/learn/computer-science/" rel="">دورة علوم الحاسوب</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/networking/%D9%85%D8%A7-%D9%87%D9%8A-%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-%D9%81%D9%8A-%D8%B4%D8%A8%D9%83%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%9F-r573/" rel="">ماهي أسماء النطاقات في شبكة الإنترنت؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/workflow/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D9%84%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85%D8%A9-%D9%81%D9%8A-%D8%A8%D9%86%D8%A7%D8%A1-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D9%88%D9%8A%D8%A8%D8%9F-r1436/" rel="">ما هي الأدوات المستخدمة في بناء مواقع ويب؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D8%A7%D9%84%D8%AA%D9%83%D9%84%D9%81%D8%A9-%D8%A7%D9%84%D9%85%D8%A7%D8%AF%D9%8A%D8%A9-%D8%A7%D9%84%D9%83%D8%A7%D9%85%D9%84%D8%A9-%D9%84%D8%A8%D9%86%D8%A7%D8%A1-%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%8A%D8%A8%D8%9F-r1437/" rel="">ما التكلفة المادية الكاملة لبناء موقع ويب؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/workflow/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A3%D8%AF%D9%88%D8%A7%D8%AA-%D9%85%D8%B7%D9%88%D8%B1%D9%8A-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D9%85%D8%AF%D9%85%D8%AC%D8%A9-%D9%81%D9%8A-%D8%A7%D9%84%D9%85%D8%AA%D8%B5%D9%81%D8%AD%D8%A7%D8%AA%D8%9F-r1439/" rel="">ما هي أدوات مطوري الويب المدمجة في المتصفحات؟</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">574</guid><pubDate>Thu, 20 Jan 2022 17:00:00 +0000</pubDate></item><item><title>&#x627;&#x644;&#x641;&#x631;&#x642; &#x628;&#x64A;&#x646; &#x635;&#x641;&#x62D;&#x629; &#x627;&#x644;&#x648;&#x64A;&#x628; &#x648;&#x645;&#x648;&#x642;&#x639; &#x627;&#x644;&#x648;&#x64A;&#x628; &#x648;&#x62E;&#x627;&#x62F;&#x645; &#x627;&#x644;&#x648;&#x64A;&#x628; &#x648;&#x645;&#x62D;&#x631;&#x643; &#x627;&#x644;&#x628;&#x62D;&#x62B;</title><link>https://academy.hsoub.com/devops/servers/%D8%A7%D9%84%D9%81%D8%B1%D9%82-%D8%A8%D9%8A%D9%86-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D9%88%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D9%88%D9%85%D8%AD%D8%B1%D9%83-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-r572/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2022_01/61dec1c9b6206_----------.png.21e90b63b1790cac6cdd65b3b6c09245.png" /></p>
<p>
	يأتي مجال الويب كغيره من المجالات المعرفية بالكثير من المصطلحات التي لن يسعنا الحديث عنها جميعًا في مقالنا، لكن لا بدّ من معرفة بعض المصطلحات الأساسية في نهاية الأمر، لأنك ستصادفها دائمًا عندما تكمل قراءة هذه السلسلة. ويمكن أن تختلط عليك هذه المصطلحات أحيانًا لأنها تشير إلى نواح وظيفية مترابطة ولكن ستتوضح لك الفكرة أكثر وأكثر مع قراءتك للمقالات التي نشير إليها. كما أن الاستخدام الخاطئ لهذه المصطلحات في نشرات الأخبار يجعلها مبهمة أكثر وغير مفهومة.
</p>

<p>
	سنشرح لاحقًا هذه المصطلحات والتقانات بتفاصيل أكثر مع تقدمنا في السلسلة، وستكون التعريفات التالية بداية جيدة للانطلاق:
</p>

<ul>
	<li>
		<strong>صفحة ويب Web Page</strong>: هي مستند يمكن استعراض محتوياته من خلال المتصفحات مثل فايرفوكس وغوغل كروم وأوبِرا ومايكروسوفت إكسبلورير وإيدج أو متصفح سفاري من آبل. تدعى هذه المستندات أحيانًا "صفحات" فقط.
	</li>
	<li>
		<strong>موقع ويب Website</strong>: وهو مجموعة من <a href="https://academy.hsoub.com/design/general/%D9%87%D9%8A%D9%83%D9%84%D8%A9-%D9%88%D8%AA%D9%88%D8%B2%D9%8A%D8%B9-%D9%85%D8%AD%D8%AA%D9%88%D9%89-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r43/" rel="">صفحات الويب</a> تُجمَّع مع بعضها، وترتبط عادة بطرق مختلفة. تدعى أحيانًا "موقع ويب" وأحيانا "موقع" فقط.
	</li>
	<li>
		<strong>خادم ويب Web Server</strong>: وهو حاسوب يستضيف <a href="https://academy.hsoub.com/apps/web/%D9%83%D9%8A%D9%81-%D8%AA%D9%86%D8%B4%D8%B1-%D8%B5%D9%81%D8%AD%D8%A9-%D8%A3%D9%88-%D9%85%D9%88%D9%82%D8%B9-%D9%88%D9%8A%D8%A8-%D9%82%D9%85%D8%AA-%D8%A8%D8%AA%D8%B5%D9%85%D9%8A%D9%85%D9%87-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-r52/" rel="">موقع ويب</a> على الإنترنت.
	</li>
	<li>
		<strong>محرك البحث Search Engine</strong>: وهو خدمة ويب تساعدك في العثور على صفحات الويب الأخرى. نذكر من هذه المحركات غوغل Google وبينغ Bing وياهو Yahoo ودك-دك-غو DuckDuckGo. تُستخدم هذه المحركات عادةً مباشرة عبر متصفحات الويب (أي بكتابة ما تريد إيجاده مباشرة في شريط عنوان المتصفح في فايرفوكس أو كروم أو غيره وسيبحث مباشرة في أحد محركات البحث)، كما يمكن الدخول إلى صفحة الويب الخاصة بمحرك البحث ثم كتابة العبارة المراد البحث عنها.
	</li>
</ul>

<p>
	لتوضيح مفهوم خادم الويب سنأخذ مثالًا بسيطًا وهو المكتبة فما تفعله عادة عند زيارة المكتبة يتلخص بالتالي:
</p>

<ol>
	<li>
		إيجاد فهرس لأسماء الكتب الموجودة في المكتبة والبحث فيها عن عنوان الكتاب المطلوب.
	</li>
	<li>
		تسجيل رقم التصنيف الخاص بالكتاب.
	</li>
	<li>
		الانتقال إلى القسم الذي يضم الكتاب والبحث عن رقم التصنيف الذي دوّنته ثم إحضار الكتاب.
	</li>
</ol>

<p>
	لنوازن الآن بين المكتبة وخادم الويب:
</p>

<ul>
	<li>
		تتشابه المكتبة مع <a href="https://academy.hsoub.com/devops/servers/%D8%AF%D9%84%D9%8A%D9%84-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D8%A7%D8%AF%D9%85-%D9%88%D9%8A%D8%A8-%D9%85%D8%AD%D9%84%D9%8A-%D8%AE%D8%B7%D9%88%D8%A9-%D8%A8%D8%AE%D8%B7%D9%88%D8%A9-r422/" rel="">خادم الويب</a>، إذ تتضمن عدة أقسام يمكن تشبيهها بمواقع الويب المتعددة التي يستضيفها الخادم.
	</li>
	<li>
		تتشابه الأقسام المختلفة للمكتبة (علوم، رياضيات، تاريخ،..) مع مواقع الويب. وسيكون كل قسم من أقسام المكتبة بمثابة موقع ويب فريد (فلا يمكن أن يضم قسمان مختلفان الكتب نفسها).
	</li>
	<li>
		تتشابه الكتب وفق هذا المنظور مع صفحات الويب، إذ يضم كل موقع ويب عدة صفحات ويب، سيضم قسم العلوم مثلًا (الذي يمثل موقع الويب) كتبًا عن الحرارة والصوت الترموديناميك والإحصاء وغيرها (والتي تمثل صفحات ويب)، يمكن الوصول إلى أي صفحة ويب من خلال عنوان فريد URL.
	</li>
	<li>
		يتشابه فهرس أسماء الكتب مع محرك البحث، لكل كتاب موقعه الخاص في المكتبة، فلا يمكن وضع كتابين متطابقين في المكان ذاته والذي يحدده رقم التصنيف الخاص بالكتاب.
	</li>
</ul>

<p>
	سنشرح في هذا المقال بعض المفاهيم المتعلقة بالويب مثل: صفحات الويب ومواقع الويب وخوادم الويب و<a href="https://academy.hsoub.com/marketing/search-engine-optimisation/%D8%AA%D8%AD%D8%B3%D9%8A%D9%86-%D9%85%D8%AD%D8%B1%D9%83%D8%A7%D8%AA-%D8%A7%D9%84%D8%A8%D8%AD%D8%AB-seo-%D9%88%D8%A3%D9%87%D9%85%D9%8A%D8%AA%D9%87%D8%A7-%D9%84%D9%85%D9%88%D9%82%D8%B9%D9%83-%D8%A7%D9%84%D8%A5%D9%84%D9%83%D8%AA%D8%B1%D9%88%D9%86%D9%8A-r490/" rel="">محركات البحث</a> لأنها يمكن أن تُربك المستخدمين الجدد للويب أو يمكن أن يستخدموها بطريقة غير صحيحة، وسنتحدث عن معنى كلٍّ منها. وبالتالي سيصبح القارئ على دراية تامة بالفوارق بين تلك المصطلحات.
</p>

<p>
	ننصحك بالاطلاع على مقال <a href="https://academy.hsoub.com/devops/networking/%D9%83%D9%8A%D9%81-%D8%AA%D8%B9%D9%85%D9%84-%D8%B4%D8%A8%D9%83%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA%D8%9F-r571/" rel="">كيف تعمل شبكة الإنترنت؟</a>  قبل إكمال قراءة المقال.
</p>

<p>
	إذًا، سنبحث بشيء من التفصيل عن الترابط بين المصطلحات السابقة وعن الالتباسات التي تحدث عند استخدامها.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة تطوير واجهات المستخدم
		</p>

		<p class="banner-subtitle">
			ابدأ عملك الحر بتطوير واجهات المواقع والمتاجر الإلكترونية فور انتهائك من الدورة
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://academy.hsoub.com/learn/front-end-web-development/" rel="">اشترك الآن</a>
		</div>
	</div>

	<div class="banner-img">
		<img alt="دورة تطوير واجهات المستخدم" src="https://academy.hsoub.com/learn/assets/images/courses/front-end-web-development.png">
	</div>
</div>

<h2>
	صفحة الويب
</h2>

<p>
	صفحة الويب هي مستند يمكن استعراضه من خلال المتصفح. تكتب هذه المستندات بلغة <a href="https://wiki.hsoub.com/HTML" rel="external">HTML</a> (سنتحدث عنها بتفاصيل أكثر <a href=")" rel="">لاحقًا</a>. يمكن أن تتضمن صفحات الويب أنواعًا مختلفة من الموارد مثل:
</p>

<ul>
	<li>
		معلومات عن <a href="https://academy.hsoub.com/programming/css/%D8%A7%D9%84%D8%AF%D9%84%D9%8A%D9%84-%D8%A7%D9%84%D8%B3%D8%B1%D9%8A%D8%B9-%D8%A5%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%AA%D9%86%D8%B3%D9%8A%D9%82-css-r551/" rel="">تنسيق الصفحة</a> Style Information: وتتحكم بمظهر الصفحة وطريقة عرضها.
	</li>
	<li>
		سكربتات Scripts: تجعل الصفحة أكثر تفاعلًا مع مستخدمها.
	</li>
	<li>
		وسائط Media: وهي الصور أو الأصوات أو الفيديوهات.
	</li>
</ul>

<blockquote class="ipsQuote" data-gramm="false" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<div class="ipsQuote_contents ipsClearfix" data-gramm="false">
		<p>
			<strong>ملاحظة</strong>: يمكن للمتصفحات عرض مستندات مختلفة كملفات <a href="https://ar.wikipedia.org/wiki/%D8%B5%D9%8A%D8%BA%D8%A9_%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D9%86%D8%AF%D8%A7%D8%AA_%D8%A7%D9%84%D9%85%D9%86%D9%82%D9%88%D9%84%D8%A9" rel="external nofollow">PDF</a> أو الصور، لكن مصطلح "صفحة ويب" يدل حصرًا على مستندات HTML. نشير إلى بقية الملفات الأخرى بالمصطلح "مستندات Documents".
		</p>
	</div>
</blockquote>

<p>
	يمكن الوصول إلى أي صفحة ويب موجودة على الويب من خلال عنوان فريد يمكن كتابته في شريط عنوان المتصفح:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="88993" href="https://academy.hsoub.com/uploads/monthly_2022_01/01_webpage_address.png.9c095f8d07dc5d34e579154a2c0c6471.png" rel=""><img alt="01_webpage_address.png" class="ipsImage ipsImage_thumbnailed" data-fileid="88993" data-unique="ey22dt7b1" src="https://academy.hsoub.com/uploads/monthly_2022_01/01_webpage_address.png.9c095f8d07dc5d34e579154a2c0c6471.png"></a>
</p>

<h2>
	موقع الويب
</h2>

<p>
	موقع الويب هو مجموعة من صفحات الويب المترابطة (بالإضافة إلى الموارد التي تستخدمها) التي تشترك باسم نطاق Domain name فريد. يمكن الوصول إلى أي صفحة ضمن موقع ما من خلال روابط محددة عادة ما تكون جزء قابل للنقر من نص يسمح للمستخدم عند نقره بالانتقال من صفحة إلى أخرى ضمن الموقع.
</p>

<p>
	للوصول إلى موقع معين، ما عليك سوى كتابة <a href="https://academy.hsoub.com/devops/servers/dns/%D8%AA%D9%86%D8%B5%D9%8A%D8%A8-%D9%88%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D8%AF%D9%85%D8%A9-%D8%A7%D8%B3%D9%85-%D8%A7%D9%84%D9%86%D8%B7%D8%A7%D9%82-dns-%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-r176/" rel="">اسم النطاق</a> في شريط عنوان المتصفح الذي سيقودك مباشرة إلى الصفحة الرئيسية للموقع Homepage ويشار إليها أحيانًا بالرئيسية Home.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="88994" href="https://academy.hsoub.com/uploads/monthly_2022_01/02_website_domain_address.png.029ca70fe9ac212e502a619b008a0877.png" rel=""><img alt="02_website_domain_address.png" class="ipsImage ipsImage_thumbnailed" data-fileid="88994" data-unique="dt1w293u6" src="https://academy.hsoub.com/uploads/monthly_2022_01/02_website_domain_address.png.029ca70fe9ac212e502a619b008a0877.png"></a>
</p>

<p>
	يمكن الخلط بين مفهومي "صفحة ويب" و"موقع ويب" على وجه الخصوص في المواقع المكوّنة من صفحة واحدة والتي تُدعى عادة بالمواقع وحيدة الصفحة Single-Page Website ويرمز لها اختصارًا SPW.
</p>






<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			احصل على موقع إلكتروني مخصص لأعمالك
		</p>

		<p class="banner-subtitle">
			أبهر زوارك بموقع احترافي ومميز بالاستعانة بأفضل خدمات تطوير وتحسين المواقع على خمسات
		</p>

		<div>
			<a class="ipsButton ipsButton_large ipsButton_primary ipsButton_important" href="https://khamsat.com/create-website" rel="external">أنشئ موقعك الآن</a>
		</div>
	</div>
</div>





<h2>
	خادم الويب
</h2>

<p>
	خادم الويب هو حاسوب يستضيف موقع ويب أو أكثر. تعني كلمة "استضافة Hosting" أنّ جميع صفحات الويب والملفات التي تدعمها متاحة على هذا الحاسوب. عندما يطلب المستخدم صفحة ويب معينة يرسل خادم الويب هذه الصفحة من موقع ويب إلى متصفح المستخدم.
</p>

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

<h2>
	محرك البحث
</h2>

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

<p>
	ستجد على الويب العديد من محركات البحث مثل غوغل Google وبينغ Bing وياهو Yahoo ودك-دك-غو DuckDuckGo وغيرها. بعضها محركات بحث عامة والأخرى متخصصة بمواضيع محددة، لذلك فالخيار يعود لك في استخدام ما يناسبك.
</p>

<p>
	يخلط العديد من المستخدمين الجدد للويب بين محركات البحث والمتصفحات، لذلك سنوضح الأمر قليلًا. المتصفح Browser هو برنامج يحضر صفحة الويب ويعرضها، بينما يُعد محرك البحث موقع ويب يساعد المستخدمين في إيجاد صفحات ويب ضمن مواقع أخرى، ويأتي مصدر اختلاط المفهومين عندما يفتح مستخدم جديد متصفحًا لأول مرة، سيعرضُ المتصفح غالبًا محرك بحث في الصفحة الرئيسية للمتصفح، وهذا أمر منطقي لأن أول ما تفكر به عند استخدام المتصفح هو البحث عن صفحات ويب معينة وعرضها، لذلك لا تخلط بين البنية التحتية (التي يمثلها المتصفح) والخدمة (التي يمثلها محرك البحث). سيكون التمييز بين المفهومين مفيدًا لك، ولكن لا تقلق فبعض المحترفين أيضًا يرتكبون هفوات كهذه عندما يتحدثون في هذه المواضيع.
</p>

<p>
	تعرض الصورة التالية متصفح فايرفوكس وضمنه صندوق محرك البحث غوغل كصفحة بداية افتراضية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileext="png" data-fileid="88995" href="https://academy.hsoub.com/uploads/monthly_2022_01/03_firefox_show_google.png.af14c3a99468d12f7b9fd754e59ab2ee.png" rel=""><img alt="03_firefox_show_google.png" class="ipsImage ipsImage_thumbnailed" data-fileid="88995" data-unique="9hxlo8aa9" src="https://academy.hsoub.com/uploads/monthly_2022_01/03_firefox_show_google.png.af14c3a99468d12f7b9fd754e59ab2ee.png"></a>
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Pages_sites_servers_and_search_engines" rel="external nofollow">What is the difference between webpage, website, web server, and search engine</a>
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
	<li>
		<a href="https://academy.hsoub.com/learn/front-end-web-development/" rel="">دورة تطوير واجهة المستخدم</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%85%D8%A7-%D9%87%D9%88-%D8%B9%D9%86%D9%88%D8%A7%D9%86-url-%D9%81%D9%8A-%D8%A7%D9%84%D9%88%D9%8A%D8%A8%D8%9F-r1435/" rel="">ما هو عنوان URL في الويب؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%A7-%D9%87%D9%88-%D8%AE%D8%A7%D8%AF%D9%85-%D8%A7%D9%84%D9%88%D9%8A%D8%A8%D8%9F-r574/" rel="">ما هو خادم الويب؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/programming/general/%D9%85%D9%81%D9%87%D9%88%D9%85-%D8%A7%D9%84%D8%B1%D9%88%D8%A7%D8%A8%D8%B7-%D8%A7%D9%84%D8%AA%D8%B4%D8%B9%D8%A8%D9%8A%D8%A9-%D9%81%D9%8A-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-r1434/" rel="">مفهوم الروابط التشعبية في مواقع الويب.</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">572</guid><pubDate>Sat, 08 Jan 2022 17:00:00 +0000</pubDate></item><item><title>&#x645;&#x633;&#x627;&#x639;&#x62F;&#x629; &#x627;&#x644;&#x645;&#x628;&#x62A;&#x62F;&#x626;&#x64A;&#x646; &#x641;&#x64A; &#x641;&#x647;&#x645; &#x643;&#x64A;&#x641;&#x64A;&#x629; &#x631;&#x641;&#x639; &#x627;&#x644;&#x645;&#x648;&#x642;&#x639; &#x639;&#x644;&#x649; &#x627;&#x644;&#x625;&#x646;&#x62A;&#x631;&#x646;&#x62A;</title><link>https://academy.hsoub.com/devops/servers/%D9%85%D8%B3%D8%A7%D8%B9%D8%AF%D8%A9-%D8%A7%D9%84%D9%85%D8%A8%D8%AA%D8%AF%D8%A6%D9%8A%D9%86-%D9%81%D9%8A-%D9%81%D9%87%D9%85-%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%B1%D9%81%D8%B9-%D8%A7%D9%84%D9%85%D9%88%D9%82%D8%B9-%D8%B9%D9%84%D9%89-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%B1%D9%86%D8%AA-r533/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2021_09/613310ecd8282_--------.png.0a7ed772c3a28ba4dd1746ab30a9d383.png" /></p>

<p>
	تلقّى كريس كويير منذ فترةٍ قريبةٍ بريدًا إلكترونيًا رائعًا من شابّ يُدعى جوش لونغ، أخبَره فيه أنه جديدٌ نسبيًا في عالم الويب ولا يفهم طريقة رفع الموقع على الإنترنت ليُتاح للجميع، ودائمًا ما يَسعَد كريس بتلقي مثل هذه الرسائل، ورغم عدم استطاعته تقديم الدعم الفني عبر البريد الإلكتروني في أغلب الأحيان، فغالبًا ما يرشدهم إلى <a href="https://spectrum.chat/codepen" rel="external nofollow">مواقع أخرى</a> قد تُقدّم الدعم لهم.
</p>

<p>
	يقول كريس:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p>
		أسعدتني رسالة جوش كثيرًا، فهي لحظة رائعة له، حيث يطرح الكثير من الأسئلة المناسبة، كما يَفهَم الكثير من الأمور، ومعلوماته جيدةٌ إلى حدٍ ما، إلا أنه مرتبكٌ بعض الشيء، ولذلك فكّرت في الأمر وقُلت لنفسي إنها فرصةٌ رائعةٌ للبحث في أسئلته أملًا في مساعدته ومساعدة آخرين مثله ربّما يواجهون هذه المشكلة".
	</p>
</blockquote>

<p>
	وهذه إحدى الفقرات الأصيلة التي أرسلها لي جوش وبدون أي تعديل:
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p>
		"أنا جديدٌ نسبيًا في عالم تصميم الويب، وسبق والتَحقتُ ببعض الدورات التدريبية لأتعلّم بعض الأمور مثل HTML وCSS، كما التَحقتُ بدورةٍ على موقع Codecademy لأتعلّم لغة جافاسكربت JavaScript، ولكني بعد تصميم وتطوير موقع الويب (صفحة الويب) باستخدام كلّ من HTML وCSS وجافاسكربت؛ لم أفهم كيفية الانتقال من الاستضافة المحلية باستخدام mamp أو wamp إلى نَشْر الموقع ليُتاح على الإنترنت باستخدام ووردبريس WordPress أو أي مضيفٍ آخرٍ، كما لم أفهم طريقة إيجاد مُخدّمٍ مناسبٍ لاستضافة الصور ومقاطع الفيديو أو أي محتوىً آخرٍ. إذا بدا لك أني لا أعرف نِصْف الأمور التي تحدثتُ عنها، فظنّك صحيحٌ، أنا لا أعلم ولكني أرغب في التعلّم."
	</p>
</blockquote>

<p>
	لقد صيغت بعض الأسئلة في هذا المقال، مع الحفاظ على جوهر ومضمون ما كتبه جوش.
</p>

<p>
	ما هو مُسجّل النطاق domain registrar؟ نعرف أنه مخصّصٌ لتسجيل أسماء النطاقات، ولكن ما الفَرق بينهم؟ وكيف تعلم ما المناسب منهم؟ بحثتُ سريعًا عن أفضل مستضيفي النطاقات على غوغل ورأيت 5 إعلاناتٍ لشركات تسجيل واستضافة النطاقات، كما وجدت 9 صفحاتٍ من نمط أفضل 10 وتبدو جميعها كما لو تنتمي إلى إحدى الشركات التي تقترحها أو إحداها على الأقل، فهل أبحث عن أقلّ سعرٍ ممكنٍ؟
</p>

<p>
	أحسنتَ الإجابة، مُسجّلات النطاق مخصصةٌ لتسجيل أسماء النطاقات، فإذا أردت نطاقًا مثل joshlongisverycool.com فسيتوجب عليك شراؤه عن طريق شركات تسجيل النطاقات، فمساعدتك على إنجاز هذه المَهمة إحدى الخدمات التي تقدّمها.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="76111" href="https://academy.hsoub.com/uploads/monthly_2021_09/godaddy-results.png.d97959dae7e02adfd6d5dcf3694fd6a2.png" rel=""><img alt="godaddy-results.png" class="ipsImage ipsImage_thumbnailed" data-fileid="76111" data-unique="llkakebqg" src="https://academy.hsoub.com/uploads/monthly_2021_09/godaddy-results.thumb.png.ec1ddfcea9696e363c26ca5a2b4ab440.png"></a>
</p>

<h3>
	البحث عن اسم للنطاق.
</h3>

<p>
	تمتلئ نتائج بحْث الويب بالإعلانات وبصفحات تحسين محركات البحث المشبّعة بالروابط، وهذا الأمر مزعجٌ جدًا، ولذلك لن يكون المحتوى الذي تراه صادقًا بصورةٍ كبيرةٍ لأن أغلب هذه الصفحات تمتلئ بالروابط التي تُروّج لمن يَدفع لهم أكثر عند إرسال عملاء جُدُد، لدرجة أن محرك البحث الشهير غوغل قد يبيع لك اسم نطاق!
</p>

<p>
	في الحقيقة، لا يجب أن ترتكب الأخطاء هنا، إذ تُعَد أسماء النطاقات سلعةً إلى حدٍ ما، ولذلك تتنافس مئات شركات تسجيل واستضافة النطاقات على التسويق فيما بينها.
</p>

<p>
	وإليك بعض الأشياء التي يجب أن تنتبه لها:
</p>

<ul>
<li>
		<p>
			تتعامل بعض الشركات مع اسم النطاق مثل المنتج، حيث يبيعونه بسعرٍ منخفضٍ جدًا ليكسبوا عميلًا جديدًا، تمامًا مثل محل البقالة الذي يبيع لك الحليب بسعرٍ رخيصٍ على أمل أن تشتري منه المزيد من الأشياء بعد ذلك، ففي معظم الأحيان تحاول مُسجلات النطاقات أن تبيع لك سلعةً أخرىً في الخطوة الأخيرة في عملية شرائك لاسم النطاق، وقد يحاولون بيع أسماء نطاقاتٍ إضافيةٍ أو استضافة بريدٍ إلكترونيٍ لا تحتاجها، ولذلك عليك أن تكون حذرًا.
		</p>
	</li>
	<li>
		<p>
			غالبًا ما تبيع لك شركات الاستضافة اسم النطاق جنبًا إلى جنبٍ مع الاستضافة، وفي الواقع، يُرجَّح أن هذا جيدٌ ولكنه يُعَد نوعًا من تضارب المصالح. فلنفترض أنك اخترت نَقل الموقع إلى استضافةٍ أخرى يومًا ما، هنا ستضطر شركة الاستضافة حينها إلى تسهيل عملية انتقال موقعك رغم أنك أصبحت عميل شركةٍ منافسةٍ لها، وإذا أصبح نطاقك في شركة استضافةٍ أخرى، فستحثّك الشركة الجديدة على تغييره.
		</p>
	</li>
</ul>
<p>
	ليس لإزعاجك بالكثير من المعلومات والروابط، ولكن سنوفر لك بعض أسماء مُسجلات النطاق التي استُخدِمت مسبقًا والتي لا تَدفَع أي مبالغٍ للرعاية، كما أنها ليست روابط تابعةً affiliate links:
</p>

<ul>
<li>
		<a href="https://www.hover.com/" rel="external nofollow">Hover</a>
	</li>
	<li>
		<a href="https://www.hover.com/" rel="external nofollow">GoDaddy</a>
	</li>
	<li>
		<a href="https://domains.google/#/" rel="external nofollow">Google Domains</a>
	</li>
	<li>
		<a href="https://www.networksolutions.com/" rel="external nofollow">Network Solution</a>
	</li>
	<li>
		<a href="https://aws.amazon.com/route53/" rel="external nofollow">Amazon Route 53</a>
	</li>
</ul>
<p>
	تُوصي سارة درانسر بالاطّلاع على نطاقات شركة <a href="https://zeit.co/domains" rel="external nofollow">زيت ZEIT</a>، فهي جديرةٌ بالاهتمام، حيث يمكنك شراء النطاقات وإدارتها عبْر سطر الأوامر. كما يُقترحُ بقاء جميع نطاقاتك (في حال كنت تُخطط لامتلاك أكثر من نطاقٍ) في مسجّلٍ registrar واحدٍ، وذلك لأنك ستدير النطاقات مراتٍ قليلةً في حياتك، ومن السهل أن تنسى أسماء النطاقات التي تمتلكها وأماكنها، بالإضافة إلى صعوبة إدارة وتغيير الإعدادات في المُسجلات المُختلفة.
</p>

<p>
	وبما أن التعلّم وتجربة الأمورٍ أمرٌ جيدٌ لأنها الطريقة التي تَعلّمنا بها جميعًا، فكلّ ما عليك فِعله هو اختيار واجهةٍ مناسبةٍ لك وشركة استضافةٍ موثوقةٍ (من الممكن أن تأخذ بنصيحة صديقٍ يستخدمها)، وبعدها ستسير الأمور بسلاسة، كما يمكنك استبدال الشركة إذا لم تعجبك.
</p>

<p>
	ما هي شركات استضافة مواقع الويب ولماذا تحتاج إليها؟ يُظهِر بحث غوغل الكثير والكثير من الإعلانات والمقالات حول أفضل استضافة ويبٍ، وتمتلئ هذه المواقع بمصطلحاتٍ مثل الاستضافة المشتركة والاستضافة المُدارة. وإذا ظَهَرت بعض شركات الاستضافة المُقتَرحة في بعض المواقع، فكيف تجد شركة الاستضافة المناسبة؟ فأنت لست متأكدًا من احتياجاتك بعد، وهل يجب أن البحث عن أقلّ سعرٍ وحسْب؟
</p>

<p>
	امتلاكك لنطاقٍ معيّنٍ لا يعني أنّه سيقدم لك أيّ خدمةٍ، في الواقع يُحتمَل أن يَعرِض لك مُسجل النطاق بعد شرائه مباشرةً صفحة سيتم افتتاحه قريبًا، كما في الصورة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="76109" href="https://academy.hsoub.com/uploads/monthly_2021_09/coming-soon.png.4cc882b79f301895df65a0f327b2d0d9.png" rel=""><img alt="coming-soon.png" class="ipsImage ipsImage_thumbnailed" data-fileid="76109" data-unique="m89tc0l8p" src="https://academy.hsoub.com/uploads/monthly_2021_09/coming-soon.thumb.png.55fffb509f78ccbdd29f68b8749b370a.png"></a>
</p>

<p>
	ولذلك ستحتاج عند استضافة موقع ويبٍ في نطاقك الجديد إلى تهيئة نظام أسماء النطاقات Domain Name System واختصارًا بـ DNS لنطاقك الجديد لتشير إلى خادمٍ متصلٍ بالإنترنت، والمعلومة الشيقة هي أنك تقدر على فعل هذا مباشرةً من منزلك إذا أردت، فقد يمنحك مُزوّد خدمة الإنترنت ISP في منزلك عنوان IP خاصًا بك، وإذا بدا كلّ هذا خاصًّا بمهووسي التقنية فقط، فهذا ليس صحيحًا تمامًا لأنك تستطيع ربط اسم النطاق الخاص بك مع عنوان IP مُخصصٍ، وسيمكنك إعداد حاسوبك ليكون مُخدّم الويب الذي يستجيب للطلبات الواردة ويُخدّم على موقع الويب الخاص بك، إلا أن قلّةً قليلةً من الأشخاص يفعلون ذلك، فلا أحد يريد للمُخدّم التوقّف عن العمل بسبب إغلاق الحاسوب، أو لأنّ مُزوّد خدمة الإنترنت ISP غيّر عنوان IP الخاص بك.
</p>

<p>
	تمنحك خدمات استضافة الويب مُخدّمًا كهذا، كما تُعِد الشركات استضافة الويب سلعةً مثل مُسجلات النطاق تقريبًا، ولذلك يوجد الكثير منها، حيث تُقدّم معظمها خدمةً مماثلةً ولذلك يَنخفض السعر إلى حدٍ ما، كما تجد هذه الشركات أشياءً أخرى لتنافس عليها.
</p>

<p>
	يَصعُب شراء استضافة الويب قليلاً عن شراء النطاق، إذ ستحتاج إلى القليل من المعرفة حول موقع الويب الذي تنوي استضافته عند اتخاذ هذا الاختيار، مثلًا سيتوجب عليك أن تجيب على أسئلةٍ مثل هل سيعمل موقعك بتقنية WordPress؟ أم أنه سيرتكز على لغتي PHP وMySQL مثل مواقع نظام إدارة المحتوى CMS (سنشرح هذه المفاهيم لاحقًا)؟ وهذا يعني أن مُضيفك سيحتاج إلى دعم هذه التقنيات التي تدعمها معظم شركات الاستضافة هذه التقنيات، إلا أن بعضها لا تدعهما، ولذلك من الأفضل أن تَبحث في توثيق هذه المواقع أو تسألهم قبل الشراء، فإذا لم تكن متأكدًا فهناك الكثير من التقنيات لتشغيل مواقع الويب، ولنفترض أن الموقع سيستخدم روبي أون ريلز Ruby On Rails وهي منصةٌ برمجيةٌ لتطبيقات الإنترنت، وهذه مجموعةٌ مختلفةٌ من المتطلبات لا تُقدّمها جميع شركات الاستضافة، وكذلك الأمر بالنسبة للغة بايثون Python ونود Node.
</p>

<p>
	إذا كان مُضيف الويب مُتخصصًا في مجموعةٍ معينةٍ من التقنيات التي تحتاجها، فهذا هذا هو الخيار الأنسب، خاصةً في الفترة الأولى، ولكن لننظر مرةً أخرى، فهذه ليست روابطًا تابعةً affiliate links أو مدفوعة الأجر، بل هي شركات استضافة ويب تتبادر إلى الذهن -الكاتب الأصلي للمقال- وكان اختيارها عشوائيًا إلى حدٍ ما.
</p>

<ul>
<li>
		يُركّز <a href="https://wpengine.com/" rel="external nofollow">محرك دبليو بي WP Engine</a> على مواقع ووردبريس WordPress.
	</li>
	<li>
		تحتوي Media Temple على استضافةٍ خاصةٍ بووردبريس WordPress، حيث تمتلك مجموعةً واسعةً من الخدمات المُصغّرة ذات السعر المناسب والاهتمام الجيّد.
	</li>
	<li>
		تمتلك شركة بلو هوست Blue Host استضافاتٍ رخيصة الثمن مع قدراتٍ مماثلةٍ لغيرها.
	</li>
</ul>
<p>
	كما توجد بعض شركات الاستضافة الأخرى والتي يمكننا عدُّها غير تقليديّةٍ، حيث:
</p>

<ul>
<li>
		تُقدّم <a href="https://www.netlify.com" rel="external nofollow">نيتليفاي Netlify</a> استضافة مواقعٍ ثابتةٍ، ويناسب هذا مُولّدات المواقع الثابتة ومواقع جامستاك JAMstack، وللمزيد من المعلومات حول مواقع جامستاك، يمكنك زيارة <a href="https://en.wikipedia.org/wiki/Jamstack" rel="external nofollow">صفحة جامستاك على ويكيبيديا</a>.
	</li>
	<li>
		أمّا زيت Zeit فهو مضيفٌ تتفاعل معه من خلال سطر الأوامر فقط.
	</li>
	<li>
		وبالنسبة لشركة ديجيتال أوشن Digital Ocean فلها طريقتها الخاصة في الاستضافة، وتطلق عليها اسم <a href="https://www.digitalocean.com/products/droplets/" rel="external nofollow">دروبليتس droplets</a> وتعني ترجمتها الحرفية قطرات المياه، فهي تُشبِه الأجهزة الافتراضية إلى حدٍ ما ولكن مع ميزاتٍ إضافيةٍ.
	</li>
	<li>
		تُعَد <a href="https://www.heroku.com" rel="external nofollow">هيروكو heroku</a> رائعةً لاستضافة التطبيقات ذات الواجهة الخلفية backend الجاهزة لاستخدام لغاتٍ أو أُطُر عمل مثل نود Node وروبي Ruby وجافا Java وبايثون Python.
	</li>
	<li>
		أخيرًا، تُعَد خدمات ويب أمازون Amazon Web Services واختصارًا بـ AWS مجموعةً كاملةً من المنتجات التي تُركّز على الاستضافة بصورةٍ خاصةٍ، ولذلك فهي مخصصةٌ للمستخدمين المحترفين، كما تتشابه <a href="https://cloud.google.com" rel="external nofollow">سحابة غوغل Google Cloud</a> و<a href="https://azure.microsoft.com/en-us" rel="external nofollow">مايكروسوفت أزور</a> مع AWS كثيرًا.
	</li>
</ul>
<p>
	من الضروري التأكيد على أنه من الجيد أن تَرتكب بعض الأخطاء هنا من بعض النواحي، فإذا كنت تستضيف شيئًا غير مهمٍ مثل موقعك الشخصي، فاختر مضيفًا يناسبك من حيث التكلفة وجربّه، بالطبع نأمل أن تكون تجربةً رائعةً، ولكن إذا لم تكن كذلك، فيمكنك تغيير الاستضافة، وعلى الرغم من ملل وصعوبة التنقل بين الاستضافات، إلا إنه أمرٌ ضروريٌ للتعلّم، حيث يضطر الجميع لفعله في هذه الرحلة. فعندما تشتري استضافة الويب سيخبرك المضيف بكيفية استخدامها، حيث سيمنحك المُضيف بيانات اعتماد بروتوكول نقل الملفات الآمن SFTP، وبعدها ستستخدم برنامجًا مُصممًا للاتصال بالمُخدّمات عبر بروتوكول نَقْل الملفات الآمن SFTP، والذي يُتيح رَفع الملفات إلى مُخدّمات الويب.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="76110" href="https://academy.hsoub.com/uploads/monthly_2021_09/ftp-info.png.2facfc0266013cf70f97bfe874fb18ec.png" rel=""><img alt="ftp-info.png" class="ipsImage ipsImage_thumbnailed" data-fileid="76110" data-unique="vugc1cht7" src="https://academy.hsoub.com/uploads/monthly_2021_09/ftp-info.thumb.png.472ef87882c6e73d637f8cc8f0b4719e.png"></a>
</p>

<p>
	سنفترض أنك تعمل على ملف <code>index.html</code> بحيث يتضمّن ملف <code>style.css</code>، ارفع هذين الملفّين بواسطة بروتوكول نَقل الملفّات الآمن SFTP في المجلد الذي يخبرك مضيفك بأنه دليل الجذر العام public root directory لهذا الموقع.
</p>

<p>
	هذه هي عملية رفع الموقع على الانترنت، حيث لا توجد بها أيّة مشكلة، وأيضًا يُشار إليها بالنّشر deployment، وهذا أمرٌ أساسيٌ وبسيطٌ جدًا، وحتى الطُرق التي تبدو مُعقّدة تَتّبع هذه الخطوات في الخلفية، وسنتحدث لاحقًا عن النشر بالتفصيل.
</p>

<p>
	هل يجب شراء مُسجل النطاق ومُضيف الويب من نفس الشركة إذا كانت تُقدّم الخدمتين؟
</p>

<p>
	لقد ذكرنا هذا آنفًا، إذ لا يُفضَّل هذا بصورةٍ عامةٍ، على الرغم من سهولة الاستخدام في أمورٍ مِثل الفاتورة المشتركة وعملية الشراء الواحدة، حيث سيُنجِز المُضيف بعض الأمور مثل تكوين نظام أسماء النطاق DNS لتصير إعداداتك جاهزةٌ للتعامل مع استضافته، وربما دون أن تُفكّر في الأمر.
</p>

<p>
	لكن لنفترض أنه في يومٍ من الأيام رغبت في تغيير المُضيف لأنك وجدت خيارًا أفضل أو لم يعجبك دعمهم أو خدمتهم أو لسببٍ آخرٍ، وهنا ستظهر مشكلةٌ تتمثل في أن هذه الشركة ليست المُضيف وحسب، ولكنها المُضيف ومُسجّل النطاق ولن تستطيع إبقاء النطاق وتبديل الاستضافة، ولذلك سيتوجّب عليك تغيير الأمرين معًا، مما يحُفّ هذه الخطوة بالمخاطر، ولكن الأسوأ من ذلك هو أن الشركة لن تستجيب لطلباتك بصورةٍ سريعةٍ ومفيدةٍ لأنها ستفقدك كعميلٍ.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="76113" href="https://academy.hsoub.com/uploads/monthly_2021_09/unbundle.png.1894e902881e0d2dac8fdd90b59fadde.png" rel=""><img alt="unbundle.png" class="ipsImage ipsImage_thumbnailed" data-fileid="76113" data-unique="o9bfnldll" src="https://academy.hsoub.com/uploads/monthly_2021_09/unbundle.thumb.png.c35f2fec027fb81933aba0b52deedb7f.png"></a>
</p>

<p>
	ما هو نظام إدارة المحتوى Content Management System واختصارًا بـ CMS؟ وما الغرض منه؟ نعلَم أن ووردبريس WordPress وجوملا Joomla ودروبلا Drupal هي أنظمة إدارة المحتوى الأكثر شيوعًا، وتبدو حسب توصيفها متشابهةً فيما بينها، ولكن ما هي الأمور التي تُميّز أحدها عن الآخر؟ وهل كلّ ما تحتاجه لنقل موقع الويب الخاص بك من حاسوبك المحلي إلى شبكة الإنترنت العامة هو نظام إدارة المحتوى؟
</p>

<p>
	نظام إدارة المحتوى أو CMS هو مصطلحٌ عامٌ جدًا فهو يشير إلى أي شيءٍ سيساعدك في إدارة المحتوى، وبالطبع هناك أنظمةٌ كبيرةٌ مسيطرةٌ، مثل <a href="https://wordpress.org/" rel="external nofollow">ووردبريس WordPress</a> و<a href="https://craftcms.com" rel="external nofollow">كرافت سي إم إس CraftCMS</a>، وفي الواقع لا توجد علاقةٌ مباشرةٌ بالربط بينها وبين تشغيل الموقع محليًا أو نشر ذلك الموقع على شبكة الإنترنت العامة، فهذه عمليةٌ معقدّةٌ.
</p>

<p>
	لكننا نستخدم نظام إدارة المحتوى لتسهيل العمل على الموقع، حيث توجد في المواقع الضخمة عشرات آلاف الصفحات، ولذلك لا يُقبَل أن يكون لكلّ منها ملف <code>file.html</code> مكتوب يدويًا.
</p>

<p>
	ولذا يتيح لنا نظام إدارة المحتوى إنشاء هذه الصفحات من خلال دَمْج البيانات والقوالب templates.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="76116" href="https://academy.hsoub.com/uploads/monthly_2021_09/cms-setup-1.png.9a29aff76fe4724a2e0d66368cf44864.png" rel=""><img alt="cms-setup-1.png" class="ipsImage ipsImage_thumbnailed" data-fileid="76116" data-unique="w8flga6el" src="https://academy.hsoub.com/uploads/monthly_2021_09/cms-setup-1.thumb.png.64a2a185f4ff1548c8f5bf5d8eaaaaac.png"></a>
</p>

<p>
	لنُفكّر في التقنية الكامنة وراء ووردبريس WordPress، والذي يُعَد نظام إدارة محتوىً <a href="http://mediatemple.net/blog/news/css-tricks-is-a-poster-child-wordpress-site/" rel="external nofollow">يناسب موقع CSS-Tricks كثيرًا</a>. في البداية، سيحتاج ووردبريس شيئين ليعمل وهما:
</p>

<ol>
<li>
		PHP، وهي لغة الواجهة الخلفية backend.
	</li>
	<li>
		نظام MySQL، لإدارة قواعد البيانات.
	</li>
	<li>
		Apache، وهو مُخدّم الويب.
	</li>
</ol>
<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p>
		يمكنك أن تفعل كلّ هذا على حاسوبك المحليّ.
	</p>
</blockquote>

<p>
	أستخدِم برمجية <a href="https://css-tricks.com/local-by-flywheel/" rel="external nofollow">Local by Flywheel</a> التي تعمل لنظامي ويندوز وماكينتوش، وهناك عددٌ من الطرق لتشغيل هذه التقنيات مثل MAMP وDocker وVagrant وما إلى ذلك.
</p>

<p>
	سيؤدي ذلك إلى تشغيله محليًا باستخدام نظام إدارة المحتوى الخاص بك وهو أمرٌ رائعٌ حيث إن وجود بيئة تطوير محليةٍ جيدةٍ لموقعك هو أمرٌ بالغ الأهمية، ولكنه لن يساعدك في نَشْر الموقع على شبكة الإنترنت العامة.
</p>

<p>
	سننقل الموقع ليُتَاح على الإنترنت بعد قليلٍ ولكن يجب أن تعرف أن مُخدّم الويب الذي تشغله سيحتاج إلى هذه التقنيات نفسها، فإذا أخذنا المثال السابق مثل ووردبريس WordPress، فسنقول إن مُخدّم الويب الخاص بك سيحتاج إلى تشغيل PHP وMySQL وApache أيضًا، وبعدها سيتوجب عليك إعداد نظامٍ لتنقل جميع ملفاتك من حاسوبك المحلي إلى خادم الويب، تمامًا مثل أي موقعٍ آخرٍ، ولكن من المحتمل أن يكون لديك نظامٌ معيّنٌ يتعامل مع قاعدة البيانات، فكما نعلَم، قاعدة البيانات صعبةٌ بعض الشيء لأنها ليست ملفًا ثابتًا مثل باقي أجزاء موقعك.
</p>

<p>
	ويمكن بناء نظام إدارة المحتوى باستخدام أي خليطٍ من البرمجيات والتقنيات، وليس فقط تلك المذكورة آنفًا، فعلى سبيل المثال يستخدم موقع <a href="https://www.keystonejs.com/" rel="external nofollow">KeystoneJS</a> لغة Node.js بدلاً من PHP. ويدير قواعد البيانات بمونغو MongoDB بدلًا من MySQL، كما يستخدم المُخدّم Express بدلًا من Apache، ففي الواقع هي مجرد مجموعةٍ مختلفةٍ من البرمجيّات، ويمكننا تشغيل كلتا المجموعتين محليًا وعلى خادم ويبٍ مباشرٍ كذلك.
</p>

<p>
	وفي بعض الأحيان لا يحتوي نظام إدارة المحتوى على قاعدة بياناتٍ أبدًا، وتُعَد <a href="https://www.staticgen.com/" rel="external nofollow">مولدات الموقع الثابتة</a> مثالًا على هذا، حيث يمكنك تشغيل الموقع محليًا، بحيث ينتج مجموعةً من الملفات الثابتة التي تنقلها مباشرةً إلى المُخدم الخاص بك، فهي مجرد طريقةٌ مختلفةٌ لفعل بنفس الأشياء، ولكنها لا تَزال تُصنّف ضمن أنظمة إدارة المحتوى.
</p>

<p>
	المراد توضيحه هنا ببساطة هو أن <a href="https://css-tricks.com/video-screencasts/121-the-right-cms-is-a-customized-one/" rel="external nofollow">أفضل نظام إدارة محتوى هو ذاك الذي يُخصَّص لاحتياجاتك</a>.
</p>

<p>
	ما هي استضافة الأصول Asset Hosting؟ ألا يُعَد المحتوى أصولًا؟ وما الفرق بين نظام إدارة المحتوى CMS وخدمة استضافة الأصول؟ وماذا يفعل مضيف الأصول؟
</p>

<p>
	يُعرّف الأصل بأنه أي ملفٍ ثابتٍ flat أي لا يُنشَأ بصورةٍ ديناميكيةٍ بذات الطريقة التي يُنشِئ بها نظام إدارة المحتوى ملف HTML، وربما أفضل مثالٍ على الأصل هي الصور، وملفات CSS وجافاسكريبت كذلك، بالإضافة إلى مقاطع الفيديو وملفات PDF.
</p>

<p>
	قبل أن نستمر، لا يجب عليك أن تقلق بشأن هذا الآن، حيث يمكن لمضيف الويب استضافة الأصول وهذا يناسبك تمامًا ويكفيك للفترة الأولى أثناء عملك على مواقع صغيرةٍ.
</p>

<p>
	أحد الأسباب الرئيسية التي تجعل الأشخاص يستخدمون مضيف الأصول أو شبكة توصيل المحتوى واختصارًا بـ CDN، هي زيادة السرعة، حيث تعمل مضيفات الأصول مثل المخدّمات كذلك، تمامًا مثل مخدم الويب الخاص بمضيف الويب، إلا أن مضيفات الأصول مصممةٌ لاستضافة أصول الملفات الثابتة بميّزة سرعةٍ فائقةٍ، ولذلك ليست الميّزة الوحيدة هي إيصال المحتوى بسرعةٍ فائقةٍ إلى زوار الموقع وحسب، بل بهذه العملية يتخلّص مخدم الويب من عبء هذه العملية.
</p>

<p>
	يمكنك أن تَعُد يوتيوب YouTube مضيف أصولٍ، حيث يُعَد مقطع الفيديو الذي تبلغ سعته 100 ميغابايت والذي يَعرِض فراشةً في حديقتك حِملًا ثقيلًا على مخدم الويب الصغير الخاص بك، ومن المحتمل أن يسبّب مشكلةً إذا قُيّد عَرْض النطاق الترددي الصادر كما يحدث في كثيرٍ من الأحيان، إذ يؤدي رفع هذا الفيديو على يوتيوب لإتاحته على الانترنت، حيث يستضيفه يوتيوب بالنيابة عنك، طبعًا بالإضافة إلى الأسباب الاجتماعيّة لرفع الفيديو.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p>
		لقد سمعتُ عن المستودعات repositories لكنني لم أفهم تمامًا ما هي، وسمCعت جملًا مثل "ارفعه على مستودع غيت Git الخاص بي وحسب" فما المقصود من ذلك؟ أشعر بالغباء لأني أسأل ولكن ما هو غيت Git؟ وما الغرض منه؟ وهل سأحتاج إلى استخدامه؟ وهل له دورٌ في رفع الموقع على الانترنت؟
	</p>

	<p>
		Chris Coyier كريس كوير
	</p>
</blockquote>

<p>
	من المؤسف أنهم قالوا لك "افعل هذا وحسب"، فهناك <a href="http://bradfrost.com/blog/post/just/" rel="external nofollow">وباءٌ في العالم التقني</a> يقول فيه الأشخاص "افعل هذا وحسب"، ويجعلون الأمر يبدو كما لو أنّ ما سيقولونه سهلٌ وواضحٌ، رغم أنه قد يكون صعبٌ وغير واضحٍ بالنسبة للبعض.
</p>

<p>
	والآن لنتحدث عن مستودعات غيت Git. يُعدّ Git شكلًا محددًّا من أشكال أنظمة أنظمة التحكم بالنسخ version control، وبالطبع هناك أنظمةٌ مختلفةٌ عن Git، لكن Git يهيمن على مجال تطوير الويب لدرجة أنه من النادر أن يُذكَر أي نظامٍ آخرِ.
</p>

<p>
	سنفترض أننا نطوّر سويًا موقع ويبٍ، واشترينا نطاقًا domain واستضافةً وبدأنا بتشغيل الموقع، كما تشاركنا في بيانات اعتماد بروتوكول نقل الملفات الآمن SFTP حتى يتسنى لكلينا الوصول لتغيير الملفات على الموقع المباشر الموجود على شبكة الانترنت العامّة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="76108" href="https://academy.hsoub.com/uploads/monthly_2021_09/coda-1.png.ad80f7a4d154c6beebdf2a0696439066.png" rel=""><img alt="coda-1.png" class="ipsImage ipsImage_thumbnailed" data-fileid="76108" data-unique="c6twhev6l" src="https://academy.hsoub.com/uploads/monthly_2021_09/coda-1.thumb.png.d3b1a80f1ebb067f2ec96f97f36cf5c3.png"></a>
</p>

<p>
	يُعَد <a href="https://www.panic.com/coda/" rel="external nofollow">كودا Coda</a> محرّرًا للنصوص البرمجيّة، حيث يتيح تعديل الملفات مباشرةً على المخدّم في حال كنت متّصلًا به عبر بروتوكول نقل الملفّات الآمن SFTP، وهذا يبدو رائعًا، لكنّه خطير.
</p>

<p>
	سنفترض مثلًا أننا نحن الاثنان نحرر ملفًا في نفس الوقت ومن ثَم نرفعه عبر بروتوكول نقل الملفّات الآمن SFTP فأي تغييرٍ هو الذي سيُعتمد؟ بالطبع التغيير الذي رُفع أخيرًا، لكن ليس لدينا فكرة عمّن أجرى التغيير الفلانيّ، إذ أننا نستبدل تغييراتنا مرارًا وتكرارًا ولا نستطيع أن نبقى في تزامنٍ مع بعضنا البعض، وتؤثر التغييرات على الموقع مباشرةً، مما قد يؤدي إلى تعطّل ميّزات أو خدمات معيّنة ولا نستطيع التراجع عن التغييرات في حالة تعطّل شيءٍ ما. فهذا موقفٌ غير مقبولٍ لدرجة أنه لا يمكن أن يحدث.
</p>

<p>
	إذًا سنستخدم نظم التحكُّم في النسخ version control system مثل غيت مثل Git. ففي حال كنا نستخدم غيت، نثبّت commit التغييرات في مستودعٍ، حيث يمكن استضافة المستودع في مكانٍ ما على الإنترنت ليتسنى للجميع الوصول إليه، ولقد رأيت بالتأكيد <a href="https://github.com/" rel="external nofollow">غيت هاب GitHub</a>، الذي يستضيف هذه المستودعات ويضيف إليها مجموعةً من الميزات الأخرى مثل تتبع المشاكل، وكذلك <a href="https://about.gitlab.com/" rel="external nofollow">غيت لاب GitLab</a> و<a href="https://bitbucket.org/" rel="external nofollow">بيت باكيت Bitbucket</a>.
</p>

<p>
	لنفترض الآن أننا نعمل على نفس الموقع سويةً وأنشأنا مستودع غيت Git له، لذا عندما نجري تغييرًا، فعلينا أن نثبّته في المستودع، وإن كنت ترغب في إجراء تغيير أيضًا، فيجب عليك سحب pull التغييرات التي أجريتها ومن ثَم دمجها merge في نسخة الكود الخاصة بك، ثم ترسل تغييراتك إلى المستودع، وبالطبع هناك المزيد من التفاصيل وسيصبح الأمر أكثر تعقيدًا لكن هذا هو المبدأ العام.
</p>

<p>
	لكن عليك أن تعرف أن مستودع غيت Git هو ليس موقع الويب المباشر، بل أنت تنقل الملفات من مستودع غيت Git إلى الموقع المباشر لوحدك وبصورةٍ يدويةٍ، لكن لحسن الحظ يواجه الجميع هذا الموقف لذلك توجد الكثير من الخيارات.
</p>

<blockquote class="ipsQuote" data-ipsquote="">
	<div class="ipsQuote_citation">
		اقتباس
	</div>

	<p>
		ومن الجيّد أن يكون سؤالك الأخير حول هذا الموضوع.
	</p>
</blockquote>

<p>
	بعد أن انتهيت من كلّ هذا، كيف ستنتقل من استضافة الموقع محليًا إلى استضافته على شبكة الانترنت العامّة؟ أين سترفع ملفات HTML وCSS وJavaScript الخاصة بك؟ كيف ستربط اسم نطاقك الجديد مع هذه الملفّات؟ وما هي الخدمة المسؤولة عن إضافة محتوىً جديدٍ إلى موقعك أو تحديث المحتوى الموجود مسبقًا؟ هل سيكون الأمر محيرًا حقًا إذا قُدّمت الخدمات من عَدّة شركات؟
</p>

<p>
	سنبدأ بموقع ويبٍ بسيطٍ للغاية حول استضافة الويب النموذجية ولنفترض أن لديك الملفات التالية على حاسوبك <code>index.html</code> و<code>style.css</code> و<code>script.js</code> حيث تمثّل موقعك كاملًا، واشتريت اسم نطاقٍ وربطت تكوين نظام أسماء النطاق DNS مع مضيف الويب، ومنحك هذا المضيف بيانات اعتماد بروتوكول نقل الملفات الآمن SFTP، علمًا بأنّك ستستخدم بيانات الاعتماد هذه في تطبيقٍ يسمح لاتصالات بروتوكول نقل الملفات الآمن SFTP بتسجيل الدخول، كما في الصورة التالية:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="76112" href="https://academy.hsoub.com/uploads/monthly_2021_09/sftp.png.6d102d0c92efb8c69e9c2c703ce82ae8.png" rel=""><img alt="sftp.png" class="ipsImage ipsImage_thumbnailed" data-fileid="76112" data-unique="pud0w8w3s" src="https://academy.hsoub.com/uploads/monthly_2021_09/sftp.thumb.png.9986a882b0fd0769d2549be9048fffb5.png"></a>
</p>

<p>
	سيدلّك مضيفك أيضًا على المجلد الذي يمثّل الجذر العام public root لموقعك، حيث ستوجد هذه الملفات على شبكة الإنترنت ليراها العالم أجمع.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="76121" href="https://academy.hsoub.com/uploads/monthly_2021_09/Screen-Shot-2018-08-15-at-7_31.55-AM.png.839e2b4faa1d5cfdfe3732c8f4f56fa0.png" rel=""><img alt="Screen-Shot-2018-08-15-at-7.31.55-AM.png" class="ipsImage ipsImage_thumbnailed" data-fileid="76121" data-unique="rwt7ouvnc" src="https://academy.hsoub.com/uploads/monthly_2021_09/Screen-Shot-2018-08-15-at-7_31.55-AM.thumb.png.75ea15b954a300cc048135178e28635d.png"></a>
</p>

<p>
	قد تسمع أشخاصًا يشيرون إلى موقع الويب الذي رفعته على الإنترنت على أنه موقع إنتاج production، فعندما يسأل أحدهم هل وصل هذا الخطأ إلى الإنتاج؟ فهو يسأل ما إذا كان الخطأ موجودًا على موقع الويب المباشر أم لا؛ أما نسخة التطوير development فهي تلك الموجودة على حاسوبك، وقد يكون لديك موقعٌ في مرحلة الانطلاق staging وهي نسخةٌ طبق الأصل من موقع الويب المباشر على نفس أجهزة أو برمجيات الموقع المباشر، ولكنها نسخة لم تُطلق بعد حيث ستخضع للاختبار.
</p>

<p>
	هل تتذكر عندما تحدثنا عن مستودعات غيت Git؟ على الرغم أن المستودعات repositories لا تساعدك مباشرةً في عمليّة نقل الملفات الموجودة فيها إلى مخدّمك، إلّا أن معظم الأنظمة المسؤولة عن نقل الموقع ليُتَاح مباشرةً على الانترنت العام قادرةٌ على التعامل مع المستودعات هذه.
</p>

<p>
	إذ تشير عبارة أصبح مباشرًا حيًّا live على الانترنت إلى عمليّة النشر deployment، وعندما ترغب في نشر أيّ تغييرات على الموقع المباشر، فأنت تنشرها، وهذه هي عملية نقل عملك من التطوير إلى الإنتاج.
</p>

<p>
	وإحدى الخدمات التي تساعدك على النشر هي <a href="https://beanstalkapp.com/" rel="external nofollow">بينزتوك Beanstalk</a>، حيث تستضيف بينزتوك مستودع غيت الخاص بك، ومن ثَم تمنحها بيانات اعتماد بروتوكول نقل الملفات الآمن SFTP الخاصّة بمخدّمك، وبهذه الطريقة تنقل لبينزتوك الملفات إلى مخدّم الويب الخاص بك عند إجراء التغييرات.
</p>

<p>
	لنفترض أنك تريد استضافة Git مستودع غيت في مكانٍ آخرٍ، مثل غيت هاب GitHub أو بيت باكيت Bitbucket أو غيت لاب Gitlab، ويمكنك أيضًا الاطّلاع على <a href="https://deploybot.com" rel="external nofollow">ديبلوي بوت DeployBot</a>، والذي ينفّذ هذه المهام لكنه يتصل بمواقع المستودعات أيضًا، ومن الطبيعي أن تعلم أنه يوجد الكثير من الخيارات، ولكلّ منها سعره وميزاته.
</p>

<p>
	دعنا نعود الآن إلى مثال ووردبريس الذي تحدثنا عنه من قبل:
</p>

<ol>
<li>
		لقد شغّلته على حاسوبك، أي محليًّا وتريد الآن رفعه على الانترنت ليراه العالم.
	</li>
	<li>
		ثم اشتريت نطاقًا من المسجّل registrar.
	</li>
	<li>
		اشتريت استضافةً تستطيع تشغيل ووردبريس WordPress.
	</li>
	<li>
		ربطت بين نظام أسماء النطاقات DNS وبين المضيف.
	</li>
	<li>
		تحققت من أن كلّ الميزات تعمل (إليك طريقة سهلة، ارفع الملف <code>index.html</code> على مجلّد الجذر العام عبر بروتوكول نقل الملفات الآمن وتحقّق من أن محتوياته تظهر حينما تنتقل إلى اسم النطاق).
	</li>
</ol>
<p>
	لكن لا يزال عليك فعل بعض الأمور:
</p>

<ol>
<li>
		عليك إعداد مستودع غيت Git للموقع.
	</li>
	<li>
		ومن ثم يجب التجهيز للنشر أي نقل الملفات من المستودع إلى الموقع المباشر.
	</li>
	<li>
		أمّا الآن فحان وقت تغيير إعدادات الموقع المباشر حسب حاجتك، فقد تحتاج إلى قاعدة بياناتٍ، وسيتعين عليك عندها إنشاءها (بالطبع ستوفر لك شركة الاستضافة إرشادات لتعلم كيفيّة إعداد قاعدة البيانات وغيرها) بالإضافة إلى تشغيل <a href="https://codex.wordpress.org/Installing_WordPress#Finishing_installation" rel="external nofollow">مُثبِّت ووردبريس</a> وتحديث ملفات التهيئة.
	</li>
	<li>
		إن كنت تريد نقل بيانات من قاعدة البيانات المحليّة إلى الموقع المباشر، فقد تضطر إلى تصدير/استيراد البيانات، ويحدث ذلك على مستوى MySQL الأولي باستخدام ميزات الاستيراد/التصدير الموجودة في ووردبريس، أو باستخدام إضافةٍ رائعةٍ مثل <a href="https://deliciousbrains.com/wp-migrate-db-pro" rel="external nofollow">WP DB Migrate Pro</a>. وهذا ليس بالعمل السهل طبعًا، لكنها عمليّةٌ ستقدم عليها في أي موقعٍ تقريبًا، فهي أمورٍ مثل تكوين وإعداد مخدم الويب ثم نشر الملفات، وقد يختلف كلّ موقعٍ عن الآخر في جوانب معيّنة لكن المبدأ العام نفسه.
	</li>
</ol>
<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="76114" href="https://academy.hsoub.com/uploads/monthly_2021_09/websites-dance.png.33cb4f29ea087f0173b60dbc1bf3e1da.png" rel=""><img alt="websites-dance.png" class="ipsImage ipsImage_thumbnailed" data-fileid="76114" data-unique="ififskj6t" src="https://academy.hsoub.com/uploads/monthly_2021_09/websites-dance.thumb.png.f6c2cc69266c0ca5ce92bf8d8f77ea5b.png"></a>
</p>

<p>
	إنها قصةٌ كبيرةٌ، وما رُسم هنا هي صورةٌ واحدةٌ فقط كان المقصد منها أن تكون عامةً بما يكفي لتُظهِر المعلومات الكافية، ولكن لكلّ مرحلةٍ من هذه القصة الطرق كثيرة لتنفيذها، مثل الخدمات والشركات المختلفة التي يمكنك اختيارها،
</p>

<p>
	تتمتع نيتفلاي Netlify في الوقت الحالي بشعبيةٍ كبيرةٍ لأنها إحدى شركات الاستضافة القلائل التي تساعدك على النشر، فهي تراقب مستودعات غيت Git الخاصة بك و<a href="https://www.netlify.com/docs/continuous-deployment" rel="external nofollow">تنشرها بالنيابة عنك</a>، وعلى الرغم من أنّ نيتفلاي Netlify مخصصة للمواقع الثابتة فقط، إلّا أن الموقع الثابتة قد تكون <a href="https://www.netlify.com/docs/continuous-deployment" rel="external nofollow">لوحدها عالمًا كاملًا</a>، وكذلك فإن زيت ZEIT رائعةٌ للغاية فيما يتعلق بمساعدة الزبائن في النشر واستضافة المواقع و<a href="https://www.netlify.com/docs/continuous-deployment" rel="external nofollow">الاتصال المباشر بغيت هاب</a>.
</p>

<p>
	نتتمنى أن يكون المقال مفيدًا لك، وتذكر أنك لست وحيدًا فقد أقدم ملايين المطورين الآخرين على هذا العمل من قبلك، ويمكنك طلب المساعدة من الانترنت.
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://css-tricks.com//helping-a-beginner-understand-getting-a-website-live/" rel="external nofollow">Helping a Beginner Understand Getting a Website Live </a> من موقع <a href="https://css-tricks.com/" rel="external nofollow">CSS Tricks</a>.
</p>

<h2>
	اقرأ أيضًا
</h2>

<ul>
<li>
		<a href="https://academy.hsoub.com/devops/servers/%D8%AF%D9%84%D9%8A%D9%84-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D8%A7%D8%AF%D9%85-%D9%88%D9%8A%D8%A8-%D9%85%D8%AD%D9%84%D9%8A-%D8%AE%D8%B7%D9%88%D8%A9-%D8%A8%D8%AE%D8%B7%D9%88%D8%A9-r422/" rel="">دليل إعداد خادم ويب محلي خطوة بخطوة</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A9-jenkins-%D8%B9%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1604-r360/" rel="">كيفية تثبيت برمجية Jenkins على خادوم أوبنتو 16.04</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%84-%D9%85%D8%A7-%D8%AA%D9%88%D8%AF-%D9%85%D8%B9%D8%B1%D9%81%D8%AA%D9%87-%D8%B9%D9%86-%D8%A7%D9%84%D8%B3%D8%AD%D8%A7%D8%A8%D8%A9-%D8%A7%D9%84%D9%87%D8%AC%D9%8A%D9%86%D8%A9-hybrid-cloud-r358/" rel="">كل ما تود معرفته عن السحابة الهجينة Hybrid Cloud</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D9%88%D8%B1%D8%AF%D8%A8%D8%B1%D9%8A%D8%B3-%D8%B9%D9%84%D9%89-%D8%AE%D8%A7%D8%AF%D9%88%D9%85-lamp-%D9%81%D9%8A-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1604-r342/" rel="">كيفية تثبيت ووردبريس على خادوم LAMP في أوبنتو 16.04</a>
	</li>
</ul>
]]></description><guid isPermaLink="false">533</guid><pubDate>Fri, 03 Sep 2021 16:00:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; &#x648;&#x636;&#x639; Certbot &#x627;&#x644;&#x645;&#x633;&#x62A;&#x642;&#x644; &#x644;&#x644;&#x62D;&#x635;&#x648;&#x644; &#x639;&#x644;&#x649; &#x634;&#x647;&#x627;&#x62F;&#x627;&#x62A; SSL &#x645;&#x646; Let&#x2019;s Encrypt &#x639;&#x644;&#x649; &#x62F;&#x628;&#x64A;&#x627;&#x646; 10</title><link>https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D9%88%D8%B6%D8%B9-certbot-%D8%A7%D9%84%D9%85%D8%B3%D8%AA%D9%82%D9%84-%D9%84%D9%84%D8%AD%D8%B5%D9%88%D9%84-%D8%B9%D9%84%D9%89-%D8%B4%D9%87%D8%A7%D8%AF%D8%A7%D8%AA-ssl-%D9%85%D9%86-let%E2%80%99s-encrypt-%D8%B9%D9%84%D9%89-%D8%AF%D8%A8%D9%8A%D8%A7%D9%86-10-r466/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2020_04/3-how-to-use-certbot-standalone-mode-to-retrieve-let-s-encrypt-ssl-certificates-on-debian-10.jpg.354e5dc6405f1e7edbdc5348f474b1f1.jpg" /></p>

<p>
	تعد <a href="https://letsencrypt.org/" rel="external nofollow">Let’s Encrypt</a> خدمة تقدم شهادات <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr> مجانية من خلال واجهة برمجة تطبيقات تلقائية (automated <abbr title="Application Programming Interface | واجهة برمجية">API</abbr>). أما عميل Let’s Encrypt الأكثر شيوعًا فهو عميل <a href="https://certbot.eff.org/" rel="external nofollow">Certbot</a> الخاص بـ <a href="https://www.eff.org/" rel="external nofollow">EFF</a>.
</p>

<p>
	يقدم Certbot مجموعة متنوعة من الطرق للتحقق من صحة المجال الخاص بك، وجلب الشهادات، وتكوين <a href="https://httpd.apache.org/" rel="external nofollow">Apache</a> و <a href="https://www.nginx.com/" rel="external nofollow">Nginx</a> تلقائيًا. في هذا المقال، سنناقش الوضع <a href="https://certbot.eff.org/docs/using.html#standalone" rel="external nofollow">المستقل</a> لـ Certbot وكيفية استخدامه لتأمين أنواع أخرى من الخدمات، مثل خادم البريد أو وسيط الرسائل مثل <a href="https://www.rabbitmq.com/" rel="external nofollow">RabbitMQ</a>. لن نناقش تفاصيل تكوين طبقة المنافذ الآمنة (<abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr>)، لكن عند الانتهاء ستحصل على شهادة صالحة يتم تجديدها تلقائيًا. وإنك ستكون قادرًا على أتمتة إعادة تحميل الخدمة للحصول على الشهادة المُجددة.
</p>

<h2>
	المتطلبات
</h2>

<p>
	قبل مباشرتك بقراءة هذا الدليل, ستحتاج إلى:
</p>

<ul>
<li>
		خادم دبيان 10، مستخدم غير جذري بإمتيازات <code>sudo</code>، وجدار حماية أساسي.
	</li>
	<li>
		اسم نطاق يشير إلى الخادم الخاص بك.
	</li>
	<li>
		يجب عدم استخدام المنفذ <code>80</code> أو <code>443</code> على الخادم الخاص بك. وإذا كانت الخدمة التي تحاول تأمينها موجودة على جهاز مزود بخادم ويب يشْغل كلا هذين المنفذين، فسيلزمك استخدام وضع مختلف مثل وضع <a href="https://certbot.eff.org/docs/using.html#webroot_" rel="external nofollow">webroot_</a> الخاص بـ Certbot أو وضع التحدي المعتمد على DNS.
	</li>
</ul>
<h2>
	الخطوة الأولى - تثبيت Certbot
</h2>

<p>
	يحوي دبيان 10 على عميل Certbot في المستودع الافتراضي الخاص به، حيث يجب أن يكون محدثًا بما يكفي للاستخدام الأساسي. وإذا كنت بحاجة إلى القيام بتحديات مرتبطة بـ DNS أو استخدام ميزات Certbot الأحدث الأخرى، عندها يتوجب عليك التثبيت من <code>buster-backports repo</code> كما هو موضح في <a href="https://certbot.eff.org/lets-encrypt/debianstretch-other" rel="external nofollow">توثيق Certbot الرسمي</a>.
</p>

<p>
	قم بتحديث قائمة الحزمة:
</p>

<pre class="ipsCode">
$ sudo apt update
</pre>

<p>
	استخدم <code>apt</code> لتثبيت حزمة <code>certbot</code>:
</p>

<pre class="ipsCode">
$ sudo apt install certbot
</pre>

<p>
	يمكنك اختبار التثبيت عن طريق مطالبة certbot بإخراج رقم إصداره:
</p>

<pre class="ipsCode">
$ certbot --version
</pre>

<pre class="ipsCode">
certbot 0.31.0
</pre>

<p>
	بعد قيامك بتثبيت Certbot، قم بتشغيله للحصول على شهادتك.
</p>

<h2>
	الخطوة الثانية - تشغيل Certbot
</h2>

<p>
	يحتاج Certbot للرد على اختبار تشفير صادر عن واجهة برمجة التطبيقات (<abbr title="Application Programming Interface | واجهة برمجية">API</abbr>) الخاص بـ Let’s Encrypt لإثبات أننا نتحكم في نطاقنا. حيث يستخدم المنافذ <code>80</code> (HTTP) أو <code>443</code> (HTTPS) لتحقيق ذلك. قم بفتح المنفذ المناسب في جدار الحماية:
</p>

<pre class="ipsCode">
$sudo ufw allow 80
</pre>

<p>
	استبدل <code>443</code> أعلاه إذا كان هذا هو المنفذ الذي تستخدمه. حيث سيخرج ufw تأكيدًا بأنه قد تم إضافة ادارتك:
</p>

<pre class="ipsCode">
Rule added
Rule added (v6)
</pre>

<p>
	يمكننا الآن تشغيل Certbot للحصول على شهادتنا. حيث سنستخدم <code>‎--standalone</code> لإخبار Certbot بالتعامل مع التحدي باستخدام خادم الويب المدمج الخاص به. ويرشد خيار <code>‎--preferred-challenges</code> إلى Certbot لاستخدام المنفذ <code>80</code> أو المنفذ <code>443</code>. فإذا كنت تستخدم المنفذ <code>80</code>، فستستخدم خيار <code>‎--preferred-challenges http</code>. وأما بالنسبة إلى المنفذ 443، استخدم <code>‎--preferred-challenges <abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل">tls</abbr>-sni</code>. والآن سنستخدم الراية <code>‎-d</code> لتحديد النطاق الذي نطلب شهادة له. حيث يمكنك إضافة رايات <code>‎-d</code> متعددة لتغطية نطاقات متعددة في شهادة واحدة. للتوضيح سنستخدم <code>‎‎--preferred-challenges http</code>، لكن يتحتم عليك استخدام الخيار المناسب حسب حالة الاستخدام الخاصة بك. والآن قم بتشغيل الأمر التالي مع الخيارات المفضلة لديك للحصول على شهادتك:
</p>

<pre class="ipsCode">
$sudo certbot certonly --standalone --preferred-challenges http -d your_domain
</pre>

<p>
	عند تشغيل الأمر سيُطلب منك إدخال عنوان بريد إلكتروني والموافقة على شروط الخدمة. وبعد قيامك بذلك من المفترض أن ترى رسالة تخبرك عن مكان تخزين الشهادات موضحاً فيها بأن العملية كانت ناجحة:
</p>

<pre class="ipsCode">
IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/your_domain/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/your_domain/privkey.pem
   Your cert will expire on 2019-08-28. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le
</pre>

<p>
	ها قد حصلنا على شهاداتنا. دعنا الآن نلقي نظرة على ما قمنا بتنزيله وكيفية استخدام الملفات مع برنامجنا.
</p>

<h2>
	الخطوة الثالثة - إعدادات التطبيق
</h2>

<p>
	لن نتطرق في هذه المقالة إلى إعداد <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr> لتطبيقك، حيث أن لكل تطبيق متطلبات وخيارات تهيئة مختلفة، لكن دعنا نلقي نظرة على ما تم تنزيله من قِبل Certbot. استخدم <code>ls</code> لعرض المجلد الذي يحوي مفاتيحك وشهاداتك:
</p>

<pre class="ipsCode">
$sudo ls /etc/letsencrypt/live/your_domain
</pre>

<p>
	سترى الناتج التالي:
</p>

<pre class="ipsCode">
cert.pem  chain.pem  fullchain.pem  privkey.pem  README
</pre>

<p>
	يحتوي ملف README في هذا المجلد على مزيد من المعلومات حول كل ملف من هذه الملفات. غالبًا ما ستحتاج فقط إلى ملفين من هذه الملفات:
</p>

<ul>
<li>
		<code>privkey.pem</code>: هذا هو المفتاح الخاص بالشهادة. ويجب الإبقاء على هذا المفتاح بشكل آمن وسري، فهذا هو السبب في أن معظم ما في مجلد <code>‎/etc/letsencrypt</code> لديه أذونات مقيدة للغاية حيث يمكن الوصول إليه فقط من قبل المستخدم الجذر root. ستشير معظم إعدادات البرامج إلى هذا الملف على أنه ملف <code><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">ssl</abbr>-certificate-key</code> أو <code><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">ssl</abbr>-certificate-key-file</code>.
	</li>
	<li>
		<code>fullchain.pem</code>: هذه هي شهادتنا مرفقة بجميع الشهادات الوسيطة. ستستخدم معظم البرامج هذا الملف للحصول على الشهادة الفعلية، وستشير إليه في إعداداتها باسم مثل <code><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">ssl</abbr>-certificate</code>.
	</li>
</ul>
<p>
	لمزيد من المعلومات حول الملفات الأخرى الموجودة، راجع قسم <a href="https://certbot.eff.org/docs/using.html#where-are-my-certificates" rel="external nofollow">Where are my certificate?</a><code>‎</code> من توثيق Certbot.
</p>

<p>
	ستحتاج بعض البرامج إلى شهاداتها في تنسيقات أو مواقع أخرى، أو بأذونات مستخدم أخرى. من الأفضل ترك كل شيء في مجلد <code>letsencrypt</code> وعدم تغيير أي أذونات هناك (سيتم استبدال الأذونات عند التجديد على أي حال)، ولكن قد لا يكون هذا الخيار مناسبًا، ففي هذه الحالة ستحتاج إلى كتابة نص برمجي لنقل الملفات وتغيير الأذونات حسب الحاجة. حيث يجب تشغيل هذا النص البرمجي عند تجديد Certbot للشهادات والتي سنتحدث عنها بعد ذلك.
</p>

<h2>
	الخطوة الرابعة - التعامل مع التحديثات التلقائية لـ Certbot
</h2>

<p>
	تعد شهادات Let's Encrypt صالحة لمدة تسعين يومًا فقط. وهذا لدفع المستخدمين إلى أتمتة عملية تجديد الشهادة. حيث تقوم بذلك حزمة certbot التي قمنا بتثبيتها عن طريق إضافة سطر برمجي إلى <code>‎/etc/cron.d</code>. ويعمل هذا السطر البرمجي مرتين يوميًا ليقوم بتحديث أي شهادة ستنتهي صلاحيتها خلال ثلاثين يومًا.
</p>

<p>
	مع تجديد شهاداتنا تلقائيًا ما زلنا بحاجة إلى طريقة لتشغيل مهام أخرى بعد التجديد. حيث سنحتاج على الأقل إلى إعادة تشغيل خادمنا أو إعادة تحميله لاستلام الشهادات الجديدة، وكما ذكرنا في الخطوة الثالثة قد نحتاج إلى التلاعب في ملفات الشهادات بطريقة ما لجعلها تعمل مع البرنامج الذي نستخدمه. وهذا هو الغرض من خيار <code>renew_hook</code>. لإضافة <code>renew_hook</code>، نحتاج إلى تحديث ملف تكوين تجديد الخاص بـ Certbot. حيث يتذكر Certbot جميع التفاصيل عن كيفية جلبك الشهادة لأول مرة، وسيتم تشغيله بنفس الخيارات عند التجديد. نحتاج فقط إلى إضافة الخطاف (hook) الخاص بنا. قم بفتح ملف التكوين باستخدام أي محرر تفضله:
</p>

<pre class="ipsCode" id="ips_uid_9436_11">
$sudo nano /etc/letsencrypt/renewal/your_domain.conf</pre>

<p>
	سيتم فتح ملف نصّي <code>‎/etc/letsencrypt/renewal/your_domain.conf</code> مع بعض خيارات الإعدادات. بعدها قم بإضافة خطافك (hook) على السطر الأخير. نستخدم في هذه الحالة مثالًا يعيد تحميل خدمة <code>rabbitmq</code>:
</p>

<pre class="ipsCode" id="ips_uid_9436_9">
$renew_hook = systemctl reload rabbitmq</pre>

<p>
	قم بتحديث الأمر أعلاه بإضافة كل ما تحتاج تشغيله لإعادة تحميل الخادم أو قم بتشغيل سكربت مخصص للقيام بذلك. عادةً ما نستخدم في دبيان خدمة <code>systemctl</code> لإعادة تحميل الخدمة.
</p>

<p>
	احفظ الملف وأغلقه، ثم قم بتشغيل Certbot بوضعية التشغيل الجاف (dry run) للتأكد من أن الصيغة صحيحة:
</p>

<pre class="ipsCode" id="ips_uid_9436_7">
$sudo certbot renew --dry-run</pre>

<p>
	إذا لم ترَ أي أخطاء فأنت جاهز تمامًا. فقد تم تعيين Certbot للتجديد عند الضرورة وتشغيل أي أوامر مطلوبة للحصول على الخدمة باستخدام الملفات الجديدة.
</p>

<h2>
	الملخص
</h2>

<p>
	في هذا المقال، ثبّتنا Certbot Let’s Encrypt Client، وتنزيل شهادة <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr> باستخدام الوضع المستقل، كما وقمنا بتمكين عمليات التجديد التلقائي بخطافات التجديد (renew hooks). فمن المفترض أن يمنحك هذا بداية جيدة لاستخدام شهادات Let’s Encrypt مع خدمات مغايرة خادم الويب الإعتيادي.
</p>

<p>
	لمزيد من المعلومات يرجى الإطلاع على توثيق <a href="https://certbot.eff.org/docs/" rel="external nofollow">Certbot</a>
</p>

<p>
	ترجمة -وبتصرف- للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-use-certbot-standalone-mode-to-retrieve-let-s-encrypt-ssl-certificates-on-debian-10" rel="external nofollow">How To Use Certbot Standalone Mode to Retrieve Let's Encrypt <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr> Certificates on Debian 10</a> لأصحابه Brian Boucheron و Kathleen Juell و Hanif Jetha
</p>
]]></description><guid isPermaLink="false">466</guid><pubDate>Mon, 18 May 2020 13:01:01 +0000</pubDate></item><item><title>&#x62F;&#x644;&#x64A;&#x644; &#x625;&#x639;&#x62F;&#x627;&#x62F; &#x62E;&#x627;&#x62F;&#x645; &#x648;&#x64A;&#x628; &#x645;&#x62D;&#x644;&#x64A; &#x62E;&#x637;&#x648;&#x629; &#x628;&#x62E;&#x637;&#x648;&#x629;</title><link>https://academy.hsoub.com/devops/servers/%D8%AF%D9%84%D9%8A%D9%84-%D8%A5%D8%B9%D8%AF%D8%A7%D8%AF-%D8%AE%D8%A7%D8%AF%D9%85-%D9%88%D9%8A%D8%A8-%D9%85%D8%AD%D9%84%D9%8A-%D8%AE%D8%B7%D9%88%D8%A9-%D8%A8%D8%AE%D8%B7%D9%88%D8%A9-r422/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_05/5ced91b62a42f_.jpg.8106649b4626cb1520add12a54887736.jpg" /></p>

<p>
	هذا الدليل مناسب أيضًا لإعداد خادم WordPress المحلي الخاص بك. إن اختبار العديد من الأشياء (نظام إدارة المحتوى، والسمات وما إلى ذلك) على الإنترنت يسبب متاعبًا كبيرة وله العديد من العيوب، لذا نلجأ عادةً إلى ضبط وتشغيل خادم محلي على حاسوبنا لإجراء مثل عمليات الاختبار تلك.
</p>

<p>
	إن أردت التجريب على خادم حقيقي، تحتاج إلى شراء نطاق (domain)، والدفع مقابل الاستضافة، واستخدام سرعة تحميل بطيئة لمزودي الإنترنت لتحميل الملفات عبر بروتوكول نقل الملفات ftp، وكلما أردت تغيير بعضَ إعدادات Apache أو PHP، يتعيَّنُ عليك الاتصال بمزوِّد الاستضافة والانتظار لبعض الوقت حتى يردّوا. يمكنني سرد مساوئ أخرى، لكنني أعتقد أن الصورة قد اتضحت.
</p>

<p>
	هناك العديد من الخوادم التي تمثِّل عدّة حزم في حزمة واحدة، والتي سيتمُّ تثبيتها جميعًا مثل WAMP أو XAMPP، لكني لا أحبُّها. هذه البرامج -برأيي- بمثابة قمامة غير منضبطة على الكمبيوتر وغير محدَّثة في كثيرٍ من الأحيان. لكنَّها حلٌّ سريع وجيد للأشخاص الذين لا يريدون أن يتعلموا عملَ كلِّ شيء ويحتاجون طريقةً سريعة لتثبيت خادم ويب محلي، لاختبار مشاريعهم.
</p>

<p>
	هذا الدليل أكثر تعقيدًا من مجرّد كونه حلٌّ يعتمد علىWAMP أو XAMPP ولكن الميزة الأكبر أنَّ لديك كامل التحكم، لأنّك تضبط بنفسك كل شيء (الخادم، قاعدة البيانات ضمن أية حزمة). ويمكنك أن تكون دائمًا مطلعًا على التحديثات وتستمتع بأحدث الإصلاحات والتحسينات في حزم <a href="https://academy.hsoub.com/devops/servers/web/apache/" rel="">Apache</a> و <a href="https://academy.hsoub.com/programming/php/" rel="">PHP</a> و <a href="https://academy.hsoub.com/devops/servers/databases/mysql/" rel="">MySQL</a>.
</p>

<p>
	بمجرّد إتقان هذا الدّليل، فستوافق على إمكانيّة تثبيت خادم محليّ باستخدام الحزم الأصلية في بضعِ دقائق، مثل WAMP أو XAMPP. تحديث الحزم الجديدة بسيطٌ للغاية أيضًا. قُمْ بتثبيت الحزمة الجديدة على الحزمة الحالية وانتهى الأمر.
</p>

<h2 id="-">
	من ينبغي أن يقرأ هذا المقال لإعداد خادم الويب المحلي؟
</h2>

<p>
	يعدُّ هذا البرنامج التعليمي رائعًا لمطوّري الويب ومصمِّمي الويب الذين يحتاجون إلى اختبار التطبيقات المستندة للويب في الوقت الفعلي أو السمات الخاصة بـ WordPress أو Joomla أو Drupal دون الحاجة إلى اتصال بالإنترنت أو استضافة المواقع.
</p>

<p>
	سيغطي، أيضًا، ويُعْلِمْكَ بأهمِّ العثرات والأخطاء غير المتوقعة التي تحدث في بعض الأحيان والتي لا تغطيها البرامج التعليمية الأخرى. لذلك يجب أن يكون لدى المستخدمين الذين سيتبعون هذا البرنامج التعليمي خطوة بخطوة خادمُ ويب مضيف محلي، يعمل من دون أخطاء غير متوقعة في النهاية.
</p>

<p>
	قرَّرتُ أن أكتب هذا البرنامج التعليمي لأنني تابعت العديد من البرامج التعليمية على الويب، إلا أنني لم أتمكن من جعل خوادمي المحلية التي أنشئها تعمل من المحاولة الأولى، لذلك قضيت عدة ساعات في البحث عن الأخطاء غير المتوقعة وإصلاحها، والتي غطيتها كلها في هذا الدليل التعليمي .
</p>

<h2 id="-">
	اقتباسات
</h2>

<p>
	استخدم غالبًا علامات الاقتباس لكتابة التعليمات والأوامر وأسماء تسجيل الدخول وكلمات المرور والمسارات وأسماء المجلدات التي تحتاج إلى تعديل بما يناسبك.
</p>

<p>
	لذلك كلِّما رأيت علامات الاقتباس في هذا الدليل، استخدم دائمًا ما بين علامات الاقتباس فقط. سيتمّ وضع علامة كنصٍّ غامق أيضًا. في بعض الأحيان توجد علامات اقتباس بين علامات الاقتباس، تكون هذه علامات الاقتباس (بين علامات الاقتباس) مهمة في ملفات الضبط.
</p>

<h2 id="-">
	المتطلبات
</h2>

<p>
	تم إنشاء هذا الدليل التعليمي على (ويندوز7 32 بت نهائي) 32bit Windows 7 Ultimate في برنامج VMware Player، لكنني أستخدمه في تثبيت حقيقي لـ (ويندوز7 64 بت نهائي) 64bit Windows 7 Ultimate دون أي مشكلة.
</p>

<p>
	على أي حال، يمكن تطبيق هذا الدليل على إصدارات ويندوز اللاحقة مع اختلاف في الإصدارات. لذلك، في هذه الحالة يجب أن تعمل على أي نظام تشغيل Microsoft. حتى إذا كانت الحزم 32 بت، فإنها تعمل على أنظمة تشغيل 64 بت دون أية مشاكل تتعلق بعدم التوافق. هناك حزم 64 بت غير رسمية لـ Apache و PHP، ولكن التثبيت أكثر تعقيدًا ولا يتم تحديثها غالبًا. يحتوي الدعم الرسمي لأنظمة التشغيل 64 بت على MySQL، لكنه لن يعمل بشكل صحيح مع نسخة 32 بت من Apache و PHP.
</p>

<h2 id="-">
	التنزيلات
</h2>

<ul>
<li>
		<a href="https://httpd.apache.org/download.cgi" rel="external nofollow">Apache 2.2.15 win32 x86 no <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">ssl</abbr> msi</a>
	</li>
	<li>
		<a href="https://windows.php.net/download/" rel="external nofollow">PHP 5.3.2 VC6 x86 Thread Safe Installer</a>
	</li>
	<li>
		<a href="https://www.phpmyadmin.net/" rel="external nofollow">phpMyAdmin 3.3.2 zip </a>
	</li>
	<li>
		<a href="https://wordpress.org/download/" rel="external nofollow">WordPress</a> (اختياري)
	</li>
</ul>
<p>
	إذا وجدت أي إصدارات جديدة من هذه الحزم، فيمكنك استخدامها أيضًا، وستكون الخطوات هي نفسها.
</p>

<h2 id="-">
	خطوات ما قبل التثبيت
</h2>

<h3 id="-">
	الخطوة الأولى: إنشاء المجلدات اللازمة
</h3>

<p>
	أنشئ مجلدًا للتثبيت وآخر لتخزين صفحات الويب الخاصة بالاختبار. أنصحك باتباع نفس الهيكل؛ وإلا فيتعيّن عليك تغيير جميع المسارات إلى إعداداتك الخاصة أثناء خطوات البرنامج التعليمي.
</p>

<p>
	يسمى المجلد الأول الذي أقوم بإنشائه بـ "dev" (من الكلمة "تطوير") في جذر <code>"<strong>C:\‎</strong>"</code>. يسمَّى المجلد الثاني الذي أقوم بإنشائه "progs" في <code>"<strong>C:\dev\‎</strong>"</code> والثالث يسمى "www" في <code>"<strong>C:\dev\‎</strong>"</code> ، لذا بعد ذلك يجب أن يكون لديك ثلاثة مجلدات جديدة.
</p>

<ul>
<li>
		<strong>C:\dev\‎</strong>
	</li>
	<li>
		<strong>C:\dev\progs\</strong>‎ لتثبيت Apache و PHP و Mysql
	</li>
	<li>
		<strong>C:\dev\www\‎</strong> - هذا المجلد بمثابة مجلد لبروتوكول FTP عند الاستضافة، وسيتم استخراج جميع صفحات الويب الخاصة بك فيه
	</li>
</ul>
<h3 id="-">
	الخطوة الثانية: إيقاف التحكم في حساب المستخدم
</h3>

<p>
	يمكن لمستخدمي نظام التشغيل Windows XP تخطي هذه الخطوة! إنه لمستخدمي فيستا و ويندوز 7 و ويندوز 10 وهي تعطيل UAC! ستقوم بذلك بالنقر فوق <strong>Start&gt; </strong>‏<strong>Control Panel&gt; </strong>‏<strong>User Accounts</strong> (<strong>ابدأ&gt; لوحة التحكم&gt; حسابات المستخدمين</strong>) ثم انقر فوق "تغيير إعدادات التحكم في حساب المستخدم" (Change User Account Control settings).
</p>

<p>
	في النافذة التالية (تذكر الموضع الافتراضي لشريط التمرير)، اسحب شريط التمرير لأسفل حتى "لا تبلغني أبدًا متى: ..."، انقر فوق "موافق" وأغلق النوافذ. بالنسبة لمستخدمي نظام التشغيل Vista - ما عليك سوى إيقاف التحكم في حساب المستخدم.
</p>

<p>
	لا تقم بإعادة تشغيل جهاز الكمبيوتر الآن! يجب إعادة شريط التمرير إلى الإعدادات الافتراضية بعد التثبيت الناجح لـ Apache و PHP و MySQL، وذلك لأسباب أمنية.
</p>

<h3 id="-hosts-">
	الخطوة الثالثة: تعديل ملف المضيفين hosts في ويندوز
</h3>

<p>
	في بعض الحالات، لم أستطعْ التثبيت حتى قمت بهذه الخطوة. لم أختبر هذا على نظام التشغيل Windows XP، لذلك يمكن لمستخدمي XP أيضًا تخطي هذه الخطوة، لأنه في رأيي ليست هناك من حاجة إليها.
</p>

<p>
	غالبًا ما يتمُّ وضع ملف المضيفين في المسار <code>"<strong>C:\Windows\System32\drivers\etc\‎</strong>"</code> وهو ملف مخفي وللقراءة فقط. لمشاهدة الملفات المخفية، انتقل إلى <strong>ابدأ&gt; لوحة التحكم&gt; خيارات المجلد</strong>، انقر فوق اللسان "عرض"، وحدد "إظهار الملفات والمجلدات ومحركات الأقراص المخفية"، ثم انقر فوق موافق.
</p>

<p>
	في أنظمة x64، لن يكون الملف مرئيًا في برنامج طرف ثالث كمديري ملفات 32bit، مثل Total Commander حتى وإن غيَّرت الإعدادات لمشاهدة الملفات والمجلدات المخفيّة، لأن برامج 32bit لا يمكنها رؤية ملفات ومجلدات 64 بت.
</p>

<p>
	لذا انتقل إلى هذا المجلد من خلال مستكشف Windows الأصليّ للملفات للوصول إلى ملف المضيفين بشكل صحيح. افتح الملف في المفكرة، وابحث عن السطر: <code>‎# 127.0.0.1 localhost</code>، وحذف الرمز <code>#</code>، واحفظ الملف، والآن يمكنك إعادة تشغيل الكمبيوتر لتطبيق الإعدادات.
</p>

<p>
	الآن انتهينا من خطوات التثبيت المسبق.
</p>

<h2 id="-apache-">
	تثبيت الخادم Apache وضبطه
</h2>

<p>
	قم بتشغيل تثبيت Apache عبر فتح الملف الذي نزَّلته، وانقر فوق التالي، وتحقق من أنك تقبل الشروط، ثم انقر فوق التالي، ثم التالي مرة أخرى. في الشاشة التالية، قم بملء إعدادات الخادم، كما في الصورة أدناه، وانقر فوق التالي مرة أخرى.
</p>

<p>
	<img alt="01apache_01.png" class="ipsImage ipsImage_thumbnailed" data-fileid="29640" data-unique="as392455f" src="https://academy.hsoub.com/uploads/monthly_2019_05/01apache_01.png.6c91389cce90ab65654337bf85b5a414.png"></p>

<p>
	في الصفحة التالية، حدد النوع Custom Setup (الإعداد المخصّص) وانقر فوق (التالي). اترك جميع الميزات كما هي، قم بتغيير مسار التثبيت فقط إلى: <code>"<strong>C:\dev\progs\Apache\‎</strong>"</code> وانقر فوق "التالي".
</p>

<p>
	الآن انقر فوق تثبيت. سترى أيقونة جديدة على شريط مهام windows مع مثلث أخضر صغير يشير إلى تثبيت Apache وتشغيله.
</p>

<p>
	<img alt="02apache_02.png" class="ipsImage ipsImage_thumbnailed" data-fileid="29641" data-unique="otgnyrv9g" src="https://academy.hsoub.com/uploads/monthly_2019_05/02apache_02.png.bab705044313cbe79bbd37f55c48412c.png"></p>

<p>
	لاختباره بشكل صحيح افتح المتصفح Internet Explorer أو Firefox أو أي متصفح تستخدمه واكتب <code>"localhost"</code> في شريط العناوين. إذا سارت الأمور على ما يرام، يجب أن ترى "<strong>إنه يعمل!</strong>" "<strong>It Works!</strong>".
</p>

<p>
	نحرِّرُ ملف ضبط Apache! ننتقل إلى المجلد<code> "<strong>C:\dev\progs\Apache\conf\‎"</strong></code> ونفتح الملف <code>"httpd.conf"</code> في المفكرة.
</p>

<p>
	أوصي باستخدام محرر نصوص متقدم مثل Adobe Dreamweaver أو <a href="http://www.pspad.com/en/" rel="external nofollow">PSPad</a> مجاني، من أجل تحرير أفضل وأكثر راحة. حيث يمكنك رؤية أرقام الأسطر والتنقل عبر الملف النصي بسهولة.
</p>

<ol>
<li>
		انتقل إلى السطر <strong>117</strong> أو ابحث عن<code> <strong>"‎#LoadModule rewrite_module modules/mod_rewrite.so"</strong></code> واحذف <strong><code>"#"</code></strong> في بداية السطر - وبمعنى آخر، أزلْ التعليق (جيد لعناوين URL جميلة).
	</li>
	<li>
		انتقل إلى السطر <strong>178</strong> أو ابحث عن <strong><code>"DocumentRoot "C:/dev/progs/Apache/htdocs"</code>‎"</strong> واستبدل به <code>"<strong>DocumentRoot "C:/dev/www"</strong></code><strong>‎</strong> "
	</li>
	<li>
		انتقل إلى السطر <strong>205</strong> أو ابحث عن <strong><code>"&lt;Directory "C:/dev/progs/Apache/htdocs"&gt;"</code></strong> واستبدل به <strong><code>"&lt;Directory "C:/dev/www"&gt;" </code></strong>انتقل إلى السطر <strong>208</strong> أو ابحث عن <strong><code>" Options Indexes FollowSymLinks"</code></strong> واستبدل به <code><strong>"Options Includes Indexes FollowSymLinks MultiViews".</strong></code>
	</li>
	<li>
		انتقل إلى السطر <strong>225</strong> أو ابحث عن <strong><code>"AllowOverride None"</code></strong> واستبدل به <code><strong>" AllowOverride All"</strong>.</code>
	</li>
	<li>
		انتقل إلى السطر <strong>240</strong> أو ابحث عن <code><strong>"DirectoryIndex index.html"</strong></code> واستبدل به <code><strong>" DirectoryIndex index.html index.htm index.php"</strong>.</code>
	</li>
	<li>
		انتقل إلى السطر <strong>382</strong> أو ابحث عن <code><strong>"AddType application / x-gzip .gz .tgz"</strong></code> لا تستبدل أي شيء، فقط أضف سطرًا جديدًا أسفل هذا السطر بالقيمة التالية: <code>"<strong>AddType application / x-httpd-php .php"</strong>.</code>
	</li>
</ol>
<p>
	احفظ الملف، واخرج من برنامج المحرر وأعدْ تشغيل Apache. يمكنك القيام بذلك من خلال النقر على أيقونة Apache في شريط المهام ثم نقل المؤشر على Apache 2.2 والنقر فوق "إعادة التشغيل".
</p>

<p>
	إذا قمت بتوجيه متصفحك مرة أخرى إلى مضيف محلي <code><strong>"localhost"</strong></code>، فلن ترَ <strong>"إنه يعمل!"</strong> ولكن سترى شيئًا مثل "Index Of". لا تقلق، إنه بسبب تغيير المجلد من حيث يقوم Apache بترجمة صفحات الويب. تهانينا، اكتمل تثبيت اباتشي وإعداده!
</p>

<h2 id="-php">
	تثبيت وضبط الـ PHP
</h2>

<p>
	قم بتشغيل حزمة تثبيت PHP التي نُزِّلتها ثم انقرْ فوق "التالي"، واقبلْ الشروط وانقر فوق "التالي" مرة أخرى. انقرْ فوق استعراض، في الشاشة التالية، وانتقل إلى برنامج التثبيت لتثبيت PHP إلى "C:\dev\progs\PHP\‎" وانقر فوق "التالي". حدِّد Apache 2.2.x Module وانقرْ فوق التالي مرة أخرى. يجب أن تخبر برنامج التثبيت بمكان ملف ضبط Apache (الذي قمنا بتحريره حينَ إعداد apache). إذا سارت الأمور بشكل جيد، فسترى الأسطر الجديدة التالية في نهاية ملف ضبط الأباتشي httpd.conf:
</p>

<pre class="ipsCode" id="ips_uid_6838_15">
#BEGIN PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL
PHPIniDir "C:/dev/progs/PHP/"
LoadModule php5_module "C:/dev/progs/PHP/php5apache2_2.dll"
#END PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL
</pre>

<p>
	لنضبط ملف تكوين PHP المسمّى php.ini الموجود في المجلد <code><strong>"C:\dev\progs\PHP\‎"</strong></code> وافتحه في Notepad أو PSPad أو Dreamweaver وغيِّر الأسطر على النحو التالي (يجب على PHP تعمل أيضًا مع php.ini الأصلي، ولكن يوصى باستخدام هذه التغييرات لاستخدام أكثر راحة):
</p>

<ol>
<li>
		انتقل إلى السطر <strong>458</strong> أو ابحث عن <code><strong>"memory_limit = 128M"</strong></code> وقم بتغييره إلى <code><strong>"memory_limit = 512M"</strong></code> (حدد مقدار الذاكرة التي يمكن لـ PHP استخدامها).
	</li>
	<li>
		انتقل إلى السطر <strong>531</strong> أو ابحث عن <code><strong>"display_errors = Off"</strong></code> وقم بتغييره إلى <code><strong>"display_errors = On"</strong></code> (إذا كانت هناك بعض الأخطاء، فسيتم عرضها في متصفح الويب، إذا فعِّلتْ هذه الإعدادات).
	</li>
	<li>
		انتقل إلى السطر <strong>542</strong> أو ابحث عن <code><strong>"display_startup_errors = Off"</strong></code> وقم بتغييره إلى <code><strong>"display_startup_errors = On"</strong>.</code>
	</li>
	<li>
		انتقل إلى السطر <strong>728</strong> أو ابحث عن <code>**"post_max_size = 8M"**</code> وقم بتغييره إلى <code>**" post_max_size = 100M"**.</code>
	</li>
	<li>
		انتقل إلى السطر <strong>879</strong> أو ابحث عن <code><strong>"upload_max_filesize = 2M"</strong></code> وقم بتغييره إلى <code><strong>"upload_max_filesize = 2000M"</strong></code>.
	</li>
	<li>
		انتقل إلى السطر <strong>959</strong> أو ابحث عن <code><strong>"‎;date.timezone =‎"</strong></code> واستبدل به <code><strong>"date.timezone = "XXX/XXX"‎"</strong></code>. حيث يعني <code><strong>XXX/XXX</strong></code> موقعك الفعليّ، بالنسبة لي سوريا/حلب، للعثور على وضعك <a href="https://php.net/manual/en/timezones.php" rel="external nofollow">هنا</a>. بالنسبة للأشخاص الذين يعيشون في سوريا - حلب، يجب أن يبدو التنسيق مثل هذا <code><strong>"date.timezone = "Asia/Aleppo"‎"</strong>.</code>
	</li>
</ol>
<p>
	هذا هو كل ما يجب فعله. احفظْ الملفَّ، ثم أخرج من المحرِّرْ، وأعد تشغيل Apache. لنختبر ما إذا كان PHP يعمل. لذا انتقل إلى المجلد <code><strong>"C:\dev\www\‎"</strong></code> وأنشئ ملفًا نصيًّا جديدًا يسمَّى <code><strong>"index.php"</strong></code> واكتب بداخله النص التالي: <code><strong>"&lt;?php phpinfo()‎; ?&gt;"</strong></code> احفظ الملف واخرجْ.
</p>

<p>
	افتح متصفح الويب وانتقل إلى المضيف المحلي <strong><code>"localhost"</code></strong>. إذا تمَّ تثبيت PHP بنجاح، فسترى هذه الصورة:
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="29642" data-unique="taqszoev4" src="https://academy.hsoub.com/uploads/monthly_2019_05/03php_test.png.8f771648855805217fe6d5cd72f09249.png" alt="03php_test.png"></p>

<h2 id="-mysql">
	تثبيت وضبط MySQL
</h2>

<p>
	هذا هو الجزء الأسهل، لضبط كلِّ شيء في معالج التثبيت. قمْ بتشغيل ملف التثبيت MySQL. انقر فوق التالي، واختر مخصص، ثمَّ انقر فوق التالي، وقم بتغيير مجلد التثبيت إلى <code><strong>"C:\dev\progs\MySQL\‎"</strong></code> ثمَّ انقر فوق "التالي" مرةً أخرى، ثمَّ قُمْ بالتثبيت.
</p>

<p>
	بعد اكتمال التثبيت، سترى نافذةً أخرى، لذلك انقر مرة أخرى، التالي، التالي، تحقق من وضع إشارة على <strong>"Configure the MySQL server now"</strong> وألغِ تحديد <strong>"Register the MySQL server now"</strong>، ثم انقرْ فوق "إنهاء".
</p>

<p>
	في الشاشة التالية، انقر فوق "التالي"، ثم حدد الضبط التفصيلي <strong>"Detailed Configuration"</strong> ثمَّ انقر فوق "التالي"، وحدد <strong>"Developer Machine"</strong> وانقر فوق "التالي"، <strong>"Multifunctional Database"</strong> وانقر فوق "التالي"، واترك النافذة الأخرى كما هي وانقر فوق "التالي"، وحدد الخيار <code><strong>"Decision Support (DSS)/OLAP"</strong></code> وانقر فوق" التالي".
</p>

<p>
	تحقق الآن من <strong>"Enable TCP/IP Networking"</strong>، واتركْ رقم المنفذ<code> <strong>3306</strong></code>، وحدد <strong>"Add firewall exception for this port"</strong>، وحدد <strong>"Enable Strict Mode"</strong>، ثم انقر فوق التالي.
</p>

<p>
	حدد <strong>"Best Choice For Multilingualism"</strong> وانقر فوق "التالي". حدِّدْ <strong> "Install As Windows Service"</strong>، وحدد اسم الخدمة <strong>"MySQL5"</strong>، حدد <strong> "Launch the MySQL Server automatically"</strong> وتحقَّقْ من وضع علامة على <code><strong>"Include Bin Directory in Windows PATH"</strong></code> ثم انقر فوق "التالي".
</p>

<p>
	حدد <strong> "Modify Security Settings"</strong> وباعتبارها <strong>"New root password"</strong>، استخدم <code><strong>"root"</strong></code> بدون علامات الاقتباس، وأكِّدْ كلمة المرور، واترك باقي الخيارات كما هي ثم انقر فوق "التالي". الخطوة الأخيرة هي تطبيق جميع الإعدادات التي قمنا بها، لذلك انقر على "تنفيذ" وانتظر حتى ترى هذا:
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="29643" data-unique="1ty8qz358" src="https://academy.hsoub.com/uploads/monthly_2019_05/04mysql.png.e38d11ca85aecdb58a0b4497065a0940.png" alt="04mysql.png"></p>

<p>
	إذا كنت لا ترى هذه الصورة، فهناك شيء خاطئ. ويجب أن يكون أشياء كثيرة. سأحاول المساعدة في التعليقات. ولكن أتوقع أنه لن يكون هناك أية مشاكل.
</p>

<h2 id="-phpmyadmin-">
	تثبيت phpMyAdmin وضبطه
</h2>

<p>
	phpMyAdmin هو مدير قاعدة بيانات MySQL على شبكة الإنترنت. بالنسبة لي شخصيا، إنه الحلُّ الأفضل والأسهل لإدارة وإنشاء قواعد البيانات حتى لو كان يعمل على المضيف المحلي localhost.
</p>

<p>
	هناك حلٌّ من مطوِّري MySQL يُسمِّى MySQL GUI Tools، يعمل على أنظمة تشغيل Windows، لكنَّه لا يوفِّرُ الاستطلاع الأسهل وهو فوضوي بعض الشيء بالنسبة لي. يعرفُ العديد من المستخدمين الذين يستخدمون خدمات استضافة الويب لصفحات الويب، phpMyAdmin جيّدًا.
</p>

<p>
	أثبت غالبًا WordPress و Drupal و Joomla و vBulletin معًا لاختبار السمات وما إلى ذلك، وأستخدم قاعدة بيانات واحدة لكل نظام إدارة محتوى CMS، ولهذا السبب أستخدم phpMyAdmin، والذي يسمح لي بإنشاء قواعد بيانات بطريقة سهلة دون معرفة العمل على سطر أوامر MySQL.
</p>

<p>
	سنبدأ بإنشاء مجلد يسمى "pma" في <code><strong>"C:\dev\www\‎"</strong></code>. افتح الآن ملف zip باستخدام phpMyAdmin واستخلص كل محتوى المجلد <code><strong>"phpMyAdmin-3.3.2-all-languages"</strong></code> إلى مجلد <strong><code>"pma"</code></strong>.
</p>

<p>
	افتح الآن متصفح الويب المفضَّل لديك وأشرْ إلى المسار <code><strong>"localhost/pma"</strong></code>. إذا كنت محظوظًا، يجب أن تشاهد شاشة تسجيل دخول phpMyAdmin. يمكنك تسجيل الدخول إلى phpMyAdmin عن طريق إدخال <strong>"root"</strong> لاسم المستخدم وكلمة المرور على السواء.
</p>

<p>
	على نظامي التشغيل Vista و Windows 7، وربما على أنظمة تشغيل XP أيضًا، ستظهر لك في بعض الأحيان بعض الأخطاء تشير بأنَّ PHP غير مثبَّت أو مُجهَّز بشكلٍ صحيح. هذا أحد الأخطاء غير المتوقعة التي كنت أبحث عنها في كثير من الأحيان لعدة ساعات، قبل أن أحلّها!
</p>

<p>
	قد يكون الحل بسيطًا - أولاً ، انتقل إلى المجلد <code><strong>"C:\dev\progs\PHP\‎"</strong></code> وابحث عن ملف يسمى <strong>"php5ts.dll"</strong> وانسخه إلى المجلدين التاليين: <code><strong>"C:\Windows\‎"</strong></code> و <code><strong>"C:\Windows\System32\‎"</strong></code> وأعدْ تشغيل Apache. ربَّما سيرفض Apache البدء وسيظهر أخطاء، إذا كان الأمر كذلك، تجاهل الخطأ وابدأ من جديد. يجب أن تعمل الآن! <img alt=":)" data-emoticon="true" height="20" src="https://academy.hsoub.com/uploads/monthly_2015_02/smile.png.cf72ab87c1aaefd42371e0a7de39cfae.png" srcset="https://academy.hsoub.com/uploads/emoticons/smile@2x.png 2x" title=":)" width="20"></p>

<p>
	يجب أن تشاهد صفحة تسجيل دخول phpMyAdmin عن طريق توجيه المتصفح إلى <code><strong>"localhost/pma"</strong></code>. إذا لم يساعد الحل الأول، فستكون المشكلة متعلقة بأذونات الكتابة لمجلد Windows وجلسة PHP، التي تقوم بحفظ المسار  إلى مجلدات Temp.
</p>

<p>
	ليس لدى PHP إذن الكتابة إلى مجلدات Temp المطلوبة. هذه المشكلة فردية حقًا، وإذا قام شخص ما بالإبلاغ عنها في التعليقات، فسوف أساعده بشكل منفرد.
</p>

<p>
	قُمْ بتسجيل الدخول إلى phpMyAdmin وستحصل على واجهة إدارة قاعدة بيانات phpMyAdmin. في اللوحة اليسرى، سترى قواعد البيانات الفعلية، والتي تُعَدُّ مهمة لتشغيل MySQL بشكل صحيح، لذلك لا تحذفها.
</p>

<p>
	على الجانب الأيمن سترى بعض المعلومات حول خادم الويب الخاص بك، يمكنك تغيير السمة أو اللغة أو إنشاء قاعدة بيانات جديدة. في الجزء السفلي سترى بعض الأخطاء، والتي سنصلحها. للاستخدام الأساسي ليس ضروريًا، لكن لا يمكنني تحمّل أي شيء يُظْهِرُ أخطاءً :-)
</p>

<p>
	أولاً، يجب علينا إنشاء بعض الجداول لإلغاء تأمين الإمكانات الكاملة لـ phpMyAdmin، لذلك في اللوحة اليسرى، انقر فوق قاعدة البيانات المسماة اختبار <strong>"test"</strong>، ثم انقرْ فوق استيراد <strong>"import"</strong>.
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="29644" data-unique="xsjwop50b" src="https://academy.hsoub.com/uploads/monthly_2019_05/05phpmyadmin.png.53f972ad7f87a07b3b0c0809196997ab.png" alt="05phpmyadmin.png"></p>

<p>
	انقر فوق الزر Browse وانتقل من خلال phpMyAdmin إلى المجلد <code><strong>"C:\dev\www\pma\scripts\‎"</strong></code> واختر ملفًا يسمَّى <code><strong>"create_tables.sql"</strong></code> وفي phpMyAdmin في الركن السفلي الأيمن انقر على <strong>"Go"</strong>. سيقوم بإنشاء قاعدة بيانات جديدة تسمى phpmyadmin مع 9 جداول.
</p>

<p>
	سيتمُّ استخدامه لميزات phpMyAdmin المتقدِّمَة، مثل إنشاء ملفات PDF وما إلى ذلك. يمكنك إغلاق المتصفح و التطلّع إلى الجزء الأخير - تحرير ملف ضبط phpMyAdmin :-). انتقل إلى المجلد <strong>"C:\dev\www\pma\‎"</strong> وافتح الملف <strong>"config.sample.inc.php"</strong> في Notepad أو Dreamweaver أو PSPad.
</p>

<ol>
<li>
		نحتاج إلى تعديل السطر <strong>18</strong> الذي يحدد عبارة المرور السرية لـ blowfish. الأمر متروك لك تمامًا فيما تقوم بإدخاله بين علامات الاقتباس حتى تتمكن من البحث عن مثال كهذا:<br><strong>"‎$cfg['blowfish_secret'] = '1M41Oie6q9E3w#7U0M^3f3Tyzr5r93 ';‎"</strong>
	</li>
	<li>
		انتقل إلى السطر <strong>36</strong> واستبدل <strong>"‎$cfg['Servers'][$i]['extension'] = 'mysql';‎"</strong> بـ <strong>"‎$cfg['Servers'][$i]['extension'] = 'mysqli';‎"</strong>
	</li>
	<li>
		نحتاج الآن إلى حذف <code>"//"</code> في بداية الأسطر التالية:
	</li>
</ol>
<pre class="ipsCode">
(also change default pma user to root)
$cfg[<span class="hljs-string">'Servers'</span>][<span class="hljs-symbol">$i</span>][<span class="hljs-string">'controlpass'</span>] = 'root';<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">strong</span>&gt;</span></span> (also change default pmapass password to root)<span class="xml"><span class="hljs-tag">&lt;/<span class="hljs-name">strong</span>&gt;</span></span>
$cfg[<span class="hljs-string">'Servers'</span>][<span class="hljs-symbol">$i</span>][<span class="hljs-string">'pmadb'</span>] = 'phpmyadmin';
$cfg[<span class="hljs-string">'Servers'</span>][<span class="hljs-symbol">$i</span>][<span class="hljs-string">'bookmarktable'</span>] = 'pma_bookmark';
$cfg[<span class="hljs-string">'Servers'</span>][<span class="hljs-symbol">$i</span>][<span class="hljs-string">'relation'</span>] = 'pma_relation';
$cfg[<span class="hljs-string">'Servers'</span>][<span class="hljs-symbol">$i</span>][<span class="hljs-string">'table_info'</span>] = 'pma<span class="hljs-emphasis">_table_</span>info';
$cfg[<span class="hljs-string">'Servers'</span>][<span class="hljs-symbol">$i</span>][<span class="hljs-string">'table_coords'</span>] = 'pma<span class="hljs-emphasis">_table_</span>coords';
$cfg[<span class="hljs-string">'Servers'</span>][<span class="hljs-symbol">$i</span>][<span class="hljs-string">'pdf_pages'</span>] = 'pma<span class="hljs-emphasis">_pdf_</span>pages';
$cfg[<span class="hljs-string">'Servers'</span>][<span class="hljs-symbol">$i</span>][<span class="hljs-string">'column_info'</span>] = 'pma<span class="hljs-emphasis">_column_</span>info';
$cfg[<span class="hljs-string">'Servers'</span>][<span class="hljs-symbol">$i</span>][<span class="hljs-string">'history'</span>] = 'pma_history';
$cfg[<span class="hljs-string">'Servers'</span>][<span class="hljs-symbol">$i</span>][<span class="hljs-string">'tracking'</span>] = 'pma_tracking';
$cfg[<span class="hljs-string">'Servers'</span>][<span class="hljs-symbol">$i</span>][<span class="hljs-string">'designer_coords'</span>] = 'pma<span class="hljs-emphasis">_designer_</span>coords';
</pre>

<p>
	احفظ الملف في نفس المجلد كـ <code><strong>"config.inc.php"</strong></code> ثم اخرج من المُحرِّر. يجب أن يعمل phpMyAdmin الآن دون أية أخطاء، وقد انتهينا من التثبيت الكامل لخادم الويب المضيف المحلي. يمكنك الآن استعادة إعدادات UAC كما كنا تحدثنا عنها في البداية.
</p>

<h2 id="-">
	اختياري - تثبيت أحد أنظمة إدارة المحتوى (ووردبريس)
</h2>

<p>
	يجب أولًا إنشاء قاعدة بيانات جديدة لبرنامج WordPress، لذلك قمْ بتسجيل الدخول إلى phpMyAdmin وتحت النص إنشاء قاعدة بيانات جديدة <code><strong>"Create New Database"</strong></code>، اكتب اسم <code><strong>"WordPress"</strong></code> وانقر فوق "إنشاء".
</p>

<p>
	انتقل الآن إلى المجلد <code><strong>"C:\dev\www\‎"</strong></code> وقم بإنشاء مجلد جديد يسمى <strong><code>"wp"</code>.</strong> إذا قُمْتَ بتنزيل ملف التثبيت WordPress 2.9.2، فافتح الملف المضغوط واستخرج كل محتويات مجلد WordPress إلى <code>"C:\dev\www\wp\‎"</code> افتح المتصفح وانتقل إلى <strong><code>"localhost/wp"</code></strong>، إذا كان كل شيء جيدًا ، يجب أن تشاهد أولاً صفحة تثبيت WordPress، لذلك انقر على "إنشاء ملف ضبط" (<strong>Create a Configuration File</strong>) ثم على " هيا نذهب!" (<strong>Lets go!‎</strong>)<strong> </strong>في الصفحة التالية.
</p>

<p>
	في الصفحة التالية، قم بملء اسم قاعدة البيانات، وهو <strong>"WordPress"</strong> واسم المستخدم وكلمة المرور <strong>"root"</strong> لكليهما. هذه هي كلمة المرور الخاصة بـ WordPress لكتابة الجداول في قاعدة البيانات وليس للوصول إلى لوحة إدارة نظام إدارة المحتوى CMS.
</p>

<p>
	يمكن أن تظل جميع القيم الأخرى كما هي، انقر فوق "إرسال" <code>(<strong>submit</strong>)</code> ثم "تشغيل التثبيت" (<strong>Run the Install</strong>). املأ عنوان المدونة، كما يحلو لك. وفي حقل البريد الإلكتروني، أدخل أي عنوان بريد إلكتروني حقيقي. لن يعمل إرسال رسائل البريد الإلكتروني لأن Apache الخاص بنا غير مكوّن لإرسال رسائل البريد الإلكتروني، ولكن من يهتم؟
</p>

<p>
	نحن لسنا في حاجة إليها على مضيف محلي! ;-) ثم تابع التثبيت. في الشاشة التالية، سترى معلومات تسجيل الدخول وكلمة المرور الخاصة بك، اكتبها في مكان ما، وانقر على "تسجيل الدخول" <strong>"Log In"</strong> للوصول إلى واجهة مسؤول WordPress. هنا يمكنك تغيير كلمة المرور إلى شيء أسهل يمكن تذكره.
</p>

<p>
	انتهيت. إذا وجهت متصفحك الآن إلى <code>"<strong>localhost/wp</strong>"</code> فسترى شيئًا كهذا:
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="29645" data-unique="dtt9nof16" src="https://academy.hsoub.com/uploads/monthly_2019_05/06wordpress.png.8c8a8ae295d90bf07522c60093d05c1d.png" alt="06wordpress.png"></p>

<p>
	تعرَّفتَ على أساسيات تثبيت أي نظام إدارة محتوى. تثبيتات دروبال أو جملة متشابهة جدا.
</p>

<h2 id="-">
	الخلاصة
</h2>

<p>
	قلت لك إنه ليس معقدًا ;-) إذا كنت مثلي، فأنت تحب القهوة الجيدة في المقهى المفضل لديك (والذي للأسف ليس متصلًا بالإنترنت). وإذا كنت ترغب في العمل بصحبة أشخاص وليس وحدك في المنزل أو في مكتب، فمن المحتمل أنَّكَ ستقدِّر هذا الدليل التعليمي.
</p>

<p>
	غالبًا ما يستخدم معظمكم حلولًا مثل WAMP أو XAMPP، والبعض الآخر يستخدم الحل الخاص بي بطريقة أكثر تقدّمًا، والتي توفرها تكوينات Apache، لكنني أعرف الكثير من مصممي الويب ومطوري الويب الذين لا يعرفون هذه الحلول وهذا الدليل التعليمي موجه لهم بالضبط.
</p>

<p>
	إذا كنت تواجه أي مشكلة، فأعلمني وسأبذل قصارى جهدي لمساعدتك.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://1stwebdesigner.com/local-web-server/" rel="external nofollow">Step by Step Guide to Setting Up Your Local Web Server</a> لصاحبها "فريق تحرير الموقع"
</p>
]]></description><guid isPermaLink="false">422</guid><pubDate>Wed, 05 Jun 2019 13:02:01 +0000</pubDate></item><item><title>[&#x641;&#x64A;&#x62F;&#x64A;&#x648;] &#x62A;&#x62B;&#x628;&#x64A;&#x62A; &#x648;&#x636;&#x628;&#x637; &#x62E;&#x627;&#x62F;&#x645; Monit</title><link>https://academy.hsoub.com/devops/servers/%D9%81%D9%8A%D8%AF%D9%8A%D9%88-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D8%B6%D8%A8%D8%B7-%D8%AE%D8%A7%D8%AF%D9%85-monit-r411/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_04/monit.png.d16bc1fff2d3f5d89390896ebb6272d2.png" /></p>

<p>
	<iframe allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" frameborder="0" height="400" src="https://www.youtube.com/embed/9Xh-PFNpNFE" width="560"></iframe>
</p>

<p>
	نشرح طريقة تثبيت Monit على نظام أوبنتو.
</p>

<p>
	وسنشرح كمثال كيفية إعداد Monit لمراقبة وإعادة تشغيل Nginx في حال توقفه.
</p>

<p>
	قسم <a href="https://academy.hsoub.com/devops" rel="">DevOps</a> في أكاديمية حسوب غني بالمقالات المفيدة للتعامل مع الخوادم.
</p>
]]></description><guid isPermaLink="false">411</guid><pubDate>Sat, 27 Apr 2019 15:19:00 +0000</pubDate></item></channel></rss>
