<?xml version="1.0"?>
<rss version="2.0"><channel><title>DevOps: &#x645;&#x642;&#x627;&#x644;&#x627;&#x62A; &#x639;&#x627;&#x645;&#x629;</title><link>https://academy.hsoub.com/devops/general/page/2/?d=4</link><description>DevOps: &#x645;&#x642;&#x627;&#x644;&#x627;&#x62A; &#x639;&#x627;&#x645;&#x629;</description><language>ar</language><item><title>&#x645;&#x646; &#x627;&#x644;&#x630;&#x64A; &#x633;&#x64A;&#x642;&#x627;&#x648;&#x645; &#x623;&#x643;&#x62B;&#x631; &#x639;&#x645;&#x644;&#x64A;&#x629; &#x627;&#x644;&#x627;&#x646;&#x62A;&#x642;&#x627;&#x644; &#x625;&#x644;&#x649; DevOps&#x61F;</title><link>https://academy.hsoub.com/devops/general/%D9%85%D9%86-%D8%A7%D9%84%D8%B0%D9%8A-%D8%B3%D9%8A%D9%82%D8%A7%D9%88%D9%85-%D8%A3%D9%83%D8%AB%D8%B1-%D8%B9%D9%85%D9%84%D9%8A%D8%A9-%D8%A7%D9%84%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D8%A5%D9%84%D9%89-devops%D8%9F-r439/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_09/5d6e603a7cef6_.jpg.496d3f837ced27accdebdf2ff1beae3f.jpg" /></p>

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

	<p>
		ستحقق DevOps بالتأكيد التغيير لمؤسستك، ولن يحب الجميع هذا التغيير. إليك كيف تتعامل مع أولئك الذين يقاومون هذا التحوّل المحتوم.
	</p>
</blockquote>

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

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

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

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="31243" href="https://academy.hsoub.com/uploads/monthly_2019_09/5d6e603f0a44e_.jpg.7843661eb64ca220e8aa6b1b5b679486.jpg" rel=""><img alt="من الذي سيقاوم أكثر عملية الانتقال.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="31243" data-unique="ac2nvf6si" src="https://academy.hsoub.com/uploads/monthly_2019_09/5d6e603f1fdd6_.thumb.jpg.c219505b1cb0d119f5392b77e2e35343.jpg"></a>
</p>

<h2 id="-">
	هذا لم يُخترَع من أجلنا: الخوف من المجهول
</h2>

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

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

<h2 id="-">
	مجالي: الخوف من فقدان السيطرة
</h2>

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

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

<h2 id="-">
	متشبث بأسلوبي: الخوف من الجديد
</h2>

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

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

<h2 id="-">
	مدراء الأفراد: الخوف من فقدان السلطة
</h2>

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

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

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

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

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

<h2 id="-">
	أفكار ختامية
</h2>

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

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

<p>
	ترجمة وبتصرف للمقال <a href="https://opensource.com/sites/default/files/gated-content/getting_started_with_devsecops-v1.pdf" rel="external nofollow">Who will push back the most on a move to DevOps?</a>‎ لمايك بورسيل
</p>
]]></description><guid isPermaLink="false">439</guid><pubDate>Tue, 03 Sep 2019 15:20:49 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x62A;&#x62D;&#x62F;&#x62B; &#x645;&#x639; &#x627;&#x644;&#x646;&#x627;&#x633; &#x627;&#x644;&#x639;&#x627;&#x62F;&#x64A;&#x64A;&#x646; &#x62D;&#x648;&#x644; &#x627;&#x644;&#x623;&#x645;&#x646;&#x61F;</title><link>https://academy.hsoub.com/devops/general/%D9%83%D9%8A%D9%81-%D8%AA%D8%AA%D8%AD%D8%AF%D8%AB-%D9%85%D8%B9-%D8%A7%D9%84%D9%86%D8%A7%D8%B3-%D8%A7%D9%84%D8%B9%D8%A7%D8%AF%D9%8A%D9%8A%D9%86-%D8%AD%D9%88%D9%84-%D8%A7%D9%84%D8%A3%D9%85%D9%86%D8%9F-r438/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_09/5d6e5b09e757c_.jpg.1b787b06d88cee7c5ef55de69bd7053f.jpg" /></p>

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

	<p>
		يرغب الناس العاديون عموما أن تعمل الأشياء لا أكثر.
	</p>
</blockquote>

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

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

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

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="31242" href="https://academy.hsoub.com/uploads/monthly_2019_09/5d6e5b0f86c21_.jpg.a0e11489a567d43e80e8a49c7b44123c.jpg" rel=""><img alt="صكيف تتحدث مع الناس العاديين حول الأمن.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="31242" data-unique="uqx7ndx1s" src="https://academy.hsoub.com/uploads/monthly_2019_09/5d6e5b0f9cdbc_.thumb.jpg.7cb4025f260833c9ce70cfbf9dba5573.jpg"></a>
</p>

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

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

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

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

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

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

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

<hr>
<ol>
<li>
		أعني بذلك "أولئك المساكين الذين لا يقرؤون هذه المنشورات، على عكسك، عزيزي القارئ الذكي".
	</li>
	<li>
		يبدو أن زوجتي، للأسف، تندرج في هذه الفئة.
	</li>
	<li>
		الكتب التي عادة ما يكون على غلافها صورة قفلٍ.
	</li>
	<li>
		ونتمنى لك التوفيق في ذلك.
	</li>
	<li>
		مجازًا فقط، فأنا لا أقبل نقل أي أسلحة إلى مكان العمل بما في ذلك الأسلحة النارية.
	</li>
</ol>
<p>
	ترجمة وبتصرف للمقال <a href="https://opensource.com/sites/default/files/gated-content/getting_started_with_devsecops-v1.pdf" rel="external nofollow">Talking to normal people about security</a> لمايك بورسيل
</p>
]]></description><guid isPermaLink="false">438</guid><pubDate>Tue, 03 Sep 2019 15:20:31 +0000</pubDate></item><item><title>&#x644;&#x645;&#x627;&#x630;&#x627; &#x64A;&#x646;&#x628;&#x63A;&#x64A; &#x639;&#x644;&#x649; &#x641;&#x631;&#x642; &#x627;&#x644;&#x62A;&#x637;&#x648;&#x64A;&#x631; &#x62A;&#x628;&#x646;&#x651;&#x64A; &#x62B;&#x642;&#x627;&#x641;&#x629; DevOps&#x61F;</title><link>https://academy.hsoub.com/devops/general/%D9%84%D9%85%D8%A7%D8%B0%D8%A7-%D9%8A%D9%86%D8%A8%D8%BA%D9%8A-%D8%B9%D9%84%D9%89-%D9%81%D8%B1%D9%82-%D8%A7%D9%84%D8%AA%D8%B7%D9%88%D9%8A%D8%B1-%D8%AA%D8%A8%D9%86%D9%91%D9%8A-%D8%AB%D9%82%D8%A7%D9%81%D8%A9-devops%D8%9F-r442/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_09/5d6e82d688eb5_DevOps.jpg.baad74cd34b0015dece1d1f615af88d4.jpg" /></p>

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

	<p>
		ربّما يكون اعتماد ثقافة DevOps هو الميزة التنافسية التي تحتاج إليها مؤسستك
	</p>
</blockquote>

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

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

<p>
	يمكن أن تساهم الثقافة السليمة لدى فريق DevOps في عوائد ضخمة للمؤسسة. أفادت <a href="https://www.techrepublic.com/article/10-steps-to-devops-success-in-the-enterprise/" rel="external nofollow">دراسة شملت 4600 فريق لتكنولوجيا المعلومات</a> أن أولئك الذين يتبنون ثقافة DevOps نشروا برامج أكثر مائتي مرة من الفرق ذات الأداء المنخفض. لقد أمضوا نصف الوقت اللازم فقط لإصلاح مشكلات الأمان، وحققوا زمن استردادٍ أقلّ لبرامجهم ، وكان معدل فشل التغيير لديهم أقلّ ثلاث مرات. وبالتالي، يمكن لجميع المنظمات تقريبًا أن تجد بعض المزايا في تبني ثقافة DevOps، ولكن ماهي هذه الثقافة؟ وما هي تجلياتها؟
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="31253" href="https://academy.hsoub.com/uploads/monthly_2019_09/5d6e82d258022_DevOps.jpg.2871177f10af1f980d11453738bcfb1e.jpg" rel=""><img alt="لماذا على فرق التطوير تبني ثقافة DevOps.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="31253" data-unique="5ub2vyl13" src="https://academy.hsoub.com/uploads/monthly_2019_09/5d6e82d26d694_DevOps.thumb.jpg.b83c2be7417d8469226209beac51d67f.jpg"></a>
</p>

<h2 id="-">
	احرص على قياس أداء فريقك ومساءلته وكن شفافًا
</h2>

<p>
	إنه من المهمّ للغاية، في كل مرحلة، وضع مؤشرات أداء رئيسية واضحة (KPIs). يجب أن يعرف أعضاء الفريق دائمًا ما هو مُتوقّع منهم وكيف يلائم المشروع الكلي. لا تؤدي هذه الشفافية إلى تحسين التواصل فحسب، بل يمكن أن تفيد أيضًا في مساءلة الفريق.
</p>

<p>
	في الماضي، كانت العديد من الشركات تميل إلى عزل العمّال عن الأهداف و التصورات العامّة. ولا تتمّ مشاركة عناصر المشروع إلا على أساس "الحاجة إلى المعرفة". لكن فرق DevOps المميزة تخطت هذا المفهوم بشكل كامل. يجب أن يعلم الجميع كيف تعمل الأنظمة وكيف تتوافق الأشياء معًا. توفر أدوات التعاون مثل <a href="https://visualstudio.microsoft.com/tfs/" rel="external nofollow">Microsoft Azure DevOps Server</a> وبدائل أخرى ذات مصادر مفتوحة للفرق صورة واضحة لمراحل المشروع خلال التخطيط والتطوير والاختبار والنشر.
</p>

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

<h2 id="-">
	أتمِت ما تستطيع
</h2>

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

	<p>
		<em>من خلال تقليل المهام اليدوية والمتكررة، ستزيد من تطوّرك وسرعة اختبارك مع تقليل الأخطاء بشكل ملموس.</em>
	</p>
</blockquote>

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

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

<h2 id="-">
	اخلق ثقافة التعاون
</h2>

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

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

<p>
	تعني هذه المقاربة التشاركية أنه يمكن تطوير البرنامج بشكل أسرع مع وجود نسبة أقل من الأخطاء. بالإضافة إلى التحول الثقافي، ستحتاج الفرق إلى أدوات تطوير DevOps جديدة، مثل <a href="https://jfrog.com/integration/go-registry/" rel="external nofollow">سجلات JFrog و Go </a>، والتي تتيح التقسيم والتعاون. إذ توفّر أدوات مثل هذه رؤية أوضح فضلا عن التواصل بين أعضاء الفريق.
</p>

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

<h2 id="-">
	ضع أهدافاً واقعية وشفافة
</h2>

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

	<p>
		<em>إن التخلي عن فكرة الفرق المنفصلة يمكّن الأفراد من التدخل والمساعدة عندما تكون أي لبنة رئيسية في خطر. </em>
	</p>
</blockquote>

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

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

<h2 id="-">
	هيّئ بيئة مشتركة للتعلّم والتحسين المستمر
</h2>

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

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

<h2 id="-devops-">
	لثقافة DevOps مزايا متنوعة
</h2>

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

<p>
	ترجمة -وبتصرف- للمقال <a href="https://opensource.com/article/19/4/dev-to-devops?utm_campaign=intrel" rel="external nofollow">Why every dev team should adopt a DevOps culture in 2019</a> لصاحبه Matt Shealy
</p>
]]></description><guid isPermaLink="false">442</guid><pubDate>Tue, 03 Sep 2019 15:26:54 +0000</pubDate></item><item><title>&#x645;&#x627; &#x647;&#x64A; DevSecOps&#x61F;</title><link>https://academy.hsoub.com/devops/general/%D9%85%D8%A7-%D9%87%D9%8A-devsecops%D8%9F-r437/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_09/5d6e55702dbcf_DevOpsSec.jpg.b7f378079d7cf5077e42e587595a7e79.jpg" /></p>

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

	<p>
		تبدأ رحلة الغوص في مجال ال DevSecOps (اختصارٌ للعبارة Development Security Operations التي يُقصد بها إدماج الممارسات الأمنية في صلب عمل فريقي التطوير والعمليات) بالتفويض والتمكين والتعليم. إليك كيف تستطيع الانطلاق فيها.
	</p>
</blockquote>

<p>
	إن مفهوم DevSecOps كممارسة أو كشكل من أشكال الفن هو تطوير لمفهوم DevOps. لكي تفهم DevSecOps بشكل أفضل، ينبغي أولاً أن يكون لديك فهم كافٍ لما تعنيه DevOps، لذا ننصحك بالاطلاع على مقالات <a href="https://academy.hsoub.com/tags/%D8%AA%D8%B9%D8%B1%D9%81%20%D8%B9%D9%84%D9%89%20devops/" rel="">هذه السلسلة</a> إن لم يكن لديك معرفة بماهية DevOps.
</p>

<p>
	وُلِدت ثقافة DevOps من دمج ممارسات التطوير (<strong>Dev</strong>elopment) والعمليات (<strong>Ope</strong>rations) وفك العزلة بينهما وتوحيد التركيز وتحسين الكفاءة والأداء لكلا الفريقين وللمنتج كذلك. لقد تشكّل مفهوم جديد للتعاون مع تركيز DevOps على صنع منتجات وخدمات تسهُل صيانتها وتعمل على أتمتة الوظائف العملية.
</p>

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

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

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

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

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="31241" href="https://academy.hsoub.com/uploads/monthly_2019_09/5d6e5577153b7_DevOpsSec.jpg.3f0e36a375c4758543d058377284c026.jpg" rel=""><img alt="ماهي DevOpsSec.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="31241" data-unique="veuv6sd2l" src="https://academy.hsoub.com/uploads/monthly_2019_09/5d6e55772ab31_DevOpsSec.thumb.jpg.153df1d078a9022b0b751ec7de79ad1e.jpg"></a>
</p>

<h2 id="-devsecops-">
	كيف تنسجم البرامج المتينة مع DevSecOps؟
</h2>

<p>
	يعدّ إنشاء البرامج المتينة (rugged software) جانبًا من جوانب ثقافة DevOps أكثر من كونه ممارسة منفصلة، وهو يكمّل ويعزز ممارسة DevSecOps. إن المنتج المتين مثله مثل شيء تصلّب و قَوِيَ عودُهُ من خلال التجارب و الخبرات.
</p>

<p>
	من المهم أن نلاحظ أن البرامج المتينة ليست بالضرورة آمنة بنسبة 100 ٪ (على الرغم من أنها قد تكون كذلك في وقت ما). ومع ذلك، فقد صُمّمت للتعامل مع مُعظم ما يمكن أن تواجهه.
</p>

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

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

	<p>
		يقول ستيفان سترايشسبير: تتيح DevSecOps للمؤسسات تقديم برامج آمنة بطبيعتها بسرعةِ DevOps.
	</p>
</blockquote>

<h2 id="-devsecops-">
	كيف تبدأ في DevSecOps؟
</h2>

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

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

<p>
	تبدأ هذه الرحلة بثلاثة عناصر أساسية:
</p>

<ul>
<li>
		التفويض
	</li>
	<li>
		التمكين
	</li>
	<li>
		التعليم
	</li>
</ul>
<p>
	يعني التفويض، في رأيي، تخفيف السيطرة والسماح للفرق باتخاذ قرارات مستقلة دون خوف من الفشل أو الارتداد. لكن التحذير الوحيد هنا هو أن المعلومات في غاية الأهمية لاتخاذ قرارات مستنيرة.
</p>

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

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

<p>
	يتجلى التمكين في وضع الأدوات والموارد المناسبة في أيدي الفرق. يتعلق الأمر بخلق ثقافة مشاركة المعرفة من خلال المنتديات والتجمعات غير الرسمية.
</p>

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

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

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

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

<p>
	ترجمة وبتصرف للمقال <a href="https://opensource.com/sites/default/files/gated-content/getting_started_with_devsecops-v1.pdf" rel="external nofollow">?What is DevSecOps</a> لبريت هونولدت و آرون رينهارت
</p>
]]></description><guid isPermaLink="false">437</guid><pubDate>Tue, 03 Sep 2019 15:02:54 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641;&#x64A;&#x629; &#x625;&#x646;&#x634;&#x627;&#x621; &#x635;&#x641;&#x62D;&#x629; &#x62D;&#x627;&#x644;&#x629; &#x628;&#x627;&#x633;&#x62A;&#x62E;&#x62F;&#x627;&#x645; Cachet &#x639;&#x644;&#x649; &#x62F;&#x64A;&#x628;&#x64A;&#x627;&#x646; 8</title><link>https://academy.hsoub.com/devops/general/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%B5%D9%81%D8%AD%D8%A9-%D8%AD%D8%A7%D9%84%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-cachet-%D8%B9%D9%84%D9%89-%D8%AF%D9%8A%D8%A8%D9%8A%D8%A7%D9%86-8-r427/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_06/5d0a1e639a7c7_.png.ba41f9f0224ba3da92e88bf38ac53959.png" /></p>

<p>
	<a href="https://cachethq.io/" rel="external nofollow">Cachet</a> عبارة عن صفحة حالة (Status Page) ذاتية الاستضافة كبديل للخدمات المستضافة مثل StatusPage.io و Status.io. تُساعد على توفير معلومات حول وقت تشغيل (uptime) ووقت توقف (downtime) التطبيق الخاص بك ومشاركة المعلومات حول أي انقطاع. خير مثال عن ذلك هو <a href="https://status.hsoub.com/" rel="external nofollow">صفحة حالة خدمات ومنتجات حسوب</a> التي توضح ببساطة حالة جميع المواقع التابعة لها.
</p>
<style type="text/css">
code {
    background-color: rgb(250, 250, 250);
    border-radius: 3px;
}</style>
<p>
	وقد تمت برمجتُها بلغة PHP، لذا إن سبق لك تثبيت حزمة <a href="https://academy.hsoub.com/devops/cloud-computing/docker/%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-lamp-%D8%A3%D9%88-lemp-%D8%A8%D8%B3%D9%87%D9%88%D9%84%D8%A9-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-docker-r364/" rel="">LAMP أو LEMP</a>، فإنها سهلة التثبيت. تتميّز بواجهة نظيفة ومستجيبة ما يمكّن من تشغيلها على جميع اﻷجهزة. في هذا الدرس، سنقوم بضبط صفحة حالة بواسطة Cachet على Debian.
</p>

<p>
	مجموعة البرامج التي سنستعملها هي كالتالي: -<strong>Cachet</strong> من أجل صفحة الحالة نفسها. -<strong>Composer</strong> لإدارة اعتماديات PHP الخاصة بـCachet -<strong>SQLite</strong> كقاعدة بيانات لتخزين بيانات Cachet -<strong>Nginx</strong> لتقديم صفحة الحالة
</p>

<p>
	لاحظ أن Cachet لا تراقب المواقع والخوادم لوقت التوقف (downtime)، إذ تسجل اﻷحداث فقط، والتي يمكن تحديثها يدويا أو عن طريق الواجهة البرمجية الخاصة بـ Cachet. إذا كنت تبحث عن حلول لمراقبة تطبيقات الويب، تفقد هذا <a href="https://academy.hsoub.com/devops/servers/%D9%85%D8%B1%D8%A7%D9%82%D8%A8%D8%A9-%D8%AA%D8%B7%D8%A8%D9%8A%D9%82%D8%A7%D8%AA-%D8%A7%D9%84%D9%88%D9%8A%D8%A8-%D8%A7%D9%84%D9%85%D9%88%D8%AC%D9%87%D8%A9-%D9%84%D8%A8%D9%8A%D8%A6%D8%A9-%D8%A7%D9%84%D8%A5%D9%86%D8%AA%D8%A7%D8%AC-r139/" rel="">الدرس</a>.
</p>

<h2 id="-">
	المتطلبات
</h2>

<p>
	تحتاج إلى ما يلي لمُتابعة هذا الدرس:
</p>

