<?xml version="1.0"?>
<rss version="2.0"><channel><title>DevOps: &#x627;&#x644;&#x648;&#x64A;&#x628; HTTP</title><link>https://academy.hsoub.com/devops/servers/web/?d=4</link><description>DevOps: &#x627;&#x644;&#x648;&#x64A;&#x628; HTTP</description><language>ar</language><item><title>&#x627;&#x644;&#x627;&#x62E;&#x62A;&#x644;&#x627;&#x641;&#x627;&#x62A; &#x627;&#x644;&#x623;&#x633;&#x627;&#x633;&#x64A;&#x629; &#x641;&#x64A; &#x623;&#x646;&#x648;&#x627;&#x639; &#x627;&#x633;&#x62A;&#x636;&#x627;&#x641;&#x629; &#x645;&#x648;&#x627;&#x642;&#x639; &#x627;&#x644;&#x648;&#x64A;&#x628; &#x648;&#x627;&#x62E;&#x62A;&#x64A;&#x627;&#x631; &#x627;&#x644;&#x637;&#x631;&#x64A;&#x642; &#x627;&#x644;&#x633;&#x639;&#x64A;&#x62F;</title><link>https://academy.hsoub.com/devops/servers/web/%D8%A7%D9%84%D8%A7%D8%AE%D8%AA%D9%84%D8%A7%D9%81%D8%A7%D8%AA-%D8%A7%D9%84%D8%A3%D8%B3%D8%A7%D8%B3%D9%8A%D8%A9-%D9%81%D9%8A-%D8%A3%D9%86%D9%88%D8%A7%D8%B9-%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-%D9%88%D8%A7%D8%AE%D8%AA%D9%8A%D8%A7%D8%B1-%D8%A7%D9%84%D8%B7%D8%B1%D9%8A%D9%82-%D8%A7%D9%84%D8%B3%D8%B9%D9%8A%D8%AF-r534/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2021_09/61331b148aef6_------(---).png.f822c5b87e9306aed295aed21bceece2.png" /></p>

<p>
	قرأ أحد زوّار موقع <a href="www.css-tricks.com" rel="">CSS Tricks</a> مقالًا يشرح للمبتدئين كيفية رفع المواقع على الإنترنت، فطَرَح بعض الأسئلة، خاصةً فيما يتعلّق بالشركات التي تُوفّر خدمات الاستضافة، حيث كانت أسئلته على النحو التالي:
</p>

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

	<p>
		ما الفرق بين الشركات التي تُوفّر خدمات الاستضافة لمواقع الويب؟ وما الفرق بين الشركات التي تَتّسِم بالتقليدية في بعض الأحيان مثل GoDaddy وHostgator، وبين الشركات الأخرى مثل Heroku وDigital Ocean وAWS وFirebase؟ وكيف أختار الاستضافة المناسبة لموقعي؟
	</p>
</blockquote>

<p>
	وكانت إجاباته على النحو التالي.
</p>

<h2>
	اختيار الباقة المناسبة
</h2>

<p>
	لقد ذكرت <a href="https://www.godaddy.com/hosting" rel="external nofollow">غودادي GoDaddy</a> أولاً، ولذلك سنبدأ بالحديث عنه؛
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="76129" href="https://academy.hsoub.com/uploads/monthly_2021_09/godaddy.png.f2147505180a569a1e86d310e78fc10a.png" rel=""><img alt="godaddy.png" class="ipsImage ipsImage_thumbnailed" data-fileid="76129" data-unique="zwmjn9ks8" src="https://academy.hsoub.com/uploads/monthly_2021_09/godaddy.thumb.png.5b6f66e03e5806d861523e904f65b52c.png"></a>
</p>

<p>
	سنحاول تقديم معلوماتٍ مفيدةٍ بعد قليلٍ، وسنبدأ بالسؤال الآتي، لماذا نلاحظ أنّ استضافة ووردبريس WordPress أغلى من الاستضافة العادية والتي قد تَبلُغ دولارًا واحدًا في بعض الأحيان؟ وهل تستطيع تثبيت ووردبريس WordPress لو اشتريتَ استضافة ويبٍ بقيمة 5.99 دولارٍ أمريكيٍ؟ أم أن الأنسب اختيار استضافة ووردبريس WordPress مُهيّأةٍ ومُعدّةٍ مُسبقًا؟ وإذا كان ووكوميرس WooCommerce إضافةً plugin تعمل على ووردبريس WordPress، فهل ستستطيع تثبيتها في حال لم تكن الحزمة التي اخترتها خاصةً باستضافة التجارة الالكترونيّة؟ ولماذا لا تستطيع استخدام ووكوميرس WooCommerce في ووردبريس WordPress إلا للحزمة الأغلى ثمنًا؟ ولماذا تُعَد باقة استضافة الخادم الافتراضي الخاص VPS هي الأرخص ثمنًا رغم أنها إحدى خدمات الاستضافة التي تُقدّمها غودادي Godaddy؟ لا داعي للقلق، فهذا محير فعلًا.
</p>

<p>
	عمومًا، تربح شركة غودادي GoDaddy مليارات الدولارات سنويًا، ولذا فمن المؤكّد أنهم يفهمون كلّ هذا، ولكنّني شخصيًّا -الكاتب المقال بنسخته الأصلية- أعتمد على التخمين في اختيار باقة الاستضافة المناسبة، ولذلك من الممكن أن تكون هذه الحيرة مقصودةٌ كونها أحد أساليب البيع.
</p>

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

<p>
	ما ندركه هو أن الباقات التي تحتوي على جميع أنظمة إدارة المحتوى الكبيرة مثل باقة لامب LAMP مخصّصةٌ للمواقع التي تعمل بلغة PHP ومواقع MySQL مثل ووردبريس WordPress وكرافت Craft وبيرش Perch وغوست Ghost ودروبال Drupal وجوملا Joomla، وما إلى ذلك، وكذلك هو الحال فيما يتعلّق بالاستضافات مثل ميديا تيمبل Media Temple وهوسغيتور Hostgator وبلوهوست Bluehost وغيرها، ولذلك يُعتَقد أن توصيف شركات الاستضافة هذه بالتقليديّة، صفةٌ مناسبة.
</p>

<p>
	هل تريد تشغيل نظام إدارة البيانات PostgreSQL أو MariaDB بدلاً من MySQL؟ أو تريد العمل مع ASP بدلاً من لغة البرمجة PHP؟ يُزعم أنّ (أغلب) شركات الاستضافة ستجيبك بشيء من هذا القبيل عن كلّ هذه المتطلبّات، إذ ستَقترح عليك استخدام الخادم الافتراضي الخاص VPS والذي يتمتع بوصولٍ مباشرٍ إلى الجذر root، بحيث يمكنك تثبيته بنفسك بدلًا من استخدام الاستضافة المشتركة، وفي الحقيقة، لا يُعتَقَد أن هذا جيدًا بما يكفي، ومن المهم أن تنتبه إلى أنها ليست أفضل الخيارات لأنه من الصعب الحصول على دعمٍ فنيٍ جيدٍ في حال واجهتك مشكلةٌ ما.
</p>

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

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="76130" href="https://academy.hsoub.com/uploads/monthly_2021_09/heroku.png.eeeb61ec4a38a6d6736a4f7f5a4fd1ed.png" rel=""><img alt="heroku.png" class="ipsImage ipsImage_thumbnailed" data-fileid="76130" data-unique="2h5t06nch" src="https://academy.hsoub.com/uploads/monthly_2021_09/heroku.thumb.png.f3d5a2697dad00f6c3800acd78ab1276.png"></a>
</p>

<p>
	لا يمكننا ترجيح هيروكو Heroku لأنني لم أستخدمها من قبل، ولكننا نسمع الكثير من الآراء الإيجابية مِمّن يستخدمونها منذ 15 عامًا.
</p>

<p>
	تُذكّرنا هيروكو بوجود فجوةٍ أخرى مهمّةٍ بين شركات الاستضافة، وهي أنّ شركات استضافة الويب التقليديّة لا تساعدك في نَشْر موقعك، وإنما تعطيك بيانات اعتماد بروتوكول نَقْل الملفات FTP فحسب، ثُم تقول لك حظًّا سعيدً؛ أما بالنسبة لشركات الاستضافةٍ مثل هيروكو Heroku، فهي تقدّم لك واجهة سطر الأوامر مع أوامرٍ مساعدةٍ مثل <code>heroku container:push</code>، والتي تمكّنك من نشر الكود المحلي الخاص بك في الموقع مباشرةً، بل وتقدّم لك ما هو أفضل من ذلك، إذ تساعدك هيروكو Heroku على نشر الموقع مباشرةً من مستودع غيت هاب GitHub، فلماذا لا تَفعَل شركات الاستضافة كلّها هذا؟ يا له من لغزٍ بالنسبة لي، وذلك لأنّ المُضيف الذي يساعدك في النّشْر هو مضيفٌ لا يُقدّر بثمنٍ.
</p>

<p>
	حتى كُنا نتحدث عن الطرق السعيدة، وتُطلِق هيروكو على نفسها اسم منصة التطبيقات السحابية، أي أنّ الطريق السعيد في هيروكو هي لغات المُخدّم مثل نود Node وروبي Ruby وبايثون Python وجو Go، ولكن ماذا لو لم تكن بحاجةٍ لأي من ذلك؟ فلنفترض أنك ستُنشِئ موقعًا ثابتًا باستخدام أداةٍ خاصّةٍ بإنشاء المواقع الثابتة مثل إيليفينتي Eleventy، أي مواقع جامستاك Jamstack، فهل يُفضّل اختيار هيروكو Heroku عندها؟ طبعًا لا، فهيروكو هنا ليست الحل الأمثل، فعلى الرغم من عمل الموقع عليها بصورةٍ جيدةٍ، إلا أن استضافة المواقع الثابتة ليست جَوهَر هيروكو، وبالتالي فهي ليست طريقًا سعيدًا.
</p>

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

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="76131" href="https://academy.hsoub.com/uploads/monthly_2021_09/netlify.png.cee66f6e476884f917f0fc9113a56b71.png" rel=""><img alt="netlify.png" class="ipsImage ipsImage_thumbnailed" data-fileid="76131" data-unique="yhv4hnbs2" src="https://academy.hsoub.com/uploads/monthly_2021_09/netlify.thumb.png.9e00b54fa807ad55bb9ec14e3dfd2906.png"></a>
</p>

<p>
	وقد أجادت نيتليفاي Netlify باستضافة جامستاك Jamstack لدرجة أن الكثير من الشركات حاولت تقديم عروضًا مماثلةً، مثل <a href="https://azure.microsoft.com/en-us/pricing/details/app-service/static" rel="external nofollow">آزور Azure لتطبيقات الويب الثابتة</a>. فلماذا إذًا تستخدم آزور وليس نيتليفاي Netlify؟ ربما يبدو طريقًا سعيدًا وربما كنت تستخدم منتجات Azure الأخرى واعتقدتَ لهذا السبب أن جميع منتجاتها جيّدةً، ففي الواقع، آزور هي منصّةٌ سحابيةٌ ضخمةٌ تُوفّر الكثير من العروض والخدمات الأخرى، وقد تكون معجبًا بمنتجات مايكروسوفت مثل كثيرٍ من المطورين وسنتحدث عن هذا لاحقًا.
</p>

<p>
	أما جامستاك Jamstack، فهي للاستضافة الثابتة بالإضافة إلى الخدمات الأخرى، وتُتاح في الكثير من الأماكن الآن. تحتوي <a href="https://www.cloudflare.com/" rel="external nofollow">كلاودفلير Cloudflare </a> على <a href="https://pages.cloudflare.com" rel="external nofollow">كلاودفلير بيجز Cloudflare Pages</a>، وهي خدمةٌ يمكنك الاستفادة منها عن طريق استخدام العروض غير المحدودة مثل استضافة عددٍ غير محدودٍ من المواقع غير المحدودة، والطلبات غير المحدودة، والسّعات غير المحدودة، وخدمة عددٍ غير محدودٍ من أفراد الفِرق البرمجيّة.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="76133" href="https://academy.hsoub.com/uploads/monthly_2021_09/cloudflare.png.561476f67bcec75e29628c372bc62afb.png" rel=""><img alt="cloudflare.png" class="ipsImage ipsImage_thumbnailed" data-fileid="76133" data-unique="scbz78km5" src="https://academy.hsoub.com/uploads/monthly_2021_09/cloudflare.thumb.png.420e45faf8f691c11ac24c256b28896d.png" style=""></a>
</p>

<p>
	قد تختار كلاودفلير بيجز Cloudflare Pages لأن منتجات كلاودفير مثل العمّال أو الوصول السهل هي أمورٌ مهمةٌ بالنسبة لك، ولذلك قد تشعر بأنها الطريق السعيد المناسب لك.
</p>

<p>
	كما تمتلك فيرسيل Vercel استضافة جامستاك Jamstack كذلك، وستقدّم لك مُخدّماتٍ إذا كنت تحتاجها، حيث إن إطار عملها نيكست جافاسكربت Next.js وصفحاتها مُجّهزةٌ مُسبقًا، كما أنها تُقدّم صفحاتٍ من جانب المُخدمّ بلغة البرمجة نود Node، فتعطيك فيرسيل Vercel لغة الواجهة الخلفيّة back end كذلك.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="76132" href="https://academy.hsoub.com/uploads/monthly_2021_09/nextjs.png.1e03b5f98d77e20a55601d73eaeb5e91.png" rel=""><img alt="nextjs.png" class="ipsImage ipsImage_thumbnailed" data-fileid="76132" data-unique="4ld22h8nl" src="https://academy.hsoub.com/uploads/monthly_2021_09/nextjs.thumb.png.b0b998496dfded46ce22c7dfc8c8a521.png"></a>
</p>

<p>
	أي أن إطار العمل نيكست جافا سكربت Next.js هو الطريق السعيد بالنسبة لاستضافة فيرسيل Vercel، فهو يدعم النّشْر على النظام الأساسي المُصمّم للإطار Next.js، ومن الصعب التَغلّب على ذلك.
</p>

<p>
	تمتلك استضافة AWS Amplify كذلك استضافة جامستاك Jamstack، والطريق السعيد هنا هو استخدام أمبليفاي Amplify لتجميع خدماتٍ مثل AWS خدمات ويب أمازون، فهذا هو الهدف من AWS Amplify.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="76125" href="https://academy.hsoub.com/uploads/monthly_2021_09/aws.png.6fddb1f76f2a7c270b018ab307d4267c.png" rel=""><img alt="aws.png" class="ipsImage ipsImage_thumbnailed" data-fileid="76125" data-unique="nbypuqpo2" src="https://academy.hsoub.com/uploads/monthly_2021_09/aws.thumb.png.be4807169abe5e9a2399a625d7f60c27.png"></a>
</p>

<ul>
<li>
		هل تحتاج إلى مصادقةٍ؟ أمازون كوغنيتو Amazon Cognito هي من تنجز العمل من وراء الكواليس، بينما يساعد Amplify على ربط المصادقة بعملك الحاليّ.
	</li>
	<li>
		هل تحتاج إلى تخزينٍ؟ تُعدّ S3 معيارًا صناعيًّا وسيساعدك Amplify على دمجِه.
	</li>
	<li>
		هل تحتاج إلى قاعدة بياناتٍ؟ سيساعدك Amplify على تصميم قاعدة البيانات وبناء واجهات برمجة التطبيقات <abbr title="Application Programming Interface | واجهة برمجية">API</abbr>.
	</li>
