आपकी पसंदीदा php परिनियोजन रणनीति क्या है? [बन्द है]


161

मैं PHP में एक नई परियोजना शुरू कर रहा हूं और मुझे PHP की तैनाती के लिए अपनी पसंदीदा रणनीति पर अन्य डेवलपर्स से कुछ प्रतिक्रिया प्राप्त करना अच्छा लगेगा। मैं चीजों को थोड़ा स्वचालित करना पसंद करूंगा ताकि एक बार बदलाव करने के बाद वे जल्दी से एक विकास या उत्पादन सर्वर में स्थानांतरित हो सकें।

मुझे रूबी के साथ कैपिस्ट्रानो के साथ-साथ कुछ मूल शेल स्क्रिप्टिंग के साथ तैनाती का अनुभव है।

इससे पहले कि मैं अपने सिर पर पहले डुबकी लगाऊं, यह सुनना बहुत अच्छा होगा कि दूसरों ने अपनी परियोजनाओं में यह कैसे संपर्क किया है।

अग्रिम जानकारी

वर्तमान में डेवलपर्स साइट के स्थानीय प्रतिष्ठानों पर काम करते हैं और एक तोड़फोड़ के भंडार में बदलाव करते हैं। प्रारंभिक तैनाती svn से टैग जारी करके और सर्वर पर अपलोड करके किया जाता है।

अतिरिक्त परिवर्तन आम तौर पर परिवर्तित फ़ाइलों को मैन्युअल रूप से अपलोड करके टुकड़ों में किए जाते हैं।


प्यारा :) संपादित splattne के लिए धन्यवाद।
ग्लॉरीफिश 20

1
@ पाओल समाधि: OMG मैं हंसी नहीं रोक सकता !!!!! कोई बेहतर तरीका नहीं है :)
आंद्रेई R nonea

क्या कोई इसका जवाब दे सकता है - stackoverflow.com/questions/36034277/…
संदीपन नाथ

जवाबों:


109

PHP के लिए, Phing बिल्ड स्क्रिप्ट के साथ SVN जाने का रास्ता है। Phing ANT के समान है, लेकिन PHP में लिखा गया है, जो PHP डेवलपर्स के लिए उनकी आवश्यकताओं के लिए संशोधित करना बहुत आसान बनाता है।

हमारी तैनाती की दिनचर्या इस प्रकार है:

  • हर कोई काम पर एक ही स्थानीय सर्वर पर विकसित होता है, हर डेवलपर की मशीन के साथ-साथ घर पर भी चेकआउट होता है।
  • कमिट्स एक पोस्ट-कम हुक को ट्रिगर करता है जो एक स्टेजिंग सर्वर को अपडेट करता है।
  • यदि वे पास होते हैं, तो स्टेजिंग सर्वर पर टेस्ट चलाए जाते हैं।
  • फिंग बिल्ड स्क्रिप्ट चलाई जाती है:
  • उत्पादन सर्वर को नीचे ले जाता है, डोमेन को "निर्माणाधीन" पृष्ठ पर स्विच करता है
  • उत्पादन चेकआउट पर SVN अपडेट चलाता है
  • स्कीमा डेल्टास स्क्रिप्ट चलाता है
  • परीक्षण चलाता है
  • यदि परीक्षण विफल होते हैं - रोलबैक स्क्रिप्ट चलाएँ
  • यदि परीक्षण पास हो जाते हैं, तो सर्वर वापस उत्पादन चेकआउट के लिए जाता है

इसमें phpUnderControl भी है , जो एक कंटीन्यूअस इंटीग्रेशन सर्वर है। मुझे वेब परियोजनाओं के ईमानदार होने के लिए यह बहुत उपयोगी नहीं लगा।


मैं अपने विंडोज / .NET शॉप में जो कुछ करता हूं उसकी एक सूची पोस्ट करने वाला था, लेकिन यह कमोबेश आपके यहां है। +1
डैनियल शेफ़र

क्या आपको उत्पादन के माहौल के रूप में svn सह के लिए किसी भी नुकसान का सामना करना पड़ा है? मैं वास्तव में किसी भी नुकसान के बारे में सोच नहीं सकता, लेकिन उत्पादन के रूप में एक svn सह के लिए "साफ" नहीं लगता है? एक svn निर्यात या rsync क्यों नहीं?
क्रिस 11

एक सह और निर्यात के बीच बुनियादी अंतर के कारण - आप विशिष्ट परिवर्तनों को आगे नहीं बढ़ा सकते हैं, आपको पूरे आवेदन को फिर से निर्यात करना होगा। यह एक बहुत ही महत्वपूर्ण अंतर है जो जीवन को बहुत आसान बनाता है
एरेन गैल्परिन

