كيفية كفاءة إدارة تثبيتات متعددة من تطبيقات الويب ؟

StackOverflow https://stackoverflow.com/questions/502774

سؤال

من تجربتي, واحدة من أكبر المشاكل التي تأتي عبر خلال webdevelopment عملية الحفاظ على الاجهزة المختلفة تحديث وآمنة عبر ملقمات مختلفة.

بلدي الشركة لديها هو نفسه CMS التي يتم تثبيتها حاليا عبر 100+ خوادم.في هذه اللحظة نحن نستخدم هاك العش FTP يستند إلى نهج ، جنبا إلى جنب مع ترقية البرامج النصية في مواقع محددة من أجل ترقية كل من CMS الاجهزة.كفاءة إدارة هذه الاجهزة يصبح من الصعب على نحو متزايد و محفوفة بالمخاطر عندما تكون هناك عدة وحدات مخصصة المعنية.

  • ما هي أفضل طريقة للحفاظ على الاجهزة المتعددة من تطبيق ويب آمنة ما يصل إلى التاريخ ؟
  • كيف لك تفعل ذلك ؟
  • هل هناك أي نصائح محددة بشأن نمطية في التطبيقات ، من أجل الحفاظ على المرونة تجاه عملائنا ، ولكن لا تزال قادرة على كفاءة إدارة متعددة "الفروع" من طلب ؟

بعض المعلومات السياقية:ونحن أساسا على تطوير مصباح المكدس.واحدة من أهم العوامل التي تساعدنا على بيع CMS هو أن نتمكن من المساعد حد كبير أي شيء لدينا يريد العميل.هذا يمكن جدا من 10 إلى 10.000 خطوط من التعليمات البرمجية المخصصة.

الكثير من العمل المخصصة يتكون من قطع صغيرة جدا من المدونة ؛ إدارة جميع هذه قطع صغيرة من التعليمات البرمجية في التخريب يبدو مملة جدا وغير فعالة لي (منذ تسليم حوالي 2 مواقع كل أسبوع ، وهذا من شأنه أن يؤدي في الكثير من الفروع).

إذا كان هناك شيء أنا تطل أنا نحب أن نسمع منك.

شكرا مقدما.


تقرير اخبارى: أولا شكرا لكل من إجاباتك.كل هذه هي مفيدة حقا.

أنا من المرجح أن استخدام SVN-نهج ، مما يجعل benlumley's الحل الأقرب إلى ما كنت سوف تستخدم.لأن الجواب على هذا السؤال قد تختلف في أخرى usecases ، سوف يقبل الجواب مع أكبر عدد من الأصوات في نهاية المدى.

يرجى النظر في أجوبة والتصويت على تلك التي تعتقد أنها الأكثر قيمة مضافة.

هل كانت مفيدة؟

المحلول

أعتقد أن استخدام نظام التحكم في الإصدار و "التفريع" جزء من الرموز التي يجب تعديل يمكن أن تتحول إلى أن تكون أفضل نهج في شروط المتانة والكفاءة.

توزيع نسخة نظام يمكن أن يكون أفضل مناسبة لاحتياجاتك ، لأنه من شأنها أن تسمح لك لتحديث "الأساسية" يتميز بسلاسة على "الفروع" مع الحفاظ على بعض التغييرات المحلية إذا لزم الأمر.

تحرير: أنا متأكد من أن الحفاظ على كل ما يصل إلى موعد مع توزيع نسخة النظام سيكون أقل بكثير شاقة من ما يبدو أن نتوقع :يمكنك الاحتفاظ التغييرات التي كنت متأكدا من أنك لن تحتاج في أماكن أخرى المحلية و توزيع الجانب يعني كل من نشر التطبيق هو في الواقع مستقلة عن الآخرين و إلا الإصلاح تعني للنشر سوف تنتشر.

نصائح أخرى

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

الآن خلق إس الفروع قد يكون الحل الوحيد الذي يساعدك على الحفاظ على سلامة العقل الخاص بك.في الوضع الحالي الخاص بك ، إنه لا مفر منه تقريبا التي سوف تجعل من خطأ الفوضى لموقع العميل.على الأقل مع فروع يضمن لك أن يكون مستقرا رمز قاعدة لكل عميل.فقط مسكتك مع إس في الفروع إذا قمت بنقل أو إعادة تسمية ملف في فرع من المستحيل دمج هذا التغيير مرة أخرى إلى أسفل إلى الجذع (عليك أن تفعل ذلك يدويا).

حظا سعيدا!