<ul>
<li>
		خادوم Debian 8 معد عن طريق اتباع <a href="https://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-8" rel="external nofollow">هذا الدّرس</a>، مع مستخدم إداري بامتيازات sudo غير المستخدم الجذر. تعمل Cachet بـ 512MB من الذاكرة العشوائية، ويفضل 1GB أو اكثر من أجل أداء أفضل.
	</li>
	<li>
		اسم نطاق مؤهل بشكل كامل (FQDN) مع سجل A يوجه نطاقك نحو عنوان IPv4 خادومك. يمكن شراؤه على <a href="https://namecheap.com/" rel="external nofollow">Namecheap</a> أو الحصول عليه مجانا على <a href="http://www.freenom.com/en/index.html" rel="external nofollow">Freenom</a>، يمكنك اتباع <a href="https://www.digitalocean.com/community/tutorials/how-to-set-up-a-host-name-with-digitalocean" rel="external nofollow">درس اسم الاستضافة hostname هذا</a> لتفاصيل إعداد سجلات DNS.
	</li>
	<li>
		Nginx مُنصّب ومُعدّ بواسطة Let's Encrypt. يمكن تثبيته عن طريق اتباع <a href="https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-debian-8" rel="external nofollow">هذا الدرس</a> بعدها أعدَّ Let's Encrypt باتباع الخطوتين اﻷوليين <a href="https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-debian-8" rel="external nofollow">من هذا الدرس</a> الخطوات المتبقية يمكن تجاوزها ﻷننا سنقوم بإنشاء ملف إعدادات Cachet خاص بنا.
	</li>
	<li>
		Composer مثبت باتباع الخطوات 1 و 2 من <a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-use-composer-on-debian-8" rel="external nofollow">هذا الدرس</a>.
	</li>
	<li>
		Git منصّب باتباع الخطوة الأولى من <a href="https://www.digitalocean.com/community/tutorials/how-to-install-git-on-debian-8" rel="external nofollow">هذا الدّرس</a> لسحب الشيفرة المصدرية الخاصة بـCachet من موقع GitHub.
	</li>
	<li>
		خادوم SMTP، لتتمكن Cachet من إرسال رسائل بريد إلكتروني حول الوقائع إلى المشتركين ومذكِّرات كلمة المرور إلى المستخدمين المنشئين في واجهة Cachet. يمكن استخدام Postfix كخادوم SMTP للإرسال فقط (Send-Only) بُمساعدة <a href="https://academy.hsoub.com/devops/servers/mail/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D8%AA%D9%87%D9%8A%D8%A6%D8%A9-postfix-%D9%83%D8%AE%D8%A7%D8%AF%D9%88%D9%85-smtp-%D9%84%D9%84%D8%A5%D8%B1%D8%B3%D8%A7%D9%84-%D9%81%D9%82%D8%B7-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-%D8%A3%D9%88%D8%A8%D9%88%D9%86%D8%AA%D9%88-1404-r12/" rel="">درس كيفية تثبيت وتهيئة Postfix كخادوم SMTP للإرسال فقط باستخدام أوبونتو 14.04</a>. أو يمكن استخدام مزود طرف ثالث مثل <a href="https://www.mailgun.com/" rel="external nofollow">Mailgun</a>.
	</li>
</ul>
<h2 id="-cachet">
	الخطوة اﻷولى: إنشاء مستخدم Cachet
</h2>

<p>
	أول ما يجب القيام به هو إنشاء حساب مستخدم مستقل لتشغيل Cachet. سيحمل هذا الإجراء حماية وعزلا إضافيين.
</p>

<pre class="ipsCode">
<span class="hljs-comment">sudo</span> <span class="hljs-comment">useradd</span> <span class="hljs-literal">-</span><span class="hljs-literal">-</span><span class="hljs-comment">create</span><span class="hljs-literal">-</span><span class="hljs-comment">home</span> <span class="hljs-literal">-</span><span class="hljs-literal">-</span><span class="hljs-comment">shell</span> <span class="hljs-comment">/bin/bash</span> <span class="hljs-comment">cachet</span>
</pre>

<p>
	سينشئ الأمر مستخدمًا باسم cachet مع مجلد المنزل في <code>‎/home/cachet</code>، والذي ستُضبَط صدفته إلى <code>‎/bin/bash</code>. الخيار الافتراضي هو <code>‎/bin/sh</code>، إﻻ أنه لا يوفر ما يكفي من المعلومات في المحث (prompt) الخاص به. سيكون المُستخدم بلا كلمة مرور مع امتيازات حصرية للمكونات التي ستستعملها Cachet.
</p>

<p>
	بعد إنشاء المستخدم لنقم بتثبيت اعتماديات PHP.
</p>

<h2 id="-php">
	الخطوة الثانية: تثبيت اعتماديات PHP
</h2>

<p>
	نحتاج إلى تثبيت اعتماديات Cachet، والتي هي عبارة عن عدد من حزم PHP إضافة إلى wget و unzip، والتي يستعملها Composer لتنزيل وفك ضغط مكتبات PHP:
</p>

<pre class="ipsCode">
sudo apt-get install \
  php5-fpm php5-curl php5-apcu php5-readline \
  php5-mcrypt php5-apcu php5-cli php5-gd php5-sqlite\
  wget unzip
</pre>

<p>
	يمكنك معرفة المزيد حول أي من الحزم من خلال <a href="http://php.net/manual/en/extensions.php" rel="external nofollow">قائمة إضافات PHP الرّسميّة</a>.
</p>

<p>
	لنقم اﻵن بضبط <code>php-fpm</code>، مسيّر عمليات FastCGI. والذي سيستعمله Nginx للتوسّط بين الطّلبات نحو Cachet.
</p>

<p>
	قم أولا بإنشاء الملف الذي سيستضيف المعلومات من أجل Cachet والتي يحتاجها <code>php-fpm</code>. افتح <code>/etc/php5/fpm/pool.d/cachet.conf</code> بالمحرّر nano أو أي محرر آخر:
</p>

<pre class="ipsCode">
sudo nano <span class="hljs-regexp">/etc/</span>php5<span class="hljs-regexp">/fpm/</span>pool.d<span class="hljs-regexp">/cachet.conf</span>
</pre>

<p>
	قم بلصق التالي:
</p>

<pre class="ipsCode">
[cachet]
user = cachet
group = cachet
listen<span class="hljs-selector-class">.owner</span> = www-data
listen<span class="hljs-selector-class">.group</span> = www-data
listen = /var/run/php5-fpm-cachet<span class="hljs-selector-class">.sock</span>
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
php_admin_flag[allow_url_fopen] = off
request_terminate_timeout = <span class="hljs-number">120s</span>
pm = ondemand
pm<span class="hljs-selector-class">.max_children</span> = <span class="hljs-number">5</span>
pm<span class="hljs-selector-class">.process_idle_timeout</span> = <span class="hljs-number">10s</span>
pm<span class="hljs-selector-class">.max_requests</span> = <span class="hljs-number">500</span>
chdir = /
</pre>

<p>
	احفظ ثم أغلق الملف. يمكنك قراءة المزيد من المعلومات حول هذه اﻹعدادات في درس <a href="https://academy.hsoub.com/devops/servers/web/nginx/%D9%83%D9%8A%D9%81-%D8%AA%D8%B3%D8%AA%D8%B6%D9%8A%D9%81-%D9%85%D8%AC%D9%85%D9%88%D8%B9%D8%A9-%D9%85%D9%88%D8%A7%D9%82%D8%B9-%D8%A8%D8%B4%D9%83%D9%84-%D8%A2%D9%85%D9%86-%D8%A8%D8%A7%D8%B3%D8%AA%D8%AE%D8%AF%D8%A7%D9%85-nginx-%D9%88-php-fpm-%D8%B9%D9%84%D9%89-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-1404-r251/" rel="">كيف تستضيف مجموعة مواقع بشكل آمن باستخدام Nginx و Php-fpm على أوبنتو 14.04 </a>. ولكن إليك ما يقوم به كل سطر في هذا الملف:
</p>

<ul>
<li>
		<code>[cachet]</code> هو اسم المُجمِّع (pool). إذ يجب على كل مُجمِّع أن يمتلك اسمًا فريدًا.
	</li>
	<li>
		<code>user</code> و<code>group</code> هما مستخدم لينكس والمجموعة التي سيشتغل الحوض الجديد تحتها. وهي نفسها ما أعددناه مع المستخدم الذي أنشأناه في الخطوة اﻷولى.
	</li>
	<li>
		<code>listen.owner</code> و <code>listen.group</code> تُعرِّف ملكِيّة المُنصت، أي مقبس المُجمِّع <code>php-fpm</code> الجديد. يجب على Nginx من أن يتمكن من قراءة هذا المقبس، ولذلك نستخدم مُستخدم ومجموعة <code>www-data</code>.
	</li>
	<li>
		<code>listen</code> يخصّص مسار ملف مقبس فريد لكل مُجمِّع.
	</li>
	<li>
		<code>php_admin_value</code> يسمح بضبط قيم إعدادات PHP مخصّصة. نستعمله هنا لتعطيل الدّوال التي يمكنها تشغيل أوامر لينكس (<code>exec,passthru,shell_exec,system</code>).
	</li>
	<li>
		<p>
			<code>php_admin_flag</code> يشبه <code>php_admin_value</code>، إﻻ أنه مجرد مستبدل للقيم المنطقية (boolean switch) أي <code>on</code> و <code>off</code>. سنقوم بتعطيل الدّالة <code>allow_url_fopen</code> التي تمكّن برمجيات PHP من فتح ملفات بعيدة والتي قد تستعمل من طرف مهاجم.
		</p>
	</li>
	<li>
		<p>
			خيار <code>pm</code> يسمح بضبط أداء الحوض. نقوم بضبطه على <code>ondemand</code> والذي يوفر توازنا لإبقاء مُستويات استعمال الذاكرة منخفضة. إذا كنت تمتلك ذاكرة كبيرة، عندها يمكن ضبطه على القيمة <code>static</code>. إن كنت تمتلك معالجا قويا ذا سلاسل (threads) عديدة، فعندها قد يكون <code>dynamic</code> خيارا أفضل.
		</p>
	</li>
	<li>
		<p>
			يجب أن تكون قيمة الخيار <code>chdir</code> جذر نظام الملفّات <code>/</code>. ولا يجب تغيير قيمة هذا الخيار إلا إذا كنت تستخدم خيارا مهما آخر (مثل <code>chroot</code>).
		</p>
	</li>
</ul>
<p>
	أعِد تشغيل <code>php-fpm</code> لتطبيق التغييرات:
</p>

<pre class="ipsCode">
sudo<span class="hljs-keyword"> system</span>ctl restart php5-fpm
</pre>

<p>
	مكّن خدمة <code>php-fpm</code> لكي تشتغل تلقائيا عند إعادة تشغيل الخادوم إن لم تفعل ذلك بعد:
</p>

<pre class="ipsCode">
sudo<span class="hljs-keyword"> system</span>ctl enable php5-fpm
</pre>

<p>
	بعد تثبيت حزم PHP العامة، لنقم بتنزيل Cachet.
</p>

<h2 id="-cachet">
	الخطوة الثالثة: تنزيل Cachet
</h2>

<p>
	الشفرة المصدرية لـCachet مستضافة على GitHub ما يجعلها سهلة التنزيل، والتثبيت، وأيضا -كما سنرى لاحقا- ترقيتها باستخدام Git.
</p>

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

<pre class="ipsCode">
<span class="hljs-attribute">sudo su - cachet</span>
</pre>

<p>
	انسخ شفرة Cachet المصدرية إلى مجلد جديد باسم <code>www</code>:
</p>

<pre class="ipsCode">
git <span class="hljs-keyword">clone</span> <span class="hljs-title">https</span>://github.com/cachethq/Cachet.git www
</pre>

<p>
	بعد ذلك، انتقل إلى المجلد الجديد الذي تتواجد به الشفرة المصدرية لـ Cachet:
</p>

<pre class="ipsCode">
<span class="hljs-built_in">cd</span> www
</pre>

<p>
	ابتداءً من هذه المرحلة، لديك سجل تطور Cachet بأكمله، بما في ذلك فروع و وسوم Git. يمكنك تفقد آخر إصدار مستقر في <a href="https://github.com/CachetHQ/Cachet/releases" rel="external nofollow">صفحة إصدارات Cachet</a>، ولكن يمكنك كذلك رؤية وسوم Git في هذا المجلد.
</p>

<p>
	في فترة نشر هذا الدرس، آخر إصدار مستقر ل Cachet هو v2.3.11. استعمل Git للانتقال إلى وسم هذا اﻹصدار:
</p>

<pre class="ipsCode">
<span class="hljs-selector-tag">git</span> <span class="hljs-selector-tag">checkout</span> <span class="hljs-selector-tag">v2</span><span class="hljs-selector-class">.3</span><span class="hljs-selector-class">.11</span>
</pre>

<p>
	بعد ذلك سنمر إلى التعرف على ملف إعدادات Cachet.
</p>

<h2 id="-cachet">
	الخطوة الرابعة: إعداد Cachet
</h2>

<p>
	تتطلب Cachet ملف إعدادات يسمى <code>env.</code>، والذي يعتبر ضروريا لتشغيل Cachet. يمكنك بداخله ضبط متغيرات البيئة التي تستعملها Cachet لضبطها. لِنقُم بنسخ مثال اﻹعدادات الذي يأتي مع Cachet ونُبْقِ على الأصلي احتياطا:
</p>

<pre class="ipsCode">
<span class="hljs-selector-tag">cp</span> <span class="hljs-selector-class">.env</span><span class="hljs-selector-class">.example</span> <span class="hljs-selector-class">.env</span>
</pre>

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

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

<p>
	لننشئ أولا الملف الفارغ الذي سيستضيف قاعدة البيانات:
</p>

<pre class="ipsCode">
touch .<span class="hljs-regexp">/database/</span>database.sqlite
</pre>

<p>
	بعد ذلك، افتح الملف <code>env.</code> باستعمال nano أو محرر النصوص المُفضل لديك لضبط إعدادات قاعدة البيانات:
</p>

<pre class="ipsCode">
<span class="hljs-selector-tag">nano</span> <span class="hljs-selector-class">.env</span>
</pre>

<p>
	ولأننا سنستعمل SQLite، فسنحتاج لحذف كثير من الإعدادات. حدد موقع مقطع الإعدادات الذي يبدأ بالمقطع <code>DB_‎</code>.
</p>

<p>
	جزء من الملف <code>‎.env</code> الأصلي:
</p>

<pre class="ipsCode">
. . .
DB_DRIVER=mysql
DB_HOST=localhost
DB_DATABASE=cachet
DB_USERNAME=homestead
DB_PASSWORD=secret
DB_PORT=null
DB_PREFIX=null
. . .
</pre>

<p>
	احذف كل شيء باستثناء السطر <code>DB_DRIVER</code>، وغيّر قيمته من <code>mysql</code> إلى <code>sqlite</code>. بعد تعديل ملف<code>‎.env</code>:
</p>

<pre class="ipsCode">
. . .
DB_DRIVER=sqlite
. . .
</pre>

<p>
	<strong>ملاحظة:</strong> يمكنك تفقد <a href="https://github.com/CachetHQ/Cachet/blob/2.4/config/database.php" rel="external nofollow">خيارات قاعدة بيانات Cachet</a> للحصول على جميع أسماء مُشغّلات قواعد البيانات الممكنة إذا كنت تستعمل قاعدة بيانات أخرى مثل MySQL أو PostgreSQL.
</p>

<p>
	بعدها، تحتاج إلى ملء تفاصيل خادوم SMTP الخاصّ بك في إعدادات <code>MAIL_*‎</code> المُتعلّقة بضبط البريد الإلكتروني:
</p>

<pre class="ipsCode">
. . .
MAIL_HOST=smtp.example.com
MAIL_PORT=<span class="hljs-number">25</span>
MAIL_USERNAME=smtp_username
MAIL_PASSWORD=smtp_password
MAIL_ADDRESS=notifications@example.com
MAIL_NAME=<span class="hljs-string">"Status Page"</span>
. . .
</pre>

<p>
	ما يعني:
</p>

<ul>
<li>
		<code>MAIL_HOST</code> عنوان URL خادوم البريد اﻹلكتروني الخاصّ بك.
	</li>
	<li>
		<code>MAIL_PORT</code> المنفذ الذي ينصت عليه خادوم البريد اﻹلكتروني (عادة <code>25</code> ).
	</li>
	<li>
		<code>MAIL_USERNAME</code> اسم مستخدم حساب SMTP (عادة ما يكون البريد اﻹلكتروني بأكمله).
	</li>
	<li>
		<code>MAIL_PASSWORD</code> كلمة مرور حساب SMTP.
	</li>
	<li>
		<code>MAIL_ADDRESS</code> عنوان البريد الإلكتروني الذي سترسل منه التنبيهات للمشتركين.
	</li>
	<li>
		<code>MAIL_NAME</code> هو الاسم الذي سيظهر في الرسائل المرسلة إلى المشتركين. انتبه إلى أن أي قيمة بها مسافة يجب أن توضع بين علامتي تنصيص مزدوجتين.
	</li>
</ul>
<p>
	يمكنك الاطلاع على المزيد حول برامج تشغيل بريد Cachet على شيفرة <a href="https://github.com/CachetHQ/Cachet/blob/v2.3.10/config/mail.php" rel="external nofollow">mail.php</a> المصدرية و<a href="https://laravel.com/docs/5.2/mail" rel="external nofollow">توثيق البريد الإلكتروني</a> من Laravel.
</p>

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

<h2 id="-">
	الخطوة الخامسة: تهجير قاعدة البيانات
</h2>

<p>
	تتم إدارة مكتبات PHP التي تعتمد عليها Cachet باستخدام Composer. أولا، كن متيقنا أنك في المجلد الصحيح:
</p>

<pre class="ipsCode">
cd /<span class="hljs-built_in">home</span>/cachet/www
</pre>

<p>
	ثم قم بتشغيل Composer وثبّتب جميع المتطلبات باستثناء تلك التي تستعمل لأغراض التطوير. اعتمادا على سرعة الإنترنت لديك، قد يتطلب اﻷمر بعض الوقت:
</p>

<pre class="ipsCode">
<span class="hljs-attribute">composer</span> install --<span class="hljs-literal">no</span>-interaction --<span class="hljs-literal">no</span>-dev -o --<span class="hljs-literal">no</span>-scripts
</pre>

<p>
	أنشئ مخطط قاعدة البيانات وشغل التهجير:
</p>

<pre class="ipsCode">
<span class="hljs-attribute">php artisan migrate</span>
</pre>

<p>
	<strong>تنبيه</strong>: في الإصدار المستقر اﻷخير (2.3.11)، هناك علة عند استخدام SQLite والتي تلزمك بتشغيل أمر التهجير <code>migrate</code> قبل أي شيء آخر.
</p>

<p>
	اكتب <code>yes</code> عندما تُسأل عمّا إذا أردت تنفيذ الأمر بالفعل. سيكون المُخرج مُشابها لما يلي:
</p>

<pre class="ipsCode">
<span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-emphasis">***</span>
<span class="hljs-bullet">*     </span>Application In Production!     *
<span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-strong">*****</span><span class="hljs-emphasis">***</span>

 Do you really wish to run this command? (yes/no) [no]:
 &gt; yes

Migration table created successfully.
Migrated: 2015<span class="hljs-emphasis">_01_</span>05<span class="hljs-emphasis">_201324_</span>CreateComponentGroupsTable
...
Migrated: 2016<span class="hljs-emphasis">_06_</span>02<span class="hljs-emphasis">_075012_</span>AlterTableMetricsAddOrderColumn
Migrated: 2016<span class="hljs-emphasis">_06_</span>05<span class="hljs-emphasis">_091615_</span>create<span class="hljs-emphasis">_cache_</span>table
</pre>

<p>
	اﻷمر التالي <code>php artisan app:install</code>، يأخذ نسخة احتياطية لقاعدة البيانات، يشغل التهجير، ويولد تلقائيا مفتاح التطبيق (أي قيمة <code>APP_KEY</code> في الملفّ <code>.env</code>) والذي تستعمله Cachet لجميع تشفيراتها.
</p>

<p>
	<strong>تحذير</strong>: لا تغّير أبدا قيمة <code>APP_KEY</code> التي توجد في الملف <code>‎.env</code> بعد تثبيت وتشغيل Cachet في بيئة الإنتاج، إذ سيؤدي ذلك إلى فقدان كل بياناتك المشفرة. استعمل اﻷمر <code>php artisan app:install</code> مرة واحدة فقط. ولهذا السّبب يُفضّل الإبقاء على نسخة احتياطية من الملفّ <code>‎.env</code>.
</p>

<p>
	أكمل التثبيت:
</p>

<pre class="ipsCode">
php artisan app:<span class="hljs-keyword">install</span>
</pre>

<p>
	سيكون المُخرج مُشابها لما يلي:
</p>

<pre class="ipsCode">
Clearing settings <span class="hljs-keyword">cache</span><span class="hljs-params">...</span>
Settings <span class="hljs-keyword">cache</span> cleared!
. . .
Clearing <span class="hljs-keyword">cache</span><span class="hljs-params">...</span>
Application <span class="hljs-keyword">cache</span> cleared!
<span class="hljs-keyword">Cache</span> cleared!
</pre>

<p>
	كخطوة استباقية أخيرة، فرّغ مخزن Cachet المؤقت لتفادي أخطاء HTTP 500:
</p>