36
साइट को स्क्रीन के नीचे क्यों रखा जाए? यदि आप रिलीज़ / /, और liveSite / की एक निर्देशिका को सिम्लिंक के माध्यम से रिलीज़ / अपने फ़ोल्डर में चलाते हैं, तो आप साइट को नए रिलीज़ / फ़ोल्डर में पूरी तरह से चेकआउट कर सकते हैं और सह के एक बार सहानुभूति को तुरंत पलटा सकते हैं? डाउनटाइम की कोई आवश्यकता नहीं है (जब तक कि आप खराब सोब नहीं हैं जो उस सिम्कलिन स्विच के दौरान एक अनुरोध करता है)।
जोसेफ वासना

2
उन सभी कार्यों को करने के लिए कौन जिम्मेदार है जैसे कि उत्पादन पर एसवीएन को अपडेट करें और नई रिलीज को सिमिलिंक करें? क्या यह फिंग है? क्या यह जेनकींस है?
डेनियल रिबेरो

24

मैं वर्तमान में Git का उपयोग करके PHP तैनात कर रहा हूं । Git की नवीनतम प्रति के साथ मेरे उत्पादन सर्वर को अपडेट करने के लिए एक सरल git पुश उत्पादन की आवश्यकता है। यह आसान और तेज़ है क्योंकि गिट का स्मार्ट केवल डिफरेंशियल भेजने के लिए है न कि पूरे प्रोजेक्ट को फिर से। यह मेरे अंत में हार्डवेयर विफलता के मामले में वेब सर्वर पर रिपॉजिटरी की एक निरर्थक प्रति रखने में मदद करता है (हालांकि मैं गीथहब को सुरक्षित करने के लिए धक्का भी देता हूं)।


मैं छोटे-से-मध्यम आकार के प्रोजेक्ट्स पर वर्षों से यही काम कर रहा हूं। मुझे कहना है, यह मेरे लिए बहुत अच्छा काम कर रहा है। आपको इस दृष्टिकोण की सरलता से प्यार हो गया है।
क्रिस एलन लेन

3
आप इस दृष्टिकोण के साथ डेटाबेस को कैसे संभालते हैं?
32423hjh32423

1
@neilc हाथ से, दुर्भाग्य से। DB में किसी भी बदलाव को पुश से पहले मैन्युअल रूप से करने की आवश्यकता है।
काइल क्रोनिन

मैं आमतौर पर एक PHP फ़ाइल () शामिल करता हूं जिसमें DB कॉन्फिगर होता है, और मैन्युअल रूप से फाइल को सर्वर या टेस्ट मशीन पर रखता है। इस तरह आप पासवर्ड को git में स्टोर नहीं कर रहे हैं और गलती से प्रोडक्शन डेटाबेस पर काम नहीं कर रहे हैं।
मैट

आपके लिए ऐसा करने के लिए आप git को कैसे कॉन्फ़िगर करते हैं? क्या कोई गाइड / ट्यूटोरियल है? पहले ही, आपका बहुत धन्यवाद।
मिगुएल स्टीवंस 15

14

हम कैपिस्ट्रानो के लिए एक वेब फ्रंटेंड वेबस्ट्रानो का उपयोग करते हैं, और इसके साथ बहुत खुश हैं।

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

भले ही Capistrano और Webistrano रूबी अनुप्रयोग हैं, लेकिन किसी भी PHP प्रोग्रामर को समझने के लिए तैनाती 'व्यंजनों' का वाक्यविन्यास आसान और शक्तिशाली है। मूल रूप से कैपिस्ट्रानो रूबी परियोजनाओं पर रूबी के लिए बनाया गया था, लेकिन आसानी से PHP परियोजनाओं को समायोजित करता है।

एक बार कॉन्फ़िगर करने के बाद यह गैर-प्रोग्रामर द्वारा उपयोग किए जाने के लिए काफी आसान है, जैसे कि परीक्षणकर्ता एक स्टेजिंग संस्करण को तैनात करते हैं।

सबसे तेज़ तैनाती प्रदान करने के लिए हमने fast_remote_cache विधि स्थापित की , जो रिमोट सर्वर पर svn वर्किंग-कॉपी कैश को अपडेट करती है, और फिर परिणाम को हार्डलिंक करती है।


7

मैं अपाचे चींटी का उपयोग विभिन्न लक्ष्यों (देव, क्यूए और लाइव) को तैनात करने के लिए करता हूं । चींटी को जावा परिनियोजन के लिए काम करने के लिए डिज़ाइन किया गया है, लेकिन यह मनमानी फ़ाइलों को तैनात करने के लिए एक बहुत ही उपयोगी सामान्य केस समाधान प्रदान करता है।

बिल्ड.xml फ़ाइल का सिंटैक्स सीखना बहुत आसान है - आप विभिन्न लक्ष्यों और उनकी निर्भरता को परिभाषित करते हैं जो कमांड लाइन पर चींटी प्रोग्राम को कॉल करते समय चलते हैं।

उदाहरण के लिए, मेरे पास देव, QA और लाइव के लिए लक्ष्य हैं, जिनमें से प्रत्येक cvsbuild लक्ष्य पर निर्भर करता है जो हमारे CVS सर्वर से नवीनतम हेड रिवीजन की जांच करता है, उचित फाइलों को बिल्ड डायरेक्टरी (फाइलसेट टैग का उपयोग करके) की प्रतिलिपि बनाता है, और फिर उचित सर्वर के लिए बिल्ड निर्देशिका rsyncs। सीखने के लिए कुछ क्विर्क हैं, और सीखने की अवस्था पूरी तरह से सपाट नहीं है, लेकिन मैं इसे सालों से बिना किसी परेशानी के कर रहा हूं, इसलिए मैं इसे आपकी स्थिति के लिए सुझाऊंगा, हालांकि मैं उत्सुक हूं कि अन्य उत्तर क्या हैं 'इस धागे को देखेंगे।


6

मैं मैन्युअल रूप से Git का उपयोग करके सामान करता हूं। विकास के लिए एक रिपॉजिटरी, जिसे git push --mirrorएक पब्लिक रेपो में एड मिलता है , और लाइव सर्वर उस से खींचा गया तीसरा रेपो है। मुझे लगता है कि यह हिस्सा आपके अपने सेटअप के समान है।

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

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


3

मुझे पता है कि फिंग का अब कुछ समय बाद उल्लेख किया गया है, लेकिन मुझे phpUnderControl के साथ बहुत अच्छी किस्मत मिली है । हमारे लिए हम

  1. स्थानीय मशीनों के लिए शाखाओं की व्यक्तिगत प्रतियाँ देखें
  2. शाखाओं का परीक्षण किया जाता है और फिर ट्रंक में विलय कर दिया जाता है
  3. ट्रंक के लिए संचार स्वचालित रूप से phpUnderControl द्वारा बनाया गया है, परीक्षण चलाता है और सभी दस्तावेज बनाता है, डेटाबेस डेल्टास लागू करता है
  4. ट्रंक गुणवत्ता परीक्षण के माध्यम से चला जाता है और फिर हमारी स्थिर शाखा में विलय हो जाता है
  5. फिर से, phpUnderControl स्वचालित रूप से Stable बनाता है, परीक्षण चलाता है, और डॉक्यूमेंटेशन और अपडेट डेटाबेस बनाता है
  6. जब हम उत्पादन पर जोर देने के लिए तैयार होते हैं तो हम एक rsync स्क्रिप्ट चलाते हैं जो उत्पादन का समर्थन करती है, डेटाबेस को अपडेट करती है, और फिर फाइलों को ऊपर धकेलती है। Rsync कमांड हाथ से मंगाया जाता है ताकि हम सुनिश्चित करें कि कोई व्यक्ति प्रचार देख रहा है।

5
phpUnderControl मर चुका है: |
m02ph3u5

3

घर-निर्मित परिनियोजन स्क्रिप्ट का एक विकल्प एक प्लेटफॉर्म-ए-ए-सर्विस के लिए तैनात करना है जो आपके लिए बहुत सारे कामों को पूरा करता है। एक पासा आम तौर पर अपने स्वयं के कोड परिनियोजन उपकरण, साथ ही स्केलिंग, दोष-सहिष्णुता (जैसे कि हार्डवेयर विफल होने पर नीचे नहीं जा रहा है) और आमतौर पर निगरानी, ​​लॉग चेकिंग आदि के लिए एक महान टूलकिट की पेशकश करेगा। ज्ञात अच्छा विन्यास जो समय के साथ-साथ अप-टू-डेट रखा जाएगा (आपके लिए एक कम सिरदर्द)।

मेरे द्वारा सुझाए गए PaS , PHP के अलावा dotCloud है , ( उनके PHP क्विकस्टार्ट देखें) ) यह MySQL, MongoDB और अतिरिक्त सेवाओं का एक पूरा गुच्छा भी तैनात कर सकता है। इसमें जीरो-डाउनटाइम परिनियोजन, इंस्टेंट रोलबैक, एसएसएल और वेबसोकेट के लिए पूर्ण समर्थन आदि जैसी अच्छी अच्छाइयाँ हैं और एक निशुल्क टियर है जो हमेशा अच्छा होता है :)

बेशक मैं थोड़ा पक्षपाती हूं क्योंकि मैं वहां काम करता हूं! डॉटक्लाउड के अलावा चेक आउट करने लायक अन्य विकल्प हैं पगोडाबॉक्स और ऑर्केस्ट्रा (अब इंजन यार्ड का हिस्सा)।

उम्मीद है की यह मदद करेगा!

सोलोमन


2

कि आप स्वचालित रूप से और नेत्रहीन रूप से एक रिपॉजिटरी से उत्पादन सर्वरों में परिवर्तन को खतरनाक मानते हैं। क्या होगा यदि आपके प्रतिबद्ध कोड में एक प्रतिगमन बग है, इसलिए आपका उत्पादन एप्लिकेशन गड़बड़ हो जाता है?

लेकिन, यदि आप PHP के लिए एक निरंतर एकीकरण प्रणाली चाहते हैं, मुझे लगता है कि PHP के लिए Phing सबसे अच्छा विकल्प है। हालांकि, मैंने खुद इसका परीक्षण नहीं किया है, क्योंकि मैं उदाहरण के लिए scp के मैनुअल तरीके को सामान करता हूं।


2

मुझे पार्टी में देरी हो रही है, लेकिन मुझे लगा कि मैं अपने तरीके साझा करूंगा। हम फ़िंगिस्ट्रानो के साथ फ़िंग का उपयोग करते हैं , जो प्री-बिल्ट बिल्ड फ़ाइलों के माध्यम से फ़िंग को कैपिस्ट्रानो जैसी कार्यक्षमता प्रदान करता है। यह बहुत अच्छा है, लेकिन केवल तभी काम करता है जब आप Git का उपयोग करते हैं।


1

मेरे पास सर्वर पर एक SVN रिलीज़ शाखा की एक कार्यशील प्रति है। साइट को अपडेट करना (जब स्कीमा परिवर्तन नहीं होते हैं) SVN अपडेट कमांड जारी करना उतना ही आसान है। मुझे साइट को ऑफ़लाइन लेने की भी आवश्यकता नहीं है।


1
तो आपके पास .सावन निर्देशिकाएं पूरी साइट पर बिखरी हुई हैं? मेरा शुद्ध मस्तिष्क इस के खिलाफ चला जाता है :)
Stann

यह केवल सोर्स कोड का ध्यान रखता है। तैनाती के लिए अक्सर अन्य कार्यों की आवश्यकता होती है - डेटाबेस परिवर्तन लागू, कैश क्लीयर किया जाता है, आदि
लियोनिद मैमचेनकोव

1

यदि आप xml कॉन्फ़िगरेशन फ़ाइलों के दर्द को खड़ा कर सकते हैं, तो फ़िंग शायद आपकी सबसे अच्छी शर्त है। सिम्फनी फ्रेमवर्क का रेक (pake) का अपना पोर्ट है, जो काफी अच्छी तरह से काम करता है, लेकिन इसे सिम्फनी के बाकी हिस्सों से कसकर जोड़ा गया है (हालाँकि आप शायद उन्हें अलग कर सकते हैं)।

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

अंत में, आप हमेशा शेल स्क्रिप्ट लिख सकते हैं। अब तक, मैंने यही किया है।



1

एक साल देर से लेकिन ... मेरे मामले में, तैनाती स्वचालित नहीं है। मुझे कोड को तैनात करना और डेटाबेस-माइग्रेशन स्क्रिप्ट को स्वचालित रूप से चलाना खतरनाक लगता है।

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


1

अपने काम पर मैंने और मेरी टीम ने कैपिस्ट्रानो की तैनाती के लिए एक फिंग ओरिएंटेड रिप्लेसमेंट विकसित किया है और हमने पीएचई में उपलब्ध कुछ अच्छाइयों को भी शामिल किया है जैसे PHPUnit टेस्टिंग, phpcs और PHPDocumentor। हमने इसे एक git रेपो बनाया है जिसे किसी प्रोजेक्ट में git में सबमॉड्यूल के रूप में जोड़ा जा सकता है और यह बहुत अच्छा काम करता है। मैंने इसे कुछ मुट्ठी भर परियोजनाओं से जोड़ा है और यह पर्याप्त रूप से मॉड्यूलर है कि यह हमारे कई वातावरणों में से किसी भी परियोजना पर काम करना आसान है (मंचन, परीक्षण, उत्पादन, आदि ...)।

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

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


0

मुझे लगता है कि एसवीएन की तैनाती का तरीका बहुत अच्छा नहीं है। इसलिये:

आपको पूरी दुनिया के लिए एसवीएन एक्सेस खोलने की आवश्यकता है

उत्पादन वेब सर्वर में कई। svn हैं

मुझे लगता है कि फिंग एक शाखा का उत्पादन करने के लिए + सभी js / css गठबंधन + मंच विन्यास को बदलने + ssh अपलोड करने के लिए सभी www सर्वर बेहतर तरीका है।

ssh को 10 www सर्वर और svn अप भी परेशानी है।


पूरी दुनिया में मेरा svn सर्वर खोलना, कोई रास्ता नहीं! बस अपने कोड को देखने के लिए अपने फ़ायरवॉल और प्रमाणीकरण का उपयोग करें।
शादोक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.