</ul>
<p>
	وتمتلك منصة فايربيس Firebase <a href="https://firebase.google.com/docs/hosting" rel="external nofollow">استضافة</a> على غرار Jamstack، والطريق السعيد هنا هو في الغالب إطار العمل Firebase.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="76126" href="https://academy.hsoub.com/uploads/monthly_2021_09/cloudFileStore.png.5ed411ed17898de4ff545f68228cd865.png" rel=""><img alt="cloudFileStore.png" class="ipsImage ipsImage_thumbnailed" data-fileid="76126" data-unique="z45chu089" src="https://academy.hsoub.com/uploads/monthly_2021_09/cloudFileStore.thumb.png.b4baf0d3e16b45f8395fd8fa2af63db0.png"></a>
</p>

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

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

<h2>
	يجب أن يعتني مضيفك باحتياجاتك الأساسية
</h2>

<p>
	هل تتذكر عندما قلنا من قبل أن المُضيف الذي يساعدك في النشر مُضيفٌ قيّمٌ جدًا؟ إليك الأخبار الجيّدة، سيساعدك بالنشر كلٌ من نيتليفاي Netlify وفيرسيل Verce و AWS Amplify وغوغل فايربيس Google Firebase وكلاودفير بيجز Cloudflare Pages وآزور Azure للصفحات الثابتة، فلقد أصبحت هذه أقلّ ما يمكن أن يقدّمه المُضيفون، كما توجد هناك المزيد من الخدمات الأخرى.
</p>

<p>
	وفيما يلي الخدمات الأساسيّة لكل المُضيفات الحديثة بالإضافة إلى استضافة المواقع بالطبع.
</p>

<ol>
<li>
		HTTPS: إذ يجب على المُضيف منح موقعي شهادة <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr> تلقائيًا أو حتى مجانًا، وذلك نظرًا لأن خدمة Let’s Encrypt مجانيّة، فهي تُوفّر شهادات أمانٍ مجّانًا.
	</li>
	<li>
		CDN: وهي شبكة توصيل المحتوى، حيث يجب أن يساعد المُضيف في تخديم موقعي بالإضافة إلى خدمات توصيل المحتوى، حتى لو كانت ميزةً مدفوعةً أو تتطلب التهيئة المُسبقة.
	</li>
	<li>
		Deployment: وهو النشر، حيث يجب على المُضيف الاتصال بمستودعات غيت Git، ونقل الملفات من المستودع الرئيسي إلى الموقع المباشر.
	</li>
	<li>
		Staging: فعلى المُضيف توفير بيئاتٍ لتهيئة الملفات للنقل من مرحلة التطوير إلى مرحلة الإنتاج.
	</li>
</ol>
<p>
	وبالعودة إلى ووردبريس WordPress وغيره من أنظمة إدارة المحتوى العاملة بلغات PHP وMySQL، فغالبًا ما تُوفّر المُضيفات التقليديّة استضافة هذه المواقع، حيث يُمثّل ووردبريس 35.2٪ من مواقع الويب، وهذا رقمٌ كبيرٌ جدًا، مما يعني أنه هناك الكثير من الأموال الناتجة عن استضافة ووردبريس WordPress، لكن من واقع الخبرة لكريس كوير Chris Coyier يمكن القول بأن المُضيفين التقليديين لا يُقدّمون أيًّا من الخدمات التي ذُكِرت أعلاه رغم أنّها الخدمات الأساسيّة لكل المُضيفات الحديثة، ففي كثيرٍ من الأحيان قد تضطر إلى استخدام HTTPS ودمج شبكة توصيل المحتوى ونشر الموقع بنفسك، كما سيتوجّب عليك شراء مخدّمٍ آخرٍ لإجراء عملية staging، ومع وجود فجوةٍ واسعةٍ في مُضيفي الويب الحديثة التي تُقدّم ما لا تقدّمه المُضيفات التقليديّة، أصبح مجال الاستضافة غريبٌ جدًا.
</p>

<p>
	ولكنّ هذا لا ينطبق على كلّ مُضيفات ووردبريس، حيث يُعدّ استخدام مُضيفٍ خاصٍ بووردبريس لاستضافة موقع ووردبريس بمثابة طريقٍ سعيدٍ، لكن يمكن استخدام فلاي وييل FlyWheel مثلًا، إذ يقدّمون الميّزات الأساسيّة بالإضافة إلى أمورٍ أخرى، كما أنّهم يساعدون في <a href="https://localwp.com" rel="external nofollow">التطوير المحليّ</a>.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="76128" href="https://academy.hsoub.com/uploads/monthly_2021_09/flywheel.png.7f21977be6a865f8a5c790a65d1b5e13.png" rel=""><img alt="flywheel.png" class="ipsImage ipsImage_thumbnailed" data-fileid="76128" data-unique="k15ai0bu8" src="https://academy.hsoub.com/uploads/monthly_2021_09/flywheel.thumb.png.a75a8e3497aac2264e5142be5b158b77.png"></a>
</p>

<h2>
	ديجيتال أوشن Digital Ocean
</h2>

<p>
	يقول Chris Coyier:
</p>

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

	<p>
		أشعر أنني غير مؤهلٍ للحديث عن ديجيتال أوشن Digital Ocean، ولكنني أظن أنه يحتوي على الكثير من الطرق السعيدة.
	</p>
</blockquote>

<p>
	لدى هذه المنصّة مفهوم دروبلت Droplet والترجمة الحرفيّة لهذه الكلمة هي قطرات المياه، ولكنّها في هذا السياق تعني مُخدّم، وهي مكوّنةٌ من حاوياتٍ، أو لنَقُل بأنّها مُخدّماتٌ مُعدةٌ مسبقًا وقادرةٌ على تشغيل جميع أنواع التقنيّات، فإن كنت تريد تشغيل لامب LAMP في Droplet، فسيكون طريقًا سعيدًا، ولكن هناك الكثير من التقنيات الأخرى كذلك. ولنأخذ المثال التالي، فإذا كنت تريد استخدام سترابي Strapi وهو نظام إدارة محتوىً يتكون من نود Node وNginx وPostgreSQL، فتستطيع منصة ديجيتال أوشن Digital Ocean تقديم droplet جاهزةٍ لذلك.
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="76127" href="https://academy.hsoub.com/uploads/monthly_2021_09/digitalocean.png.c76a42006d51d78310d0f516ee60563a.png" rel=""><img alt="digitalocean.png" class="ipsImage ipsImage_thumbnailed" data-fileid="76127" data-unique="kmbd0x2g7" src="https://academy.hsoub.com/uploads/monthly_2021_09/digitalocean.thumb.png.f6c16c89da245e1bf5dae2949dba3cb3.png"></a>
</p>

<p>
	تبدأ أسعار droplets من 5 دولاراتٍ شهريًا، لذا فهي اقتصاديةٌ مثل الاستضافات الأخرى تمامًا إذا لم تكن أكثر منهم، وقد تجد منتجات استضافةٍ متنوعةً في ظاهرها، بينما هي ديجيتال أوشن في حقيقتها. فعلى سبيل المثال، تتيح أداة استضافة <a href="https://spinupwp.com" rel="external nofollow">SpinupWP</a> إنشاء بيئات استضافة ووردبريس مهيأةً بسرعةٍ ولكنها لا تتكفّل بالاستضافة نفسها لأنّك قد تجلب مضيفك الخاص، والذي قد يكون ديجيتال أوشن أو خدمات ويب أمازون Amazon Web Services واختصارًا AWS.
</p>

<h2>
	تعقيد الخدمات المقدمة
</h2>

<p>
	وإذا بدا ديجيتال أوشن Digital Ocean معقدًا، فسترى أنّ خدمات ويب أمازون AWS أكثر تعقيدًا، فلقد تحدثنا عن AWS Amplify مسبقًا، فهو يشْبِه AWS المُصمّم للمطورين الأفراد لاستضافة التطبيقات بسرعةٍ، وهو رائعٌ جدًا لكنه جزءٌ صغيرٌ مما يُمثّل AWS.
</p>

<p>
	إذًا AWS هو مزود خدماتٍ سحابيةٍ ضخمٍ يمكنه تشغيل مخدمات ويبٍ، ولكنه يُوفّر المئات من الخدمات الأخرى مثل قواعد قواعد البيانات والتخزين والعمليات عديمة المُخدمّات serveless وواجهات برمجة التطبيقات <abbr title="Application Programming Interface | واجهة برمجية">API</abbr> والسجلات، وكثيرٍ من الأمور الأخرى، حتى أنّه يمكنك <a href="https://aws.amazon.com/braket/?" rel="external nofollow">استئجار حاسوب كميّ</a> تمامًا مثل ما يُعرض في الخيال العلمي، لكن هذا لا يعني أنه لا يمكن للمطور العادي استخدام AWS لاستضافة الويب، إلا أنه غير مُصممٍ لهذا حسب <a href="https://css-tricks.com/what-is-developer-experience-dx/" rel="external nofollow">تجربة المطوّرين</a>.
</p>

<p>
	يمكنك الاطلاع على <a href="https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/hosting-wordpress.html" rel="external nofollow">كيفية تثبيت ووردبريس WordPress على AWS </a>، حيث تُعَد AWS قويةً للغاية ولديها حلولٌ لكل شيءٍ وبأسعارٍ منخفضةٍ جدًا، ومن المفيد النظر إلى AWS على أنها بِنيةٌ أساسيةٌ بسيطةٌ للويب لكنها مصممةٌ للعمليات واسعة النطاق كذلك، فقد يُنشَأ مُضيفي الويب على AWS.
</p>

<h2>
	مطابقة احتياجاتك مع ما هو متاح
</h2>

<p>
	سنستعرض <a href="https://cloudinary.com" rel="external nofollow">بعض النتائج السريعة</a> لنُطابِق الاحتياجات مع الخيارات المتاحة، لكنّه ليس جدولًا شاملًا بل وُضِع فيه ما ما يذكر عادةً، وما يبدو بأنّه طريقٌ سعيد.
</p>
<style type="text/css">
table {
    width: 100%;
}

thead {
    vertical-align: middle;
    text-align: center;
} 

td, th {
    border: 1px solid #dddddd;
    text-align: right;
    padding: 8px;
    text-align: inherit;

}
tr:nth-child(even) {
    background-color: #dddddd;
}</style>
<table>
<thead><tr>
<th>
				 
			</th>
			<th>
				تقليدية
			</th>
			<th>
				اقتصادية
			</th>
		</tr></thead>
<tbody>
<tr>
<td>
				WordPress
			</td>
			<td>
				<a href="https://mediatemple.net/" rel="external nofollow">MediaTemple</a> و<a href="https://www.godaddy.com/hosting" rel="external nofollow">GoDaddy</a>
			</td>
			<td>
				<a href="https://share.getf.ly/k96n2f" rel="external nofollow">Flywheel</a> و<a href="https://wpengine.com/" rel="external nofollow">WP Engine</a>
			</td>
		</tr>
<tr>
<td>
				Other PHP + MySQL (مثل Craft CMS)
			</td>
			<td>
				<a href="https://www.bluehost.com/" rel="external nofollow">Bluehost</a>
			</td>
			<td>
				<a href="https://www.cloudways.com/en/craft-cms-hosting.php" rel="external nofollow">Cloudways</a> و<a href="https://www.fortrabbit.com/" rel="external nofollow">fortrabbit</a>
			</td>
		</tr>
<tr>
<td>
				<a href="https://www.linode.com/marketplace/apps/linode/ruby-on-rails/" rel="external nofollow">Ruby on Rails</a>
			</td>
			<td>
				<a href="https://www.linode.com/marketplace/apps/linode/ruby-on-rails/" rel="external nofollow">Linode</a>
			</td>
			<td>
				<a href="https://www.heroku.com/ruby" rel="external nofollow">Heroku</a>
			</td>
		</tr>
<tr>
<td>
				Node.js
			</td>
			<td>
				ضعه في <a href="https://aws.amazon.com/lambda/" rel="external nofollow">Lambda</a>
			</td>
			<td>
				<a href="https://www.digitalocean.com/" rel="external nofollow">Digital Ocean</a>
			</td>
		</tr>
<tr>
<td>
				Python
			</td>
			<td>
				<a href="https://vercel.com/docs/runtimes#official-runtimes/python" rel="external nofollow">Vercel</a>
			</td>
			<td>
				<a href="https://www.heroku.com/python" rel="external nofollow">Heroku</a>
			</td>
		</tr>
<tr>
<td>
				<a href="https://vercel.com/docs/runtimes#official-runtimes/go" rel="external nofollow">Go</a>
			</td>
			<td>
				Vercel
			</td>
			<td>
				<a href="https://cloud.google.com/run" rel="external nofollow">Cloud Run</a>
			</td>
		</tr>
<tr>
<td>
				Jamstack
			</td>
			<td>
				<a href="https://pages.github.com/" rel="external nofollow">GitHub Pages</a>
			</td>
			<td>
				<a href="https://www.netlify.com/" rel="external nofollow">Netlify</a> و<a href="https://pages.cloudflare.com/" rel="external nofollow">Cloudflare Pages</a>
			</td>
		</tr>
<tr>
<td>
				GraphQL <abbr title="Application Programming Interface | واجهة برمجية">API</abbr>
			</td>
			<td>
				<a href="https://hasura.io/graphql/" rel="external nofollow">Hasura</a>
			</td>
			<td>
				<a href="https://aws.amazon.com/amplify/" rel="external nofollow">AWS Amplify</a> و<a href="https://aws.amazon.com/graphql/" rel="external nofollow">AppSync</a>
			</td>
		</tr>
<tr>
<td>
				Image Storage
			</td>
			<td>
				<a href="https://aws.amazon.com/s3/" rel="external nofollow">S3</a>
			</td>
			<td>
				<a href="https://cloudinary.com/" rel="external nofollow">Cloudinary</a>
			</td>
		</tr>
</tbody>
</table>
<p>
	ومن المهم التذكير بوجود الكثير من القواسم المشتركة في مجال الاستضافة، فلنفترض أنك تريد استضافة ملف <code>index.html</code> علمًا بأن هذا هو <a href="https://css-tricks.com/a-whole-website-in-a-single-html-file/" rel="external nofollow">موقعك بالكامل</a>. في الواقع، يمكن لأيّ مضيفٍ أن يفعل ذلك، حيث أنّ مهمة شركات استضافة الويب هي استضافة الملفّات عن طريق تشغيل الشيفرة البرمجية الموجودة بداخلها، وهي غير مختلفةٍ كثيرًا عن بعضها البعض، لذلك علينا الإجابة عن الأسئلة التالية، هل سيُشغّل ما أحتاجه؟ هل التعامل معه مباشرٌ وواضحُ؟ هل سيساعدك في تسهيل العمل؟ هل سيُقدّم الدعم المناسب؟ وأهم شيء هل هذا هو الطريق السعيد؟
</p>

<h2>
	أسعار الاستضافات
</h2>

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

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

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

<p>
	ترجمة -وبتصرف- للمقال <a href="https://css-tricks.com/the-differences-in-web-hosting-go-with-the-happy-path/" rel="external nofollow">The Differences in Web Hosting (Go with the Happy Path)</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/%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/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>
</ul>
]]></description><guid isPermaLink="false">534</guid><pubDate>Sat, 04 Sep 2021 07:25:57 +0000</pubDate></item><item><title>&#x645;&#x62F;&#x62E;&#x644; &#x625;&#x644;&#x649; &#x645;&#x64F;&#x633;&#x631;&#x651;&#x639; &#x62A;&#x637;&#x628;&#x64A;&#x642;&#x627;&#x62A; &#x627;&#x644;&#x648;&#x64A;&#x628; Varnish Cache</title><link>https://academy.hsoub.com/devops/servers/web/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D9%85%D9%8F%D8%B3%D8%B1%D9%91%D8%B9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-varnish-cache-r377/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2018_01/11-2.png.afa527e4cba87d58af0e40aa38b694d7.png" /></p>

