رفع ملف php على السيرفر دون تعارض مع عمليات

ZaFaR97 • منذ 4 سنوات

بسم الله

لدي إتصال مباشر مع الخادِم، وأقوم بتعدِيل الشفرة - الكود - ثمّ أعمل رفع لها بواسطة sftp مثلًا، لتُرفع للخادِم.

المشكلة :

بعض ملفات php تعمل بشكل شبه مستمرّ كمعالِجة لطلبات API ، عندما أقوم بتعديلاتٍ على الملف من الصعب جدًا إيقاف السيرفر لتحديث الملف ( وفيه مشكلة )، عندما أرفع الملف على السيرفر تكون هناك عمليّات جارِيَة بواسطة الملف، فتتعطل العمليات الحالية أو تحدث مشاكل فيها، أو يتوقف السيرفر عن المعالجة لثواني حتى إكتمال رفع الملف.

المشكلة الثانِية :

عندما نفكّر في خيَار إيقاف العمليات الجارِية حاليًا قبل تحديث الملف، تكون المشكلة الجديدة أنّ هناك عمليّات تجري حاليًا ستنقطع وتتسبب في مشاكل.

 

المطلوب: إيجاد حلّ لتحديث البرمجيّات على السيرفرات، دون قطع عمليات جارِية بالإيقاف، أو التسبب في مشاكل أثناء الرفع لتأخر يصل إلى ثانية لرفع الملف، ساعدونا بالأفكار والحلول الممكنة.

الإجابة الصحيحة

Ali Majrashi • منذ 4 سنوات

لهذا النوع من المشاريع لاتستخدم sftp لرفع الملفات مباشرة الافضل استخدام الحلول الجاهزة مثل وضع اكواد المشروع كامل على GitHub واستخدام حلول Code Deploy تقوم هالخدمات برفع التحديثات للسيرفر او عدة سيرفرات انت تحددها دام انه فيه ضغط على السيرفر وماترغب بتوقف العمليات لبعض الامور توجد خدمات ممتازة يطلق عليها Zero Downtime مهمتها نقل كامل المشروع من GitHub او BitBucket او غيرها من خدمات Git طريقة عملها بسيطة تنسخ كامل المشروع بمجلد جديد على السيرفر ثم بعدها تقوم بعمل symlink لمجلد المشروع الجديد بدل القديم وبعدها يحذف الكود القديم هنا انت نزلت وقت Deploy الى صفر ثانيه والسبب انه يتم نسخ كامل الكود داخل مجلد جديد وبعدين يتم عمل رابط لهذا المجلد ليكون هو root directory بدل القديم وعملية symlink جدا سريعة مقارنه بعملية الرفع والاستبدال

تتوفر العديد من خدمات Code Deploy تقدر تبحث عنهم وتجربهم وتستخدم المناسب لك في عالم البرمجة نستخدم Envoyer وهنا شرح لكامل وظائفه Envoyer Series ونستخدم ايضا Laravel Forge ويوفر خدمة لتحديث الاكواد على السيرفر بربط حساب GitHub بس بسيطه جدا مقارنة بخدمات Envoyer فحاليا نستخدمهم جميعا Forge لادارة وانشاء السيرفرات من دجتال اوشن و Envoyer لعمليات Deploy للكود واي تحديث بعدة سيرفرات دفعة واحدة

اذا كنت ترغب بعمل هالخدمات يدويا تستطيع ولكن انصحك استخدام خدمات مختبرة ومجربة لتسهيل عملك وتركز اكثر بالتطوير بدل ادارة جميع خطوات التطوير و Deploy ومتابعتهم والحرص من كل خطوة ان مايصير فيها مشكلة لان مثل هالادوات توفرها لك بخطوات سهله وميسرة وعملها يدويا متعب بالذات في صيانتها وادارتها

مثلا عند اعتمادك على GitHub او غيره لاستضافة كود المشروع وخدمة Envoyer مثلا لعملية Deploy للكود بالسيرفر عند اي عملية تحديث للكود على GitHub مباشرة يتم نسخ الكود للسيرفر تستطيع وضع اختبارات لتجربة الكود قبل عملية symlink وفي حالة وجود خطأ يتم التراجع عن عملية Deploy وتنبيهك بوجود مشكلة بكود المشروع انه لايعمل والعديد من الخدمات الي ممكن تستفيد منها 