<pre class="ipsCode">
<span class="hljs-keyword">rm</span> -rf <span class="hljs-keyword">bootstrap</span>/cache<span class="hljs-comment">/*</span>
</pre>

<p>
	واﻵن بعد تهيئة قاعدة البيانات، يمكننا إعداد طابور مهام Cachet.
</p>

<h2 id="-task-queue-">
	الخطوة السادسة: إعداد طابور المهام (Task Queue)
</h2>

<p>
	تستعمل Cachet طابورا لجدولة المهام التي تحتاج للعمل بشكل غير متزامن (asynchronously)، مثل إرسال رسائل البريد اﻹلكتروني. الطريقة المقترحة هي استعمال Supervisor، وهو مُسيّر عمليات يوفر واجهة ثابتة يُمكن من خلالها مُراقبة العمليات والتحكم بها.
</p>

<p>
	تأكد أولا من تسجيلك الخروج من جلسة المستخدم cachet وتحوّل إلى مستخدمك ذو صلاحيات sudo غير المُستخدم الجذر:
</p>

<pre class="ipsCode">
<span class="hljs-keyword">exit</span>
</pre>

<p>
	ثبّت Supervisor:
</p>

<pre class="ipsCode">
sudo apt-<span class="hljs-keyword">get</span> install supervisor
</pre>

<p>
	ثم أنشئ الملف الذي يحتوي على المعلومات التي يحتاجها Supervisor من Cachet. للقيام بذلك، افتح الملفّ <code>/etc/supervisor/conf.d/cachet.conf</code>:
</p>

<pre class="ipsCode">
sudo nano <span class="hljs-regexp">/etc/</span>supervisor<span class="hljs-regexp">/conf.d/</span>cachet.conf
</pre>

<p>
	هذا الملف يخبر Supervisor عن كيفية تشغيل وتسيير عملياته. يمكنك قراءة المزيد حول Supervisor في مقال <a href="https://academy.hsoub.com/devops/servers/%D9%83%D9%8A%D9%81%D9%8A%D8%A9-%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA-%D9%88%D8%A5%D8%AF%D8%A7%D8%B1%D8%A9-supervisor-%D8%B9%D9%84%D9%89-%D8%AE%D9%88%D8%A7%D8%AF%D9%8A%D9%85-%D8%A3%D9%88%D8%A8%D9%86%D8%AA%D9%88-%D9%88%D8%AF%D8%A8%D9%8A%D8%A7%D9%86-r279/" rel="">كيفية تثبيت وإدارة Supervisor على خواديم أوبنتو ودبيان </a>.
</p>

<p>
	أضف المحتوى التالي مع التّأكد من تعديل مجلد Cachet واسم المستخدم إذا استعملت أسماء أخرى (السّطران <code>directory=/home/cachet/www/</code> و <code>user=cachet</code>):
</p>

<pre class="ipsCode">
<span class="hljs-section">[program:cachet-queue]</span>
<span class="hljs-attr">command</span>=php artisan queue:work --daemon --delay=<span class="hljs-number">1</span> --sleep=<span class="hljs-number">1</span> --tries=<span class="hljs-number">3</span>
<span class="hljs-attr">directory</span>=/home/cachet/www/
<span class="hljs-attr">redirect_stderr</span>=<span class="hljs-literal">true</span>
<span class="hljs-attr">autostart</span>=<span class="hljs-literal">true</span>
<span class="hljs-attr">autorestart</span>=<span class="hljs-literal">true</span>
<span class="hljs-attr">user</span>=cachet
</pre>

<p>
	احفظ وأغلق الملف، ثم أعد تشغيل Supervisor:
</p>

<pre class="ipsCode">
<span class="hljs-attribute">sudo systemctl restart supervisor</span>
</pre>

<p>
	مكن خدمة Supervisor لكي تشتغل تلقائيا عند إعادة تشغيل الخادوم:
</p>

<pre class="ipsCode">
sudo systemctl <span class="hljs-built_in">enable</span> supervisor
</pre>

<p>
	قاعدة البيانات وطابور المهام جاهزان، المكون التالي الذي يجب ضبطه هو خادوم الويب.
</p>

<h2 id="-nginx">
	الخطوة السابعة: ضبط Nginx
</h2>

<p>
	سنستعمل <a href="https://academy.hsoub.com/devops/servers/web/nginx/" rel="">Nginx</a> على شكل خادوم ويب وسيط سيتواصل مع <code>php-fpm</code>. قسم المتطلبات أعلاه به درس لكيفية إعداد <a href="https://academy.hsoub.com/devops/servers/web/nginx/" rel="">Nginx</a> بشهادة <abbr title="Transport Layer Security | بروتوكول أمن طبقة النقل">TLS</abbr> من Let's Encrypt.
</p>

<p>
	لنضف ملف إعدادات <a href="https://academy.hsoub.com/devops/servers/web/nginx/" rel="">Nginx</a> الذي يحتاج إليه Cachet. افتح ملفّ <code>/etc/nginx/sites-available/cachet.conf</code> بمُحرّر النصوص nano أو بأي محرر آخر:
</p>

<pre class="ipsCode">
sudo nano <span class="hljs-regexp">/etc/</span>nginx<span class="hljs-regexp">/sites-available/</span>cachet.conf
</pre>

<p>
	هذا هو النص الكامل للملف، والذي يجب عليك نسخه ولصقه. مع إبدال <code>example.com</code> باسم النطاق الخاص بك. وظيفة كل قسم موصوفة بشكل مُفصّل أسفله.
</p>

<pre class="ipsCode">
<span class="hljs-section">server</span> {
    <span class="hljs-attribute">server_name</span>  example.com;
    <span class="hljs-attribute">listen</span> <span class="hljs-number">80</span>;
    <span class="hljs-attribute">return</span> <span class="hljs-number">301</span> https://<span class="hljs-variable">$server_name</span><span class="hljs-variable">$request_uri</span>;
}

<span class="hljs-section">server</span> {
    <span class="hljs-attribute">listen</span> <span class="hljs-number">443</span>;
    <span class="hljs-attribute">server_name</span>  example.com;

    <span class="hljs-attribute">root</span> /home/cachet/www/public;
    <span class="hljs-attribute">index</span> index.php;

    <span class="hljs-attribute"><abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">ssl</abbr></span> <span class="hljs-literal">on</span>;
    <span class="hljs-comment">## Location of the Let's Encrypt certificates</span>
    <span class="hljs-attribute">ssl_certificate</span> /etc/letsencrypt/live/example.com/fullchain.pem;
    <span class="hljs-attribute">ssl_certificate_key</span> /etc/letsencrypt/live/example.com/privkey.pem;

    <span class="hljs-comment">## From https://cipherli.st/</span>
    <span class="hljs-comment">## and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html</span>
    <span class="hljs-attribute">ssl_protocols</span> TLSv1 TLSv1.<span class="hljs-number">1</span> TLSv1.<span class="hljs-number">2</span>;
    <span class="hljs-attribute">ssl_prefer_server_ciphers</span> <span class="hljs-literal">on</span>;
    <span class="hljs-attribute">ssl_ciphers</span> <span class="hljs-string">"EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"</span>;
    <span class="hljs-attribute">ssl_ecdh_curve</span> secp384r1;
    <span class="hljs-attribute">ssl_session_cache</span> shared:<abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr>:<span class="hljs-number">10m</span>;
    <span class="hljs-attribute">ssl_session_tickets</span> <span class="hljs-literal">off</span>;
    <span class="hljs-attribute">ssl_stapling</span> <span class="hljs-literal">on</span>;
    <span class="hljs-attribute">ssl_stapling_verify</span> <span class="hljs-literal">on</span>;
    <span class="hljs-attribute">resolver</span> <span class="hljs-number">8.8.8.8</span> <span class="hljs-number">8.8.4.4</span> valid=<span class="hljs-number">300s</span>;
    <span class="hljs-attribute">resolver_timeout</span> <span class="hljs-number">5s</span>;
    <span class="hljs-comment">## Disable preloading HSTS for now.  You can use the commented out header line that includes</span>
    <span class="hljs-comment">## the "preload" directive if you understand the implications.</span>
    <span class="hljs-comment">#add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";</span>
    <span class="hljs-attribute">add_header</span> Strict-Transport-Security <span class="hljs-string">"max-age=63072000; includeSubdomains"</span>;
    <span class="hljs-attribute">add_header</span> X-Frame-Options DENY;
    <span class="hljs-attribute">add_header</span> X-Content-Type-Options nosniff;
    <span class="hljs-attribute">ssl_buffer_size</span> <span class="hljs-number">1400</span>;

    <span class="hljs-attribute">ssl_dhparam</span> /etc/<abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">ssl</abbr>/certs/dhparam.pem;

    <span class="hljs-attribute">location</span> / {
        <span class="hljs-attribute">try_files</span> <span class="hljs-variable">$uri</span> /index.php<span class="hljs-variable">$is_args</span><span class="hljs-variable">$args</span>;
    }

    <span class="hljs-attribute">location</span> <span class="hljs-regexp">~ \.php$</span> {
        <span class="hljs-attribute">include</span> fastcgi_params;
        <span class="hljs-attribute">fastcgi_pass</span> unix:/var/run/php5-fpm-cachet.sock;
        <span class="hljs-attribute">fastcgi_param</span> SCRIPT_FILENAME <span class="hljs-variable">$document_root</span><span class="hljs-variable">$fastcgi_script_name</span>;
        <span class="hljs-attribute">fastcgi_index</span> index.php;
        <span class="hljs-attribute">fastcgi_keep_conn</span> <span class="hljs-literal">on</span>;
    }
}
</pre>

<p>
	إليك ما يقوم به كل جزء من هذا الملف.
</p>

<p>
	كتلة <code>server</code> اﻷولى توجه حركة مرور <a href="https://academy.hsoub.com/devops/servers/web/" rel="">HTTP</a> نحو HTTPS:
</p>

<pre class="ipsCode">
server {
    server_name example.com;
    <span class="hljs-keyword">listen</span> <span class="hljs-number">80</span>;
    <span class="hljs-keyword">return</span> <span class="hljs-number">301</span> https:<span class="hljs-regexp">//</span>$server_name$request_uri;
}
. . .
</pre>

<p>
	كتلة <code>server</code> الثانية تحتوي على معلومات خاصة حول هذا الضّبط، مثل تفاصيل <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr> وإعدادات <code>php-fpm</code>.
</p>

<p>
	تعليمة <code>root</code> تُخبر <a href="https://academy.hsoub.com/devops/servers/web/nginx/" rel="">Nginx</a> عن مكان تواجد مجلد الجذر الخاصّ بـ Cachet. يجب أن تشير القيمة إلى مجلد <code>public</code>، وبما أننا نسخنا Cachet إلى <code>/home/cachet/www/</code> فسيُصبح السّطر <code>root /home/cachet/www/public;‎</code>.
</p>

<pre class="ipsCode">
. . .
server {
    listen <span class="hljs-number">443</span><span class="hljs-comment">;</span>
    server_name  example.com<span class="hljs-comment">;</span>

    root /home/cachet/www/public<span class="hljs-comment">;</span>
    index index.php<span class="hljs-comment">;</span>
    . . .
}
</pre>

<p>
	شهادات <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr> تتواجد داخل مجلد Let's Encrypt، والتي يجب أن تُسمى انطلاقا من اسم نطاقك:
</p>

<pre class="ipsCode">
<span class="applescript">. . .
server {
    . . .
    <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">ssl</abbr> <span class="hljs-keyword">on</span>;
    <span class="hljs-comment">## Location of the Let's Encrypt certificates</span>
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    . . .
}</span>
</pre>

<p>
	باقي خيارات <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr> مأخوذة مُباشرة من درس <a href="https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-debian-8" rel="external nofollow">Nginx و Let's Encrypt</a>:
</p>

<pre class="ipsCode">
. . .
server {
    . . .
    <span class="hljs-comment">## From https://cipherli.st/</span>
    <span class="hljs-comment">## and https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html</span>
    ssl_protocols TLSv1 TLSv1<span class="hljs-number">.1</span> TLSv1<span class="hljs-number">.2</span>;
    ssl_prefer_server_ciphers <span class="hljs-keyword">on</span>;
    ssl_ciphers <span class="hljs-string">"EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"</span>;
    ssl_ecdh_curve secp384r1;
    ssl_session_cache shared:<abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr>:<span class="hljs-number">10</span>m;
    ssl_session_tickets off;
    ssl_stapling <span class="hljs-keyword">on</span>;
    ssl_stapling_verify <span class="hljs-keyword">on</span>;
    resolver <span class="hljs-number">8.8</span><span class="hljs-number">.8</span><span class="hljs-number">.8</span> <span class="hljs-number">8.8</span><span class="hljs-number">.4</span><span class="hljs-number">.4</span> valid=<span class="hljs-number">300</span>s;
    resolver_timeout <span class="hljs-number">5</span>s;
    <span class="hljs-comment">## Disable preloading HSTS for now.  You can use the commented out header line that includes</span>
    <span class="hljs-comment">## the "preload" directive if you understand the implications.</span>
    <span class="hljs-comment">#add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";</span>
    add_header Strict-Transport-Security <span class="hljs-string">"max-age=63072000; includeSubdomains"</span>;
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    ssl_buffer_size <span class="hljs-number">1400</span>;

    ssl_dhparam /etc/<abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">ssl</abbr>/certs/dhparam.pem;
    . . .
}
</pre>

<p>
	قسم <code>location ~ \.php$‎</code> يخبر Nginx عن كيفيّة تقديم ملفات PHP. الجزء اﻷهم هو اﻹشارة إلى ملف مقبس Unix الذي استعملناه عندما أنشأنا الملفّ <code>‎/etc/php5/fpm/pool.d/cachet.conf</code>. أي الملفّ <code>‎/var/run/php5-fpm-cachet.sock</code> بالتحديد.
</p>

<pre class="ipsCode">
. . .
server {
    . . .
    location / {
        try_files <span class="hljs-variable">$uri</span> /index.php<span class="hljs-variable">$is_args</span><span class="hljs-variable">$args</span>;
    }

    location ~ \.php$ {
        <span class="hljs-keyword">include</span> fastcgi_params;
        fastcgi_pass unix:/<span class="hljs-keyword">var</span>/<span class="hljs-keyword">run</span>/php5-fpm-cachet.sock;
        fastcgi_param SCRIPT_FILENAME <span class="hljs-variable">$document_root</span><span class="hljs-variable">$fastcgi_script_name</span>;
        fastcgi_index index.php;
        fastcgi_keep_conn <span class="hljs-keyword">on</span>;
    }
}
</pre>

<p>
	احفظ وأغلق الملف إن لم تفعل ذلك مسبقا.
</p>

<p>
	واﻵن بعد إنشاء إعدادات Cachet لـNginx، أنشئ وصلة رمزية (symlink) يُشير إلى المُجلد <code>sites-enabled</code>، إذ هنا يبحث <a href="https://academy.hsoub.com/devops/servers/web/nginx/" rel="">Nginx</a> عن ملفات اﻹعدادات لاستعملها:
</p>

<pre class="ipsCode">
sudo ln -s <span class="hljs-regexp">/etc/</span>nginx<span class="hljs-regexp">/sites-available/</span>cachet.conf <span class="hljs-regexp">/etc/</span>nginx<span class="hljs-regexp">/sites-enabled/</span>cachet.conf
</pre>

<p>
	أعد تشغيل <a href="https://academy.hsoub.com/devops/servers/web/nginx/" rel="">Nginx</a> لتطبَّق التّغييرات:
</p>

<pre class="ipsCode">
<span class="hljs-attribute">sudo systemctl restart nginx</span>
</pre>

<p>
	ومكّن خدمة <a href="https://academy.hsoub.com/devops/servers/web/nginx/" rel="">Nginx</a> لكي تشتغل تلقائيا عند إعادة تشغيل الخادوم:
</p>

<pre class="ipsCode">
sudo systemctl <span class="hljs-built_in">enable</span> nginx
</pre>

<p>
	هذا كلّ ما في اﻷمر، إذا كتبت الآن اسم نطاقك في المتصفح، سوف تظهر لك صفحة ضبط Cachet.
</p>

<p>
	لنُلقِ نظرة على هذه الصّفحة.
</p>

<h2 id="-cachet">
	الخطوة الثامنة: إنهاء الضّبط المبدئي لـCachet
</h2>

<p>
	يتمّ إنهاء ما تبقى من خطواتِِ لإعداد Cachet في الواجهة الرسوميّة (GUI) على مُتصفّحك، ما يشمل إعداد اسم الموقع و المنطقة الزمنية باﻹضافة إلى إنشاء حساب المدير. هناك ثلاث خطوات (إعداد البيئة، صفحة الحالة، وحساب المدير )، ويمكنك تغيير اﻹعدادات لاحقا في لوحة التحكم الخاصّة بـ Cachet.
</p>

<h3 id="-">
	ضبط البيئة
</h3>

<p>
	ضبط البيئة هي أول خطوة من إعدادات الضّبط.
</p>

<p>
	<strong>تنبيه</strong> : إصدار Cachet الذي نستخدمه به علة تتمثل في عدم ظهور إعدادات البريد اﻹلكتروني على صفحة إعدادات البيئة، حتى لو قمت بضبطها مسبقا في <code>env.</code> سيتم حل هذا في اﻹصدار 2.4.
</p>

<p>
	يجب ملء الحقول كما يلي :
</p>

<ul>
<li>
		Cache Driver يجب أن يكون (ACP(u.
	</li>
	<li>
		Session Driver يجب أن يكون (ACP(u.
	</li>
	<li>
		Mail Driver يجب أن يكون SMTP.
	</li>
	<li>
		Mail Host يجب أن يكون عنوان بريد خادومك اﻹلكتروني. -Mail From Address يجب أن يكون عنوان البريد اﻹلكتروني الذي سترسل منه التنبيهات إلى المشتركين.
	</li>
	<li>
		Mail Username يجب أن يكون مستخدم حساب SMTP (عادة بريدك اﻹلكتروني بأكمله). -Mail Password يجب أن يكون كلمة مرور حساب SMTP.
	</li>
</ul>
<p>
	اضغط Next للذهاب إلى الخطوة التالية.
</p>

<h3 id="-">
	ضبط صفحة الحالة
</h3>

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

<p>
	يجب ملء الحقول كما يلي:
</p>

<ul>
<li>
		Site Name: الاسم الذي سيظهر على لوحة التحكم
	</li>
	<li>
		Site Domain: اسم النطاق FQDN الذي اخترته لـ Cachet
	</li>
	<li>
		Select your timezone: اختر منطقة زمنية بناء على جمهورك. UTC خيار افتراضي جيد.
	</li>
	<li>
		Select your language: اختر لغة واجهة Cachet.
	</li>
	<li>
		Show support for Cachet: إذا اخترت هذا الخيار، ستظهر عبارة "Powered by Cachet” على تذييل (footer) لوحة التحكم العامّة.
	</li>
</ul>
<p>
	اضغط Next للذهاب إلى الخطوة التالية.
</p>

<h3 id="-">
	ضبط حساب المدير
</h3>

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

<h3 id="-">
	إنهاء الضبط
</h3>

<p>
	على صفحة إنهاء الضبط Complete Setup، سيتم إعلامك بأنه قد تمّ إعداد Cachet بنجاح. يمكنك اﻵن الضغط على "Go to the dashboard” لتسجيل الدخول بمعلومات المدير خاصتك وزيارة لوحة تحكم Cachet.
</p>

<p>
	بعد إنهاء الخطوات السّابقة، فإنّCachet اﻵن مضبوطة وتعمل بشكل كامل. الخطوة اﻷخيرة توضِّح كيفية ترقيتها في المستقبل.
</p>

<h3 id="-cachet-">
	الخطوة التاسعة: ترقية Cachet.
</h3>

<p>
	استعمال Git يجعل أمر الترقية سهلا للغاية عند صدور إصدار جديد من ـ Cachet. إذ كل ما عليك فعله هو الانتقال إلى الوسم المناسب وتشغيل تهجير قاعدة البيانات.
</p>

<p>
	<strong>مُلاحظة</strong>: من الجيد دائما أخذ نُسخة احتياطيّة لـ Cachet وقاعدة بياناتها قبل محاولة ترقية اﻹصدار. وفي SQLite كل ما عليك فعله هو نسخ الملف <code>database/database.sqlite</code> إلى مكان آخر.
</p>

<p>
	أوﻻ، تحوَّل إلى المستخدم cachet وانتقل إلى المُجلد الذي نُصِّبتْ فيه Cachet:
</p>

<pre class="ipsCode">
sudo <span class="hljs-keyword">su</span> - cachet
<span class="hljs-keyword">cd</span> /home/cachet/www
</pre>

<p>
	يمكنك تشغيل صفحة الصيانة إن اخترت ذلك:
</p>

<pre class="ipsCode">
<span class="hljs-attribute">php artisan down</span>
</pre>

<p>
	اجلب شفرة Cachet الحديثة من GitHub:
</p>

<pre class="ipsCode">
git fetch <span class="hljs-comment">--all</span>
</pre>

<p>
	استعرض لائحة بجميع الوسوم المُتاحة:
</p>

<pre class="ipsCode">
git <span class="hljs-keyword">tag</span> <span class="hljs-title">-l</span>
</pre>

<p>
	سوف تظهر لك جميع الوسوم الحديثة التي تبدأ بحرف <code>v</code>. قد تلاحظ أنّ بعضا منها عبارة عن نُسخ تجريبيّة بيتا (beta) أو في حالة ترشيح للإطلاق (Release Candidate) أو ما يُعرف اختصارا بإصدارات RC. وﻷننا نعمل مع خادوم إنتاج (production server)، فيمكنك تجاهل هذه النّسخ واستعمال النّسخ المُستقرّة. يمكنك أيضا زيارة <a href="https://github.com/CachetHQ/Cachet/releases/latest" rel="external nofollow">صفحة إصدارات Cachet</a> لمعرفة أحدث وسم.
</p>

<p>
	إن رغبت في استعمال وسم للترقية، استعمل Git للانتقال إليه. على سبيل المثال، إذا رغبت في ترقيّة Cachet إلى اﻹصدار 2.4.0، فستسعمل الأمر التّالي:
</p>

<pre class="ipsCode">
<span class="hljs-selector-tag">git</span> <span class="hljs-selector-tag">checkout</span> <span class="hljs-selector-tag">v2</span><span class="hljs-selector-class">.4</span><span class="hljs-selector-class">.0</span>
</pre>

<p>
	أزل خبيئة Cachet قبل الاستمرار:
</p>

<pre class="ipsCode">
<span class="hljs-keyword">rm</span> -rf <span class="hljs-keyword">bootstrap</span>/cache{,t}<span class="hljs-comment">/*</span>
</pre>

<p>
	تاليا، قم بترقية اعتماديات Composer، والتي تحتوي عادة على إصلاح للعلل، تحسينات في اﻷداء، وميزات جديدة:
</p>

<pre class="ipsCode">
<span class="hljs-attribute">composer</span> install --<span class="hljs-literal">no</span>-interaction --<span class="hljs-literal">no</span>-dev -o --<span class="hljs-literal">no</span>-scripts
</pre>

<p>
	أخيرا، شغّل التهجير:
</p>

<pre class="ipsCode">
php artisan <span class="hljs-keyword">app</span>:<span class="hljs-keyword">update</span>
</pre>

<p>
	إذا شغّلت صفحة الصيانة، فيمكنك اﻵن تمكين الوصول مجددا:
</p>

<pre class="ipsCode">
<span class="hljs-attribute">php artisan up</span>
</pre>

<p>
	اﻹصدار الجديد من Cachet سيعمل كما يجب.
</p>

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

<p>
	قمتَ اﻵن بإعداد Cachet مع <abbr title="Secure Socket Layer | طبقة المنافذ الآمنة">SSL</abbr> مدعومة بقاعدة بيانات SQLite وتعلمتَ كيفية صيانتها وترقيتها باستخدام Git. يمكنك كذلك اختيار قواعد بيانات أخرى مثل MySQL أو PostgreSQL. لتعلم المزيد حول خيارات Cachet، تفقّد <a href="https://docs.cachethq.io/v1.0/docs/welcome" rel="external nofollow">التوثيق الرسمي</a>.
</p>

<p>
	ترجمة -بتصرّف- للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-create-a-status-page-with-cachet-on-debian-8" rel="external nofollow">How To Create a Status Page with Cachet on Debian 8 </a> لصاحبته Achilleas Pipinellis.
</p>
]]></description><guid isPermaLink="false">427</guid><pubDate>Wed, 19 Jun 2019 11:37:21 +0000</pubDate></item><item><title>&#x644;&#x645;&#x627;&#x630;&#x627; &#x62A;&#x639;&#x62F; DevOps &#x627;&#x644;&#x627;&#x633;&#x62A;&#x631;&#x627;&#x62A;&#x64A;&#x62C;&#x64A;&#x629; &#x627;&#x644;&#x62A;&#x642;&#x646;&#x64A;&#x629; &#x627;&#x644;&#x623;&#x643;&#x62B;&#x631; &#x623;&#x647;&#x645;&#x64A;&#x629; &#x627;&#x644;&#x64A;&#x648;&#x645;</title><link>https://academy.hsoub.com/devops/general/%D9%84%D9%85%D8%A7%D8%B0%D8%A7-%D8%AA%D8%B9%D8%AF-devops-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%B1%D8%A7%D8%AA%D9%8A%D8%AC%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%82%D9%86%D9%8A%D8%A9-%D8%A7%D9%84%D8%A3%D9%83%D8%AB%D8%B1-%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%A7%D9%84%D9%8A%D9%88%D9%85-r421/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_05/5ced4181177fa_devops.png.f26a5ca10e03194899786559b9e26e2f.png" /></p>

<p>
	إزالة بعض الالتباس حول مفهوم DevOps.
</p>

<p>
	يتعرف الكثير من الناس على <a href="https://academy.hsoub.com/devops/general/%D9%85%D8%A7-%D8%A7%D9%84%D9%85%D9%82%D8%B5%D9%88%D8%AF-%D8%A8%D9%80-devops%D8%9F-r413/" rel="">DevOps</a> للمرّة الأولى عند رؤيتهم لإحدى انتاجاتها وتساؤلهم عن كيفية حدوث ذلك. إذ أنه ليس من الضروري فهم فيما إذا كان شيء ما يشكل جزءًا من DevOps للبدء بتنفيذه، لكن معرفة ذلك – ومعرفة ما الذي يجعل من DevOps استراتيجية مهمة- يمكن أن تشّكل الفارق بين كونك قائدًا أو تابعًا في مجالٍ ما.
</p>

<p>
	ربما سمعت عن بعض النتائج المدهشة التي تُنسب إلى DevOps، مثل بيئات الإنتاج عالية المرونة والتي يمكنها التعامل مع الآلاف من الإصدارات يوميًا بينما تدور أداة "Chaos Monkey" <em>(وهي أداة برمجية طُوّرت بواسطة مهندسي Netflix لاختبار مرونة واسترداد خدمات Amazon Web Services [اختصارًا AWS] الخاصة بهم)</em> حول هذه الاصدارات لفصل الأشياء بشكل عشوائي. هذا أمر مثير للإعجاب، ولكنه في حد ذاته يُمثل حالة عمل ضعيفة، مثقلة بشكل أساسي بإثبات سلبي (<a href="https://en.wikipedia.org/wiki/Burden_of_proof_(philosophy)#Proving_a_negative" rel="external nofollow">proving a negative</a>): أن بيئة DevOps مرنة لأنه لم يُلاحظ فشل خطير ... حتى الآن.
</p>

<p>
	يوجد الكثير من الالتباس حول مفهوم DevOps ولا يزال الكثير من الناس يحاولون فهم ذلك. إليك مثال عن شخص ما عبر حسابي على موقع التواصل الاجتماعي LinkedIn:
</p>

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

	<p>
		حضر هذا الشخص مؤخرًا عددًا من جلسات DevOps حيث بدا أن بعض المتحدثين يشيرون إلى Agile على أنها مجموعة فرعية من DevOps. و كان فهمي بشكل أو بآخر عكس ذلك تمامًا.
	</p>

	<p>
		أود سماع أراءك. برأيك ما هي العلاقة بين Agile و DevOps؟
	</p>

	<p>
		هل DevOps هي مجموعة فرعية من Agile؟ أم Agile هي مجموعة فرعية من DevOps؟ أم ان DevOps هي امتداد لـ Agile، تبدأ حيث ينتهي Agile؟ أم هل DevOps هو الإصدار الجديد من Agile؟
	</p>
</blockquote>

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

<h2 id="-devops-lean-agile-">
	جذور DevOps في التصميم الرشيق (lean) والتصميم المرن (agile)
</h2>

<p>
	تُعد DevOps أسهل للفهم إذا بدأنا باستراتيجيات هنري فورد وتحسينات نظام إنتاج تويوتا لنموذج فورد. وضمن هذا التاريخ ظهور منهجية التصميم الرشيق (lean)، والتي دُرست جيدًا. قام جيمس ب. ووماك ودانييل جونز في كتاب Lean Thinking بتلخيصها إلى خمسة مبادئ:
</p>

<ol>
<li>
		تحديد القيمة المرغوبة من قبل العميل.
	</li>
	<li>
		تحديد سلسلة القيم لكل منتج يوفر هذه القيمة ويلغي جميع الخطوات المهدورة اللازمة حاليًا لتوفيره.
	</li>
	<li>
		جعل تدفق المنتج متواصلًا من خلال خطوات القيمة المضافة المتبقية.
	</li>
	<li>
		ادخال السحب بين جميع الخطوات التي يكون فيها التدفق المستمر ممكنًا.
	</li>
	<li>
		إدارة نحو الاكتمال بحيث ينخفض باستمرار عدد الخطوات ومقدار الوقت والمعلومات اللازمة لخدمة العملاء.
	</li>
</ol>
<p>
	تسعى منهجية التصميم الرشيق إلى إزالة الهدر باستمرار وزيادة تدفق القيمة إلى العميل. يمكن التعرف عليها بسهولة وفهمها من خلال مبدأ أساسي للتصميم الرشيق وهو مبدأ: تدفق القطعة الواحدة. يمكننا القيام بعدد من الأنشطة لمعرفة السبب في أن تحريك قطعة منفردة في كل مرة أسرع من تحريك قطع متعددة دفعة واحدة؛ إن لعبة <a href="https://youtu.be/5t6GhcvKB8o?t=54" rel="external nofollow">Penny Game</a> و لعبة الطائرة <a href="https://www.shmula.com/paper-airplane-game-pull-systems-push-systems/8280/" rel="external nofollow">Airplane Game</a> أمثلة على ذلك. ففي لعبة Penny، إذا استغرقت دفعة الـ 20 بنس دقيقتين للوصول إلى العميل، فسيحصل على كامل الدُفعة بعد دقيقتين من الانتظار. بينما إذا نقلت بنس واحد في كل مرة، فسيحصل العميل على أول بنس في غضون خمس ثوانٍ ويستمر في الحصول عليهم بنس تلو الآخر حتى يصل البنس العشرين بعد 25 ثانية تقريبًا.
</p>

<p>
	وهذا يعتبر فرقًا كبيرًا، ولكن ليس كل شيء في الحياة بسيط ويمكن التنبؤ به كما هو الحال هنا في مثال البنس في لعبة بيني. ومن هنا أتت «المنهجية المرنة» (agile). بالتأكيد نرى مبادئ Lean تنسحب على فرق Agile عالية الأداء، ولكن هذه الفِرق تحتاج إلى ما هو أكثر من مبادئ Lean للقيام بعملها.
</p>

<p>
	تركز عملية التصميم المرن Agile من أجل التمكن من التعامل مع عدم القدرة على التنبؤ وتباين مهام تطوير البرامج النموذجية، على المعرفة الصحيحة والتشاور والقرار والعمل على ضبط المسار في مواجهة الوقائع المتغيرة باستمرار. على سبيل المثال، تزيد الأطر الرشيقة (مثل «<a href="https://ar.wikipedia.org/wiki/%D8%B3%D9%83%D8%B1%D9%85_(%D8%AA%D8%B7%D9%88%D9%8A%D8%B1_%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D8%A7%D8%AA" rel="external nofollow">فريق سكروم</a>» [scrum]) من الوعي بالمهام مثل الجاهزية اليومية والمراجعة الزمنية. فإذا أصبح فريق سكروم مدركًا لحقيقة جديدة، فإن الإطار يسمح له ويشجعه على ضبط المسار إن لزم الأمر.
</p>

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

<h2 id="-">
	حجم الدفعة الأمثل
</h2>

<p>
	يساعد فهم اقتصاديات حجم الدُفعات على فهم قوة DevOps في تطوير البرمجيات. تأمل الرسم التوضيحي الأمثل لمنحنى U التالي من كتاب دونالد راينترسن مبادئ تدفق تطوير المنتجات <a href="https://www.amazon.com/dp/B00K7OWG7O/ref=dp-kindle-redirect?_encoding=UTF8&amp;btkr=1" rel="external nofollow">Principles of Product Development Flow</a>:
</p>

<p>
	<img alt="01_batch_size_optimal.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="29637" data-unique="hbdwrigoe" src="https://academy.hsoub.com/uploads/monthly_2019_05/01_batch_size_optimal.gif.845152b83c84a0a71b7b45f8c2f4d1d0.gif"></p>

<p>
	يمكن تفسير ذلك بتشبيه حول التسوق في البقالية. افترض أنك بحاجة إلى شراء بعض البيض وتعيش في مكان يبعد 30 دقيقة من المتجر. إن شراء بيضة واحدة (أقصى اليسار على الرسم التوضيحي) في المرة الواحدة يعني رحلة لمدة 30 دقيقة في كل مرة تريد فيها شراءها. هذه هي تكلفة المعاملة (transaction cost). قد تمثل تكلفة الحجز (holding cost) البيض التالف وشغل المساحة في الثلاجة لفترة من الزمن. التكلفة الإجمالية (total cost) هي تكلفة المعاملة مضافًا إليها تكلفة الحجز في الثلاجة. يفسر منحنى U هذا السبب، بالنسبة لمعظم الناس، بإن شراء أكثر من 12 بيضة (دزينة) في وقت واحد هو الحجم الأمثل للدفعة. إذا كنت تعيش بجوار المتجر، فستكلفك القليل من المشي إلى هناك، وربما تشتري كرتونًا أصغر حجمًا في كل مرة لتوفير مساحة في الثلاجة والاستمتاع بالبيض الطازج.
</p>

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

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

<p>
	<img alt="02_batch_size.gif" class="ipsImage ipsImage_thumbnailed" data-fileid="29638" data-unique="ywkaq927s" src="https://academy.hsoub.com/uploads/monthly_2019_05/02_batch_size.gif.3f57db4e0658fe06de51ef9222a7747b.gif"></p>

<h2 id="-devops-">
	أين تكون DevOps أكثر ملائمة؟
</h2>

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

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

<p>
	يمكننا إلقاء نظرة على أبحاث Ron Westrum للبحث في موضوع تحقيق السلامة في المنظمات المعقدة. فقد وجد عند البحث عن سبب كون بعض المنظمات أكثر أمانًا من غيرها أن ثقافة المنظمة هي التي تنبئ بسلامتها. وحدّد ثلاثة أنواع من الثقافة: «المرضيّة أو غير المُتوقعة» (Pathological)، و«البيروقراطية» (Bureaucratic)، و«الابداعية» (Generative). فوجد أن الثقافة المرضيّة كانت تنبئ بسلامة أقل وأن الثقافة الإبداعية كانت تنبئ بمزيد من السلامة (على سبيل المثال، عدد أقل بكثير من حوادث الطيران أو وفيات المستشفى عن طريق الخطأ في مجالات بحثه الرئيسية).
</p>

<p>
	<a class="ipsAttachLink ipsAttachLink_image" data-fileid="29639" href="https://academy.hsoub.com/uploads/monthly_2019_05/03_information_flow.png.6816bed12ca03934d750ecfc4ad073e7.png" rel=""><img alt="03_information_flow.png" class="ipsImage ipsImage_thumbnailed" data-fileid="29639" data-unique="q8k4g3hws" src="https://academy.hsoub.com/uploads/monthly_2019_05/03_information_flow.thumb.png.bb4fe2c92760994b737a74e3118ebec3.png"></a>
</p>

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

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

<h2 id="-">
	التدفق وردود الأفعال (التغذية الراجعة) والتعلم
</h2>

<p>
	لا تتوقف DevOps عند هذا الحد. لقد كنا نتحدث بشكل رئيسي عن تحقيق DevOps لتدفق ثوري، ولكن يتم زيادة تضخيم أنشطة lean و agile من خلال جهود مماثلة تحقق حلقات تغذية راجعة أسرع كما تحقق تعلمًا أسرع. يشرح المؤلفون في كتاب <a href="https://www.amazon.com/DevOps-Handbook-World-Class-Reliability-Organizations/dp/1942788002/ref=sr_1_3?keywords=DevOps+handbook&amp;qid=1553197361&amp;s=books&amp;sr=1-3" rel="external nofollow"><em>DevOps Handbook</em></a> بالتفصيل كيف يُنجز DevOps وفوق تدفقه السريع القياس عن بُعد عبر كامل تدفق القيمة لديه للتغذية الراجعة السريعة والمتواصلة. ستستفيد علاوة على ذلك فرق DevOps عالية الأداء باستمرار من التعلم والتحسين المستمر في أسس مؤسساتها، وذلك من خلال الاستفادة من رشقات «<a href="https://ar.wikipedia.org/wiki/%D9%83%D8%A7%D9%8A%D8%B2%D9%86" rel="external nofollow">كايزن</a>» (<a href="https://en.wikipedia.org/wiki/Kaizen" rel="external nofollow">kaizen</a>) الرشيقة و«الأثر الرجعي» (<a href="https://www.google.com/url?q=https://www.scrum.org/resources/what-is-a-sprint-retrospective&amp;sa=D&amp;ust=1559054462996000&amp;usg=AFQjCNESPtCajU3RUPksBbGmAEi-zhf2Ww" rel="external nofollow">retrospectives</a>) لـسكروم، مما سيؤدي إلى تحقيق ثورة في التصنيع في مجال تطوير منتجات البرمجيات.
</p>

<h2 id="-devops">
	ابدأ بتقييم DevOps
</h2>

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

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

<p>
	سنلقي النظر في الجزء الثاني من هذه المقالة على نتائج استبيان DevOps في مجتمع «دروبال» (Drupal) ونرى أين يمكننا إيجاد المكاسب السريعة.
</p>

<p>
	ترجمة وبتصرف للمقال: <a href="https://opensource.com/article/19/3/devops-most-important-tech-strategy?utm_campaign=intrel" rel="external nofollow">Why DevOps is the most important tech strategy today</a> لصاحبه: Kelly Albrecht.
</p>

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

<ul>
<li>
		المقال السابق: <a href="https://academy.hsoub.com/devops/general/%D8%B1%D8%AD%D9%84%D8%A9-%D8%A7%D9%84%D9%85%D8%B7%D9%88%D8%B1-%D8%B9%D8%A8%D8%B1-devops-r420/" rel="">رحلة المطور عبر DevOps</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/tags/%D8%AA%D8%B9%D8%B1%D9%81%20%D8%B9%D9%84%D9%89%20devops/" rel="">كامل مقالات السلسلة</a>.
	</li>
</ul>
]]></description><guid isPermaLink="false">421</guid><pubDate>Tue, 28 May 2019 15:09:01 +0000</pubDate></item><item><title>&#x631;&#x62D;&#x644;&#x629; &#x627;&#x644;&#x645;&#x637;&#x648;&#x631; &#x639;&#x628;&#x631; DevOps</title><link>https://academy.hsoub.com/devops/general/%D8%B1%D8%AD%D9%84%D8%A9-%D8%A7%D9%84%D9%85%D8%B7%D9%88%D8%B1-%D8%B9%D8%A8%D8%B1-devops-r420/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_05/5ced37a999c3d_.png.07e5e37d7da3ac19a5d2c7b23dcc6709.png" /></p>

<p>
	انتهت أيام فرق التطوير وفرق العمليات المنعزلة.
</p>

<p>
	ما علاقة المطوًر «بور سوتر» (<a href="https://twitter.com/burrsutter%C2%BB%20%D8%A8%D9%80%20%22%D9%85%D9%84%D9%83%20DevOps%22%20%C2%AB%D8%AC%D9%8A%D9%86%20%D9%83%D9%8A%D9%85%C2%BB%20(Gene%20Kim" rel="external nofollow">Burr Sutter</a> وكتابه، The Phoenix Project؟
</p>

<p>
	كما أوضح سوتر في حديثه المقتضب الذي استمر لمدة خمس دقائق في مؤتمر <a href="http://allthingsopen.com/" rel="external nofollow">All Things Open</a> 2016، فإنهم يشتركون في شغفهم بالتقنيين العمليين – وهم المطورون الذين يصممون شيفرات رائعة والمشغلون الذين يقومون بتطوير البنية التحتية لتشغيلها.
</p>

<p>
	<iframe allowfullscreen="" data-sdiyt="true" frameborder="0" height="315" id="Qt-y3JEQAu40" width="560" src="https://www.youtube.com/embed/Qt-y3JEQAu4?enablejsapi=1"></iframe>
</p>

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

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

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

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

<p>
	قال سوتر: "لقد فهمنا سريعًا أن السبيل الوحيد للخروج من هذا المأزق هو في المتابعة والمضي قدمًا – كلنا معًا– المطورين، وموظفي العمليات، ومديري قواعد البيانات، وموظفينا- الفريق بأكمله".
</p>

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

<p>
	أوصى سوتر في الختام بكتابين من أشهر كتب جين كيم هما: The Phoenix Project و The DevOps Handbook.
</p>

<p>
	ترجمة وبتصرف للمقال: <a href="https://opensource.com/article/16/11/quick-thoughts-power-devops" rel="external nofollow">A developer's journey through DevOps</a>.
</p>

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

<ul>
<li>
		المقال التالي: <a href="https://academy.hsoub.com/devops/general/%D9%84%D9%85%D8%A7%D8%B0%D8%A7-%D8%AA%D8%B9%D8%AF-devops-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%B1%D8%A7%D8%AA%D9%8A%D8%AC%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%82%D9%86%D9%8A%D8%A9-%D8%A7%D9%84%D8%A3%D9%83%D8%AB%D8%B1-%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%A7%D9%84%D9%8A%D9%88%D9%85-r421/" rel="">لماذا تعد DevOps الاستراتيجية التقنية الأكثر أهمية اليوم</a>
	</li>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/devops/general/%D8%A3%D9%81%D8%B6%D9%84-5-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%84%D9%80-devops-r416/" rel="">أفضل 5 لغات برمجة لـ DevOps</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/tags/%D8%AA%D8%B9%D8%B1%D9%81%20%D8%B9%D9%84%D9%89%20devops/" rel="">كامل مقالات السلسلة</a>.
	</li>
</ul>
]]></description><guid isPermaLink="false">420</guid><pubDate>Tue, 28 May 2019 15:08:26 +0000</pubDate></item><item><title>&#x623;&#x641;&#x636;&#x644; 5 &#x644;&#x63A;&#x627;&#x62A; &#x628;&#x631;&#x645;&#x62C;&#x629; &#x644;&#x640; DevOps</title><link>https://academy.hsoub.com/devops/general/%D8%A3%D9%81%D8%B6%D9%84-5-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%84%D9%80-devops-r416/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_05/5cdae5c392c9b_5.png.58f88f3b7b9f2f4a0e01d426c76fef51.png" /></p>

<p>
	نجمع هنا خمسًا من أفضل لغات البرمجة لـ DevOps وبعضًا من الموارد التعليمية المفيدة لكلٍ منها.
</p>

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

<p>
	لا تُعد معرفة كيفية تجميع الخوادم وتكدسها مهارة في الطلب في هذه المرحلة. فمعظم مشاريع الأعمال لا تبني مراكز بيانات مادية لها. وبدلاً من ذلك، تُصمم وتبني مقدِرات الخدمة التي تُستضاف في البيئات السحابية العامة. تُهيئ البنية التحتية وتُنشر وتُدار من خلال التعليمات البرمجية. وهذا هو جوهر تصميم الـ DevOps - فعندما تتمكن المؤسسة من تحديد بنيتها التحتية في سطور من التعليمات البرمجية، يصبح عندها أتمتة معظم المهام (إن لم تكن جميعها) في مركز البيانات أمرًا ممكنًا.
</p>

<p>
	تتيح المستويات المتقدمة للأتمتة تمكين أنشطة «التركيب المتواصل / التسليم المتواصل» (Continuous Integration /Continuous Delivery CI/CD) التي لم تكن متاحة من قبل. تجعل مهام سير عمل CI / CD هذه من التسليم عملية سلسة خالية من الاحتكاك – حيث يستطيع المطور دفع شفرته إلى مستودع مصدري، وتتولى البنية التحتية تلقائيًا نشرها لدعم عمليات الاختبار التي يمكن أن تدفع تطبيق ما حتى مرحلة الإنتاج تلقائيا دون تدخل بشري. فعمل تقني يزحف تحت قبة أرضية مرتفعة لتوصيل كابلات الشبكة الجديدة لم يعد ضمن المسار الحرج لنشر تطبيق الإنتاج.
</p>

<p>
	تقوم فرق البنية التحتية الآن بتحويل قدراتها بعيدًا عن خوادم الأرفف والتكديس إلى دعم قنوات CI / CD، مما يعني شيفرة التعلم. تُنشر ملفات القوالب المضمنة في YAML والبرامج النصية لنشر البنية التحتية في بايثون والتطبيقات في جافا سكريبت من خلال القنوات المحددة في Groovy. تقترب شيفرة التطبيق نفسه من البنية التحتية. يمكن الآن لمطوري التطبيقات إنشاء «إجرائيات» (routines) في تطبيقاتهم لتوسيع نطاق ومعالجة حالات الفشل من خلال واجهات برمجة التطبيقات الخاصة بالبنية التحتية. وهذا هو السبب في أنني بدأت في استثمار فترة جيدة من وقتي في تعلم الشيفرة.
</p>

<p>
	قررت التركيز على تعلم لغات التطوير المشاركة في DevOps، واخترت خمسًا من أكثر اللغات أهمية وهي: <a href="https://academy.hsoub.com/programming/python/" rel="">Python</a> و <a href="https://academy.hsoub.com/programming/ruby/" rel="">Ruby</a> و <a href="https://academy.hsoub.com/programming/javascript/" rel="">Java Script</a> و <a href="https://academy.hsoub.com/programming/go/" rel="">Go</a> و C.
</p>

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

<h2 id="-python">
	بايثون Python
</h2>

<p>
	أصبحت <a href="https://academy.hsoub.com/programming/python/" rel="">بايثون</a> لغة متعددة الأغراض في البنية التحتية. وقد استُخدمت لبناء مشاريع البنية التحتية السحابية مثل OpenStack، وحتى لدعم تطبيقات الويب من خلال أطر عمل مثل <a href="https://academy.hsoub.com/programming/python/django/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A5%D8%B7%D8%A7%D8%B1-%D8%A7%D9%84%D8%B9%D9%85%D9%84-django%C2%A0-r353/" rel="">Django</a>. إن بايثون هي لغة سلسة لتلبية مجموعة واسعة من الاستخدامات.
</p>

<p>
	<strong>Codecademy</strong>: بدأت تعلم بايثون في موقع Codecademy. الذي يُقدِّم تمهيدًا رائعًا لبايثون.
</p>

<p>
	<strong>تدريب Safari Books عبر الإنترنت</strong>: انتقلتُ منه إلى المقدمة الممتازة لجيسيكا ماكلار في دورة <a href="https://www.safaribooksonline.com/library/view/introduction-to-python/9781491904794/" rel="external nofollow">Introduction to Python</a> في مكتبة Safari Books Online. إن خدمة Safari مكلفة، ولكن غالبًا ما تكون هناك حسومات على مبيعات الأعضاء يمكن أن تمنحك خصمًا قد يصل إلى 50٪. تحتوي SafariBooks أيضًا على مقاطع فيديو لمؤتمرات O'Reilly، بما في ذلك المحادثات والمختبرات. حيث توفر المحادثات فرصة لإيجاد مواضيع هامّة في كل لغة.
</p>

<p>
	<strong>مقاطع الفيديو الخاصة بالمؤتمرات عبر الإنترنت</strong>: ابحث عبر الإنترنت وستجد محادثات مثيرة للاهتمام في مؤتمرات مطوّري برامج مختلفة حول كيفية استخدام اللغات بطرق ربما لم تفكر فيها من قبل. تتوفر على سبيل المثال على YouTube مقاطع فيديو مؤتمر <a href="https://www.youtube.com/channel/UCwTD5zJbsQGJN75MwbykYNw" rel="external nofollow">PyCon.</a>
</p>

<h2 id="-ruby">
	روبي Ruby
</h2>

<p>
	تُستخدم <a href="https://academy.hsoub.com/programming/ruby/%D8%AA%D8%B9%D8%B1%D9%91%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-ruby-r636/" rel="">روبي</a> في عدد من مشاريع البنية التحتية. على سبيل المثال إن تطبيق ManageIQ، هو تطبيق <a href="https://academy.hsoub.com/programming/ruby/rails/%D9%85%D8%AF%D8%AE%D9%84-%D8%A5%D9%84%D9%89-%D8%A5%D8%B7%D8%A7%D8%B1-%D8%A7%D9%84%D8%B9%D9%85%D9%84-ruby-on-rails-r526/" rel="">Ruby on Rails</a>. كثيرا ما كنت أمازح العملاء خلال وظيفتي في Red Hat، بأنه مع ManageIQ (و CloudForms)، يكون المستخدمون على بعد 10 سطور فقط من شيفرة Ruby للقيام بأي شيء.
</p>

<p>
	<strong>Codecademy</strong>: حصلت على معرفتي في روبي بشكل رئيسي من هذا الموقع، كما هو الحال مع بايثون.
</p>

<p>
	<strong><a href="https://wiki.hsoub.com/Ruby" rel="external">التوثيق الرسمي</a></strong>: إن المصدر الآخر الذي ساعدني على فهم روبي بشكل عملي أكثر (أي بالنسبة لوظيفتي) هو كتاب بيتر ماكووان <a href="https://access.redhat.com/webassets/avalon/d/Mastering_CloudForms_Automation_Red_Hat/Mastering_CloudForms_Automation_Red_Hat.pdf" rel="external nofollow">Mastering CloudForms Automation</a> (متوفر بتنسيق PDF مجاني). وساعد العمل مع state machines لـ CloudForms وأتمتة سير العمل المتقدمة في تشكيل فهمي للبنى داخل روبي.
</p>

<p>
	<strong>الحلقات الصوتية</strong>: استمعت أيضًا إلى <a href="http://5by5.tv/rubyonrails" rel="external nofollow">Ruby on Rails Podcast</a>، و <a href="https://devchat.tv/ruby-rogues" rel="external nofollow">Ruby Rogues</a>.
</p>

<h2 id="-javascript">
	جافا سكريبت JavaScript
</h2>

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

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

<p>
	<strong><a href="https://wiki.hsoub.com/JavaScript" rel="external">التوثيق الرسمي</a></strong>: إن التوثيق الرسمي هو مرجعي الأول لأي شيء غامض يواجهني أثناء رحلتي في تعلم جافاسكربت.
</p>

<p>
	<strong>الحلقات الصوتية</strong>: أستمع أيضًا إلى الملفات الصوتية التي تركز على جافا سكريبت، مثل <a href="https://devchat.tv/js-jabber" rel="external nofollow">JavaScript Jabber</a> و <a href="https://fivejs.codeschool.com/" rel="external nofollow">FiveJS</a>.
</p>

<h2 id="go">
	Go
</h2>

<p>
	طُرحت لغة <a href="https://academy.hsoub.com/programming/go/%D8%AA%D8%B9%D8%B1%D9%81-%D8%B9%D9%84%D9%89-%D9%84%D8%BA%D8%A9-%D8%A7%D9%84%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-go-r222/" rel="">Go</a> في عام 2009، وحققت نجاحًا كبيرًا في السوق منذ طرحها. كان مصممو اللغة يركزون على عمل لغة مكتوبة ثابتة مقروءة، كما تقدم أيضًا أداءً جيدًا على نطاق واسع.
</p>

<p>
	<strong>golang.org</strong>: لقد بدأت مع Go، بدءًا من الجولة التعليمية الموجودة في <a href="http://golang.org" rel="external nofollow">golang.org</a>.
</p>

<p>
	<strong>قناة Google Developers على YouTube</strong>: بدأت أيضًا بمشاهدة مقاطع الفيديو على قناة <a href="https://www.youtube.com/channel/UC_x5XG1OV2P6uZZ5FSM9Ttw" rel="external nofollow">Google Developers channel</a>، بما في ذلك <a href="https://www.youtube.com/watch?v=xToSDON7Zmw" rel="external nofollow">Go for Pythonistas</a> و Get Started with Go و Go Programming.
</p>

<p>
	<strong>تدريب Safari Books Online</strong>: ركزتُ بشكل أكبر على Go في عام 2017 لأنها تدعم عددًا من تقنيات الويب المهمة مثل Docker و Kubernetes وغيرها. يعد مسار التعلم في Safari Books Online مصدرًا رائعًا آخر، بما في ذلك <a href="https://www.safaribooksonline.com/library/view/learning-path-master/9781788292689/" rel="external nofollow">Master Google's Go</a>.
</p>

<h2 id="-c">
	السي C
</h2>

<p>
	حاولت تعلم لغة C مرات عديدة. في كل مرة كنت أقترب فيها من C لم يكن لدي هدف معين في الحسبان. أردت فقط تعلم اللغة لأن الكثير من الشيفرات في العالم مكتوبة بلغة C، والعديد من« البنى» (constructs) في هذه اللغة يُعاد استخدامها في لغات أخرى. تعلمت سريعًا عند انضمامي إلى Red Hat، أن هناك مقولة موجودة في مجتمع «البرمجيات الحرة والمفتوحة المصدر» (FOSS) لفترة طويلة جدًا وهي: أفضل التوثيق هو الشيفرة نفسها.
</p>

<p>
	وأدركت أنني بحاجة إلى تعلم لغة C عند محاولتي فهم مشاريع مثل KVM و libvirt و QEMU، وذلك لفهم ما يحدث في المستوى التأسيسي.
</p>

<p>
	تعلم C بالطريقة الصعبة: لتعلم C تعلمت طريقة <a href="https://learncodethehardway.org/c/" rel="external nofollow"><em>Learn C the Hard Way</em></a> والتي أثبتت أنها طريقة مميَّزة للغة. أحب أسلوب كتابة المؤلف والنهج المعبر لتمارين كتابة الشيفرة. يمكنك قراءة الكتاب مجانًا عبر الإنترنت، أو شراء الكتاب للحصول على أمثلة التعليمات البرمجية وملفات الفيديوأيضًا.
</p>

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

<p>
	ما هي لغات البرمجة التي تركز على تعلمها الآن؟ أخبرنا عن الموارد التي كانت أكثر فائدة لك في رحلتك البرمجية الخاصة.
</p>

<p>
	ترجمة وبتصرف للمقال: <a href="https://opensource.com/article/17/4/top-5-programming-languages-devops" rel="external nofollow">Top 5 programming languages for DevOps</a> لصاحبه:Chris Saunders.
</p>

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

<ul>
<li>
		المقال التالي: <a href="https://academy.hsoub.com/devops/general/%D8%B1%D8%AD%D9%84%D8%A9-%D8%A7%D9%84%D9%85%D8%B7%D9%88%D8%B1-%D8%B9%D8%A8%D8%B1-devops-r420/" rel="">رحلة المطور عبر DevOps</a>
	</li>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/devops/general/%D8%AB%D9%84%D8%A7%D8%AB-%D8%AE%D8%B7%D9%88%D8%A7%D8%AA-%D9%84%D8%AA%D8%A3%D9%85%D9%8A%D9%86-devops-%D9%85%D9%81%D8%AA%D9%88%D8%AD-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-r415/" rel="">ثلاث خطوات لتأمين DevOps مفتوح المصدر</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/tags/%D8%AA%D8%B9%D8%B1%D9%81%20%D8%B9%D9%84%D9%89%20devops/" rel="">كامل مقالات السلسلة</a>.
	</li>
</ul>
]]></description><guid isPermaLink="false">416</guid><pubDate>Tue, 28 May 2019 15:07:43 +0000</pubDate></item><item><title>&#x62B;&#x644;&#x627;&#x62B; &#x62E;&#x637;&#x648;&#x627;&#x62A; &#x644;&#x62A;&#x623;&#x645;&#x64A;&#x646; DevOps &#x645;&#x641;&#x62A;&#x648;&#x62D; &#x627;&#x644;&#x645;&#x635;&#x62F;&#x631;</title><link>https://academy.hsoub.com/devops/general/%D8%AB%D9%84%D8%A7%D8%AB-%D8%AE%D8%B7%D9%88%D8%A7%D8%AA-%D9%84%D8%AA%D8%A3%D9%85%D9%8A%D9%86-devops-%D9%85%D9%81%D8%AA%D9%88%D8%AD-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-r415/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_05/5cdac74416b22_.png.89e9df1214a703087347c0cecb282bc0.png" /></p>

<p>
	إنّ المفتاح الرئيسي لتأمين تطوير تطبيق ما هو "الإزاحة نحو اليسار" - انقل اختبار الأمان بعيدًا عن مرحلة الإنتاج المتأخرة وعُد إلى التصميم والتطوير.
</p>

<p>
	حقيقةً، لم يعد أحد الآن يكتب شيفرته الخاصّة، أليس كذلك؟ نذهب إلى GitHub <em>(أحد مواقع خدمات استضافة مستودعات المشاريع مفتوحة المصدر يوفر طرائق لتتبع القضايا التي تُنشِئها وتسمح للمستخدمين بإنشائها)</em>، وننزل بعضًا من المكتبات، ونتجنب إعادة اختراع العجلات غير الضرورية، نجمع هذه العجلات بالشكل الذي يناسبنا لإنشاء برامج جديدة. ثم نُنزّل بعضًا من الأطر الأمامية لجعلها تبدو جميلةً وسريعة الاستجابة ونحن خارج السياق. وجدت خلال مراجعتي للتطبيقات، سواء تلك الموجودة في شركتي أو في شركات أخرى، أن أكثر من 90٪ من الشيفرة التي تشكل تطبيقًا هذه الأيام هي عبارة عن أشياء استعرناها، ولم نكتبها بأنفسنا.
</p>

<p>
	يفحص معظمنا شيفرته بحثًا عن العيوب مستخدمًا «أدوات التحليل الثابتة» (static analysis tools)، لكن ماذا عن كل المواضيع التي لم نكتبها بأنفسنا؟ كيف يمكننا معرفة ما في داخلها بالفعل؟ وبمجرد معرفتنا لذلك، ما هي الإجراءات التي نتخذها إما لتنظيفها أو لإبقائها محدّثة؟ كيف يمكننا تجنب التعرض للاختراق لأننا ندع شيئا مفتوحًا يعمل في الخلفية باستخدامنا لتلك المكتبة القوية المزدحمة التي تفعل ذاك الشيء الجميل الذي لا يمكننا الاستغناء عنه؟
</p>

<h2 id="-">
	الطريقة القديمة
</h2>

<p>
	أُبرمج منذ 20 عامًا تقريبًا، وهي فترة طويلة وكافية لرؤية التطور بدءًا من النماذج التقليدية لتخطيط البرامج كالنماذج الشلالية أو الحلزونية إلى نماذج «البرمجة الفائقة» (Xtreme Programing)، والنماذج المرنة Agile و تطوير العمليات DevOps الآن.
</p>

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

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

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

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

<h2 id="-">
	الطريقة الجديدة
</h2>

<p>
	عالم اليوم هو عالم الأتمتة و«التكرار المتواصل» (continuous iteration). نسمي هذه العملية بـ "DevOps" لأنها تمزج تطوير البرمجيات وتعريف وأتمتة البنية التحتية لإنشاء نماذج للنشر والعمليات التي تُمكّن ذاتيًا.
</p>

<p>
	عندما نضيف أمانًا إلى ذلك، فإننا نطبق نفس التوقعات بأن نؤتمت كل شيء تلقائيًا ونعرّف «الأنماط» (patterns) والعمليات بحيث يمكن تكرارها باستمرار. وبهذا يكون انتهى بنا الأمر إلى ما أحب أن أسميه "DevSecOps". (<em>DevSecOps هي اختصار لمصطلح التطوير والأمن والعمليات. هدفها هو جعل كل شخص مسؤولاً عن الأمان بهدف تنفيذ القرارات والإجراءات الأمنية بنفس المستوى والسرعة كما في قرارات وإجراءات التطوير والعمليات.</em>)
</p>

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

<p>
	كما هو الحال في DevOps، التي تُمكّن المطورين من تعريف« بُنى» (architecture) معتمدة على البرمجيات وإصدارها ونشرها باستخدام الأتمتة، تمنح DevSecOps المطورين نفس الأدوات والتقنيات والعمليات للقيام بالشيء نفسه من أجل أمان البرنامج.
</p>

<h2 id="-1-">
	الخطوة 1: البدء في التصميم
</h2>

<p>
	إنّ الطريقة الأكبر التي تخرج بها التطبيقات مفتوحة المصدر عن مسارها بسرعة، تتمثل في عدم التفكير في بنيّة التطبيق قبل البدء بكتابة الشيفرة. هل ما زلت تستخدم نسخة "Struts" عمرها سنتين لتطبيقك الجديد فقط لمجرد أنّها مثبّتة على جهازك المحلي مسبقًا، متبقيةً من مشاريعك العشرة السابقة التي أنجزتها؟ تأكّد في كل مرّة تبدأ فيها مشروعًا جديدًا بأنّك تستخدم الإصدار الأحدث والأكثر موثوقية من إطار العمل الذي تعتمده. استخدم أدوات مجانيّة أو أدوات غير مكلفة مثل SourceClear لتحديد «فاتورة المواد» (Bill Of Materials- BOM) في تطبيقك وكن متأكدًا من أنها تفي بالمطلوب قبل بدء العمل. سيوفر عليك لك المتاعب لاحقًا.
</p>

<h2 id="-2-">
	الخطوة 2: أتمتة كل شيء
</h2>

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

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

<h2 id="-3-">
	الخطوة 3: تطوير "مواطنين جيدين" وليس "بنى جيدة"
</h2>

<p>
	أخيرًا، لكي يتحقق DevSecOps بالفعل، علينا العمل على تغيير طريقة التفكير حول سياسة أمن المعلومات InfoSec وعمليات النشر المتعلقة بذلك.
</p>

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

<p>
	<strong>تصميم -&gt; كتابة شيفرة -&gt; اختبار التكامل -&gt; ضمان الجودة QA -&gt; مراجعة InfoSec -&gt; الإنتاج.</strong> <em>( QA: هي اختصار للكلمتين Quality Assurance)</em>
</p>

<p>
	ولكن عندما تكون دورات DevOps مُحتملة خلال ساعات أو حتى دقائق، فكيف يمكنك مراجعة InfoSec قبل مرحلة الإنتاج؟ الجواب: ليس أنت من يفعل ذلك.
</p>

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

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

<p>
	اسأل نفسك الآن السؤال التالي، "هل تثق بهم؟"
</p>

<p>
	لاحظ، إذا كنت تقدم المعلومات في وقت مبكر بما فيه الكفاية، فبإمكانك إزالة "مراجعة InfoSec" بالفعل عندما يحين وقت النشر.
</p>

<p>
	ماذا؟ وهذا صحيح. يمكن ببساطة في هذه المرحلة أن تسأل عملية التحكم في التغيير الخاصة بك الأسئلة التالية:
</p>

<ul>
<li>
		"هل أُكمِلت مراجعات الأمان التلقائية لهذا التطبيق في كل مرحلة من المراحل؟"
	</li>
	<li>
		"هل حلّ المطورون العيوب الحرجة كما هو متوقع على أسس ثابتة؟"
	</li>
	<li>
		"هل كان آخر تقييم مكتمل يصل إلى مستوى توقعاتنا (سياستنا)؟" إذا كان بإمكانك الإجابة بنعم على هذه الأسئلة، فإن ما عليك فعله هو الوثوق في أن فريق التطوير يعمل بشكل نموذجي (مواطنين جيدين)، والحرص على إنتاج نوعية جيدة، والتصرف بطريقة مسؤولة. سيبدو نموذجنا الجديد مشابها لهذا:
	</li>
</ul>
<p>
	<strong>تصميم مستنير -&gt; مراجعة الشيفرة الآلية -&gt; ضمان الجودة -&gt; IT -&gt; مواطن جيد؟ -&gt; النشر.</strong>
</p>

<p>
	ترجمة وبتصرف للمقال: <a href="https://opensource.com/article/17/5/secure-open-source-devops" rel="external nofollow">3 steps to secure, open source DevOps</a> لصاحبه: Jet Anderson.
</p>

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

<ul>
<li>
		المقال التالي: <a href="https://academy.hsoub.com/devops/general/%D8%A3%D9%81%D8%B6%D9%84-5-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%84%D9%80-devops-r416/" rel="">أفضل 5 لغات برمجة لـ DevOps</a>
	</li>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/devops/general/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D9%84%D8%BA%D8%A7%D9%8A%D8%A9-%D9%85%D9%86-devops%D8%9F-r414/" rel="">ما هي الغاية من DevOps؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/tags/%D8%AA%D8%B9%D8%B1%D9%81%20%D8%B9%D9%84%D9%89%20devops/" rel="">كامل مقالات السلسلة</a>.
	</li>
</ul>
]]></description><guid isPermaLink="false">415</guid><pubDate>Sun, 26 May 2019 13:01:00 +0000</pubDate></item><item><title>&#x645;&#x627; &#x647;&#x64A; &#x627;&#x644;&#x63A;&#x627;&#x64A;&#x629; &#x645;&#x646; DevOps&#x61F;</title><link>https://academy.hsoub.com/devops/general/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D9%84%D8%BA%D8%A7%D9%8A%D8%A9-%D9%85%D9%86-devops%D8%9F-r414/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_05/5cdac37379226_devops.png.d8dac6e69b2dd107b574de6a70d04d88.png" /></p>

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

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

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

<p>
	هذا ما يتعلق بالتغيير الناجح: إنه يتعلق بالتوقعات بقدر ما يتعلق بالنتائج. عليك أن تعرف سبب تغييرك وأين تتجه (وليس فقط كيف ستفعل ذلك)، لأن التغيير فقط من أجل التغيير غالبًا ما يكون محدود الأجل وقصير النظر.
</p>

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

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

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

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

<h2 id="-">
	إزالة الحواجز
</h2>

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

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			;فيما يتعلق بإصلاح الأشياء، كبديل عن اتلافها، هناك مبدأ واضح وبسيط، وهو مبدأ يمكن أن يسمى بالمفارقة. يوجد في هذه الحالة نظام أو قانون معين فلنقل، من أجل البساطة، نصب سياج أو بوابة عبر الطريق. أما النوع الأكثر حداثة من المصلحين سيذهب سريعا إليه ويقول للنوع الأكثر ذكاءً من المصلحين ;لا أرى فائدة من ذلك؛ دعنا نتخلص منه". والذين سيُجيبوا عليه بالقول: ;إذا لم ترَ له استخدامًا، فلن أسمح لك بإزالته بالتأكيد. اذهب بعيدّا وفكّر. وعندما يمكنك العودة<br>
			واخباري أنك ترى له استخدامًا، فقد أسمح لك بإتلافه. "- G.K Chesterton ، 1929
		</p>
	</div>
</blockquote>

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

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

<p>
	يمكننا بسهولة رسم شجرة تاريخية اعتمادًا على وضع تايلور في الجذر. ظهرت من جهود تايلور المبكرة في أواخر الثمانينات من القرن الماضي برامج دراسة الحركة الزمنية وغيرها من برامج تحسين الجودة التي امتدت في عشرينيات القرن العشرين حتى يومنا هذا، حيث نرى منهجيات <a href="https://ar.wikipedia.org/wiki/%D8%AD%D9%8A%D9%88%D8%AF_%D8%B3%D8%AF%D8%A7%D8%B3%D9%8A#%D9%85%D8%B3%D8%AA%D9%88%D9%8A%D8%A7%D8%AA_%D8%B3%D9%8A%D8%BA%D9%85%D8%A7" rel="external nofollow">معايير سيجما الستة</a> (Six Sigma) و<a href="https://ar.wikipedia.org/wiki/%D8%AA%D8%B5%D9%86%D9%8A%D8%B9_%D8%B1%D8%B4%D9%8A%D9%82" rel="external nofollow">التصنيع الرشيق</a> (Lean) وما شابه. وتُهيمن على ثقافة الأعمال السائدة اليوم منهجيات: من <a href="https://ar.wikipedia.org/wiki/%D8%AA%D8%B5%D9%85%D9%8A%D9%85_%D8%A3%D8%B9%D9%84%D9%89_%D8%A3%D8%B3%D9%81%D9%84_%D9%88%D8%A3%D8%B3%D9%81%D9%84_%D8%A3%D8%B9%D9%84%D9%89" rel="external nofollow">من الأعلى إلى الأسفل</a> (Top-down)، والإدارة موجَّهة النمط (directive-style management)، والمقترنة بالنهج النظامية لدراسة العملية. إنها تركز في المقام الأول على الفاعلية كمقياس رئيسي لنجاح العمال.
</p>

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

<p>
	كانت جنرال موتورز في عام 1920 تعاني من أزمة في الإدارة -أو بالأحرى أزمة بسبب نقص الإدارة. كتب سلون كتابه «"الدراسة التأسيسية"» (Organizational Study) لمجلس الإدارة، مقترحًا هيكلًا جديدًا لعدد وافر من أقسام جينرال موتورز. يركّز هذا الهيكل الجديد على مفهوم "العمليات اللامركزية مع التحكم المركزي". ستعمل الآن الأقسام الفردية، المرتبطة بعلامات تجارية مثل شيفروليه وكاديلاك وبويك بشكل مستقل في حين توفر الإدارة المركزية الوسائل اللازمة لتوجيه الاستراتيجية والتحكم المالي.
</p>

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

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

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

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

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

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

<p>
	استقطاب مستخدمين جدد ⟷ خبرة المستخدمين الحاليين
</p>

<p>
	الحصول على ميزات التطبيق ⟷ تطبيق متاح للاستخدام
</p>

<p>
	النجاح في المنافسة ⟷ حماية الإيرادات
</p>

<p>
	إصلاح المشكلات التي تظهر ⟷ منع المشكلات قبل حدوثها
</p>

<p>
	يمكننا أن نرى اليوم اعترافًا متزايدًا بين كبار قادة المنظمات بأن ثقافة الأعمال الحالية (وبالتالي مجموعة التوترات التي تنتجها) تمثل مشكلة خطيرة. في تقرير Gartner لعام 2016، قال 57 بالمائة من المشاركين أن التغيير الثقافي كان أحد التحديات الرئيسية التي ستواجه الشركة حتى عام 2020. إن ظهور أساليب جديدة مثل المنهجية المرنة و DevOps كوسيلة للتأثير على التغييرات التنظيمية يعكس هذا الاعتراف. الارتفاع في «"تكنولوجيا معلومات الظل"» (shadow IT) هو الوجه الآخر للعملة. حيث تربط التقديرات الحديثة ما يقرب من 30 في المئة من إنفاق تكنولوجيا المعلومات خارج سيطرة منظمة تكنولوجيا المعلومات.
</p>

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

<h2 id="-">
	المقاومة ليست عديمة الجدوى
</h2>

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

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			"يعتقد بيرت لانس أنه يستطيع ادخار أموال طائلة للعم سام إذا تمكّن من إقناع الحكومة بتبني شعار بسيط وهو: "إذا لم يُكسر، فلا تُصلحه". ويوضح: "هذه هي المشكلة مع الحكومة: إصلاح الأشياء التي لم تُكسر بعد وعدم إصلاح الأشياء المكسورة." - Nation's Business، May 1977
		</p>
	</div>
</blockquote>

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

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

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

<p>
	على سبيل المثال، تشاور موقع Facebook مع عالم الأنثروبولوجيا «روبن دنبار» (<a href="https://www.npr.org/2017/01/13/509358157/is-there-a-limit-to-how-many-friends-we-can-have" rel="external nofollow">Robin Dunbar</a>) حول أسلوب تعامله المجموعات الاجتماعية، ولكنه أدرك مع نمو الشركة تأثير ذلك على المجموعات الداخلية (وليس فقط المستخدمين الخارجيين للموقع). نالت ثقافة زابوس الكثير من الثناء لدرجة أن المنظمة أنشأت قسمًا يركّز على تدريب الآخرين على وجهات نظرهم حول القيم الأساسية وثقافة الشركات. وبالطبع يعد هذا الكتاب مرافقًا لـكتاب The Open Organization، وهو كتاب يوضح كيف يمكن للمبادئ المفتوحة المطبقة على الإدارة - كالشفافية والمشاركة والمجتمع - إعادة إنشاء المنظمة بما يناسب عصرنا المترابط سريع الخطى.
</p>

<h2 id="-">
	حل للتغيير
</h2>

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

	<div class="ipsQuote_contents ipsClearfix">
		<p>
			"إذا تجاوز معدل التغيير في الخارج معدل التغيير في الداخل، تكون النهاية قريبة." - جاك ويلش، 2004
		</p>
	</div>
</blockquote>

<p>
	أخبرني أحد الزملاء ذات مرّة أنّه بإمكانه شرح DevOps لمدير المشروع باستخدام مفردات إطار عمل <a href="https://www.google.com/url?q=https://ar.wikipedia.org/wiki/%25D9%2585%25D9%2583%25D8%25AA%25D8%25A8%25D8%25A9_%25D8%25A7%25D9%2584%25D8%25A8%25D9%2586%25D9%258A%25D8%25A9_%25D8%25A7%25D9%2584%25D8%25AA%25D8%25AD%25D8%25AA%25D9%258A%25D8%25A9_%25D9%2584%25D9%2584%25D9%2585%25D8%25B9%25D9%2584%25D9%2588%25D9%2585%25D8%25A7%25D8%25AA%25D9%258A%25D8%25A9&amp;sa=D&amp;ust=1557345586268000&amp;usg=AFQjCNGA_ZxGlHaxciIqh0AurQ5H3jXEKQ" rel="external nofollow">مكتبة البنية التحتية لتكنولوجيا المعلومات</a> فقط.
</p>

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

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

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

<p>
	ترجمة وبتصرف للمقال: <a href="https://opensource.com/open-organization/17/5/what-is-the-point-of-DevOps" rel="external nofollow">What's the point of DevOps</a> لصاحبه: Matt Micene.
</p>

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

<ul>
<li>
		المقال التالي: <a href="https://academy.hsoub.com/devops/general/%D8%AB%D9%84%D8%A7%D8%AB-%D8%AE%D8%B7%D9%88%D8%A7%D8%AA-%D9%84%D8%AA%D8%A3%D9%85%D9%8A%D9%86-devops-%D9%85%D9%81%D8%AA%D9%88%D8%AD-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-r415/" rel="">ثلاث خطوات لتأمين DevOps مفتوح المصدر</a>
	</li>
	<li>
		المقال السابق: <a href="https://academy.hsoub.com/devops/general/%D9%85%D8%A7-%D8%A7%D9%84%D9%85%D9%82%D8%B5%D9%88%D8%AF-%D8%A8%D9%80-devops%D8%9F-r413/" rel="">ما المقصود بـ DevOps؟</a>
	</li>
	<li>
		<a href="https://academy.hsoub.com/tags/%D8%AA%D8%B9%D8%B1%D9%81%20%D8%B9%D9%84%D9%89%20devops/" rel="">كامل مقالات السلسلة</a>.
	</li>
</ul>
]]></description><guid isPermaLink="false">414</guid><pubDate>Sun, 19 May 2019 13:05:00 +0000</pubDate></item><item><title>&#x645;&#x627; &#x627;&#x644;&#x645;&#x642;&#x635;&#x648;&#x62F; &#x628;&#x640; DevOps&#x61F;</title><link>https://academy.hsoub.com/devops/general/%D9%85%D8%A7-%D8%A7%D9%84%D9%85%D9%82%D8%B5%D9%88%D8%AF-%D8%A8%D9%80-devops%D8%9F-r413/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_05/5cdabf89d14ed_devops.png.f48950bc07bc1effecae1fee2d180332.png" /></p>
<p>
	تُستخدَم كلمة DevOps (اختصارٌ للكلمتين <strong>Dev</strong>elopment و <strong>Op</strong>eration<strong>s</strong>) لوصف مجموعةٍ من أنشطة التكنولوجيا الحديثة التي تسعى إلى تقريب مطوري البرمجيات وموظفي العمليات من بعضهم بعضًا بشكلٍ أوثق بغية العمل بصورة أكثر تعاونية على نفس المشروع.
</p>

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

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

<h2 id="-devops-">
	لماذا ينبغي اتباع استراتيجية DevOps؟
</h2>

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

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

<h2 id="-">
	كيف أبدأ؟
</h2>

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

<p>
	على الرغم من أنّ DevOps يتمحور بشكل رئيسي حول الثقافة التنظيمية، فإنّ تحديد أدوات البرامج الصحيحة والمناسبة يعدّ خطوةً مهمةً أيضًا. فهل تستخدم مؤسستك أدوات للتحكم بالإصدار والمراجعة مثل <a href="https://academy.hsoub.com/programming/workflow/git/" rel="">Git</a> لمساعدتك في إدارة الشيفرة البرمجية؟ هل تعتمد أدوات البناء و «التركيب المتواصل» (continuous integration) لجعل التحرك من المصدر وحتى الاختبار سلسًا قدر الإمكان؟
</p>

<p>
	وماذا عن الأدوات المستخدمة لأتمتة الاختبار وتحزيم البرامج تلقائيًا، أو لاختبارات النشر والحماية؟ هل تبحث عن طرق لإدارة البنية الأساسيّة الخاصّة بك مثل الشيفرة البرمجية باستخدام «أدوات إدارة التكوين» (configuration management tools)، لتوسيع نطاق البيئات وتكرارها بسهولة؟ وماذا عن أدوات المراقبة لمتابعة كامل العملية بدءًا من التطوير وحتى الإنتاج؟ تستفيد DevOps من إيجاد الأدوات المناسبة للحفاظ على عمل فِرق التطوير والعمليات الخاصة بك معًا وتحركها بشكل أسرع
</p>

<p>
	إذا كنت بحاجةٍ إلى دليل لحماية تقنية «حاويات لينكس» (Linux container)، ألق نظرة على قائمة التحقق المرجعيّة هذه: <a href="https://www.redhat.com/en/engage/containers-executive-checklist-20171117?intcmp=7016000000127cYAAQ" rel="external nofollow">4 خطوات لبدء رحلتك مع الحاويات</a>.
</p>

<div class="banner-container ipsBox ipsPadding">
	<div class="inner-banner-container">
		<p class="banner-heading">
			دورة علوم الحاسوب
		</p>

		<p class="banner-subtitle">
			دورة تدريبية متكاملة تضعك على بوابة الاحتراف في تعلم أساسيات البرمجة وعلوم الحاسوب
		</p>

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

	<div class="banner-img">
		<img alt="دورة علوم الحاسوب" src="https://academy.hsoub.com/learn/assets/images/courses/computer-science.png">
	</div>
</div>

<h2 id="-">
	أين يمكنني تعلم المزيد؟
</h2>

<p>
	سننشر عددًا من المقالات تشرح ماهية DevOps وتُعرِّفك عليها؛ راجع الوسم «تعرف على DevOps» أو بعضًا من المقالات الأكثر شيوعًا أدناه.
</p>

<ul>
	<li>
		<a href="https://academy.hsoub.com/devops/general/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D9%84%D8%BA%D8%A7%D9%8A%D8%A9-%D9%85%D9%86-devops%D8%9F-r414/" rel="">ما الهدف من DevOps</a>؟: توضح نظرة موجزة لتاريخ DevOps الحاجة إلى التفكير بطريقة مختلفة حول العمل التعاوني في مجال تكنولوجيا المعلومات.
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/general/%D8%AB%D9%84%D8%A7%D8%AB-%D8%AE%D8%B7%D9%88%D8%A7%D8%AA-%D9%84%D8%AA%D8%A3%D9%85%D9%8A%D9%86-devops-%D9%85%D9%81%D8%AA%D9%88%D8%AD-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-r415/" rel="">3 خطوات لحماية DevOps مفتوحة المصدر</a>: المفتاح الرئيسي لتأمين تطوير التطبيق هو «الإزاحة نحو اليسار» (shift left) - انقل اختبار الأمان بعيدًا عن مرحلة الإنتاج المتأخرة وعُد إلى التصميم والتطوير.
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/general/%D8%A3%D9%81%D8%B6%D9%84-5-%D9%84%D8%BA%D8%A7%D8%AA-%D8%A8%D8%B1%D9%85%D8%AC%D8%A9-%D9%84%D9%80-devops-r416/" rel="">أفضل 5 لغات برمجة لـ DevOps</a>: نجمع هنا خمسًا من أفضل لغات البرمجة لـ DevOps وبعضًا من الموارد التعليمية المفيدة لكل منها.
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/general/%D8%B1%D8%AD%D9%84%D8%A9-%D8%A7%D9%84%D9%85%D8%B7%D9%88%D8%B1-%D8%B9%D8%A8%D8%B1-devops-r420/" rel="">رحلة المطور عبر DevOps</a>: انتهت أيام التطوير المنعزلة لفرق التشغيل والعمليات.
	</li>
	<li>
		<a href="https://academy.hsoub.com/devops/general/%D9%84%D9%85%D8%A7%D8%B0%D8%A7-%D8%AA%D8%B9%D8%AF-devops-%D8%A7%D9%84%D8%A7%D8%B3%D8%AA%D8%B1%D8%A7%D8%AA%D9%8A%D8%AC%D9%8A%D8%A9-%D8%A7%D9%84%D8%AA%D9%82%D9%86%D9%8A%D8%A9-%D8%A7%D9%84%D8%A3%D9%83%D8%AB%D8%B1-%D8%A3%D9%87%D9%85%D9%8A%D8%A9-%D8%A7%D9%84%D9%8A%D9%88%D9%85-r421/" rel="">لماذا تعد DevOps الاستراتيجية التقنية الأكثر أهمية اليوم</a>: إزالة بعض الالتباس حول مفهوم DevOps.
	</li>
	<li>
		تقنيات DevOps المحميّة «للخدمات المصغرة» (microservices): أحدثت الحاويات والخدمات المصغّرة ثورةً في تطوير التطبيقات وإدارة البنية التحتية.
	</li>
</ul>

<p>
	ربما يمكنك أيضًا إيجاد الفائدة في هذه الموارد الخارجية التي توفّر المزيد من المعلومات.
</p>

<ul>
	<li>
		<a href="https://www.google.com/url?q=https://developers.redhat.com/devops/overview/?intcmp%3D7016000000127cYAAQ%26extIdCarryOver%3Dtrue%26sc_cid%3D701f2000001OH79AAG&amp;sa=D&amp;ust=1557853868563000&amp;usg=AFQjCNGIURvdaGPcEDU0SjIR0IiGTTaqhw" rel="external nofollow">التحديث بسرعة تطبيقات المصدر المفتوح باستخدام DevOps</a>
	</li>
	<li>
		<a href="https://www.google.com/url?q=https://enterprisersproject.com/article/2017/5/9-key-phrases-devops?intcmp%3D7016000000127cYAAQ&amp;sa=D&amp;ust=1557853868565000&amp;usg=AFQjCNEteQw8eolqEBEKhNYLuFN-ZoO25A" rel="external nofollow">9 عبارات مفتاحية لـ DevOps</a>
	</li>
	<li>
		<a href="https://www.google.com/url?q=https://www.redhat.com/en/insights/devops?intcmp%3D7016000000127cYAAQ&amp;sa=D&amp;ust=1557853868564000&amp;usg=AFQjCNELPd8fRL02hFK4bpECBfwqum5arw" rel="external nofollow">تحديث أسرع اعتمادا على DevOps</a>
	</li>
	<li>
		كتاب إلكتروني مجاني: <a href="https://www.openshift.com/promotions/devops-with-openshift.html?intcmp=7016000000127cYAAQ" rel="external nofollow">كتاب إلكتروني مجاني: DevOps with OpenShi</a>.
	</li>
</ul>

<p>
	ترجمة وبتصرف للمقال: <a href="https://opensource.com/resources/devops?src=devops_resource_menu1" rel="external nofollow">What is DevOps</a>
</p>

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

<ul>
	<li>
		المقال التالي: <a href="https://academy.hsoub.com/devops/general/%D9%85%D8%A7-%D9%87%D9%8A-%D8%A7%D9%84%D8%BA%D8%A7%D9%8A%D8%A9-%D9%85%D9%86-devops%D8%9F-r414/" rel="">ما الهدف من DevOps</a>؟
	</li>
</ul>
]]></description><guid isPermaLink="false">413</guid><pubDate>Wed, 15 May 2019 18:03:00 +0000</pubDate></item><item><title>&#x643;&#x64A;&#x641; &#x62A;&#x62F;&#x64A;&#x631; &#x642;&#x627;&#x639;&#x62F;&#x629; &#x628;&#x64A;&#x627;&#x646;&#x627;&#x62A; SQL: &#x648;&#x631;&#x642;&#x629; SQL &#x645;&#x631;&#x62C;&#x639;&#x64A;&#x651;&#x629;</title><link>https://academy.hsoub.com/devops/general/%D9%83%D9%8A%D9%81-%D8%AA%D8%AF%D9%8A%D8%B1-%D9%82%D8%A7%D8%B9%D8%AF%D8%A9-%D8%A8%D9%8A%D8%A7%D9%86%D8%A7%D8%AA-sql-%D9%88%D8%B1%D9%82%D8%A9-sql-%D9%85%D8%B1%D8%AC%D8%B9%D9%8A%D9%91%D8%A9-r395/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_01/sql.png.707a5fb30b478553f944039158529c7d.png" /></p>

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

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

<ul>
<li>
		<strong>كيفية استخدام هذا الدليل:</strong>
	</li>
	<li>
		هذا الدليل على شكل ورقة مرجعيّة فيها أمثلة منفصلة قابلة للاستخدام فرادى.
	</li>
	<li>
		انتقل إلى أي مقطع ذي صلة بالمهمة التي تحاول إكمالها.
	</li>
	<li>
		عندما ترى نصًّا مميّزًا في أوامر هذا الدليل، فضع بالحسبان أن هذا النص يشير إلى الأعمدة، والجداول، والبيانات في قاعدة البيانات الخاصة بك.
	</li>
	<li>
		ضُمّنت قيم البيانات في هذا الدليل في الأمثلة المُعطاة بعلامة ('). من الضروري في SQL تضمين أي قيم بيانات تحتوي على سلاسل نصية في علامات اقتباس أحادية. هذا التضمين غير مطلوب من أجل البيانات الرقمية، ولكنه لن يتسبب بأيّة مشاكل أيضًا.
	</li>
</ul>
<p>
	يرجى ملاحظة أنّه على الرغم من كون SQL معياريّة، إلاّ أنّ معظم برامج قواعد بيانات SQL لها إضافاتها الخاصّة. يستخدم هذا الدليل MySQL كنموذج لنظام إدارة قواعد البيانات العلائقية (RDBMS)، ولكن الأوامر المقدّمة ستعمل مع برامج قواعد البيانات العلائقية الأخرى، بما في ذلك PostgreSQL و MariaDB وSQLite. سنُضمّن الأوامر البديلة عند وجود فروق مهمّة بين أنظمة إدارة قواعد البيانات العلائقية RDBMSs.
</p>

<h2>
	بدء مِحث أوامر قاعدة البيانات (باستخدام استيثاق Socket/Trust)
</h2>

<p>
	يمكن لمستخدم MySQL الجذر root الاستيثاق بدون كلمة مرور بشكل افتراضي في نظام التشغيل أبونتو Ubuntu 18.04 باستخدام الأمر التالي:
</p>

<pre class="ipsCode">
$ sudo mysql
</pre>

<p>
	استخدم الأمر التالي لفتح مِحث أوامر PostgreSQL. سيُسجلك هذا المثال كمستخدم postgres، والذي يتضمن صلاحيات دور المستخدم المميّز superuser role، ولكن يمكنك استبداله بأي دور مُنشئ مُسبقًا:
</p>

<pre class="ipsCode">
$ sudo -u postgres psql
</pre>

<h2>
	بدء مِحث أوامر قاعدة البيانات (باستخدام استيثاق كلمة المرور)
</h2>

<p>
	إذا ُضبط مستخدم MySQL الجذر root للاستيثاق باستخدام كلمة مرور، فبإمكانك استخدام الأمر التالي:
</p>

<pre class="ipsCode">
$ mysql -u root -p
</pre>

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

<pre class="ipsCode">
$ mysql -u user -p
</pre>

<p>
	سيُقاطعك الأمر السابق بعد تشغيله للمطالبة بكلمة المرور الخاصّة بك. إذا كنت ترغب في جعل كلمة المرور كجزء من الأمر، فأَتبعْ الخيار p- مباشرة بكلمة مرورك، بدون ترك فراغ بينهما:
</p>

<pre class="ipsCode">
$ mysql -u root -ppassword
</pre>

<h2>
	إنشاء قاعدة بيانات
</h2>

<p>
	يُنشئ الأمر التالي قاعدة بيانات بإعداداتٍ افتراضيّة:
</p>

<pre class="ipsCode">
mysql&gt; CREATE DATABASE database_name;
</pre>

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

<pre class="ipsCode">
mysql&gt; CREATE DATABASE database_name CHARACTER SET character_set COLLATE collation;
</pre>

<h2>
	إظهار قائمة قواعد البيانات
</h2>

<p>
	شغّل الأمر التالي لرؤية قواعد البيانات الموجودة في نظام MySQL أو MariaDB:
</p>

<pre class="ipsCode">
mysql&gt; SHOW DATABASES;
</pre>

<p>
	يمكنك في PostgreSQL مشاهدة قواعد البيانات المُنشأة باستخدام الأمر التالي:
</p>

<pre class="ipsCode">
postgres=# \list
</pre>

<h2>
	حذف قاعدة البيانات
</h2>

<p>
	شغّل الأمر التالي لحذف قاعدة بيانات بما في ذلك ضمنًا أي جداول وبيانات موجودة فيها:
</p>

<pre class="ipsCode">
mysql&gt; DROP DATABASE IF EXISTS database;
</pre>

<h2>
	إنشاء مستخدم
</h2>

<p>
	نفّذ الأمر التالي لإنشاء معرّف مستخدِم لقاعدةِ بياناتك من دون تحديد أيّ امتيازاتٍ له:
</p>

<pre class="ipsCode">
mysql&gt; CREATE USER username IDENTIFIED BY 'password';
</pre>

<p>
	تَستخدم PostgreSQL بنية مشابهة، ولكنها مختلفة قليلاً، إليك الصياغة:
</p>

<pre class="ipsCode">
postgres=# CREATE USER user WITH PASSWORD 'password';
</pre>

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

<pre class="ipsCode">
mysql&gt; GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
</pre>

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

<pre class="ipsCode">
mysql&gt; GRANT ALL ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
</pre>

<p>
	كن منتبهًا مع ذلك، أنّ الكلمة المفتاحيّة PRIVILEGES مطلوبة لمنح امتيازات كهذه عندما يكون وضع Strict SQL مُشغّلًا.
</p>

<h2>
	حذف مستخدم
</h2>

<p>
	استخدم الصياغة التالية لحذف اسم مستخدم قاعدة البيانات:
</p>

<pre class="ipsCode">
mysql&gt; DROP USER IF EXISTS username;
</pre>

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

<h2>
	اختيار قاعدة البيانات
</h2>

<p>
	يجب أولًا إخبار RDBMS بقاعدة البيانات التي ترغب في إنشائها في MySQL و MariaDB قبل أن تتمكن من إنشاء جدول. استخدم الصياغة التالية للقيام بذلك:
</p>

<pre class="ipsCode">
mysql&gt; USE database;
</pre>

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

<pre class="ipsCode">
postgres=# \connect database
</pre>

<h2>
	إنشاء جدول
</h2>

<p>
	تنشئ بنية الأمر التالية جدولًا جديدًا باسم table يحوي عمودين لكل منهما نوع بياناته الخاص:
</p>

<pre class="ipsCode">
mysql&gt; CREATE TABLE table ( column_1 column_1_data_type, column_2 column_2_data_taype );
</pre>

<h2>
	حذف جدول
</h2>

<p>
	نفّذ ما يلي لحذف جدول بالكامل، بما في ذلك جميع البيانات الخاصّة به:
</p>

<pre class="ipsCode">
mysql&gt; DROP TABLE IF EXISTS table
</pre>

<h2>
	إدخال البيانات في جدول
</h2>

<p>
	استخدم الصياغة التالية لملء جدول بصف واحد من البيانات (row):
</p>

<pre class="ipsCode">
mysql&gt; INSERT INTO table ( column_A, column_B, column_C ) VALUES ( 'data_A', 'data_B', 'data_C' );
</pre>

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

<pre class="ipsCode">
mysql&gt; INSERT INTO table ( column_A, column_B, column_C ) VALUES ( 'data_1A', 'data_1B', 'data_1C' ),  ( 'data_2A', 'data_2B', 'data_2C' ), ( 'data_3A', 'data_3B', 'data_3C' ); 
</pre>

<h2>
	حذف بيانات من جدول
</h2>

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

<pre class="ipsCode">
mysql&gt; DELETE FROM table WHERE column='value';
</pre>

<p>
	ملاحظة: إذا لم تُضمّن عبارة WHERE في تعليمة DELETE، كما هو موضّح في المثال التالي، فستُحذف جميع البيانات الموجودة في الجدول، ولكن لن تُحذف الأعمدة أو الجدول نفسه:
</p>

<pre class="ipsCode">
mysql&gt; DELETE FROM table;
</pre>

<h2>
	تغيير البيانات في جدول
</h2>

<p>
	استخدم الصياغة التالية لتحديث البيانات الموجودة في الصف المُعطى. لاحظ أنّ عبارة WHERE في نهاية الأمر تُخبر SQL بالصف المطلوب تحديثه. إنّ value هي القيمة الموجودة في column_A المحاذية للصفِ الذي تريد تغييره. ملاحظة: إذا أهملتَ تضمين عبارة WHERE في تعليمة UPDATE، فسيَستبدِل الأمر البيانات الموجودة في كل صف من الجدول.
</p>

<pre class="ipsCode">
mysql&gt; UPDATE table SET column_1 = value_1, column_2 = value_2 WHERE column_A=value;
</pre>

<h2>
	إضافة عمود
</h2>

<p>
	ستضيف صياغة الأمر التالية عمودًا جديدًا إلى جدول:
</p>

<pre class="ipsCode">
mysql&gt; ALTER TABLE table ADD COLUMN column data_type;
</pre>

<h2>
	حذف عمود
</h2>

<p>
	سيؤدي هذا الأمر إلى حذف عمود من جدول:
</p>

<pre class="ipsCode">
mysql&gt; ALTER TABLE table DROP COLUMN column; 
</pre>

<h2>
	تنفيذ الاستعلامات الأساسيّة
</h2>

<p>
	استخدم الصياغة التالية لعرض جميع البيانات من عمود واحد من جدول:
</p>

<pre class="ipsCode">
mysql&gt; SELECT column FROM table;
</pre>

<p>
	افصلْ بين أسماء الأعمدة بفاصلة للاستعلام عن أعمدة متعددة من نفس الجدول:
</p>

<pre class="ipsCode">
mysql&gt; SELECT column_1, column_2 FROM table;
</pre>

<p>
	يمكنك أيضًا الاستعلام عن كل الأعمدة في جدول عن طريق استبدال أسماء الأعمدة بعلامة النجمة (*). تعمل علامات النجمة في SQL كبدائل لتمثيل "الكل":
</p>

<pre class="ipsCode">
mysql&gt; SELECT * FROM table;
</pre>

<h2>
	استخدام عبارات WHERE
</h2>

<p>
	يمكنك تضييق نطاق نتائج استعلام عن طريق إلحاق تعليمة SELECT بعبارة WHERE، كما يلي:
</p>

<pre class="ipsCode">
mysql&gt; SELECT column FROM table WHERE conditions_that_apply;
</pre>

<p>
	يمكنك على سبيل المثال الاستعلام عن جميع البيانات من صف واحد من خلال صياغة مشابهة لما يلي. لاحظ أن value يجب أن تكون قيمة محفوظة في كل من column المحدّد والصف الذي تريد الاستعلام عنه:
</p>

<pre class="ipsCode">
mysql&gt; SELECT * FROM table WHERE column = value;
</pre>

<h2>
	العمل مع مُعاملات المقارنة
</h2>

<p>
	يحدّد مُعامل المقارنة في جملة WHERE كيفيّة مقارنة العمود المحدّد بقيمة ما. فيما يلي بعض معاملات المقارنة الشائعة لـ SQL:
</p>

<ul>
<li>
		= : اختبار المساواة
	</li>
	<li>
		!= : اختبار عدم المساواة
	</li>
	<li>
		&lt; : اختبار أقل من
	</li>
	<li>
		&gt; : اختبار أكبر من
	</li>
	<li>
		&lt;= : اختبار أقل من أو يساوي
	</li>
	<li>
		&gt;= : اختبار أكبر من أو يساوي 
	</li>
	<li>
		BETWEEN : اختبار فيما إذا كانت القيمة ضمن مجال مُعطى
	</li>
	<li>
		IN : اختبار ما إذا كانت قيمة الصّف مُتضَمّنة في مجموعة من القيم المحدّدة
	</li>
	<li>
		EXISTS : اختبار ما إذا كانت صفوف موجودة، تبعاً للشروط المحدّدة
	</li>
	<li>
		LIKE : اختبار فيما إذا كانت قيمة تتطابق مع سلسلة نصيّة محدّدة
	</li>
	<li>
		IS NULL : اختبار القيم الفارغة
	</li>
	<li>
		IS NOT NULL : اختبار كافّة القيم غير الفارغة "NULL"
	</li>
</ul>
<h2>
	العمل مع محارف البدل Wildcards
</h2>

<p>
	يسمح SQL باستخدام محارف البدل wildcard. وهي مفيدة عندما تحاول العثور على مُدخل محدّد في جدول، ولكنك لا تكون متأكدًا تماماً من هذا المُدخل. تعتبر علامات النجمة (*) عناصر بديلة لتمثيل "الكل"، حيث تقوم بالاستعلام كل الأعمدة في جدول:
</p>

<pre class="ipsCode">
mysql&gt; SELECT * FROM table;
</pre>

<p>
	تمثل علامات النسبة المئوية (٪) صفراً أو أكثر من محارف غير معروفة.
</p>

<pre class="ipsCode">
mysql&gt; SELECT * FROM table WHERE column LIKE val%;
</pre>

<p>
	يُستخدم التسطير السفلي (_) لتمثيل محرف واحد غير معروف:
</p>

<pre class="ipsCode">
mysql&gt; SELECT * FROM table WHERE column LIKE v_lue;
</pre>

<h2>
	حساب المُدخلات في عمود
</h2>

<p>
	تُستخدم الدّالة COUNT لإيجاد عدد الإدخالات في عمود محدّد. ستُرجع الصياغة التالية إجمالي عدد القيم الموجودة في column:
</p>

<pre class="ipsCode">
mysql&gt; SELECT COUNT(column) FROM table;
</pre>

<p>
	يمكنك تضييق نتائج دالة COUNT من خلال إضافة عبارة WHERE، كما يلي:
</p>

<pre class="ipsCode">
mysql&gt; SELECT COUNT(column) FROM table WHERE column=value;
</pre>

<h2>
	إيجاد قيمة المعدل في عمود
</h2>

<p>
	تُستخدم الدّالة AVG لإيجاد المعدل بين القيم الموجودة في عمود محدّد. لاحظ أن دالة AVG ستعمل فقط مع الأعمدة التي تحتوي على قيم رقميّة. وقد تُعيد خطأ أو 0 عند استخدامها على عمود يحمل قيم نصيّة:
</p>

<pre class="ipsCode">
mysql&gt; SELECT AVG(column) FROM table;
</pre>

<h2>
	إيجاد مجموع القيم في عمود
</h2>

<p>
	تُستخدم الدّالة SUM لإجمالي مجموع القيم الرقميّة الموجودة في عمود:
</p>

<pre class="ipsCode">
mysql&gt; SELECT SUM(column) FROM table;
</pre>

<p>
	كما هو الحال مع دالة AVG، إذا نَفّذتَ الدالة SUM على عمود يحوي قيم نصيّة، فقد تُعيد خطأ أو فقط 0، وذلك اعتمادًا على نظام إدارة قواعد البيانات العلائقية خاصتك.
</p>

<h2>
	إيجاد القيمة الكبرى في عمود
</h2>

<p>
	استخدم دالة MAX للعثور على أكبر قيمة رقميّة في عمود أو القيمة الأخيرة أبجديًا :
</p>

<pre class="ipsCode">
mysql&gt; SELECT MAX(column) FROM table;
</pre>

<h2>
	إيجاد القيمة الصغرى في عمود
</h2>

<p>
	استخدم الدّالة MIN للعثور على أصغر قيمة رقميّة في عمود أو القيمة الأولى أبجديًا:
</p>

<pre class="ipsCode">
mysql&gt; SELECT MIN(column) FROM table;
</pre>

<h2>
	فرز النتائج باستخدام عبارات ORDER BY
</h2>

<p>
	تُستخدم عبارة ORDER BY لفرز نتائج الاستعلام. تُعيد الصياغة التالية للاستعلام القيم من column_1 و column_2 وتُرتّب النتائج حسب القيم الموجودة في column_1 بترتيب تصاعدي، أو بترتيب أبجدي بالنسبة لقيم السلاسل النصيّة:
</p>

<pre class="ipsCode">
mysql&gt; SELECT column_1, column_2 FROM table ORDER BY column_1;
</pre>

<p>
	أتبع الاستعلام بـ DESC لتنفيذ نفس الإجراء، ولكن مع ترتيب النتائج بترتيب أبجدي تنازلي:
</p>

<pre class="ipsCode">
mysql&gt; SELECT column_1, column_2 FROM table ORDER BY column_1 DESC;
</pre>

<h2>
	فرز النتائج باستخدام عبارات GROUP BY
</h2>

<p>
	تشبه عبارة GROUP BY عبارة ORDER BY، ولكنها تُستخدم لفرز نتائج استعلام يتضمن دالة مُجمِّعة مثل COUNT أو MAX أو MIN أو SUM. ستؤدي الدوال التجميعيّة الموضّحة في القسم السابق بمفردها إلى إرجاع قيمة واحدة فقط. ويمكنك مع ذلك عرض نتائج دالة التجميع المنفّذة على كل قيمة مطابقة في العمود من خلال تضمين عبارة GROUP BY. ستَحسب الصياغة التالية عدد القيم المطابقة في column_2 وتُجمّعها بترتيب تصاعدي أو أبجدي:
</p>

<pre class="ipsCode">
mysql&gt; SELECT COUNT(column_1), column_2 FROM table GROUP BY column_2;
</pre>

<p>
	أتبِعْ الاستعلام بـ DESC لتنفيذ نفس الإجراء، ولكن بتجميع النتائج بالترتيب الأبجدي التنازلي:
</p>

<pre class="ipsCode">
mysql&gt; SELECT COUNT(column_1), column_2 FROM table GROUP BY column_2 DESC;
</pre>

<h2>
	الاستعلام عن جداول متعددة مع عبارات JOIN
</h2>

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

<pre class="ipsCode">
mysql&gt; SELECT table_1.column_1, table_2.column_2 FROM table_1 JOIN table_2 ON table_1.common_column=table_2.common_column;
</pre>

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

<p>
	تُكتب عبارات JOIN الخارجية إما كـ LEFT JOIN أو RIGHT JOIN. تُرجع عبارة LEFT JOIN كافة السجلات من الجدول "الأيسر" والسجلات المطابقة فقط من الجدول "اليمين". في سياق عبارة JOIN الخارجيّة، يكون الجدول الأيسر هو المشار إليه في جملة FROM، والجدول الأيمن هو أي جدول آخر مشار إليه بعد عبارة JOIN.
</p>

<p>
	سيَعرض الاستعلام التالي كل سجل من table_1 وفقط القيم المطابقة من table_2. ستظهر القيم غير المطابقة في table2 كـ NULL في مجموعة النتائج:
</p>

<pre class="ipsCode">
mysql&gt; SELECT table_1.column_1, table_2.column_2 FROM table_1 LEFT JOIN table_2 ON table_1.common_column=table_2.common_column;
</pre>

<p>
	إن وظيفة عبارة RIGHT JOIN مماثلة لـ LEFT JOIN، ولكنها تُرجع جميع النتائج من الجدول الأيمن، والقيم المطابقة فقط من الجدول الأيسر:
</p>

<pre class="ipsCode">
mysql&gt; SELECT table_1.column_1, table_2.column_2 FROM table_1 RIGHT JOIN table_2 ON table_1.common_column=table_2.common_column;
</pre>

<h2>
	دمج تعليمات SELECT متعددة باستخدام عبارات UNION
</h2>

<p>
	يفيد مُعامل UNION في دمج نتائج تعليمتي SELECT (أو أكثر) في مجموعة نتائج واحدة:
</p>

<pre class="ipsCode">
mysql&gt; SELECT column_1 FROM table UNION SELECT column_2 FROM table;
</pre>

<p>
	يمكن بالإضافة إلى ذلك أن تجمع عبارة UNION بين تعليمتي SELECT (أو أكثر) والتي تستعلم عن جداول مختلفة في نفس مجموعة النتائج:
</p>

<pre class="ipsCode">
mysql&gt; SELECT column FROM table_1 UNION SELECT column FROM table_2;
</pre>

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

<p>
	يغطي هذا الدليل بعضًا من الأوامر الأكثر شيوعًا في SQL المُستخدمة لإدارة قواعد البيانات، والمستخدمين، والجداول، والاستعلام عن المحتويات الموجودة في هذه الجداول. ومع ذلك، هناك العديد من تجميعات العبارات والمعاملات والتي تنتج جميعها مجموعات فريدة من النتائج. إذا كنت تبحث عن دليل أكثر شموليّة للعمل مع SQL، فإنّنا نُشجعك على مراجعة <a href="https://docs.oracle.com/cd/B19306_01/server.102/b14200/toc.htm" rel="external nofollow">Oracle's Database SQL Reference</a>
</p>

<p>
	بالإضافة إلى ذلك، إذا كانت هناك أوامر SQL شائعة ترغب في رؤيتها في هذا الدليل، فيرجى طرحها أو تقديم اقتراحات في التعليقات أدناه.<br><br>
	ترجمة بتصرّف للمقال <a href="https://www.digitalocean.com/community/tutorials/how-to-manage-sql-database-cheat-sheet" rel="external nofollow">How To Manage an SQL Database</a> لصاحبه Mark Drake
</p>
]]></description><guid isPermaLink="false">395</guid><pubDate>Sat, 26 Jan 2019 11:56:33 +0000</pubDate></item><item><title>TaskBoard: &#x628;&#x631;&#x645;&#x62C;&#x64A;&#x651;&#x629; &#x645;&#x639;&#x62A;&#x645;&#x62F;&#x629; &#x639;&#x644;&#x649; &#x623;&#x644;&#x648;&#x627;&#x62D; Kanban &#x639;&#x644;&#x649; &#x646;&#x638;&#x627;&#x645; &#x627;&#x644;&#x62A;&#x634;&#x63A;&#x64A;&#x644; CentOS 7</title><link>https://academy.hsoub.com/devops/general/taskboard-%D8%A8%D8%B1%D9%85%D8%AC%D9%8A%D9%91%D8%A9-%D9%85%D8%B9%D8%AA%D9%85%D8%AF%D8%A9-%D8%B9%D9%84%D9%89-%D8%A3%D9%84%D9%88%D8%A7%D8%AD-kanban-%D8%B9%D9%84%D9%89-%D9%86%D8%B8%D8%A7%D9%85-%D8%A7%D9%84%D8%AA%D8%B4%D8%BA%D9%8A%D9%84-centos-7-r392/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2019_01/taskboard.png.9f3c975f54cd47718d371144925fa27f.png" /></p>

<p>
	<img alt="Kanban-board-example.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="28623" data-unique="vd64gjxxa" src="https://academy.hsoub.com/uploads/monthly_2019_01/Kanban-board-example.jpg.c094d47a9abcb123ecf24c2e06d14474.jpg"></p>

<h2>
	مقدّمة
</h2>

<p>
	إنّ TaskBoard أو "لوح المهام" هو برمجيّة مجانيّة ومفتوحة المصدر، مستوحاة من ألواح Kanban لتتبُع المهام.
</p>

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

<p>
	<img alt="board.png" class="ipsImage ipsImage_thumbnailed" data-fileid="28622" data-unique="h8m0r6kh3" src="https://academy.hsoub.com/uploads/monthly_2019_01/board.png.551b7384c1e08e0fcfe0faeaefee6104.png"></p>

<p>
	تجعل هذا البرمجيّة التتبع البصري لتطوّر مشاريعك سهلًا كما يظهر في الصورة.
</p>

<p>
	ميزات TaskBoard:
</p>

<ul>
<li>
		حرّة، ومفتوحة المصدر (رخصة MIT)، وذاتيّة الاستضافة
	</li>
	<li>
		سهلة التثبيت
	</li>
	<li>
		ألواح (مشاريع) غير محدودة
	</li>
	<li>
		تخصيص الأعمدة داخل الألواح وتوسيع / تصغير مستمر من أجل كل مستخدم
	</li>
	<li>
		تسمح العناصر بالألوان المخصّصة، والتصنيفات، وتنسيق التوصيفات، والمرفقات، والتعليقات
	</li>
	<li>
		تعرض العناصر تاريخًا كاملًا "أرشيف" للأنشطة activities
	</li>
	<li>
		تعرض للمشرفين التاريخ الكامل لجميع أنشطة الألواح
	</li>
	<li>
		سهلة التخصيص
	</li>
	<li>
		تتيح إدارة أوليّة للمستخدمين (المشرف، والمستخدمين العاديين)
	</li>
	<li>
		لا وجود لتبعيّات خارجيّة
	</li>
	<li>
		إنشاء لقاعدة بيانات SQLite عند الاستخدام الأول
	</li>
	<li>
		واجهة برمجيّة RESTful <abbr title="Application Programming Interface | واجهة برمجية">API</abbr>) RESTful)
	</li>
	<li>
		تبعيّات محدودة جدًا
	</li>
</ul>
<p>
	ستشرح هذه الدورة التعليميّة كيفيّة تثبيتها على CentOS 7.
</p>

<h2>
	تثبيت خادم الويب Apache
</h2>

<p>
	ثبّت في البداية Apache على جهاز CentOS 7 من خلال تنفيذ الأمر التالي:
</p>

<pre class="ipsCode">
# yum install httpd
</pre>

<p>
	شغّل Apache ومكّنه من التشغيل في وقت الإقلاع وذلك بمجرد انتهائك من التثبيت:
</p>

<pre class="ipsCode">
# systemctl start httpd
# systemctl enable httpd
</pre>

<h2>
	تثبيت PHP
</h2>

<p>
	يجب تثبيت php باعتبار أن TaskBoard مكتوبة بهذه اللغة. ونظرًا لأنّها تتطلب الإصدار PHP الخامس أو أكثر، فسنثبّت PHP7 باستخدام مستودع Webtatic.
</p>

<p>
	أولاً، ثَبّت مستودع EPEL المطلوب من قبل Webtatic:
</p>

<pre class="ipsCode">
# yum install epel-release</pre>

<p>
	حدّث:
</p>

<pre class="ipsCode">
# yum install epel-release</pre>

<p>
	بالإمكان الآن تثبيت مستودع Webtatic عن طريق تنفيذ الأوامر التالية:
</p>

<pre class="ipsCode">
# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
# yum update
</pre>

<p>
	ثبّت PHP 7.1 والإضافات التي تتطلبها TaskBoard وذلك بمجرّد أن يصبح المستودع جاهزًا ويصبح بالإمكان لـ yum استخدامه:
</p>

<pre class="ipsCode">
# yum install php71w php71w-gd php71w-json php71-readline php71w-cli php71w-sqlite3
</pre>

<h2>
	تثبيت SQLite
</h2>

<p>
	يستخدم TaskBoard الـ SQLite كقاعدة بيانات، مما يعني أنه بإمكاننا استخدامه دون الحاجة إلى تثبيت MySQL أو أيّة قواعد بيانات "كبيرة" أخرى.
</p>

<p>
	يمكن تثبيت SQLite باستخدام أمر yum التالي:
</p>

<pre class="ipsCode">
# yum install sqlite
</pre>

<h2>
	تثبيت TaskBoard
</h2>

<p>
	إنّ تثبيت TaskBoard سهلٌ للغاية، كما هو متوقع من قائمة الميزات المطوّلة المعروضة في التمهيد. يتطلب الأمر في الواقع فقط تنزيل واستخراج أرشيف TaskBoard. انتقل إلى المسار الجذر للويب في Apache:
</p>

<pre class="ipsCode">
# cd /var/www</pre>

<p>
	نزّل الأرشيف هنا:
</p>

<pre class="ipsCode">
# wget https://github.com/kiswa/TaskBoard/archive/master.zip
</pre>

<p>
	فُك ضغطه:
</p>

<pre class="ipsCode">
# unzip master.zip
</pre>

<p>
	سيستَخرج unzip الأرشيف إلى دليل يدعى TaskBoard-master. يمكنك إعادة تسميته (اختياري):
</p>

<pre class="ipsCode">
# mv TaskBoard-master taskboard
</pre>

<p>
	ثبّت الملحقات المطلوبة بواسطة Composer:
</p>

<pre class="ipsCode">
./taskboard/build/composer.phar install
</pre>

<p>
	ثم غيّر مالك taskboard إلى مستخدم apache:
</p>

<pre class="ipsCode">
# chown -R apache:apache /var/www/taskboard
</pre>

<h2>
	إنشاء مضيف افتراضي Virtual Host
</h2>

<p>
	أنشئ ملف مضيف افتراضي جديد لـ TaskBoard:
</p>

<pre class="ipsCode" id="ips_uid_1319_19">
# $EDITOR /etc/httpd/conf.d/board.example.com.conf</pre>

<p>
	ثم الصق المحتوى التالي في هذا الملف:
</p>

<pre class="ipsCode" id="ips_uid_1319_21">
&lt;VirtualHost *:80&gt;
	ServerAdmin admin@example.com
	DocumentRoot "/var/www/taskboard"
	ServerName board.example.com
	ServerAlias www.board.example.com
	&lt;Directory "/var/www/taskboard"&gt;
    	Options Indexes FollowSymLinks
    	AllowOverride All
    	Require all granted
	&lt;/Directory&gt;
	ErrorLog "/var/log/httpd/board.example.com-error_log"
	CustomLog "/var/log/httpd/board.example.com-access_log" combined
&lt;/VirtualHost&gt;
</pre>

<p>
	أعد تشغيل Apache:
</p>

<pre class="ipsCode">
# systemctl restart httpd
</pre>

<h2>
	إنهاء التثبيت
</h2>

<p>
	للقيام بالخطوة الأخيرة لإنهاء التثبيت من خلال متصفح الويب، انتقل إلى عنوان الـ URL:
</p>

<p>
	<a href="http://board.example.com" ipsnoembed="false" rel="external nofollow">http://board.example.com</a>
</p>

<p>
	سجّل الدخول مستخدمًا كلمة admin في كل من اسم المستخدم وكلمة المرور على حد سواء. ثم غيّر كلمة مرور المسؤول administrator بعد تسجيلك للدخول مباشرةً وذلك بالانتقال إلى صفحة الإعدادات Settings.
</p>

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

<p>
	رأينا كيفيّة تثبيت TaskBoard على CentOS 7. سيُساعد بالتأكيد هذا التطبيق المعتمد على Kanban العديد من النّاس في تنظيم سير عمل مشاريعهم.
</p>

<p>
	ترجمة وبتصرّف للمقال <a href="https://www.unixmen.com/taskboard-kanban-based-software-centos-7/" rel="external nofollow">TaskBoard: Kanban-based Software on CentOS 7</a> لصاحبه Giuseppe Molica.
</p>
]]></description><guid isPermaLink="false">392</guid><pubDate>Mon, 07 Jan 2019 23:24:42 +0000</pubDate></item><item><title>&#x635;&#x64A;&#x627;&#x646;&#x629; &#x627;&#x644;&#x645;&#x634;&#x627;&#x631;&#x64A;&#x639; &#x645;&#x641;&#x62A;&#x648;&#x62D;&#x629; &#x627;&#x644;&#x645;&#x635;&#x62F;&#x631;</title><link>https://academy.hsoub.com/devops/general/%D8%B5%D9%8A%D8%A7%D9%86%D8%A9-%D8%A7%D9%84%D9%85%D8%B4%D8%A7%D8%B1%D9%8A%D8%B9-%D9%85%D9%81%D8%AA%D9%88%D8%AD%D8%A9-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-r359/</link><description><![CDATA[
<p><img src="https://academy.hsoub.com/uploads/monthly_2017_10/28.png.f1c32fd46bc422a92993dd3e4741a857.png" /></p>

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

<h2 id="اكتب-توثيقا-مفيدا">
	اكتب توثيقًا مفيدًا
</h2>

<p>
	سيزيد التوثيق سهل الفهم (والذي سيؤدي إلى جعل البرنامج سهل الاستخدام) من قاعدة مستخدميك، ويساعد في تحويل المستخدمين إلى مساهمين في مشروعك.<br>
	عندما تفكر بالشيفرات التي تكتبها أثناء تطويرك للمشروع، وتكتب بعض الملاحظات الجانبية لتساعدك في دمج مختلف أجزاء مشروعك مع بعضها بعضًا، فسيسهل عليك البدء بكتابة التوثيق أثناء عملية التطوير؛ أو ربما تقرر أن تكتب التوثيق قبل برمجة التطبيق، متبعًا بذلك منهجية «التطوير الموجه بالتوثيق» (documentation-driven development) التي تقول أنَّ عليك كتابة توثيق ميزات المشروع أولًا ثم برمجة تلك الميزات اعتمادًا على توثيقها.<br>
	هنالك بضعة ملفات عليك وضعها في المجلد الرئيسي لمشروعك بجانب الشيفرات وهي:<br>
	- ملف <code>README.md</code> الذي يوفر ملخصًا عن المشروع وأهدافه.<br>
	- ملف <code>CONTRIBUTING.md</code> الذي يحتوي على تعليمات المساهمة في المشروع.<br>
	- رخصة مشروعك، والتي ستشجِّع الناس على المساهمة في موقعك، أرجو أن تراجع مقالة <a href="https://academy.hsoub.com/programming/general/%D9%83%D9%8A%D9%81-%D8%AA%D8%AE%D8%AA%D8%A7%D8%B1-%D8%B1%D8%AE%D8%B5%D8%A9-%D9%85%D9%81%D8%AA%D9%88%D8%AD%D8%A9-%D8%A7%D9%84%D9%85%D8%B5%D8%AF%D8%B1-%D9%84%D8%A8%D8%B1%D8%A7%D9%85%D8%AC%D9%83-r293/" rel="">كيف تختار رخصة مفتوحة المصدر لبرامجك</a>.<br>
	قد يأخذ التوثيق أشكالًا عدِّة، لذا عليك أن تضع نوعية المستخدمين المحتملين ومجال المشروع في الحسبان، فمن الممكن أن يأتي التوثيق بمختلف الأشكال ويكون موجهًا نحو فئات مختلفة من مستخدمي المشروع. قد تقرر استخدام شكل أو أكثر من الأشكال الآتية اعتمادًا على مجال عملك:
</p>

<ul>
<li>
		دليل عام لتعريف المستخدمين بالمشروع
	</li>
	<li>
		الدروس التعليمية لعرض مختلف حالات الاستخدام
	</li>
	<li>
		الأسئلة الشائعة (FAQ) للإجابة عن أكثر التساؤلات شيوعًا بين المستخدمين
	</li>
	<li>
		مقالات عن استكشاف الأخطاء التي قد يواجهها المستخدمون وكيفية إصلاحها
	</li>
	<li>
		مرجع للواجهة البرمجية (<abbr title="Application Programming Interface | واجهة برمجية">API</abbr>) للتطبيق تسمح للمستخدمين معرفة معلومات عن الواجهة البرمجية بسرعة
	</li>
	<li>
		ملاحظات الإصدار (release notes) التي تُذكَر فيها العلل المعروفة والتغييرات التي حدثت في كل إصدار
	</li>
	<li>
		الميزات المستقبلية لتتبع وشرح ما هي الميزات التي ستأتي في إصدارات مستقبلية.
	</li>
	<li>
		تسجيل مقطع فيديو لتعريف المستخدمين بمشروعك عبر الوسائط المتعددة.
	</li>
</ul>
<p>
	قد تلائم بعض أشكال التوثيق السابقة مشروعك أكثر من غيرها، لكن توفير أكثر من شكل للتوثيق سيساعد مستخدمي مشروعك أن يفهموا كيف يتفاعلون معك فهمًا أعمق.<br>
	عليك عند كتابة التوثيق أو تسجيل مقطع فيديو أن تكون واضحًا قدر الإمكان، ومن الأفضل ألّا تكون عندك افتراضات مسبقة عن القدرات التقنية لمستخدمي مشروعك، ومن الأفضل أن تتبع منهجية Top-Down عند تأليف التوثيق، أي أن تشرح بداية الأمر ما الذي تفعله البرمجية بشكل عام (مثلًا: أتمتة أمور إدارة النظام، أو بناء موقع إلكتروني …إلخ.) قبل التعمق في التفاصيل.<br>
	وصحيحٌ أنَّ اللغة الإنكليزية هي اللغة الرائدة في عالم التقنية، لكن أبقِ في ذهنك مَن هم المستخدمون المتوقعون وما هي لغتهم الأم؛ فاللغة الإنكليزية هي خيارٌ جيدٌ إذا كانت لديك قاعدة مستخدمين واسعة ومن مختلف البلدان، لكن ضع في بالك أنَّ عدد كبيرًا ممن سيقرؤون توثيقك لا تكون اللغة الإنكليزية هي لغتهم الأم، لذا حاول استخدام لغة سهلة لا تُسبِّب لبسًا عند القراء، وإذا كان مشروعك موجّه لمنطقة أو لغة معيّنة مثل برنامج للتعرف على الكلام العربي فأنصحك حينئذٍ أن توفر التوثيق باللغة العربية.<br>
	حاول أن تكتب التوثيق كما لو كنتَ تكتب لأحد المساهمين الجدد الذين يريدون أن يطلعوا على حالة المشروع، فلا تنسَ أنَّك تريد أن يتحول المستخدمون العاديون إلى مساهمين.
</p>

<h2 id="تنظيم-القضايا">
	تنظيم «القضايا»
</h2>

<p>
	القضايا (issues) هي طريقةٌ تستعمل لتتبع أو التبليغ عن العلل، أو لطلب ميزات جديدة لتضاف إلى البرنامج. توفِّر خدمات استضافة مستودعات المشاريع مفتوحة المصدر مثل GitHub و GitLab و Bitbucket طرائق لتتبع القضايا التي تُنشِئها وتسمح للمستخدمين بإنشائها. فمن المتوقع عند إطلاق مشروعك مفتوح المصدر أن تُفتَح عدِّة قضايا من قِبل مجتمع المستخدمين، لذا سيمثِّل تنظيم ووضع أولويات لهذه القضايا أمرًا مهمًا لتبيان خارطة الطريق لما عليك فعله للمشروع مستقبلًا.<br>
	ولأنَّ أي مستخدم يستطيع أن يفتح قضية، فلن تكون جميع القضايا لتبليغ العلل أو لطلب الميزات، فقد تأتيك أسئلة عبرها، أو قد تأتي طلبات لتحسينات صغيرة على واجهة المستخدم مثلًا. فمن الأفضل تنظيم هذه القضايا في أفضل شكل ممكن ومحاولة التواصل مع المستخدمين الذين أنشؤوها.<br>
	يجب أن تمثِّل القضايا مهامًا محددة عليك تنفيذها برمجيًا، لذا عليك تنظيمها حسب أهميتها. يجب أن يكون هنالك حدود للوقت والعمل الذي تنفقه أنت أو المساهمون في المشروع للقضايا المفتوحة فيه، ويمكنكم التعاون على اتخاذ القرارات والخروج بخطة قابلة للتنفيذ، وعندما تعلم أنَّك غير قادر على حل مشكلة معيّنة في الإطار الزمني المتاح لك، فيمكنك التعليق عليها وإخبار المستخدم أنَّك قرأت المشكلة وستفعل ما بوسعك تجاهها، وقد تستطيع أن تخبره بالوقت المتوقع للنظر في أمر هذه المشكلة مرةً أخرى.<br>
	أما لطلبات الميزات أو التحسينات، فيمكنك أن تسأل الشخص الذي أنشأ القضية إن كان يستطيع المساهمة في الشيفرة لتطبيق هذه الميزة، يمكنك توجيه المستخدمين إلى ملف <code>CONTRIBUTORS.md</code> أو إلى أيّة صفحات أخرى من التوثيق.<br>
	ولأن الأسئلة لا تمثِّل عادةً مهامًا محدَّدة، فالتعليق على السؤال لتوجيه المستخدم بلباقة إلى صفحة التوثيق هو خيارٌ ممتاز لإبقاء تفاعلك مع المستخدم احترافيًا ولطيفًا؛ وإذا لم يحتوي التوثيق على جوابٍ لهذا السؤال فحان الوقت لإضافة التوثيق الملائم، وتعبِّر عن شكرك للمستخدم لأنه دلّك على موضع النقص في التوثيق. إذا كنتَ تستقبل عددًا كبيرًا من الأسئلة عبر القضايا، فربما تفكر بإنشاء صفحة الأسئلة الشائعة (FAQ) في التوثيق، أو صفحات ويكي أو منتدى لتتيح للآخرين المساعدة والمشاركة في الإجابة عن الأسئلة.<br>
	وفي كل مرة يبلِّغ فيها أحد المستخدمين عن مشكلة، فحاول أن تكون لطيفًا معه قدر الإمكان، فتفاعل المستخدمين معك يعني أنَّ المشروع قد أعجبهم ويريدون جعله أفضل.<br>
	محاولة تنظيم القضايا ستجعل مشروعك محدثًا دومًا وسيشعر المستخدمون أنهم يأثرون فيه، لذا احذف القضايا التي تقع خارج نطاق مشروعك أو القضايا القديمة، وضع أولويات للبقية لكي يكون تقدمك في المشروع مستمرًا.
</p>

<h2 id="حفز-المساهمين">
	حفِّز المساهمين
</h2>

<p>
	كلما رحّبتَ بالمساهمين الجدد وكافأتهم على جهودهم لوجدت أنَّك تحفِّز مساهمين جدد ليشاركوا في مشروعك، ولكي تجذب المساهمين إلى المشروع فاحرص على تضمين ملف <code>CONTRIBUTING.md</code> في المجلد الرئيسي لمستودعك، وإشارة إلى ذاك الملف في <code>README.md</code>.<br>
	إذا أردتَ كتابة ملف جيد للمساهمين الجدد فيجب أن يتضمن كيفية بدء العمل على المشروع كمطوِّر، فقد تكتب دليلًا يوضح ذلك خطوةً بخطوة، أو قائمةً من الأمور التي يجب على المطورين اتباعها وتنفيذها، شارحًا كيف يمكن أن يدمجوا الشيفرة التي كتبوها بشيفرة المشروع عبر طلبية pull.<br>
	إضافةً إلى توثيق كيفية المساهمة في المشروع، فلا تنسَ أن تبقي شيفرات المشروع منظمة وسهلة القراءة، فإذا كانت الشيفرة سهلة الفهم وفيها تعليقات كثيرة تشرح ما تفعله وطريقة استخدامها موحدة ومتناسقة مع بعضها بعضًا فسيساهم ذلك في تحفيز المساهمين المحتملين على المشاركة في المشروع.<br>
	أقترح أيضًا أن تبقي على قائمة بالمساهمين، فيمكنك أن تجذب المساهمين عبر إضافتهم إلى القائمة بغض النظر عن حجم مشاركتهم (حتى تصحيح الأخطاء اللغوية هو مشاركة ومساهمة فعالة في المشروع، ويمكن أن تؤدي إلى مزيدٍ من المساهمات مستقبلًا). وهذا يعني أنَّك تقدِّر عمل المساهمين في المشروع وتشير إليهم أمام جميع مستخدمي مشروعك، مما يحمِّس بقية المستخدمين على المشاركة.
</p>

<h2 id="ابن-مجتمعا-حول-مشروعك">
	ابنِ مجتمعًا حول مشروعك
</h2>

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

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

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

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

<p>
	يلعب صائن المستودع دورًا مهمًا في مجتمع البرمجيات مفتوحة المصدر الكبير. وصحيحٌ أنَّ هذا الدور يأخذ وقتًا وعملًا كبيرًا، لكن الخبرة التي تكتسبها خلال هذا العمل ستفيدك كمطوِّر وكمساهم، ولا تنسَ أنَّ الصائن اللطيف واللبق سيساعد في دفع عجلة تطوير المشروع الذي يهتم لأجله.<br>
	ترجمة –وبتصرّف– للمقال <a href="https://www.digitalocean.com/community/tutorials/maintaining-open-source-software-projects" rel="external nofollow">Maintaining Open-Source Software Projects</a> لصاحبته Lisa Tagliaferri.
</p>

<p>
	حقوق الصورة البارزة محفوظة لـ <a href="https://www.freepik.com/free-vector/under-maintenance-background-design_1000106.htm" rel="external nofollow">Freepik</a>
</p>
]]></description><guid isPermaLink="false">359</guid><pubDate>Fri, 27 Oct 2017 18:00:41 +0000</pubDate></item></channel></rss>