<p id="مدخل-إلى-مُسرّع-تطبيقات-الويب-varnish-cache">
	يُستعمل Varnish Cache بكثرة لتخبئة محتوى مواقع الويب لتسريع أداء المواقع وتخفيض الحمولة على الخادوم الأصل (origin-server). لطالما شجعنا على استعمال التّخبئة لتسريع أداء تطبيقات الويب وتسهيل قابلية التوسع (Scalability) وضمان الاستقراريّة إضافة إلى الفوائد الأخرى التي تأتي مع هذه الإجراءات من تحسين لتجربة المُستخدم إلى التوفير في الموارد. لكن رغم ذلك فلا نزال بحاجة إلى التأكيد على أهميّة التّخبئة. وفي بعض الأحيان، قد يعني الأمر شرح كيفيّة استعمال Varnish Cache وما يُميّزه عن بقيّة التقنيات الأخرى.
</p>

<h2 id="الأمور-الغريبة-التي-تُميّز-varnish-cache">
	الأمور الغريبة التي تُميّز Varnish Cache
</h2>

<p>
	Varnish Cache عبارة عن خادوم HTTP بنظام HTTP خلفي له قدرة على تقديم الملفّات. يعتمد على هندسة سلسليّة (threaded architecture)، دون حلقة أحداث (event loop). ولأن شيفرة الكتابة قادرة على استعمال استدعاءات النظام الحاصرة (blocking system calls)، فذلك يجعله أسهل استعمالا من Apache أو NGINX، التي يتطلّب استعمالها التعامل مع حلقة أحداث.
</p>

<p>
	يقوم Varnish Cache بالتسجيل (logging) على الذاكرة عوضا عن القرص الصلب، تم تصميمه بهذه الطّريقة لأن تسجيل 10000 من عمليات HTTP كل ثانية على القرص الصلب أمر يتطلب الكثير من الموارد.
</p>

<p>
	يقوم Varnish بتسجيل جميع التّفاصيل (حوالي 200 سطر لكل طلب) على الذاكرة مُباشرة. إن لم يتم طلب التفاصيل المُسجّلة فستتم الكتابة فوقها (overwrite). يعتبر Varnish التطبيق الوحيد الذي يتخذ هذا المسلك.
</p>

<h2 id="المرونة-استعمال-vcl">
	المرونة: استعمال VCL
</h2>

<p>
	الميّزة الكبرى لـ Varnish Cashe هي لغة الضّبط الخاصّة به. تمّ إنشاء لغةVCL (Varnish Configuration Language) منذ أكثر من 11 عاما لتدعم النسخة الأولى من Varnish Cache. على عكس Apache أو بقيّة البرمجيّات، فـVarnish Cache لا يعتمد على إعداد تقليدي.بل يعتمد عوضا عن ذلك على مجموعة من السّياسات التي تُكتب بهذه اللغة. تتم ترجمة هذه السيّاسات إلى شيفرة ثنائية، تُحمّل هذه الشيفرة ويتمّ تشغيلها بعد ذلك.
</p>

<p>
	يقول مهندس Varnish Cache Poul-Henning Kamp بأنVCL أُنشأت لتكون مجموعة أدوات يمكن استعمالها حسب الحاجة، وليس قطعة موحدة يُمكن إضافتها إلى بيئة العمل. في يومنا الحالي، هناك أكثر من 100 وحدة (modules) لـ VCL يمكن استعمالها ببساطة. في الحقيقة، ففي ملتقيات Varnish Summits هناك دائما ورشة عمل لتعليم الأشخاص كيفيّة كتابة وحدات خاصّة.
</p>

<p>
	تعتبر لغة VCL من أكبر الأسباب التي تجعل النّاس تستعمل وتتعلّق بـVarnish Cache. إذ تفتح المرونة التي توفرها اللغة الأبواب للقيام بأي شيء قد يرغب أحدهم بفعله، ما يمحو القيود التي عادة ما تأتي مع البرمجيّات التقليديّة.
</p>

<p>
	إذا، ما هي أهم الأدوات التي توفّرها VCL وكيف يُمكننا الاستفادة منها؟
</p>

<h2 id="التنطيف-purging">
	التنطيف Purging
</h2>

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

<pre class="ipsCode" id="ips_uid_3761_7">
sub vcl_recv {
 if (req.method == "PURGE") {
  return (purge);  } }
إن لم ترغب بتمكين الأشخاص على الأنترنت من تنظيف المحتوى على نظام تخبئتك، فسيتوجب عليك ضبط حدّ الوصول ACL كما يلي:

acl purge {
  "localhost";
  "192.168.55.0"/24;
}
 sub vcl_recv {
 if (req.method == "PURGE") {
  if (!client.ip ~ purge) {
   return(synth(405,"Not allowed."));
   }
  return (purge);  } }</pre>

<h2 id="إضافة-ميزة-لـvarnish-cache-خنق-الرّبط-السّاخن-hot-linking">
	إضافة ميزة لـVarnish Cache: خنق الرّبط السّاخن (Hot linking)
</h2>

<p>
	يسمح إطار العمل الخاص بـVarnish للمستخدمين بإضافة أية ميزة يحتاجون إليها. أول ميّزة أضيفت هي استعمال VCL للحد من الرّبط السّاخن. الرّبط السّاخن هو عمليّة سرقة موارد أحدهم على الويب وكتابة مقال يستخدم صورا مرفوعة على خادوم الضّحية ليدفع تكاليف استخدام الموارد. يسمح Varnish للخوادم بإيقاف هذه العملية عند استعمال الرّبط السّاخن للموارد الخاصة بالخادم دون إذن. على سبيل المثال، يمكن لـVarnish وضع سقف لعدد مرّات حدوث هذا الأمر كل ثانيّة عبر استخدام وحدة من وحدات Varnish (VMOD) باسم <code>vsthrottle</code> لإضافة الخنق (throttling). يمكن القيام بالأمر عبر استيراد وتحميل الوحدة. شيفرة VCL أسفله تُوضّح كيفيّة الحدّ من الرّبط السّاخن. في هذا المثال، نقوم بتطبيق ثلاثة قواعد. القاعدة الأولى تتحقّق من أن عنوان URL المطلوب يبدأ بـ<code>/assets/</code>. القاعدتان الثانيّة والثّالثة تحميان مجلّد الملفات السّاكنة من الرّبط السّاخن. يتمّ هذا عبر التحقق ممّا إذا كان المُحيل <code>referrer</code> طرفا غير مُتوقّع، وما إن طلبت أسماء نطاق أخرى ملفّاتك لأكثر من 10 مرّات خلال 60 ثانيّة. ما سبق عبارة عن دالّة الخنق، يُستعمل رابط URL كمفتاح للخنق.الحدّ المسموح به هو 10 مرّات كلّ 60 ثانيّة. يُمكن تقديم الملفات السّاكنة غير المُشار إليها، وعندما يحصل ذلك، فسيتم إرسال خطأ 403 مع منع الربط السّاخن. يُمكن كذلك توسيع الخنق لاستعمال memcache، وذلك ليحصل المستخدم على المُحاسبة الرّئيسيّة (central accounting) في العنقود (cluster).
</p>

<pre class="ipsCode" id="ips_uid_3761_7">
<code>import vsthrottle;
 (..)
 if (req.url ~
 "^/assets/" &amp;&amp;
 (req.http.referer !~
 "^http://www.example.com/") &amp;&amp;
 vsthrottle.is_denied(req.url, 10, 60s) {
   return(error(403,"Hotlinking prohibited");
}
</code></pre>

<h2 id="التّعامل-مع-ملفات-تعريف-الارتباط-cookies">
	التّعامل مع ملفات تعريف الارتباط (cookies)
</h2>

<p>
	لن يقوم Varnish بتخبئة المحتوى الذي يُطلَبُ باستعمال ملفّات تعريف الارتباط. ولن يستجيب إلى طلب محتوى مخبّأ إن كان الطّلب متعلّقا بملف تعريف ارتباط. عوضا عن هذا، يُمكن استعمال وحدة VMOD لحذف ملفّ تعريف الارتباط. المحترفون يستعملون تعبيرا نمطيّا (regular expression) لترشيح ملفات تعريف الارتباط. ولأنّنا لسنا محترفين، فـVarnish يوفّر وحدة باسم <code>cookie</code> تبدو كما يلي:
</p>

<pre class="ipsCode" id="ips_uid_3761_7">
<code>import cookie;
sub vcl_recv {
       cookie.parse ("cookie1: value1; cookie2: value2");
       cookie.filter_except("cookie1");
        // get_string() will now yield
       // "cookie1: cookie2: value2;"; }
</code></pre>

<p>
	لا يقوم Varnish بإنشاء ترويسة (header) ملف تعريف ارتباط. وإن رأى بأن النظام الخلفي قد أرسل شيفرة إنشاء ملفّ تعريف ارتباط، فلن يقوم بتخبئته. الحل أن تحذف ترويسة Set-Cookie أو إصلاح الخادوم الخلفي.
</p>

<ul>
<li>
		ترويسات Set-Cookie تقوم بتعطيل ملفّات تعريف الارتباط.
	</li>
	<li>
		الحلّ: احذف ترويسة Set-Cookie أو أصلح النّظام الخلفيّ.
	</li>
</ul>
<h2 id="نمط-الإمهال-grace-mode">
	نمط الإمهال Grace Mode
</h2>

<p>
	يُمكن نمط الإمهال Varnish من تقديم محتوى قديم إن لم يكن المحتوى الجديد جاهزا أو مُتوفّرا. يساهم هذا في تحسين الأداء عبر إعادة تحميل المحتوى من النظام الخلفيّ بشكل غير متزامن (asynchronous).
</p>

<p>
	في الوقت الذي تم فيه تقديم Varnish 1.0 كحل لنظام تخبئة لموقع الجريدة النرويجيّة Verdens Gang، كانت هناك مشاكل كبرى بسبب التكتّلات السلسليّة (threading pileups). كانت الصفحة الرّئيسيّة للموقع تُقدّم 3000 مرّة كلّ ثانيّة، لكن نظام إدارة المُحتوى (CMS) كان بطيئا، إذ كان يأخذ 3 ثوان لإعادة توليد الصّفحة الرّئيسيّة. في بعض المواقع، إن اتّبعت طلبات التّعليقات (RFC)، فسيقوم وسيط (proxy) التّخبئة بإلغاء الصّفحة الرّئيسيّة أو سيحدث انقضاء وقت (time out). عندها سيأتي مُستخدم آخر وسيتوجب جلب نسخة جديدة من الصّفحة الرّئيسيّة. يقوم Varnish بهذا عبر عمليّة التئام التّخبئة (coalescing). إذ يتم وضع المستخدمين الجدد عند وصولهم على قائمة انتظار. (أنظمة التّخبئة الأخرى تُرسل المُستخدمين إلى النظام الخلفيّ ما يقتل الخادم). إن تّمت إضافة 3000 مُستخدم إلى قائمة الانتظار كلّ ثانيّة، فبعد ثلاثة ثوان، سيكون الطابور عبارة عن 9000 مستخدم ينتظرون النظام الخلفي لجلب المحتوى. في البداية، كان Varnish يأخذ المحتوى المطلوب، ويقوم بالتواصل مع السّلاسل (Thread) الـ9000 التي تمّ إنشاؤها، ويُحاول دفع كل شيء دفعة واحدة. سمّي هذا الحدث بالقطيع الصّاخب (thundering herd). وكانت النّتيجة موت الخادوم فورا.
</p>

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

<p>
	تغيّرت التّفاصيل المتعلّقة بـGrace خلال السنوات الماضيّة. في Varnish 4.0 (إن تمّ تفعيله) فستبدو كما يلي:
</p>

<pre class="ipsCode" id="ips_uid_3761_7">
<code>sub vcl_backend_response { set beresp.grace = 2m; }
</code></pre>

<p>
	يتم ربط Grace مع كائن الإجابة الخلفيّة (backend response object). إن تم تحديد القيمة في دقيقتين (2m) فسيُبقي Grace على الكائن لدقيقتين بعد انقضاء الـTPL. إن تم طلب الكائن خلال هذا الوقت، فسيتم تفضيل تقديم ما هو مُخبّأ عوضا عن إرسال طلب جديد إلى النظام الخلفيّ. سيتم استعمال الكائن وإعادة تحميله بعدها بشكل غير متزامن.
</p>

<h2 id="تفاصيل-grace">
	تفاصيل Grace
</h2>

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

<pre class="ipsCode" id="ips_uid_3761_7">
<code>Insert code

sub vcl_hit {
  if (obj.ttl &gt;= 0s) {
      // A pure unadulterated hit, deliver it
     return (deliver);
   }
   if (obj.ttl + obj.grace &gt; 0s) {
       // Object is in grace, deliver it
      // Automatically triggers a background fetch
       return (deliver);
  }
  // fetch &amp; deliver once we get the result
return (fetch);
   }
</code></pre>

<p>
	إن كان الكائن VCL يحمل قيمة أكبر من 0 ثوان، هذا يعني بأنّ الـTTL موجب، سيتمّ الرجوع والتّقديم. إن كانتا كل من قيمتي TTL وGrace أكبر من 0 ثوان، فهذا يعني بأنّها ضمن Grace وسيقوم Varnish بتقديمها. إن كانتا كل من قيمتي TTL وGrace أصغر من 0 ثوان، فسيتّم طلب الصّفحة من النّظام الخلفيّ.
</p>

<h2 id="تعديل-كيفيّة-عمل-grace">
	تعديل كيفيّة عمل Grace
</h2>

<p>
	يُمكن للمؤسّسات التي تكون بحاجة إلى تقديم معلومات ماليّة وتأبى عرض معلومات قديمة للمُستخدم أن تُغيّر من كيفيّة عمل Grace. في المثال التّالي، لم يتغيّر الجزء الأول، في الجزء الثّاني نقوم بالتقديم في حالة لم يكن الخادوم الخلفيّ على ما يرام وكانت كلا من قيمتي TTL و Grace أكبر من 0 ثانيّة.
</p>

<pre class="ipsCode" id="ips_uid_3761_7">
<code>sub vcl_hit {   if (obj.ttl &gt;= 0s) {
      // A pure unadulterated hit, deliver it
      return (deliver);
   }
   if (!std.healthy(req.backend_hint) &amp;&amp;
       (obj.ttl + obj.grace &gt; 0s)) {
         return (deliver);
   }
   // fetch &amp; deliver once we get the result
   return (fetch);
 }
</code></pre>

<p>
	*بضعة معلومات إضافيّة:
</p>

<ul>
<li>
		<code>beresp</code>: كائن الطّلب الخلفّي <code>backend request object</code>.
	</li>
	<li>
		<code>req</code>: كائن الطّلب <code>request object</code>. يُستعمل في <code>vcl_recv</code>.
	</li>
	<li>
		<code>bereq</code>: كائن الطّلب الخلفي <code>backend request object</code>. يُستعمل في <code>vcl_backed_fetch</code>.
	</li>
	<li>
		<code>beresp</code>: كائن الإجابة الخلفيّة. يُستعمل في <code>vcl_backend_response</code>.
	</li>
	<li>
		<code>resp</code>: كائن الإجابة <code>response object</code>. يُستعمل في <code>vcl_deliver</code>.
	</li>
	<li>
		<code>obj</code>: الكائن الأصلي في الذّاكرة. يُستعمل في <code>vcl_hit</code>.
	</li>
	<li>
		للمزيد من التّفاصيل استعمل <code>man(7) vcl</code>.
	</li>
</ul>
<h2 id="آلة-الحالة-state-machine">
	آلة الحالة (state machine)
</h2>

<p style="text-align: center;">
	<img alt="state-machine.png" class="ipsImage ipsImage_thumbnailed" data-fileid="26465" data-unique="rvrqrqspn" src="https://academy.hsoub.com/uploads/monthly_2018_01/state-machine.png.a2433143858f945ec753ff165c78c0ec.png"></p>

<p>
	يمرّ كل طلب عبر عدّة حالات. يُمكن تشغيل شيفرة مخصّصة في كل حالة لتعديل كائنات الطّلب. بعد تنفيذ الشّيفرة المخصّصة، يقوم Varnish باتّخاذ قرار ما إذا كان نجاحا (Hit) أو إخفاقا (Miss) بعدها يتم تشغيل إمّا <code>VCL hit</code> أو <code>VCL Miss</code>. في حالة النّجاح سيقوم Varnish بتقديم المحتوى. والإخفاقات تُعيد الطّلب من النظام الخلفي. 90% من التّغييرات التي يُحدثها المُستخدمون تحدث هنا.
</p>

<h2 id="كيفيّة-التّضبيط-tuning-على-linux">
	كيفيّة التّضبيط (Tuning) على Linux
</h2>

<p>
	يتم تحديد الانضباطيات (Tunables) على Linux بشكل محافظ، ونجد <code>SOMAXCONN</code> و <code>TCP_MAX_SYN_Backlog</code> أكثرها مشقّة.
</p>

<p>
	عند الانصات (listen) إلى المقابس (socket)، يأخذ Varnish بضعة ثوان للانصات للنّداء. إن كانت السّلاسل مشغولة، فستبدأ النّواة (kernel) بالتّكتّل (queue). لا يُسمَحُ لهذا التّكتّل بأن ينمو إلى ما وراء قيمة <code>SOMAXCONN</code>. سيطلب Varnish 1024 اتّصالا على تكتّل عمق الانصات (listen depth queue)، لكنّ النواة تقوم بإبطال ذلك لتحصل على 928 فقط. ولأنّ Varnish يعمل بصلاحيات الجذر (root)، فمن الممكن تقرير عمق انصات خاصّ، لكنّ Linux أدرى بما هو أفضل. قد يرغب المُستخدمون بالرّفع من هذا الحدّ إن أرادوا تخفيض خطر رفض الاتّصالات عند انقضاء عمق الانصات. سيتوجّب على المستخدم اتخاذ قرار ما إذا كان عدم التّقديم وتقديم صفحة خطأ أفضل أو لا. يقوم <code>TCP_MAX_SYN_Backlog</code> بتعريف عدد الاتّصالات البارزة التي يُمكن لها أن تكون بداخل إقامة الاتّصال (handshake) الثّلاثي الأطراف قبل أن تقرّر النواة بأنّها تحت الهجوم. القيمة الافتراضيّة هي 128. لكن في حالة دخل جمع كبير من النّاس إلى موقعك دفعة واحدة فقد تحصل على أكثر من 128 اتّصال TCP كلّ ثانيّة.
</p>

<p>
	لا تقم بتعديل <code>tcp_tw_recycle</code>. تأكّد بأنّك تعرف ما تفعله قبل لمس الإعدادات وابحث على الويب قبل ذلك. إذ أنّ الكثير من العفاريت (demons) تعتمد على هذه القيّم.
</p>

<h1 id="مساحات-العمل-work-spaces-في-linux">
	مساحات العمل (Work spaces) في Linux
</h1>

<p>
	في Varnish، الذاكرة المحليّة متواجدة في كلّ سلسلة. ولأنّ التّراجع (rollback) يستنزف الموارد، فإنّنا لا نتراجع كلّما احتجنا إلى قليل من المساحة في الذّاكرة. عوضا عن ذلك، نقوم بتعيين مُسبق للذّاكرة على كلّ سلسلة إن كان للمستخدم العديد من سياسات VCL التي قد تستنزف مساحة العمل بأكملها.
</p>

<p>
	لا يقوم Varnish بتتبّع الاتّصال، وحدة التّعاقد (contract module) بطيئة للغاية. يتمّ افتراضيّا تشغيل خمسة سلاسل. يُمكن إنشاء سلاسل جديدة بسرعة نسبيّا، لكن إن كنت تخطّط لفتح ألف اتّصال كلّ ثانيّة أي ألف سلسلة، ففي هذه الحالة لديك مُعطى (parameter) لتخصيص سلاسل مُسبقا.
</p>

<h3 id="خلاصة">
	خلاصة:
</h3>

<ul>
<li>
		احذر عند التّعامل مع مساحات العمل.
	</li>
	<li>
		لا تقم بتتبّع الاتّصالات (connection tracking).
	</li>
	<li>
		ارفع معدّل السّلاسل إلى طلب واحد في الثانيّة لكل سلسلة.
	</li>
</ul>
<h2 id="الموازنة-بين-ما-هو-غريب-وما-هو-رائع-في-varnish-cache">
	الموازنة بين ما هو غريب وما هو رائع في Varnish Cache
</h2>

<p>
	المرونة القويّة والمميّزات التّي يتمتّع بهاVarnish Cache لا تأتي في حزمة جاهزة (ما قد يجده البعض غريبا)، لذا فقد لا يكون الحلّ الأنسب للجميع. لكنّ المرونة التي يتمتّع بها قد تُغيّر من مجريات الأمور عند الرغبة في تخصيص والتّحكم بأداء المواقع وقابليّة توسيعها.
</p>

<p>
	ترجمة -بتصرّف- للمقال <a href="https://opensource.com/business/16/2/getting-started-with-varnish-cache" rel="external nofollow">Getting started with web app accelerator Varnish Cache </a> لصاحبه Per Buer.
</p>
]]></description><guid isPermaLink="false">377</guid><pubDate>Thu, 11 Jan 2018 07:02:00 +0000</pubDate></item><item><title>&#x623;&#x641;&#x636;&#x644; 5 &#x62E;&#x648;&#x627;&#x62F;&#x645; &#x648;&#x64A;&#x628; &#x645;&#x641;&#x62A;&#x648;&#x62D;&#x629; &#x627;&#x644;&#x645;&#x635;&#x62F;&#x631;</title><link>https://academy.hsoub.com/devops/servers/web/%D8%A3%D9%81%D8%B6%D9%84-5-%D8%AE%D9%88%D8%A7%D8%AF%D9%85-%D9%88%D9%8A%D8%A8-%D9%85%D9%81%D8%AA%D9%88%D8%AD%D8%A9-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-r370/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_12/06-2.png.3943f642dd06feda0a1e7487e70766bb.png" /></p>

<p>
	تظهر لنا <a href="https://w3techs.com/technologies/overview/web_server/all" rel="external nofollow">الإحصاءات </a>أن أكثر من 80٪ من تطبيقات الويب ومواقع الويب مدعومة بخوادم الويب مفتوحة المصدر. في هذه المقالة، سألقي نظرة على خوادم الويب المفتوحة المصدر الأكثر شعبية، وأراجع تاريخها وتقنياتها وميزاتها وغير ذلك. وسوف أقدم أيضًا بعض النصائح حتى تتمكن من النشر بسهولة على واحد من خوادم الويب هذه بنفسك. وفقًا <a href="https://en.wikipedia.org/wiki/Web_server" rel="external nofollow">لويكيبيديا </a>، فإن خادوم الويب هو "نظام حاسوبي يعمل على معالجة الطلبات عبر بروتوكول HTTP، وهو بروتوكول الشبكة الأساسي المستخدم لتوزيع المعلومات على الشبكة العالمية، ويمكن أن يشير المصطلح إلى النظام بأكمله، أو تحديدًا إلى البرنامج الذي يشرف على الطلبات" ، في هذه المقالة سنتعامل مع البرامج التي تعالج طلبات الويب من المستخدمين النهائيين.
</p>

<h2>
	Apache HTTP
</h2>

<p>
	تم إطلاق خادوم Apache HTTP -  والذي غالبا ما يشار إليه باسم httpd  أو <a href="https://academy.hsoub.com/devops/servers/web/apache/" rel="">Apache</a>- في عام 1995، واحتُفل بعيد ميلاده العشرين في فبراير 2015. يشغل <a href="https://w3techs.com/technologies/details/ws-apache/all/all" rel="external nofollow">Apache 52٪ من جميع المواقع</a> على مستوى العالم، وهو خادوم الويب الأكثر شعبية في العالم. يغلب أن يكون Apache مشغلا على لينكس ، ولكن يمكنك أيضا تشغيله على OS X و ويندوز. ليس غريبا أن   Apacheمرخص بموجب رخصة Apache الإصدار 2. وهو يستخدم معمارية الوحدات، والتي  يمكن بها إضافة وحدات جديدة لتمديد عمل الخادوم وزيادة ميزات أخرى . على سبيل المثال سيؤدي تحميل الوحدة mod_proxy إلى السماح للبروكسي على الخادوم الخاص بك، وسيعمل mod_proxy_balancer على تمكين موازنة التحميل لجميع البروتوكولات المدعومة.  اعتبارا من الإصدار 2.4 صار Apache  يدعم HTTP/2 من خلال  الوحدة الجديدةmod_http2. وبما أن خادوم  Apache HTTP  هو خادوم الويب الأكثر شعبية منذ عام 1996، فإنه "يستفيد من الوثائق الكبيرة والدعم المتكامل من مشاريع البرامج الأخرى ." يمكنك العثور على مزيد من المعلومات حول Apache  في <a href="https://httpd.apache.org/" rel="external nofollow">صفحة مشروع</a>.
</p>

<h2>
	NGINX
</h2>

<p>
	بدأ Igor Sysoev  تطوير <a href="https://academy.hsoub.com/devops/servers/web/nginx/" rel="">NGINX </a>مرة أخرى في عام 2002. وقد طوّر NGINX  جوابًا على ما يسمى <a href="https://en.wikipedia.org/wiki/C10k_problem" rel="external nofollow">مشكلة C10K</a> ، وهو اختصار لــ "كيف يمكنك تصميم خادوم الويب الذي يمكنه التعامل مع عشرة آلاف اتصال متزامن ؟  " . NGINX  يحل هذا المشكل وهو الثاني على قائمة خوادم الويب المفتوحة المصدر حسب الاستخدام، فهو يشغل ما يزيد عن<a href="https://w3techs.com/technologies/details/ws-nginx/all/all" rel="external nofollow"> 30٪ من المواقع</a>. يعتمد NGINX على معمارية  الأحداث الموجهة (event-driven) غير المتزامنة ، وذلك ما يساعده في تحقيق هدفه ، ألا وهو التعامل مع أكبر عدد ممكن من الاتصالات ، وبسبب ذلك أصبح خادوم الويب الأكثر شعبية جدًا بين مديري الأنظمة بسبب استخدامه لموارد خفيفة وقدرته على التوسع بسهولة. يتم إصدار NGINX تحت رخصة BSD-like ، ولا يقتصر استخدامه على خدمة الويب فحسب، بل أيضًا كخادوم وكيل proxy  أو موازن التحميل load-balancer  ، يمكنك العثور على مزيد من المعلومات حول  NGINX في <a href="https://nginx.org/en/" rel="external nofollow">موقع المجتمع</a>.
</p>

<h2>
	Apache Tomcat
</h2>

<p>
	Apache Tomcat هو حاوية جافا (اسمها الكامل  <a href="https://en.wikipedia.org/wiki/Java_servlet" rel="external nofollow">Java servlet</a>) مفتوح المصدر. وهو برنامج جافا بقدرات ملقمات الويب، على الرغم من أن servlet  يمكن أن تستجيب لأي أنواع من الطلبات، فإنها استخدامها شائع فقط في تنفيذ التطبيقات المستضافة على خوادم الويب. servlet  هي نظير تقنيات الويب الديناميكية الأخرى مثل PHP  و ASP.NET، تم التبرع بالشيفرة المصدرية لــ Apache Tomcat من قبل شركة  Sun Microsystems  إلى مؤسسة Apache للبرمجيات في عام 1999، وأصبحت مشروع Apache الأعلى قيمة في عام 2005.  وهي حاليًا تحتل <a href="https://w3techs.com/technologies/details/ws-tomcat/all/all" rel="external nofollow">1٪ فقط من جميع المواقع</a>.
</p>

<p>
	يستخدم Apache Tomcat  -والذي يصدر تحت رخصة Apache الإصدار 2-  عادة لتشغيل تطبيقات الجافا . ومع ذلك، فإنه يمكن تمديده بـ <a href="https://en.wikipedia.org/wiki/Apache_Tomcat#Coyote" rel="external nofollow">Coyote </a>لأداء دور خادوم الويب العادي لكي يخدم الملفات المحلية كوثائق HTTP   ، يمكنك الإطلاع على مزيد من المعلومات على <a href="http://tomcat.apache.org/" rel="external nofollow">موقع المشروع</a>. غالبًا ما يتم ذكر  Apache Tomcat  مع خوادم تطبيقات الجافا المفتوحة المصدر الأخرى.  مثل    <a href="http://www.jboss.org/products/eap/overview/" rel="external nofollow">JBoss</a> و  <a href="http://wildfly.org/" rel="external nofollow">Wildfly </a>و <a href="https://glassfish.java.net/" rel="external nofollow">Glassfish</a>
</p>

<h2>
	Node.js
</h2>

<p>
	Node.js  هي بيئة جافا سكريبت من جانب الخادوم ، وهي تعمل لتشغيل تطبيقات الشبكة، لا تحتل Node.js   إلا مكانة منخفضة في السوق ، فنسبة تشغيلها لا تتجاوز <a href="https://w3techs.com/technologies/details/ws-nodejs/all/all" rel="external nofollow">0.2٪ من المواقع</a> . طور هذه البيئة في الأصل  Ryan Dahl في عام 2009 ، وتسيرها الآن مؤسسة  Node.js  وبمساعدة مؤسسة لينكس. الفرق بين Node.js وغيرها من خوادم الويب الشعبية الأخرى هو أنها بيئة تشغيل عابرة للمنصات لتشغيل تطبيقات الشبكة،  تطبّق Node.js معمارية الأحداث الموجهة event-driven القادرة على الإدخال والإخراج غير المتزامن.  هذه الخيارات في التصميم هي الأمثل إنتاجية وقابلية للتوسع في تطبيقات الويب مما يسمح بتشغيل الاتصالات وألعاب المتصفح في الوقت الحقيقي، يظهر الفرق أيضًا في أن  Node.js  هو في الحقيقة جزء من مراحل تطوير الويب (HTML, CSS, and JavaScript)، على عكس Apache أو NGINX التي هي جزء من العديد من البرامج المختلفة.
</p>

<p>
	يتم إصدار Node.js تحت <a href="https://raw.githubusercontent.com/nodejs/node/master/LICENSE" rel="external nofollow">مزيج من التراخيص</a> . يمكن الحصول على مزيد من المعلومات على <a href="https://nodejs.org/en/" rel="external nofollow">الموقع الإلكتروني للمشروع</a> .
</p>

<h2>
	Lighttpd
</h2>

<p>
	أطلق Lighttpd في أول إصدار له في مارس 2003. وهو حاليًا يشغل <a href="https://w3techs.com/technologies/details/ws-lighttpd/all/all" rel="external nofollow">0.1٪ من المواقع</a> ويتم توزيعه تحت رخصة BSD. يميز Lighttpd أنه يعمل  بموارد  أقل مقارنة بالخوادم الأخرى (من حيث الذاكرة ، والمعالج) وهذا يجعله أسرع أداء واستجابة ، وهو يستخدم معمارية الأحداث الموجهة  event-driven architecture  ، ويعتبر الخيار الأمثل في حال كثرة الاتصالات المتزامنة وموارد أقل من العتاد، يدعم Lighttpd الكثير من التقنيات مثل : FastCGI, SCGI, Auth, Output-compression, URL-rewriting. كثيرًا ما يستعمل Lighttpd   مع إطار العمل <a href="https://academy.hsoub.com/programming/ruby/rails/" rel="">Ruby on Rails</a>  وإطار العمل Catalyst. لمزيد من المعلومات حوله قم بزيارة <a href="http://www.lighttpd.net/" rel="external nofollow">الصفحة الرئيسية للمشروع</a> .
</p>

<h2>
	نصائح
</h2>

<p>
	إذا كنت ترغب أن تجرب واحدا من خوادم الويب الأكثر شعبية فأنا أوصي بشدة بتحميل التجميعية <a href="https://en.wikipedia.org/wiki/LAMP_(software_bundle)" rel="external nofollow">LAMP </a>(Linux, Apache, MySQL, PHP) أو التجميعية <a href="https://academy.hsoub.com/search/?q=LEMP%20%20&amp;type=cms_records4&amp;sortby=relevancy&amp;search_in=titles" rel="">LEMP </a>(Linux, NGINX, MySQL, PHP) ، هناك الكثير من هذه التجميعيات المتاحة التي توفير نكهات مختلفة ، وعادة ما يتم توفيرها كمثبتات بنقرة واحدة، أو متوفرة كحزمة  في مدير برامجك على لينوكس.
</p>

<p>
	بعد الانتهاء بنجاح من عملية التثبيت يمكنك بدء تشغيل خادوم الويب الخاص بك، ومحاولة إخراج المثال المشهور <a href="http://php.net/manual/en/tutorial.firstpage.php" rel="external nofollow">مرحبا بالعالم</a> . انها طريقة رائعة للبدء في اكتشاف مداخل ومخارج خادوم الويب الخاص بك، وكيف تعمل خوادم الويب في الحياة التقنية الحقيقية.
</p>

<p>
	 
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://opensource.com/business/16/8/top-5-open-source-web-servers" rel="external nofollow">Top 5 open source web servers</a>  لصاحبه Robin Muilwijk
</p>

<p>
	حقوق الصورة البارزة محفوظة لـ <a href="https://www.freepik.com/free-photo/coffe-glasses-computers-programming-tablet_1134972.htm" rel="external nofollow">Freepik</a>
</p>
]]></description><guid isPermaLink="false">370</guid><pubDate>Wed, 06 Dec 2017 21:17:00 +0000</pubDate></item><item><title>&#x62A;&#x62B;&#x628;&#x64A;&#x62A; &#x62E;&#x627;&#x62F;&#x645; &#x648;&#x64A;&#x628; Caddy &#x639;&#x644;&#x649; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648; 16.04</title><link>https://academy.hsoub.com/devops/servers/web/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D8%AE%D8%A7%D8%AF%D9%85-%D9%88%D9%8A%D8%A8-caddy-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1604-r363/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_11/09.png.14788a2621a66825bd1673c7cf1b747d.png" /></p>

<p>
	نحن نبني أغلب أعمالنا على خوادم مبنية على Apache أو NGNIX، وربما حان الوقت لتجربة خادم ويب جديد بدأ يحصد شعبية بسبب بساطته، وهو خادم Caddy.<br>
	وقد أُطلق هذا الخادم لأول مرة في 2015 مكتوبًابالكامل بلغة Go، وتعتمد تهيئته على caddyfile، وهي ملفات يسهل كتابتها وإدارتها كما سنرى في هذا المثال، وما حمّسنا له حقيقة هو أنه يتكامل مع Let’s Encrypt بشكل افتراضي ودون أي تهيئة يدوية.
</p>

<h2 id="مزايا-caddy">
	مزايا Caddy
</h2>

<ul>
<li>
		<strong>Automatic HTTPS</strong> مفعّلة افتراضيًا من خلال Let’s Encrypt.
	</li>
	<li>
		<strong>HTTP/2</strong> افتراضيًا.
	</li>
	<li>
		<strong>Static Files</strong> في مجلد العمل الحالي.
	</li>
	<li>
		كل أنواع الخوادم، والموجّهات-directives، ومزودو DNS، ومزايا أخرى، كل ذلك موجود في صورة إضافات.
	</li>
	<li>
		<strong>يمكن استخدامه كمكتبة</strong> في برامج أخرى بلغة Go.
	</li>
	<li>
		<strong>يمكن تهيئته ليشغّل أوامر خاصة بالنظام</strong> عند بدء التشغيل أو إيقافه.
	</li>
	<li>
		<strong>ملف تنفيذي واحد </strong>لا يحتاج إلى اعتماديات إلا فيما يتعلق بالنواة-kernel.
	</li>
</ul>
<p>
	كل هؤلاء إضافة إلى مزايا أخرى عديدة، أما الآن فسنلقي نظرة على كيفية تثبيته واستخدامه على خادم أوبنتو 16.04.
</p>

<h2 id="تثبيت-خادم-ويب-caddy">
	تثبيت خادم ويب Caddy
</h2>

<p>
	يوفّر Caddy شفرة نصية-script للتثبيت، تحمّل وتثبت الملف التنفيذي له -فهو لا يحتاج إلى اعتماديات كما ذكرنا-، نفذ الأمر التالي لتنفيذ الشفرة:
</p>

<pre class="ipsCode" id="ips_uid_4437_10">
$ curl https://getcaddy.com | bash
وستسألك الشفرة أثناء التثبيت عن كلمة المرور من أجل الحصول على صلاحيات إدارية، فيكون الخرج هكذا:
 % Total % Received % Xferd Average Speed Time Time Time Current
 Dload Upload Total Spent Left Speed
100 5593 100 5593 0 0 3696 0 0:00:01 0:00:01 --:--:-- 3696
Downloading Caddy for linux/amd64...
https://caddyserver.com/download/linux/amd64?plugins=
Download verification OK
Extracting...
Putting caddy in /usr/local/bin (may require password)
[sudo] password for gmolica: 
Caddy 0.10.6
Successfully installed</pre>

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

<h2 id="تهيئة-caddy">
	تهيئة Caddy
</h2>

<p>
	سيعتبر Caddy أن المجلد الجذر للموقع هو المجلد الذي نفّذته منه، فإن نفّذت Caddy من مجلد $HOME فسيستخدمه كمجلد جذر له، وهذا يعني بعبارة أخرى أن من السهل استخدام Caddy في العمل على المواقع محلّيًا.<br>
	- لبدء Caddy:
</p>

<pre class="ipsCode" id="ips_uid_4437_8">
$ caddy</pre>

<ul>
<li>
		ستظهر الطرفية الرسالة التالية:
	</li>
</ul>
<pre class="ipsCode" id="ips_uid_4437_12">
Activating privacy features... done.
http://:2015
WARNING: File descriptor limit 1024 is too low for production servers. 
At least 8192 is recommended. Fix with "ulimit -n 8192".</pre>

<p>
	لاحظ أن Caddy يعمل على مضيف محلي-localhost، في منفذ 2015.<br>
	قد يؤدي فتح صفحة <a href="http://your_server_IP:2015" rel="external nofollow">http://your_server_IP:2015</a> -استبدل عنوان خادمك بـyour server IP-إلى صفحة خطأ 404، هذا بسبب أن المجلد الذي يستخدمه Caddy لا يحتوي على موقع، فيجب أن ننشئ تلك المجلدات المطلوبة أولًا:
</p>

<h3 id="إنشاء-المجلدات-المطلوبة">
	إنشاء المجلدات المطلوبة
</h3>

<ul>
<li>
		أولًا، ننشئ مجلدًا يحتوي ملف caddyfile الأساسي:
	</li>
</ul>
<pre class="ipsCode" id="ips_uid_4437_10">
<code class="hljs vala"><span class="hljs-preprocessor"><span class="com"># mkdir /etc/caddy</span></span></code></pre>

<ul>
<li>
		نغير ملكيته إلى المستخدم الجذر ومجموعته إلى www-data:
	</li>
</ul>
<pre class="ipsCode" id="ips_uid_4437_10">
<code class="hljs vala"><span class="hljs-preprocessor"><span class="com"># chown -R root:www-data /etc/caddy</span></span></code></pre>

<ul>
<li>
		أنشئ مجلدًا ثانيًا ليخزن فيه Caddy شهادات <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr> والمفاتيح الخاصة:
	</li>
</ul>
<pre class="ipsCode" id="ips_uid_4437_10">
<code class="hljs vala"><span class="hljs-preprocessor"><span class="com"># mkdir /etc/<abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">ssl</abbr>/caddy</span></span></code></pre>

<ul>
<li>
		غير مالكه إلى www-data:
	</li>
</ul>
<pre class="ipsCode" id="ips_uid_4437_10">
<code class="hljs vala"><span class="hljs-preprocessor"><span class="com"># chown -R www-data /etc/<abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">ssl</abbr>/caddy</span></span></code></pre>

<ul>
<li>
		غيّر صلاحياته كما يلي:
	</li>
</ul>
<pre class="ipsCode" id="ips_uid_4437_10">
<code class="hljs vala"><span class="hljs-preprocessor"><span class="com"># chmod 0770 /etc/<abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">ssl</abbr>/caddy</span></span></code></pre>

<ul>
<li>
		والآن أنشئ المجلد الذي سيحتوي الموقع:
	</li>
</ul>
<pre class="ipsCode" id="ips_uid_4437_10">
<code class="hljs vala"><span class="hljs-preprocessor"><span class="com"># mkdir /var/www</span></span></code></pre>

<ul>
<li>
		وغيّر مالكه إلى www-data:
	</li>
</ul>
<pre class="ipsCode" id="ips_uid_4437_10">
<code class="hljs vala"><span class="hljs-preprocessor"><span class="com"># chown www-data:www-data /var/www</span></span></code></pre>

<h3 id="تحميل-ملف-caddy-unit">
	تحميل ملف Caddy Unit
</h3>

<ul>
<li>
		لن يثبّت Caddy نفسه افتراضيًا كخدمة systemd، لكنه يوفّر رسميًا ملف unit، حمّله بالأمر التالي:
	</li>
</ul>
<pre class="ipsCode" id="ips_uid_4437_10">
<code class="hljs ruleslanguage"><span class="hljs-array"><span class="com"># curl </span></span><span class="com">-s https:</span><span class="hljs-comment"><span class="com">//raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service</span></span></code></pre>

<ul>
<li>
		بفتح الملف، سنلاحظ هذه السطور:
	</li>
</ul>
<pre class="ipsCode" id="ips_uid_4437_10">
<code class="hljs lasso"><span class="pun">;</span><span class="pln"> </span><span class="typ">Letsencrypt</span><span class="hljs-attribute"><span class="pun">-</span><span class="pln">issued</span></span><span class="pln"> certificates will be written </span><span class="hljs-keyword"><span class="pln">to</span></span><span class="pln"> </span><span class="kwd">this</span><span class="pln"> directory</span><span class="hljs-built_in"><span class="pun">.</span></span><span class="pln">
</span><span class="typ">Environment</span><span class="hljs-subst"><span class="pun">=</span></span><span class="pln">CADDYPATH</span><span class="hljs-subst"><span class="pun">=</span></span><span class="str">/etc/</span><span class="pln"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">ssl</abbr></span><span class="pun">/</span><span class="pln">caddy

</span><span class="pun">;</span><span class="pln"> </span><span class="typ">Always</span><span class="pln"> </span><span class="hljs-built_in"><span class="kwd">set</span></span><span class="pln"> </span><span class="hljs-string"><span class="str">"-root"</span></span><span class="pln"> </span><span class="hljs-keyword"><span class="pln">to</span></span><span class="pln"> something safe </span><span class="hljs-keyword"><span class="kwd">in</span></span><span class="pln"> </span><span class="hljs-keyword"><span class="kwd">case</span></span><span class="pln"> it gets forgotten </span><span class="hljs-keyword"><span class="kwd">in</span></span><span class="pln"> the </span><span class="typ">Caddyfile</span><span class="hljs-built_in"><span class="pun">.</span></span><span class="pln">
</span><span class="typ">ExecStart</span><span class="hljs-subst"><span class="pun">=</span></span><span class="str">/usr/</span><span class="hljs-built_in"><span class="kwd">local</span></span><span class="pun">/</span><span class="pln">bin</span><span class="pun">/</span><span class="pln">caddy </span><span class="hljs-attribute"><span class="pun">-</span><span class="pln">log</span></span><span class="pln"> stdout </span><span class="hljs-attribute"><span class="pun">-</span><span class="pln">agree</span></span><span class="hljs-subst"><span class="pun">=</span></span><span class="hljs-literal"><span class="kwd">true</span></span><span class="pln"> </span><span class="hljs-attribute"><span class="pun">-</span><span class="pln">conf</span></span><span class="hljs-subst"><span class="pun">=</span></span><span class="str">/etc/</span><span class="pln">caddy</span><span class="pun">/</span><span class="typ">Caddyfile</span><span class="pln"> </span><span class="hljs-attribute"><span class="pun">-</span><span class="pln">root</span></span><span class="hljs-subst"><span class="pun">=</span></span><span class="str">/</span><span class="hljs-built_in"><span class="str">var</span></span><span class="str">/</span><span class="pln">tmp</span></code></pre>

<ul>
<li>
		لاحظ مسارات المجلدات في تلك السطور، لهذا قد أنشأنا المجلدات قبل قليل. والآن أنشئ ملفًا فارغًا باسم caddyfile:
	</li>
</ul>
<pre class="ipsCode" id="ips_uid_4437_10">
<code class="hljs vala"><span class="hljs-preprocessor"><span class="com"># sudo touch /etc/caddy/Caddyfile</span></span></code></pre>

<ul>
<li>
		نفّذ الأمر التالي كي يعمل Caddy عند الإقلاع:
	</li>
</ul>
<pre class="ipsCode" id="ips_uid_4437_10">
<code class="hljs vala"><span class="hljs-preprocessor"><span class="com"># systemctl daemon-reload</span></span><span class="pln">
</span><span class="hljs-preprocessor"><span class="com"># systemctl enable caddy</span></span></code></pre>

<ul>
<li>
		تفقد حالته بهذا الأمر:
	</li>
</ul>
<pre class="ipsCode" id="ips_uid_4437_10">
<code class="hljs asciidoc"><span class="com"># systemctl status caddy</span><span class="pln">
</span><span class="hljs-header"><span class="pun">يجب</span><span class="pln"> </span><span class="pun">أن</span><span class="pln"> </span><span class="pun">يكون</span><span class="pln"> </span><span class="pun">الخرج</span><span class="pln"> </span><span class="pun">هكذا:</span><span class="pln">
</span><span class="pun">----------------------------------</span></span><span class="pln">
</span><span class="pun">â</span><span class="pln"> caddy</span><span class="pun">.</span><span class="pln">service </span><span class="pun">-</span><span class="pln"> </span><span class="typ">Caddy</span><span class="pln"> HTTP</span><span class="pun">/</span><span class="lit">2</span><span class="pln"> web server
</span><span class="hljs-code"><span class="pln"> </span><span class="typ">Loaded</span><span class="pun">:</span><span class="pln"> loaded </span><span class="pun">(</span><span class="str">/etc/</span><span class="pln">systemd</span><span class="pun">/</span><span class="pln">system</span><span class="pun">/</span><span class="pln">caddy</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"> en</span></span><span class="pln">
</span><span class="hljs-code"><span class="pln"> </span><span class="typ">Active</span><span class="pun">:</span><span class="pln"> inactive </span><span class="pun">(</span><span class="pln">dead</span><span class="pun">)</span></span><span class="pln">
</span><span class="hljs-code"><span class="pln"> </span><span class="typ">Docs</span><span class="pun">:</span><span class="pln"> https</span><span class="pun">:</span><span class="com">//caddyserver.com/docs</span></span></code></pre>

<h3 id="السماح-باتصالات-http-وhttps">
	السماح باتصالات HTTP وHTTPS
</h3>

<ul>
<li>
		سنسمح لاتصالات HTTP وHTTPS عبر UFW (Uncomplicated Firewall)، كي يتمكن Caddy من خدمة المستخدمين بشكل سليم، نفّذ هذه الأوامر في الطرفية للسماح بهذه الاتصالات:
	</li>
</ul>
<pre class="ipsCode" id="ips_uid_4437_10">
<code class="hljs vala"><span class="hljs-preprocessor"><span class="com"># ufw allow http</span></span><span class="pln">
</span><span class="hljs-preprocessor"><span class="com"># ufw allow https</span></span></code></pre>

<h2 id="اختبار-caddy">
	اختبار Caddy
</h2>

<p>
	آخر خطوة هي اختبار Caddy للتأكد أن كل شيء تم بشكل سليم:
</p>

<h3 id="تعديل-caddyfile">
	تعديل Caddyfile
</h3>

<p>
	لقد أنشأنا ملف caddyfile فارغ من قبل، الآن سنبدأ الكتابة فيه:<br>
	- افتح الملف باستخدام المحرر النصي الذي تفضّله:
</p>

<pre class="ipsCode" id="ips_uid_4437_10">
<code class="hljs vala"><span class="hljs-preprocessor"><span class="com"># $EDITOR /etc/caddy/Caddyfile</span></span></code></pre>

<ul>
<li>
		الصق هذا المحتوى في الملف:
	</li>
</ul>
<pre class="ipsCode" id="ips_uid_4437_10">
<code class="hljs scala"><span class="pln">example</span><span class="pun">.</span><span class="pln">com </span><span class="pun">{</span><span class="pln">
 root </span><span class="pun">/</span><span class="hljs-keyword"><span class="kwd">var</span></span><span class="pun">/</span><span class="pln">www
 gzip
 <abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل">tls</abbr> gmolica</span><span class="hljs-annotation"><span class="pln">@example</span></span><span class="pun">.</span><span class="pln">com
</span><span class="pun">}</span></code></pre>

<p>
	<strong>ملاحظة:</strong> سطر <abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل">tls</abbr> يحتوي على عنوان بريد يستخدمه Caddy ليحصل على شهادات <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr> من Let’s Encrypt.<br>
	- احفظ الملف وأغلقه.<br>
	- شغّل Caddy:
</p>

<pre class="ipsCode" id="ips_uid_4437_10">
<code class="hljs vala"><span class="hljs-preprocessor"><span class="com"># systemctl start caddy</span></span></code></pre>

<h3 id="أنشئ-صفحة-ويب">
	أنشئ صفحة ويب
</h3>

<ul>
<li>
		سننشئ صفحة ويب لاختبار Caddy:
	</li>
</ul>
<pre class="ipsCode" id="ips_uid_4437_10">
<code class="hljs bash"><span class="pln">$ </span><span class="hljs-built_in"><span class="pln">echo</span></span><span class="pln"> </span><span class="hljs-string"><span class="str">'&lt;h1&gt;Website using Caddy&lt;/h1&gt;'</span></span><span class="pln"> </span><span class="pun">|</span><span class="pln"> </span><span class="hljs-built_in"><span class="pln">sudo</span></span><span class="pln"> tee </span><span class="pun">/</span><span class="kwd">var</span><span class="pun">/</span><span class="pln">www</span><span class="pun">/</span><span class="pln">index</span><span class="pun">.</span><span class="pln">html</span></code></pre>

<p>
	استخدم نفس الجذر الذي ثبتنا فيه ملف caddyfile.
</p>

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

<p>
	لقد رأينا الآن كيفية تثبيت واستخدام Caddy، ولاحظنا كيفية سهولة التثبيت وإنشاء ملف caddyfile لتخصيص سلوك الخادم. لاحظ أن سهولة الاستخدام يتبيّن فضلها في بيئات التشغيل المعقدة.
</p>

<p>
	ترجمة -بتصرف- لمقال <a href="https://www.unixmen.com/caddy-web-server-ubuntu-16-04/" rel="external nofollow">Caddy Web Server On Ubuntu 16.04</a> لصاحبه Giuseppe Molica
</p>
]]></description><guid isPermaLink="false">363</guid><pubDate>Sun, 05 Nov 2017 12:36:21 +0000</pubDate></item><item><title>&#x625;&#x646;&#x634;&#x627;&#x621; &#x627;&#x644;&#x645;&#x64F;&#x62D;&#x62A;&#x648;&#x64A;&#x627;&#x62A; &#x648;&#x625;&#x62F;&#x627;&#x631;&#x629; &#x635;&#x641;&#x62D;&#x627;&#x62A; &#x645;&#x648;&#x642;&#x639; &#x625;&#x633;&#x62A;&#x627;&#x62A;&#x64A;&#x643;&#x64A; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; Hugo</title><link>https://academy.hsoub.com/devops/servers/web/%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D9%84%D9%85%D9%8F%D8%AD%D8%AA%D9%88%D9%8A%D8%A7%D8%AA-%D9%88%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-%D8%B5%D9%81%D8%AD%D8%A7%D8%AA-%D9%85%D9%88%D9%82%D8%B9-%D8%A5%D8%B3%D8%AA%D8%A7%D8%AA%D9%8A%D9%83%D9%8A-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-hugo-r293/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_02/hugo-ubuntu-02.png.fac7067a1395ac7ec839b23b986edfda.png" /></p>

<p>
	بعد أن قمنا  <a href="https://academy.hsoub.com/devops/servers/web/%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-hugo%D8%8C-%D9%85%D9%88%D9%91%D9%84%D8%AF-%D8%A7%D9%84%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D8%A5%D8%B3%D8%AA%D8%A7%D8%AA%D9%8A%D9%83%D9%8A%D8%A9-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r292/" rel="">بتنصيب وإعداد Hugo، موّلد المواقع الإستاتيكية على أوبنتو</a> في الدّرس السّابق، سنواصل في هذا الدّرس شرح كيفية إنشاء صفحات جديدة عليه وتخديم الموقع.
</p>

<h2 id="إنشاء-صفحات-جديدة-في-موقعك">
	إنشاء صفحاتٍ جديدة في موقعك
</h2>

<p>
	نَحنُ الآن جاهزون للبدء بإنشاء المحتوى الفعلي لموقعنا. المحتوى في Hugo مكتوبٌ بلغات توصيف سهلة الاستخدام. يتم تحديد البيانات الوصفية metadata في قسمٍ خاص في كلّ صفحة يُدعى بالـ “front matter”.
</p>

<p style="text-align: center;">
	<img alt="hugo-ubuntu-02.png" class="ipsImage ipsImage_thumbnailed" data-fileid="21176" data-unique="6je4b1tg5" src="https://academy.hsoub.com/uploads/monthly_2017_02/hugo-ubuntu-02.png.dee05b2c8b3fb800cf81c7248a82aaec.png" style=""></p>

<p>
	يُمكننا توليد محتوى جديد باستخدام الأمر <code>hugo new</code> متبوعًا بمسار المحتوى المُراد توليده. تتم كتابة محتوى Hugo بشكلٍ افتراضي بالـ Markdown. لكي يتمكّن Hugo من توليد مستندات HTML من صفحات الـ Markdown بشكلٍ صحيح، يجب أن تكون الملفات التي نقوم بإنشائها تملك اللاحقة .md
</p>

<h3 id="إنشاء-صفحة-حول-الموقع">
	إنشاء صفحة “حول الموقع”
</h3>

<p>
	سيُحدّد القالب الذي قُمت باختياره الصفحات التي سيتم الرّبط عليها من الصفحة الرئيسية والمسارات المتعلّقة بصفحاتك. قم بزيارة صفحة القالب على GitHub لمعرفة ما الذي ستحصل عليه. يحتوي قالب “nofancy” الّذي قُمنا باختياره على رابط لصفحة about (حول الموقع). نكتب الأمر التالي لإنشاء هذه الصفحة:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9115_8">
<span class="pln">$ hugo </span><span class="kwd">new</span><span class="pln"> about</span><span class="pun">.</span><span class="pln">md</span></pre>

<p>
	سيتم إنشاء صفحة جديدة في مجلّد المحتوى <code>content</code> تُدعى <code>about.md</code>. بما أنّا أعطينا قيمة للخيار <code>newContentEditor</code> في ملفّ الإعدادات، يجب أن يتم فتح الملف تلقائيًا في المُحرّر المُفضّل لديك. من الواجب أن تبدو الصفحة كالتالي: 
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9115_10">
<span class="pun">~/</span><span class="pln">my</span><span class="pun">-</span><span class="pln">website</span><span class="pun">/</span><span class="pln">content</span><span class="pun">/</span><span class="pln">about</span><span class="pun">.</span><span class="pln">md
</span><span class="pun">+++</span><span class="pln">
categories </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">"misc"</span><span class="pun">]</span><span class="pln">
date </span><span class="pun">=</span><span class="pln"> </span><span class="str">"2015-11-05T16:58:58-05:00"</span><span class="pln">
title </span><span class="pun">=</span><span class="pln"> </span><span class="str">"about"</span><span class="pln">

</span><span class="pun">+++</span></pre>

<p>
	تتم تهيئة الإعدادات والبيانات الوصفية في قسم الـ “front matter”، المُحدّد ضمنَ إشارات الجمع الثلاث “+++”. يُعرّف قسم الـ front matter المُضمّن بشكلٍ افتراضي عن طريق القالب الذي قمت باختياره.
</p>

<p>
	يتضمّن قالبنا الحالي ثلاثة أسطر في قسم front matter في كلّ من الصفحات المولّدة. يمكنك ضبط هذه الأسطر أو إضافة أسطر جديدة حسب رغبتك. المُتغيّرات العامّة المُتاحة في Hugo موجودة <a href="https://gohugo.io/content/front-matter/" rel="external nofollow">هنا</a>. يَستخدم القالب الّذي قُمت باختياره مُتغيّرات front matter الخاصّة به. يمكنك قراءة ملف الـ README الخاص بالقالب في <a href="https://github.com/spf13/hugoThemes/" rel="external nofollow">مستودع قوالب Hugo</a> للحصول على معلوماتٍ دقيقة حول القالب.
</p>

<p>
	القائمة التاليّة توضّح بعض إعداداتfront matter العامّة:
</p>

<ul>
<li>
		<strong>Date:</strong> التاريخ المُستخدم لترتيب المحتوى.
	</li>
	<li>
		<strong>Description:</strong> وصف عام عن الصفحة.
	</li>
	<li>
		<strong>Draft:</strong> يقوم هذا السطر بوسم الصفحة على أنّها غير جاهزة للنشر في حال إسناد قيمة true لها.
	</li>
	<li>
		<strong>Slug:</strong> عيّن هذا السطر في حال أردت تعيين عنوان URL بديل للصفحة.
	</li>
	<li>
		<strong>Publishdate:</strong> يمكن أن يكون هذا تاريخًا في المستقبل في حال أردت بناء الصفحة بعد زمنٍ معين.
	</li>
	<li>
		<strong>Title:</strong> عنوان الصفحة.
	</li>
</ul>
<p>
	لنقم كبداية بتعديل عنوان صفحتنا لتدلّ على أنّها صفحة “حول الموقع”.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9115_12">
<span class="pun">~/</span><span class="pln">my</span><span class="pun">-</span><span class="pln">website</span><span class="pun">/</span><span class="pln">content</span><span class="pun">/</span><span class="pln">about</span><span class="pun">.</span><span class="pln">md
</span><span class="pun">+++</span><span class="pln">
categories </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">"misc"</span><span class="pun">]</span><span class="pln">
date </span><span class="pun">=</span><span class="pln"> </span><span class="str">"2015-11-05T16:58:58-05:00"</span><span class="pln">
title </span><span class="pun">=</span><span class="pln"> </span><span class="str">"About Me"</span><span class="pln">

</span><span class="pun">+++</span></pre>

<p>
	يمكننا الآن إضافة نص Markdown تحت إشارات الجمع الثلاث “+++”، حيثُ تتم ترجمة هذا القسم ليصبح بمثابة جسم مستند HTML . سنقوم بإضافة بضعة فقرات نصية، عنوانٍ رأسي، وصورة.
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9115_17">
<span class="pun">~/</span><span class="pln">my</span><span class="pun">-</span><span class="pln">website</span><span class="pun">/</span><span class="pln">content</span><span class="pun">/</span><span class="pln">about</span><span class="pun">.</span><span class="pln">md
</span><span class="pun">+++</span><span class="pln">
categories </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">"misc"</span><span class="pun">]</span><span class="pln">
date </span><span class="pun">=</span><span class="pln"> </span><span class="str">"2015-11-05T16:58:58-05:00"</span><span class="pln">
title </span><span class="pun">=</span><span class="pln"> </span><span class="str">"About Me"</span><span class="pln">

</span><span class="pun">+++</span><span class="pln">
  
</span><span class="typ">Hello</span><span class="pln"> and welcome to my site</span><span class="pun">!</span><span class="pln">

</span><span class="com">## A Bit About Me</span><span class="pln">

I like alpacas and I</span><span class="str">'</span><span class="pln">m a fan of </span><span class="kwd">static</span><span class="pln"> sites</span><span class="pun">.</span><span class="pln">