تحرير:على سبيل مثال جيد التصميم باستخدام تطبيق جميع المبادئ المبينة أعلاه ، انظر الماجنتو التجارة الإلكترونية.الماجنتو هو أقوى ، للمد وسهلة لتخصيص تطبيق ويب عملت معهم حتى الآن.

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

أنا أفكر في شيء على طول خطوط بنيت لهذا الغرض حزمة نظام.أنت تريد كل نسخة من وحدة لتتبع الفردية والتبعيات و 'ضمان التوافق', واستخدام هذه المعلومات تلقائيا تحديث 'آمنة' وحدات.

E. g.دعونا نقول كنت قد بنيت جديد الإصدار 3 من 'ويكي وحدة.تريد نشر الإصدار الجديد على كافة ملقمات تشغيل التطبيق الخاص بك ولكن كنت قد أجريت تغييرات على إحدى الواجهات في ويكي وحدة منذ الإصدار 2.الآن لجميع الافتراضي المنشآت التي لا توجد مشكلة ، ولكن ذلك من شأنه كسر المنشآت مع ملحقات مخصصة على الجزء العلوي من واجهة القديمة.مخططة جيدا حزمة النظام أن تأخذ الرعاية من هذا.

لمعالجة مسألة الأمن ، يجب أن ننظر إلى استخدام التوقيعات الرقمية على بقع الخاص بك.هناك الكثير من الخير المكتبات المتاحة على المفتاح العام القائم على التوقيعات حتى مجرد الذهاب مع ما يبدو أن معيار النظام الذي تختاره.

غير متأكد ما إذا كان شخص ما قال هذا, وهناك الكثير من الطويل الردود هنا و أنا لم اقرأ كل منهم.

أعتقد أن أفضل نهج إلى التحكم في الإصدار أن يكون CMS الخاص بك جلست بمفردها في مستودع و كل مشروع في حد ذاتها.(أو كل من هذه يمكن أن تكون المجلدات الفرعية داخل أحد الريبو اعتقد)

ثم يمكنك استخدام الجذع (أو فرع معين/الوسم إذا كنت تفضل ذلك) كما إس:الخارجية في كل المشاريع التي تتطلب ذلك.هذه الطريقة ، أي تحديثات تجريها على CMS يمكن أن ترتكب مرة أخرى إلى مستودع, و سوف يتم سحبها إلى مشاريع أخرى عند إس في تحديث (أو الخارجية هو svn:التبديل 'إد).

كجزء من جعل هذا أسهل, سوف تحتاج إلى تأكد من CMS و وظائف مخصصة للجلوس في مجلدات مختلفة ، بحيث إس الظواهر يعمل بشكل صحيح.

أي:

project
 project/cms <-- cms here, via svn external
 project/lib <-- custom bits here
 project/www <-- folder to point apache/iis at

(هل يمكن أن يكون cms و lib تحت www المجلد إذا لزم الأمر)

هذا سوف تتيح لك فرع/الوسم كل مشروع كما يحلو لك.يمكنك أيضا التبديل إس:موقع خارجي لكل فرع/الوسم أساس.

من حيث الحصول على تغييرات العيش ، أود أن أقترح عليك فورا التخلص من ftp و استخدام رسينك أو svn checkout/الصادرات.كل عمل جيد, الخيار متروك لك.

لدي خبرة مع رسينك الطريق ، rsyncing أحد إس التصدير إلى الملقم.إذا كنت السير في هذا الطريق, كتابة بعض البرامج النصية قذيفة ، يمكنك إنشاء اختبار شيل لتظهر لك الملفات وسوف تحميل دون تحميلها أيضا ، باستخدام-ن العلم.أنا عموما استخدام زوج من النصوص لكل بيئة - اختبار واحد أن تفعل ذلك في الواقع.

المفتاح المشترك المصادقة لذلك أنت لا تحتاج إلى كلمة المرور إرسال الإضافات قد تكون مفيدة أيضا ، اعتمادا على كيفية تأمين الخادم أن تعطى الوصول.

يمكنك أيضا الحفاظ على آخر قذيفة النصي تفعل معظم التحسينات التي ببساطة المكالمات ذات الصلة قذيفة النصي لكل مشروع كنت ترغب في الترقية.

هل نظرت في دروبال?لا, لا لنشر و استبدال ما لديك ، ولكن لنرى كيفية التعامل مع التخصيصات و وحدات?

في الأساس هناك "مواقع" المجلد الذي يحتوي الدليل على كل موقع كنت استضافة.داخل كل مجلد منفصل settings.php والذي يسمح لك بتحديد قاعدة بيانات مختلفة.وأخيرا ، يمكن (اختياريا) قد "الموضوعات" و "وحدات" المجلدات داخل المواقع.

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

بناء في مدونة الذاتي عملية التحديث.
فإنه سيتم التحقق من التحديثات وتشغيلها متى/أين/كيف تكوين العميل.

سيكون لديك لخلق نوعا من قائمة وحدات (مخصص أو لا) التي تحتاج إلى اختبار مع بناء جديد قبل بدء التنفيذ.عندما نشر التحديث سيكون لديك للتأكد من أن هذه هي اختبار متكاملة بشكل صحيح.نأمل أن التصميم الخاص بك يمكن التعامل مع هذا.

التحديثات بشكل مثالي بضع خطوات رئيسية.

  1. أ) النسخ الاحتياطي حتى تتمكن من العودة. يجب أن تكون قادرا على التراجع كامل التحديث في أي وقت.لذلك ، وهذا يعني خلق المحلية الأرشيف التطبيق وقاعدة البيانات أولا.

    ب) تحديث عملية الرصد - لدينا نظام CMS هاتف المنزل للبحث عن بناء جديد.

    ج) جدول التحديث على توافر - وهناك احتمالات كنت لا تريد تحديث لتشغيل الثاني هو متاح.وهذا يعني سيكون لديك لإنشاء كرون/وكيل من نوع ما فعله نظام التحديث تلقائيا في منتصف الليل.يمكنك أيضا النظر في متطلبات العميل إلى تحديث في عطلة نهاية الأسبوع أو في أيام محددة.يمكنك أيضا ارباك طرح التحديثات الخاصة بك حتى لا التحديث 1000 من العملاء في يوم 1 و الحصول على الدعم الفني الجحيم.متداخلة لفة من نوع ما قد تكون مفيدة بالنسبة لك.

    د) إضافة وضع الصيانة لتحديث الموقع -- ركلة الموقع في "وضع الصيانة".

    هـ) SVN checkout أو للتحميل حزم -- من الناحية المثالية يمكن نشر عبر svn checkout, وإذا لم يكن, إعداد الملقم الخاص بك لتقديم إس ولدت حزم في الأرشيف التي يمكن نشرها على مواقع العملاء.

    f) نشر DB البرامج النصية - النسخ الاحتياطي قواعد البيانات وتحديثها ، ملء لهم

    ز) تحديث موقع كود - كل هذا العمل خطوة واحدة.

    ح) تشغيل بعض الاختبارات على ذلك. إذا كان لديك رمز التجارب الذاتية في بني ، سيكون من المثالي.

هنا هو ما أقوم به...

العميل محددة تشمل المسار

  • مشترك, مشتركة رمز في مشترك/current_version/lib/
  • موقع كود معين في العملاء/foo.com/lib
  • تضمين المسار إلى من العملاء/foo.com/lib, ثم حصة/lib
  • كل شيء في نظام التحكم في الإصدار

هذا يضمن أن يستخدم رمز الملفات المشتركة حيثما كان ذلك ممكنا ، ولكن إذا كنت بحاجة إلى تجاوز فئة معينة أو ملف لسبب ما أستطيع أن أكتب العميل محددة نسخة في مجلد.

الاسم المستعار common files

بلدي الظاهري تكوين المضيف سوف تحتوي على خط مثل

Alias /common <path>/shared/current_version/public_html/common

والذي يسمح المشتركة عناصر واجهة المستخدم, الرموز, الخ أن تكون مشتركة عبر مشاريع

الوسم رمز مشترك مع كل موقع الإفراج

بعد كل موقع الإفراج أنا الوسم رمز مشترك عن طريق إنشاء فرع بفعالية تجميد هذه النقطة في الوقت المناسب.وهذا يسمح لي بنشر /مشترك/version_xyz/ إلى خادم الحية.ثم أنا يمكن أن يكون المضيف الظاهري استخدام إصدار معين من الملفات المشتركة ، أو ترك الأمر لافتا في current_version إذا كنت تريد أن تلتقط آخر التحديثات.

هل نظرت إلى أدوات مثل دمية (على نظام الإدارة ث.التطبيق النشر) أو كابيسترانو (نشر التطبيقات في RubyOnRails ولكن لا تقتصر على هذه)?

ويتمثل أحد الخيارات في إعداد القراءة فقط نظام التحكم في الإصدار (التخريب).هل يمكن دمج الوصول إلى مستودع في CMS الخاص بك و تحتج على التحديثات من خلال قائمة أو تلقائيا إذا كنت لا تريد المستخدم أن يختار حول تحديث (يمكن أن تكون حاسمة).باستخدام نظام التحكم في الإصدار أيضا تسمح لك للحفاظ على الفروع المختلفة بسهولة