هنا كورس كامل مدفوع لعملية انشاء خدمات شبيه بخدمة Envoyer الكورس باسم Deploy!

وفيه فيديوهات مجانية تفيدك ايضا هنا Deployment

وفيه ملاحظة مهمة فيه بعض العمليات الطويله بالذات اذا انت تستخدم Queues يجب ان تعمل لها restart بعد انتهاء عملية Deploy لتضمن ان Queues عندك ياخذ الكود الجديد لتنفيذ مهامه بالشكل السليم 

اتمني اكون وفقت واجبت على استفسارك

الإجابات (1)

Ali Majrashi • منذ 4 سنوات
الإجابة الصحيحة

لهذا النوع من المشاريع لاتستخدم sftp لرفع الملفات مباشرة الافضل استخدام الحلول الجاهزة مثل وضع اكواد المشروع كامل على GitHub واستخدام حلول Code Deploy تقوم هالخدمات برفع التحديثات للسيرفر او عدة سيرفرات انت تحددها دام انه فيه ضغط على السيرفر وماترغب بتوقف العمليات لبعض الامور توجد خدمات ممتازة يطلق عليها Zero Downtime مهمتها نقل كامل المشروع من GitHub او BitBucket او غيرها من خدمات Git طريقة عملها بسيطة تنسخ كامل المشروع بمجلد جديد على السيرفر ثم بعدها تقوم بعمل symlink لمجلد المشروع الجديد بدل القديم وبعدها يحذف الكود القديم هنا انت نزلت وقت Deploy الى صفر ثانيه والسبب انه يتم نسخ كامل الكود داخل مجلد جديد وبعدين يتم عمل رابط لهذا المجلد ليكون هو root directory بدل القديم وعملية symlink جدا سريعة مقارنه بعملية الرفع والاستبدال

تتوفر العديد من خدمات Code Deploy تقدر تبحث عنهم وتجربهم وتستخدم المناسب لك في عالم البرمجة نستخدم Envoyer وهنا شرح لكامل وظائفه Envoyer Series ونستخدم ايضا Laravel Forge ويوفر خدمة لتحديث الاكواد على السيرفر بربط حساب GitHub بس بسيطه جدا مقارنة بخدمات Envoyer فحاليا نستخدمهم جميعا Forge لادارة وانشاء السيرفرات من دجتال اوشن و Envoyer لعمليات Deploy للكود واي تحديث بعدة سيرفرات دفعة واحدة

اذا كنت ترغب بعمل هالخدمات يدويا تستطيع ولكن انصحك استخدام خدمات مختبرة ومجربة لتسهيل عملك وتركز اكثر بالتطوير بدل ادارة جميع خطوات التطوير و Deploy ومتابعتهم والحرص من كل خطوة ان مايصير فيها مشكلة لان مثل هالادوات توفرها لك بخطوات سهله وميسرة وعملها يدويا متعب بالذات في صيانتها وادارتها

مثلا عند اعتمادك على GitHub او غيره لاستضافة كود المشروع وخدمة Envoyer مثلا لعملية Deploy للكود بالسيرفر عند اي عملية تحديث للكود على GitHub مباشرة يتم نسخ الكود للسيرفر تستطيع وضع اختبارات لتجربة الكود قبل عملية symlink وفي حالة وجود خطأ يتم التراجع عن عملية Deploy وتنبيهك بوجود مشكلة بكود المشروع انه لايعمل والعديد من الخدمات الي ممكن تستفيد منها 

هنا كورس كامل مدفوع لعملية انشاء خدمات شبيه بخدمة Envoyer الكورس باسم Deploy!

وفيه فيديوهات مجانية تفيدك ايضا هنا Deployment

وفيه ملاحظة مهمة فيه بعض العمليات الطويله بالذات اذا انت تستخدم Queues يجب ان تعمل لها restart بعد انتهاء عملية Deploy لتضمن ان Queues عندك ياخذ الكود الجديد لتنفيذ مهامه بالشكل السليم 

اتمني اكون وفقت واجبت على استفسارك

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !