2008-10-13 27 views
17

मुझे कई बैच प्रक्रियाएं मिली हैं जो लिनक्स/PHP वेबसाइट के दृश्यों के पीछे चलती हैं। वे संख्या और जटिलता में बढ़ने लग रहे हैं, इसलिए मैं उन पर सहन करने के लिए प्रक्रिया की एक छोटी राशि लाना चाहता हूं।उत्पादन के लिए उपकरण और स्क्रिप्ट तैनात करने के लिए सर्वोत्तम अभ्यास?

मेरे स्रोत पेड़ में सीपीपी फाइलों और स्क्रिप्ट का एक गुच्छा है, जो विकास के साथ व्यवस्थित है लेकिन दिमाग में तैनाती नहीं है। सभी निष्पादन योग्य संकलन के बाद, मुझे मशीनों के समूह पर विभिन्न स्क्रिप्ट और बाइनरी डालने की आवश्यकता है। विभिन्न मशीनों को अपनी बैच प्रक्रियाओं के लिए विभिन्न निष्पादन योग्य, स्क्रिप्ट और कॉन्फ़िगरेशन फ़ाइलों की आवश्यकता होती है। मेरे पास कुछ टूल्स भी हैं जिन्हें मैंने लिखा है जो हर मशीन पर हैं। फिलहाल, यह तैनाती प्रक्रिया मैनुअल और त्रुटि प्रवण है।

मुझे लगता है कि मैं सिर्फ एक स्क्रिप्ट के साथ समाप्त होने जा रहा हूं जो स्रोत पेड़ की जड़ पर चलता है और मशीनों में से किसी के लिए आवश्यक सब कुछ का एक छोटा पेड़ बनाता है। फिर, मैं उचित मशीनों के लिए बस rsync होगा। लेकिन मैं उत्सुक हूं कि अन्य लोग इस प्रकार की समस्या का प्रबंधन कैसे कर रहे हैं। कोई विचार?

+0

वाह 7 साल बाद ... अब उपकरण का एक टन है विशेष रूप से एप्लिकेशन रिलीज ऑटोमेशन उपकरण। अधिक जानने के लिए यहां एक महान प्रारंभिक संसाधन है: https://en.wikipedia.org/wiki/Application_release_automation –

उत्तर

2

अपने वितरण का प्रारूप प्रारूप में अपने स्वयं के पैकेज बनाएं, उदा। डेबियन पैकेज (.deb)। इन्हें या तो प्रत्येक मशीन पर कॉपी किया जा सकता है और मैन्युअल रूप से स्थापित किया जा सकता है, या आप अपना खुद का भंडार सेट कर सकते हैं, और इसे अपनी स्रोतों की सूची में जोड़ सकते हैं।

आपके पैकेजों को स्थापित किया जाना चाहिए ताकि प्रत्येक स्क्रिप्ट में प्रत्येक स्क्रिप्ट को चलाने की आवश्यकता के आधार पर प्रत्येक होस्ट पर अलग-अलग स्क्रिप्ट्स कॉन्फ़िगरेशन फ़ाइल से परामर्श लें।

इसे सभी को एक साथ जोड़ने के लिए, आप एक मेटा पैकेज बना सकते हैं जो आपके द्वारा बनाए गए प्रत्येक अन्य पैकेज पर निर्भर करता है। इस तरह, जब आप एक नया सर्वर स्थापित करते हैं, तो आप उस मेटा पैकेज को स्थापित करते हैं, और अन्य पैकेज निर्भरताओं के रूप में लाए जाते हैं।

हालांकि यह प्रक्रिया थोड़ा जटिल लगती है, अगर आपके पास कई स्क्रिप्ट और कई मेजबान तैनात हैं, तो यह वास्तव में लंबे समय तक भुगतान कर सकता है।

1