لأن الناس بالفعل أن استخدام التحكم في الإصدار (أنا أفضل التخريب بسبب وظيفة) و المتفرعة سيكون الخيار الأفضل.آخر البرمجيات مفتوحة المصدر المتاحة على سورس يسمى cruisecontrol.مذهلة, يمكنك تكوين cruisecontrol مع التخريب في ساش الطريقة أن أي تعديل رمز أو رمز جديد يضاف في serversion, تحكم أوتوماتيكي للسرعة تعرف تلقائيا و سوف يقومون ببناء بالنسبة لك.فإنه سيتم حفظ الجحيم من الوقت.

لقد فعلت نفس الطريقة في الشركة.لدينا أربعة مشاريع و قد نشر هذا المشروع على ملقمات مختلفة.يجب الإعداد cruiseconrol في مثل هذه الطريقة أن أي تعديل في قانون قاعدة آلي بناء.آخر سيناريو نشر هذا بناء على الملقم.الخاص بك هي جيدة للذهاب.

إذا كنت تستخدم مصباح كومة أنا بالتأكيد ستكون الحلول الملفات في حزمة التوزيع الخاصة بك واستخدامها من أجل نشر التغييرات.أوصي في هذا الشأن Redhat/Fedora بسبب دورة في الدقيقة و هذا ما لدي تجربة.على أية حال يمكنك استخدام أي ديبيان على أساس التوزيع أيضا.

في وقت ما قبل صنعت مصباح حل إدارة مزود خدمة استضافة الخوادم.كان لديهم خوادم متعددة لرعاية استضافة المواقع و أنا في حاجة إلى وسيلة لنشر التغييرات من مدير أعمالي ، لأن كل آلة بذاته وكان مدير على الانترنت.أنا قدمت دورة في الدقيقة حزمة تحتوي على حل الملفات (php الغالب) وبعض نشر النصوص التي جرينا مع دورة في الدقيقة.

الآلي تحديث فنحن لدينا دورة في الدقيقة مستودع يقع على كل ملقم في يم.conf.أنا تعيين crontab عمل تحديث خوادم يوميا مع أحدث RPMs من أن ثقة مستودع.

Trustiness يمكن تحقيق أيضا لأنه يمكنك استخدام إعدادات الثقة في حزم RPM مثل التوقيع عليها مع ملف المفتاح العام و قبول فقط توقيع حزم.

همم يمكن أن تكون فكرة لإضافة تكوين الملفات ؟ كتبت أن الكثير من نصي صغير يتم القيام بشيء.الآن إذا كنت بناء عليها في مصادر وجهت لهم مع ملفات التكوين لا ينبغي أن "سهولة" ؟

من ناحية أخرى وجود فروع لكل العملاء يبدو أن النمو الهائل لي.و كيف "تعرف" المناطق التي كنت قد فعلت شيئا و لا تنسى أن "جعل" التغييرات في جميع الفروع الأخرى أيضا.التي تبدو قبيحة جدا بالنسبة لي.

يبدو مزيج من مراجعة الضوابط خيارات التكوين و/أو نشر إيصالات يبدو أن تكون "جيدة" فكرة.....

مع ذلك العديد من الاختلافات على البرامج الأساسية ، وأعتقد أن كنت حقا بحاجة إلى نظام التحكم في الإصدار للبقاء على رأس من دفع التحديثات من الجذع إلى الفرد مواقع العملاء.

حتى إذا كنت تعتقد أن التخريب قد تكون مملة, لديك شعور جيد لما نقاط الألم سوف يكون...شخصيا, أنا لا أوصي التخريب لهذا, لأنه ليس حقا جيدة في إدارة وتتبع الفروع.على الرغم من أن benlumley اقتراح استخدام الظواهر الخاصة بك البرمجيات الأساسية ، هذا ينهار إذا كنت تحتاج إلى قرص صلب رمز العميل الخاص بك المواقع.

ننظر إلى بوابة من أجل التحكم في الإصدار ، انها بنيت على المتفرعة ، وانها سريعة.

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

أنصح ملف config مع قائمة الفروع و استضاف موقع ، ثم تشغيلها من خلال هذا السيناريو أن يتحقق من كل فرع في تحويل وتحميل أحدث التغييرات.هذا يمكن أن يكون كرون قد فعله ليلا التحديثات تلقائيا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top