</span><span class="pun">![</span><span class="typ">Great</span><span class="pln"> alpaca picture</span><span class="pun">](</span><span class="pln">https</span><span class="pun">:</span><span class="com">//upload.wikimedia.org/wikipedia/commons/c/c4/Alpaka_33444.jpg)</span></pre>

<p>
	عند انتهائك، قم بحفظ وإغلاق الملف.
</p>

<h2>
	إنشاء أوّل تدوينة
</h2>

<p>
	قُمنا بإنشاء صفحة الـ <code>about.md</code> في جذر مجلّد المحتوى لأنّ القالب الذي اخترناه يتوقّع أن تكون هذه الصفحة في الجذر. ولكن من المُستحسن أن يتم حفظ المنشورات في مجلّد <code>posts</code> فرعي.
</p>

<p>
	لنقم بإنشاء أوّل تدوينة لنا في مجلد المنشورات “posts”. سيقوم Hugo:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9115_19">
<span class="pln">$ hugo </span><span class="kwd">new</span><span class="pln"> post</span><span class="pun">/</span><span class="typ">My</span><span class="pun">-</span><span class="typ">First</span><span class="pun">-</span><span class="typ">Post</span><span class="pun">.</span><span class="pln">md</span></pre>

<p>
	عند استخدامنا لعلامة الترقيم “-” في اسم ملف الـ Markdown، سيتم تحوليها بشكلٍ تلقائي إلى مسافات ليكون عنوان الملف هو نفسه عنوان الصفحة. 
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9115_21">
<span class="pun">~/</span><span class="pln">my</span><span class="pun">-</span><span class="pln">website</span><span class="pun">/</span><span class="pln">content</span><span class="pun">/</span><span class="pln">post</span><span class="pun">/</span><span class="typ">My</span><span class="pun">-</span><span class="typ">First</span><span class="pun">-</span><span class="typ">Post</span><span class="pun">.</span><span class="pln">md
</span><span class="pun">+++</span><span class="pln">
categories </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">"misc"</span><span class="pun">]</span><span class="pln">
date </span><span class="pun">=</span><span class="pln"> </span><span class="str">"2015-11-05T17:52:41-05:00"</span><span class="pln">
title </span><span class="pun">=</span><span class="pln"> </span><span class="str">"My First Post"</span><span class="pln">

</span><span class="pun">+++</span></pre>

<p>
	قم بملء أيّة بيانات وصفية ناقصة وإضافة بعض شيفراتMarkdown للصفحة. سنقوم بإضافة مثال عن شيفرة لتتمكّن من ملاحظة وظيفة أداة Pygments. للقيام بذلك، بدلاً من استخدام ثلاث إشارات ترقيم لإغلاق كتلة الشيفرة، نضع الشيفرة بين وسمي highlight كالتالي: 
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9115_23">
<span class="pun">{{&lt;</span><span class="pln"> highlight language </span><span class="pun">&gt;}}</span><span class="pln">

code_goes_here

</span><span class="pun">{{&lt;</span><span class="pln"> </span><span class="pun">/</span><span class="pln">highlight </span><span class="pun">&gt;}}</span></pre>

<p>
	سيقوم هذا بتوفير تلوين النّصوص البرمجية الذي يُوفّره Pygment. ضع في اعتبارك أن بعض القوالب تحتوي ملفّات CSS تقوم بتخطّي خيارات العرض الخاصّة بـ Pygments.
</p>

<p>
	في داخل صفحتنا، يجب على المحتوى أن يبدو كالتالي: 
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9115_25">
<span class="pun">~/</span><span class="pln">my</span><span class="pun">-</span><span class="pln">website</span><span class="pun">/</span><span class="pln">content</span><span class="pun">/</span><span class="pln">post</span><span class="pun">/</span><span class="typ">My</span><span class="pun">-</span><span class="typ">First</span><span class="pun">-</span><span class="typ">Post</span><span class="pun">.</span><span class="pln">md
</span><span class="pun">+++</span><span class="pln">
categories </span><span class="pun">=</span><span class="pln"> </span><span class="pun">[</span><span class="str">"misc"</span><span class="pun">]</span><span class="pln">
date </span><span class="pun">=</span><span class="pln"> </span><span class="str">"2015-11-05T17:52:41-05:00"</span><span class="pln">
title </span><span class="pun">=</span><span class="pln"> </span><span class="str">"My First Post"</span><span class="pln">

</span><span class="pun">+++</span><span class="pln">

</span><span class="typ">This</span><span class="pln"> is my first post on the site</span><span class="pun">.</span><span class="pln">  I hope that you like it</span><span class="pun">!</span><span class="pln">

</span><span class="com">## Welcome Function</span><span class="pln">

</span><span class="typ">Here</span><span class="pln"> is a little </span><span class="typ">Python</span><span class="pln"> function to welcome you</span><span class="pun">:</span><span class="pln">

</span><span class="pun">{{&lt;</span><span class="pln"> highlight python </span><span class="pun">&gt;}}</span><span class="pln">
def hello_world</span><span class="pun">():</span><span class="pln">
    print </span><span class="str">"Hello there!"</span><span class="pln">
</span><span class="pun">{{&lt;</span><span class="pln"> </span><span class="pun">/</span><span class="pln">highlight </span><span class="pun">&gt;}}</span></pre>

<p>
	أغلق واحفظ الملف في حال انتهائك من تعديله. إذا أردت أن تُعدّل تلك الصفحات لاحقًا، ستتمكّن من إيجادها في مجلّد المحتوى <code>content</code> الخاص بموقع الـ Hugo.
</p>

<p>
	لنقم الآن بإيداع صفحاتنا الجديدة لمستودع الـ <code>git</code>:
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted" id="ips_uid_9795_7">
<span class="pln">$ git add .
$ git commit -m 'First pages of our site'</span></pre>

<h2 id="بناء-وتخديم-الموقع">
	بناء وتخديم الموقع
</h2>

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

<p>
	لبناء موقعك، قم بكتابة التالي:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9115_27">
<span class="pln">$ hugo</span></pre>

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

<p>
	<strong>ملاحظة:</strong> لا يقوم Hugo بتنظيف مجلّد ملفّات الخرج بعد كل بناءٍ للموقع، مما يُزيد من إمكانية وجود محتوىً قديم في المجلّد العام <code>public</code> يَعود لإصدار أقدم من الموقع؛ لذلك يَنصح مبرمجو Hugo بحذف المجلّد العام <code>public</code> بعد كل عملية بناء للموقع (خاصةً قبل الانتقال إلى بيئة الانتاج)، بُغية إعادة إنشاء جميع المحتوى من جديد.
</p>

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

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

<p>
	سنقوم باستخدام الخيار <code>–bind</code> لتحديد أنّنا نريد جعل الموقع متاحاً على جميع الواجهات، إلّا أنّه في حال كان Hugo منصّبًا محلّيًا، يمكنك إزالة هذا الخيار. ينبغي علينا أيضًا تضمين خيار الـ <code>--bindUrl</code>، حيث قٌمنا بضبط هذا الخيار في ملفِّ التهيئة، إلّا أنّه ليس مُحمّلًا على الخادوم في الإصدار الحالي من Hugo. أسنِد اسم نطاق موقعك أو عنوان الـ IP الخاصّ بك لهذا الخيار: 
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9115_29">
<span class="pln">$ rm </span><span class="pun">-</span><span class="pln">r </span><span class="kwd">public</span><span class="pln">
$ hugo server </span><span class="pun">--</span><span class="pln">bind</span><span class="pun">=</span><span class="lit">0.0</span><span class="pun">.</span><span class="lit">0.0</span><span class="pln"> </span><span class="pun">--</span><span class="pln">baseUrl</span><span class="pun">=</span><span class="pln">http</span><span class="pun">:</span><span class="com">//your_domain_or_IP/</span></pre>

<p>
	إذا عيّنت <code>draft = true</code> لأيّة صفحة، أو عيّنت الـ <code>date</code> لتاريخٍ في المستقبل لمحتواك، يُمكنك بناء وعرض هذه الصفحات بإضافة خيارات الـ <code>-D</code> والـ <code>-F</code> إلى الأمر على التّوالي: 
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9115_31">
<span class="pln">$ rm </span><span class="pun">-</span><span class="pln">r </span><span class="kwd">public</span><span class="pln">
$ hugo server </span><span class="pun">--</span><span class="pln">bind</span><span class="pun">=</span><span class="lit">0.0</span><span class="pun">.</span><span class="lit">0.0</span><span class="pln"> </span><span class="pun">--</span><span class="pln">baseUrl</span><span class="pun">=</span><span class="pln">http</span><span class="pun">:</span><span class="com">//your_domain_or_IP/ -D -F</span></pre>

<p>
	عند زيارتك الآن لاسم نطاق خادومك أو عنوان الـ IP في مستعرضك، وإضافتك للمنفذ <code>:1313</code> إلى نهاية العنوان، سترى موقعك الّذي تمّت مُعالجته: 
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9115_33">
<span class="pln">http</span><span class="pun">:</span><span class="com">//your_domain_or_IP:1313</span></pre>

<p style="text-align: center;">
	<img alt="main_page.png" class="ipsImage ipsImage_thumbnailed" data-fileid="21175" data-unique="seigt3ezi" src="https://academy.hsoub.com/uploads/monthly_2017_02/main_page.png.a13ceeb2055a172196d5bd397e36d910.png" style=""></p>

<p>
	يُمكننا النقر على أوّل منشور للتحقّق من مُعالجة نصِّ الـ Markdown بالشكلِ الصحيح. في حين تمّ تطبيق أسلوب العرض الخاص بـ Pygments على كتلة الشيفرة التي قٌمنا بوضعها أعلاه:
</p>

<p style="text-align: center;">
	<img alt="first_page.png" class="ipsImage ipsImage_thumbnailed" data-fileid="21174" data-unique="4a5txvlfc" src="https://academy.hsoub.com/uploads/monthly_2017_02/first_page.png.7bf3b7b6175f0701282150ce66a517af.png" style=""></p>

<p>
	في حال نقرِك على “About”، سيتم أخذك إلى صفحة “حول الموقع”:
</p>

<p style="text-align: center;">
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="21173" href="https://academy.hsoub.com/uploads/monthly_2017_02/about_page.png.e137df8c2bad007a8e72ebe6c1e69912.png" rel=""><img alt="about_page.png" class="ipsImage ipsImage_thumbnailed" data-fileid="21173" data-unique="hk2dapuk8" src="https://academy.hsoub.com/uploads/monthly_2017_02/about_page.thumb.png.4bcbb3dbf1a60bd4d8875c68f162b9a0.png" style=""></a>
</p>

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

<p>
	إذا أردت تجربة قوالبٍ أخرى، يمكنك إضافة الخيار <code>--theme=</code>إلى نهاية سطر الخادوم، كالتالي: 
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9115_35">
<span class="pln">$ rm </span><span class="pun">-</span><span class="pln">r </span><span class="kwd">public</span><span class="pln">
$ hugo server </span><span class="pun">--</span><span class="pln">bind</span><span class="pun">=</span><span class="lit">0.0</span><span class="pun">.</span><span class="lit">0.0</span><span class="pln"> </span><span class="pun">--</span><span class="pln">baseUrl</span><span class="pun">=</span><span class="pln">http</span><span class="pun">:</span><span class="com">//your_domain_or_IP/ --theme=redlounge</span></pre>

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

<p>
	إذا أردت أن تَستخدم Hugo ليعمل على تخديم المحتوى على منفذ 80 كما هوَ مُعتاد لخادوم ويب، قم بإضافة الخيار <code>–port</code> لسطر الأوامر، حيثُ يجب أيضًا كتابة الأمر مسبوقًا بـ <code>sudo</code>، نظرًا لكونِ المنافذ الأصغر من 1024 محجوبةً للمستخدمين العاديين: 
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9115_38">
<span class="pln">$ rm </span><span class="pun">-</span><span class="pln">r </span><span class="kwd">public</span><span class="pln">
$ sudo hugo server </span><span class="pun">--</span><span class="pln">bind</span><span class="pun">=</span><span class="lit">0.0</span><span class="pun">.</span><span class="lit">0.0</span><span class="pln"> </span><span class="pun">--</span><span class="pln">baseUrl</span><span class="pun">=</span><span class="pln">http</span><span class="pun">:</span><span class="com">//your_domain_or_IP/ --theme=redlounge --port=80</span></pre>

<p>
	ستتمكّن الآن من زيارة موقعك في متصفحٍ من دون الحاجة إلى إضافة رقم المنفذ إلى عنوان الموقع.
</p>

<p>
	بعد تشغيل خادوم Hugo باستخدام <code>sudo</code>، ستحتاج أيضًا إلى إدخال الأمر <code>rm</code> مسبوقًا بـ <code>sudo</code>:
</p>

<pre class="ipsCode prettyprint lang-c prettyprinted" id="ips_uid_9115_40">
<span class="pln"> $ sudo rm </span><span class="pun">-</span><span class="pln">r </span><span class="kwd">public</span><span class="pln">
</span></pre>

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

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

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-use-hugo-a-static-site-generator-on-ubuntu-14-04" rel="external nofollow">How to Install and Use Hugo, a Static Site Generator, on Ubuntu 14.04</a> لصاحبه Justin Ellingwood
</p>
]]></description><guid isPermaLink="false">293</guid><pubDate>Thu, 09 Feb 2017 06:47:07 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x62A;&#x646;&#x635;&#x64A;&#x628; &#x648;&#x625;&#x639;&#x62F;&#x627;&#x62F; Hugo&#x60C; &#x645;&#x648;&#x651;&#x644;&#x62F; &#x627;&#x644;&#x645;&#x648;&#x627;&#x642;&#x639; &#x627;&#x644;&#x625;&#x633;&#x62A;&#x627;&#x62A;&#x64A;&#x643;&#x64A;&#x629; &#x639;&#x644;&#x649; &#x623;&#x648;&#x628;&#x646;&#x62A;&#x648;</title><link>https://academy.hsoub.com/devops/servers/web/%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-hugo%D8%8C-%D9%85%D9%88%D9%91%D9%84%D8%AF-%D8%A7%D9%84%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A7%D9%84%D8%A5%D8%B3%D8%AA%D8%A7%D8%AA%D9%8A%D9%83%D9%8A%D8%A9-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-r292/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_01/hugo-ubuntu.png.b9c4ab3fdab2791b3c63d95326166c2d.png" /></p>

<h2 id="كيفية-تنصيب-وإعداد-hugo-مولد-المواقع-الإستاتيكية-على-أوبنتو">
	المقدّمة
</h2>

<p>
	يُعتبر Hugo موّلدًا للمواقع الإستاتيكية، يتميّز بسرعتِه وسهولةِ استخدامه، تمّت كتابته باستخدام لغة Go وهو متاح للعديد من الأنظمة. تُعد موّلدات المواقع الإستاتيكية خيارًا مثاليًا للمدوّنات والمحتويات الأخرى التي لا تتطلّب محتوًى ديناميكيًا يتم تحميله من قاعدة بيانات. تسمح لك أدات مثل Hugo بتبسيط مهامك، وبكتابة مستندات Markdown سهلة الاستخدام.
</p>

<p style="text-align: center;">
	<img alt="hugo-ubuntu.png" class="ipsImage ipsImage_thumbnailed" data-fileid="20792" data-unique="3rer20gbb" src="https://academy.hsoub.com/uploads/monthly_2017_01/hugo-ubuntu.png.36e6143a035b3a62c378c392be45d589.png" style=""></p>

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

<h2 id="المتطلبات-المسبقة">
	المتطلّبات المُسبقة
</h2>

<p>
	لإكمال خطوات هذا المقال، يجب أن يتوفّر لديك الوصول إلى خادوم Ubuntu 14.04. على هذا الخادوم، ستحتاج إلى مستخدم غير مستخدم Root مع صلاحيات <code>sudo</code> تمّت تهيئتها للقيام بمهامٍ إداريّة.
</p>

<h2 id="تنصيب-آخر-إصدار-من-hugo">
	تنصيب آخر إصدار من Hugo
</h2>

<p>
	Hugo ليس متاحًا في مستودعات تخزين Ubuntu الافتراضية (Default Repositories)، إلّا إن هذه الحزم متاحة على GitHub للعديد من المعماريات والتوزيعات.
</p>

<h3 id="تحقق-من-معمارية-النظام">
	تحقّق من معمارية النظام
</h3>

<p>
	قبل أن نبدأ، يجب أن نتحقّق من معمارية خادوم Ubuntu لنتمكّن من تحميل الحزمة المناسبة. نفّذ الأمر التالي على خادومك:
</p>

<pre class="ipsCode" id="ips_uid_5003_7">
$ uname –i</pre>

<p>
	إذا ظهر التالي، هذا يعني أنّك تقوم بتشغيل إصدار<strong>64 بت</strong> من Ubuntu:
</p>

<pre class="ipsCode" id="ips_uid_5003_9">
Output
X86_64</pre>

<p>
	أمّا إذا ظهرَ التالي، هذا يعني أنّ إصدار الـ Ubuntu الخاص بك هو إصدار<strong>32 بت</strong>:
</p>

<pre class="ipsCode" id="ips_uid_5003_11">
Output
i686</pre>

<p>
	سنقوم باستخدام هذه المعلومات لاحقًا.
</p>

<h3 id="تحميل-وتنصيب-حزمة-hugo">
	تحميل وتنصيب حزمة Hugo
</h3>

<p>
	قم بزيارة <a href="https://github.com/spf13/hugo/releases" rel="external nofollow">صفحة إصدارات Hugo</a> لإيجاد آخر إصدار من Hugo (أعلى الصفحة). اذهب إلى قسم “Downloads”.
</p>

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

<ul>
<li>
		في حال استخدامك <strong>لإصدار 64 بت</strong> من Ubuntu، اضغط بالزر الأيمن على الرابط المنتهي بـ <code>amd64.deb</code> وانسخ موقع الرابط.
	</li>
	<li>
		أمّا في حال استخدامك <strong>لإصدار 32 بت</strong> من Ubuntu، اضغط بالزر الأيمن على الرابط المنتهي بـ <code>i386.deb</code> وانسخ موقع الرابط.
	</li>
</ul>
<p>
	على خادومك، بعد تسجيل دخولك لحساب يمتلك صلاحيات <code>sudo</code>، انتقل إلى مجلدٍ ما تمتلك صلاحيات الكتابة فيه. استخدم الأمر <code>wget</code> والصق الرابط الذي نسخته لتحميل Hugo.<code> </code>
</p>

<pre class="ipsCode" id="ips_uid_5003_13">
$ cd ~
$ wget https://github.com/spf13/hugo/releases/download/v0.14/hugo_0.14_amd64.deb
</pre>

<p>
	يمكنك الآن تنصيب الحزمة باستخدام <code>dpkg</code> عن طريق كتابة التالي:
</p>

<pre class="ipsCode" id="ips_uid_5003_15">
$ sudo dpkg -i hugo*.deb</pre>

<p>
	تحقّق من نجاح التنصيب عن طريق تنفيذ أمر Hugo الذي سيقوم بطباعة إصدار البرنامج.
</p>

<pre class="ipsCode" id="ips_uid_5003_17">
$ hugo version</pre>

<p>
	يقوم هذا الأمر بطباعة إصدار Hugo الحالي.
</p>

<pre class="ipsCode" id="ips_uid_5003_19">
Output
Hugo Static Site Generator v0.14 BuildDate: 2015-05-25T21:29:16-04:00</pre>

<h2 id="تنصيب-برنامج-دعم-hugo">
	تنصيب برنامج دعم Hugo
</h2>

<p>
	أنهينا تنصيب Hugo، إلّا أنّ هنالك بضعة برامجيات صغيرة يجب علينا أن نُنصّبها لنتمكّن من تشغيل البرنامج بشكلٍ صحيح.
</p>

<h3 id="تنصيب-القوالبhugo-themes">
	تنصيب القوالب Hugo Themes
</h3>

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

<p>
	يمكننا أن نجد <code>git</code> في مستودعات تخزين Ubuntu الافتراضية. قم بتحديث فهرس الحزم المحلّي ومن ثمّ تنصيب <code>git</code> بتنفيذ:
</p>

<pre class="ipsCode" id="ips_uid_5003_21">
$ sudo apt-get update
$ sudo apt-get install git</pre>

<p>
	ثمّ بعد ذلك، يمكننا نسخ مستودعات قوالب Hugo. تم تضمين كل قالب فردي كوحدة برمجيّة فرعيّة (submodule).
</p>

<p>
	يفضل نسخ القوالب إلى المجلد الرئيسي <code>home</code>. يُمكننا بعد ذلك إنشاء رابط رمزي (Symbolic Link) لتلك القوالب ضمن مجلّد الموقع. ستسمح لنا هذه العمليّة بمشاركة القوالب بسهولة تامّة في حال امتلاكنا لعدّة مواقع.
</p>

<p>
	انسخ مستودع القوالب إلى المجلّد الرئيسي عن طريق كتابة التالي:
</p>

<pre class="ipsCode" id="ips_uid_5003_23">
$ git clone --recursive https://github.com/spf13/hugoThemes ~/themes</pre>

<h2 id="تنصيب-برنامج-تلوين-النصوص-البرمجية-pygments-syntax-highlighter">
	تنصيب برنامج تلوين النّصوص البرمجية Pygments Syntax Highlighter
</h2>

<p>
	سنحتاج أيضًا إلى تنصيب برنامج مكتوب بلغة Python يُدعى Pygments. يقوم هذا البرنامج بتلوين النصوص البرمجية. يمكننا تنصيب Pygments بسهولة عن طريق استخدام <code>pip</code>، الأمر المسؤول عن إدارة حزم Python.
</p>

<p>
	يمكننا الحصول على <code>pip</code> من مستودعات التخزين الافتراضية بكتابة:
</p>

<pre class="ipsCode" id="ips_uid_5003_25">
$ sudo apt-get install python-pip</pre>

<p>
	حالما ينتهي الأمر <code>apt</code>، يمكننا استخدام <code>pip</code> لتنصيب <code>Pygments</code> عن طريق كتابة التالي:
</p>

<pre class="ipsCode" id="ips_uid_5003_27">
$ sudo pip install Pygments</pre>

<h2 id="تفعيل-خاصية-الإكمال-التلقائي-الخاصة-بـ-hugo-على-bash">
	تفعيل خاصيّة الإكمال التلقائي الخاصة بـ Hugo على Bash
</h2>

<p>
	آخر إجراء يجب علينا القيام به قبل البدء بالعمل على موقعنا الأول، هو تفعيل خاصيّة الإكمال التلقائي الخاصة بـ Hugo على <code>Bash</code>. يتم ذلك بتنفيذ الأمر التالي:
</p>

<pre class="ipsCode" id="ips_uid_5003_29">
$ sudo hugo genautocomplete</pre>

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

<pre class="ipsCode" id="ips_uid_5003_31">
$ . /etc/bash_completion</pre>

<p>
	إذا قمت الآن بكتابة <code>hugo</code> متبوعةً ببضعة ضغطات على مفتاح الجدولة TAB، ستتمكن من رؤية الأوامر المدعومة من قبل Hugo:
</p>

<pre class="ipsCode" id="ips_uid_5003_33">
$ hugo [TAB][TAB][TAB]</pre>

<pre class="ipsCode" id="ips_uid_5003_35">
Output
benchmark        config           genautocomplete  help             new              undraft
check            convert          gendoc           list             server           version</pre>

<h2>
	إنشاء موقعك الأوّل
</h2>

<p>
	بعدَ انتهائنا من تهيئة البرنامج، يمكننا المُضي قدمًا وإنشاء أول موقع لدينا. يحتوي Hugo على موّلدٍ قادرٍ على إنشاء هيكل من الملفّات والمجلّدات اللازمة لإنشاء الموقع.
</p>

<p>
	يمكننا إنشاء موقعٍ جديد في المجلد الرئيسي عن طريق كتابة التالي: 
</p>

<pre class="ipsCode" id="ips_uid_5003_37">
$ hugo new site ~/my-website
</pre>

<p>
	انتقل إلى المجلد الذي يحتوي موقعك الجديد لرؤية المزيد:
</p>

<pre class="ipsCode" id="ips_uid_5003_39">
$ cd ~/my-website
$ ls -F</pre>

<p>
	سترى بنية المجلد وملف الإعدادات الرئيسي المُستخدم لبناء موقع الـ Hugo.
</p>

<p>
	الخرج:
</p>

<pre class="ipsCode" id="ips_uid_5003_43">
archetypes/  config.toml  content/  data/  layouts/  public/  static/
</pre>

<p>
	لنقم بالربط على مجلد القوالب <code>~/themes</code> من داخل موقعنا. ولتسهيل مهمة نقل الموقع لاحقًا، سنقوم بإعداد رابط رمزي نسبي.<br><script type="math/tex" id="MathJax-Element-1"> ln -s ../themes .  
    </script></p>

<pre class="ipsCode" id="ips_uid_9586_8">
 ls -l</pre>

<pre>
<code>
</code></pre>

<pre class="ipsCode" id="ips_uid_5003_45">
total 28
drwxrwxr-x  2 demouser demouser 4096 Nov  5 11:25 archetypes
-rw-rw-r--  1 demouser demouser  210 Nov  5 11:55 config.toml
drwxrwxr-x  3 demouser demouser 4096 Nov  5 11:38 content
drwxrwxr-x  2 demouser demouser 4096 Nov  5 11:25 data
drwxrwxr-x  2 demouser demouser 4096 Nov  5 11:25 layouts
drwxrwxr-x 13 demouser demouser 4096 Nov  5 11:25 public
drwxrwxr-x  2 demouser demouser 4096 Nov  5 11:25 static
lrwxrwxrwx  1 demouser demouser    9 Nov  5 14:21 themes -&gt; ../themes
</pre>

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

<h2 id="التحكم-في-الموقع-باستخدام-نظام-إدارة-الإصدارات-source-control">
	التّحكم في الموقع باستخدام نظام إدارة الإصدارات Source Control
</h2>

<p>
	قبل الشّروع في إعداد الموقع وإنشاء المحتوى، يجب أن ندير موقعنا باستخدام git.
</p>

<p>
	تأكّد من وجودِك في مجلّد الموقع وأنشئ مستودع <code>git</code> بكتابة التالي:
</p>

<pre class="ipsCode" id="ips_uid_5003_47">
$ cd ~/my-website
$ git init</pre>

<p style="text-align: right;">
	الخرج:
</p>

<pre class="ipsCode" id="ips_uid_5003_49">
Initialized empty Git repository in /home/demouser/my-website/.git/
</pre>

<p>
	قُم بإعداد <code>git</code> (إن لم يسبق لك القيام بذلك) . الطريقة الأسهل للقيام بذلك هي عن طريق الأمر <code>git config –global</code> يجب عليك أن تُحدّد اسمك وعنوان البريد الإلكتروني الخاص بك، حتى تتمكّن <code>git</code> من تخزين معلوماتنا في الإيداعات commit بشكل صحيح.
</p>

<pre class="ipsCode" id="ips_uid_5003_51">
$ git config --global user.name "yourName"
$ git config --global user.email "user@email.com"</pre>

<p>
	بشكلٍ افتراضي، لن تضيف <code>git</code> أيّ مجلداتٍ فارغة إلى المستودع. في بعضِ الأوقات، يتطلّب Hugo أن تكون تلك المجلّدات موجودة حتى في حال خليّها من الملفات. يمكننا تضمين ملف <code>.gitkeep</code> مخفي في كلِّ من هذه المجلّدات لحل هذا المُشكل.
</p>

<p>
	يمكننا إضافة ملف <code>.gitkeep</code> مخفي لكلِّ من مجلّدات المستوى الأعلى (غير مجلّد <code>.git</code> المخفي أصلًا) بكتابة التالي:
</p>

<pre class="ipsCode" id="ips_uid_5003_53">
$ for DIR in `ls -p | grep /`; do touch ${DIR}.gitkeep; done</pre>

<p>
	نلاحظ إضافة الملف المخفي <code>.gitkeep</code> لكلٍّ من مجلّدات المستوى الأعلى عن طريق كتابة ما يلي:
</p>

<pre class="ipsCode" id="ips_uid_5003_55">
$ find . -name .gitkeep</pre>

<p style="text-align: right;">
	الخرج:
</p>

<pre class="ipsCode" id="ips_uid_5003_59">
./data/.gitkeep
./layouts/.gitkeep
./archetypes/.gitkeep
./static/.gitkeep
./content/.gitkeep
</pre>

<p>
	احرص أيضًا أن لا يتم إيداع الملفات التي تم توليدها (ملفات HTML، JavaScript و CSS) إلى المُستودع. يجب أن يتم توليد هذه الملفات بعد كل عملية نشر للموقع. يمكننا أن نطلب من <code>git</code> تجاهل المجلّد العام <code>public</code> حيث يتم تخزين المحتوى المُوّلد عن طريق إضافته إلى ملفّ <code>.gitignore</code> كالتالي:
</p>

<pre class="ipsCode" id="ips_uid_5003_61">
$ echo "public" &gt;&gt; .gitignore</pre>

<p>
	يمكننا الآن إيداع هيكل موقعنا لمستودع التخزين، وذلك بإضافة كلّ المحتوى للمجلّد الحالي ومن ثمّ الإيداع (commit).
</p>

<pre class="ipsCode" id="ips_uid_5003_63">
$ git add .
$ git commit -m 'Initial commit, pre-configuration.'</pre>

<h2 id="ضبط-الإعدادات-الأولية-للموقع">
	ضبط الإعدادات الأوليّة للموقع
</h2>

<p>
	لنقم الآن بضبط ملف إعدادات Hugo الرئيسي لتحديد كيفية بناء Hugo لموقعنا.<br>
	قم بفتح الملف <code>config.toml</code> في محرّرك:
</p>

<pre class="ipsCode" id="ips_uid_5003_65">
$ nano config.toml</pre>

<p>
	سترى في داخله بضعة أسطر بحاجة إلى الضبط:
</p>

<pre class="ipsCode" id="ips_uid_5003_67">
~/my-website/config.toml
baseurl = "http://replace-this-with-your-hugo-site.com/"
languageCode = "en-us"
title = "My New Hugo Site"</pre>

<p>
	السطر الأول الواجب تغييره هو سطر الـ <code>baseurl</code>. يُستخدم هذا السطر لبناء عناوين URL عند بناء الموقع. قم بتغيير ذلك السطر إلى اسم نطاق خاص بك أو عنوان الـ IP العام الخاص بخادومك. ينبغي عليك أيضًا أن تُعدّل القيمة المُسندة لسطر العنوان <code>title</code>. يُستخدم هذا السطر لتحديد عناوين صفحات موقعك.
</p>

<pre class="ipsCode" id="ips_uid_5003_69">
~/my-website/config.toml
baseurl = "http://your_domain_or_IP/"
languageCode = "en-us"
title = "Your Site Name"</pre>

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

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

<pre class="ipsCode" id="ips_uid_5003_71">
~/my-website/config.toml
baseurl = "http://your_domain_or_IP/"
languageCode = "en-us"
title = "Your Site Name"
newContentEditor = "nano"
theme = "nofancy"
pygmentsStyle = "native"</pre>

<p>
	يمكنك التعرّف على معلوماتٍ أخرى حول الإعدادات المتاحة في <a href="https://gohugo.io/overview/configuration/" rel="external nofollow">هذه الصفحة</a>، قم بحفظ وإغلاق الملف.
</p>

<p>
	لنقم بإيداع تعديلات التهيئة قبل أن نستمر بإنشاء الموقع:
</p>

<pre class="ipsCode" id="ips_uid_5003_73">
$ git add .
$ git commit -m 'Initial configuration complete'</pre>

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

<p>
	تعرفنا في هذا المقال على كيفية تنصيب وإعداد Hugo. في المقال القادم سنستعرض كيفية إضافة صفحات ومُحتويات إلى الموقع.
</p>

<p>
	ترجمة -وبتصرّف- للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-use-hugo-a-static-site-generator-on-ubuntu-14-04" rel="external nofollow">How to Install and Use Hugo, a Static Site Generator, on Ubuntu 14.04</a> لصاحبه Justin Ellingwood
</p>
]]></description><guid isPermaLink="false">292</guid><pubDate>Mon, 23 Jan 2017 09:40:00 +0000</pubDate></item></channel></rss>