मुझे लगातार कई ग्राहकों को PHP स्क्रिप्ट और अपाचे कॉन्फ़िगरेशन रोल करना होगा। चूंकि वे सभी डेबियन लिनक्स चलाते हैं, इसलिए मैंने अपने सर्वर पर एक डेबियन पैकेज रिपॉजिटरी सेट की है और सभी ग्राहकों को ऐसा करना है एपीटी-अपग्रेड टाइप करें और उन्हें नवीनतम संस्करण मिलता है।

3

cfengine tutorial पर एक नज़र डालें ताकि यह देखने के लिए कि cfengine आपकी स्थिति के लिए सही टूल की तरह दिखता है या नहीं। यह एक छोटी वेबसाइट के लिए थोड़ा जटिल हो सकता है, लेकिन यदि भविष्य में अधिक कंप्यूटर और अधिक कॉन्फ़िगरेशन शामिल करने जा रहा है, तो किसी बिंदु पर आप cfengine या ऐसा कुछ उपयोग कर समाप्त कर देंगे।

0

पहली बात यह है कि इन सभी स्क्रिप्ट को स्रोत नियंत्रण भंडार (svn या git अच्छे) में प्राप्त करें ताकि आप समय के साथ इन स्क्रिप्ट में परिवर्तनों को ट्रैक कर सकें।

यदि आप रूबी में रुचि रखते हैं, तो Capistrano देखें, यह क्लस्टर में कई मशीनों पर चीजों को तैनात करने के लिए उपयुक्त है, और सेट अप करने में काफी आसान है। यह सीधे आपके संस्करण नियंत्रण प्रणाली से फ़ाइलों को पढ़ सकते हैं।

1

Puppet एक और उपकरण है जिसका उपयोग इस स्थिति में किया जा सकता है। यह cfengine के समान है - आप वांछित तैनाती और कठपुतली आंकड़ों का एक मॉडल बनाते हैं कि इस राज्य में पर्यावरण कैसे प्राप्त करें।

19

यहां उपकरण की कई श्रेणियां हैं। कुछ लोग इन श्रेणियों से उपकरणों के संयोजन का उपयोग करते हैं। मैं कभी-कभी, उदाहरण के लिए, कठपुतली और Capistrano दोनों का उपयोग करें। चर्चा के लिए Puppet or Capistrano - Use the Right Tool for the Job देखें।

स्क्रिप्टिंग उपकरण एक आवेदन नियोजित करना करने के उद्देश्य से:

इस श्रेणी में उपकरणों के साथ सामान्य पद्धति है कि आप अक्सर एक Makefile के समान आदेशों के सेट के साथ एक स्क्रिप्ट और/या कॉन्फ़िग फ़ाइल बनाने के लिए, है, और उपकरण आपके उत्पादन बॉक्स में ssh होगा, अपने स्रोत का चेकआउट करें, और जो भी अन्य कदम आवश्यक हैं चलाएं।

इस क्षेत्र में उपकरण आमतौर पर पिछले संस्करण में रोलबैक के लिए सुविधाएं हैं। इसलिए वे आपके स्रोत को रिलीज़/निर्देशिका में देखेंगे, और यदि सभी ठीक हो जाए तो "वर्तमान" से "रिलीज़ /" तक एक प्रतीकात्मक लिंक बनाएं। यदि कोई समस्या है, तो आप एक कमांड चलाकर पिछले संस्करण पर वापस जा सकते हैं जो "वर्तमान" को हटा देगा और इसे पिछले रिलीज़/निर्देशिका से लिंक करेगा।

  • Capistrano रेल समुदाय से आता है लेकिन सामान्य उद्देश्य है। कैपिस्ट्रानो के उपयोगकर्ताओं को कैपिस्ट्रानो के लिए तैनाती व्यंजनों का एक सेट, deprec में रुचि हो सकती है।
  • Vlad the Deployer रेल समुदाय से फिर से कैपिस्ट्रानो का एक विकल्प है।
  • अपनी खुद की खोल स्क्रिप्ट या मेकफ़ाइल लिखें। उत्पादन बॉक्स के लिए फ़ाइलों को प्राप्त करने के लिए

विकल्प:

  • स्रोत से प्रत्यक्ष चेकआउट। हमेशा आपके लिए संभव नहीं है यदि आपके उत्पादन बॉक्स में विकास उपकरण, विशेष रूप से स्रोत कोड प्रबंधन उपकरण की कमी है।
  • स्थानीय रूप से चेकआउट स्रोत, फिर इसे टैर/ज़िप करें। टैरबॉल ओवर कॉपी करने के लिए एसपीपी या आरएसआईएनसी का प्रयोग करें। इसे कभी-कभी अमेज़ॅन ईसी 2 परिनियोजन की तरह कुछ पसंद किया जाता है, जहां एक संपीड़ित टैरबॉल समय/बैंडविड्थ बचा सकता है।
  • स्थानीय रूप से चेकआउट स्रोत, फिर इसे उत्पादन बॉक्स पर rsync।

पैकेजिंग उपकरण

अपने अनुप्रयोग के लिए फ़ाइलों से युक्त संकुल उत्पन्न करने के लिए अपने ओएस की पैकेजिंग प्रणाली का प्रयोग करें। एक मास्टर पैकेज बनाएं जिसमें निर्भरता के रूप में अन्य पैकेज हैं। RubyWorks सिस्टम इसका एक उदाहरण है, जो रेल स्टैक और नमूना अनुप्रयोग को तैनात करने के लिए उपयोग किया जाता है। फिर यह एपीटी, यम/आरपीएम, विंडोज एमएसआई, या किसी दिए गए संस्करण को तैनात करने का विषय है। रोलबैक में पुराने संस्करण को अनइंस्टॉल करना और पुनर्स्थापित करना शामिल है।

जनरल उपकरण ऐप्स/कॉन्फिग स्थापित कर रहा है और बनाए रखने के सिस्टम का एक सेट करने के लक्ष्य के

इन उपकरणों विशेष रूप से एक वेब अनुप्रयोग की तैनाती की समस्या की तैनाती/Apps का रख-रखाव की अधिक सामान्य समस्या को लक्षित नहीं करते, बल्कि/सर्वरों, या एक पूरी कंपनी के वर्कस्टेशन के सेट के लिए Configs। वे वेब डेवलपर की तुलना में सिस्टम व्यवस्थापक पर अधिक लक्षित हैं, हालांकि उन्हें उपयोगी भी मिल सकता है।

  • Cfengine इस श्रेणी में एक उपकरण है।
  • Puppet का उद्देश्य Cfengine पर सुधार करना है। यह एक सीखने की अवस्था है लेकिन कई लोगों को यह पता लगाने के लिए समय लगता है कि कॉन्फ़िगर कैसे करें। एक बार जब आप इसे प्राप्त कर लेंगे, तो प्रत्येक बॉक्स केंद्रीय सर्वर को समय-समय पर जांचता है और सुनिश्चित करता है कि सब कुछ अद्यतित है। अगर कोई फ़ाइल संपादित करता है या अनुमति बदलता है, तो यह पता लगाया जाता है और सही किया जाता है।तो, ऊपर तैनाती उपकरण के विपरीत, कठपुतली न केवल आपके लिए फ़ाइलों को सही जगह पर रखती है, यह सुनिश्चित करती है कि वे इस तरह बने रहें।
  • Chef एक समान दृष्टिकोण के साथ कठपुतली से थोड़ा छोटा है।
  • Smartfrog इस श्रेणी में एक और उपकरण है।
  • Ansible सादा YAML फाइलों के साथ काम करता है और यह

का प्रबंधन करता है इस श्रेणी में इन की तुलना और कई और अधिक उपकरणों के लिए सर्वर पर चल एजेंटों की आवश्यकता नहीं है, विकिपीडिया लेख, Comparison of open source configuration management software देखते हैं।

+0

ग्रेट उत्तर, जानकारीपूर्ण और अच्छी तरह से लिखा गया। बस एक नोट: साल बीत चुके हैं और अब पपेट विंडोज भी करता है। – Luke404