2010-01-05 34 views
13

के लिए तैनाती कैसे करें मैं वर्तमान में एक चैरिटी संगठन के लिए एक PHP अनुप्रयोग विकसित कर रहा हूं और अब मैं तैनाती प्रथाओं को परिभाषित करने के चरण में हूं।PHP आवेदन

हमारा एप्लिकेशन ज़ेंड फ्रेमवर्क और सिद्धांत दोनों का उपयोग कर रहा है। एप्लिकेशन को अलग-अलग सर्वरों पर लॉन्च किया जाएगा, प्रत्येक एक अलग विन्यास फाइल के साथ। मशीनें विंडोज और लिनक्स दोनों हैं (लेकिन अपाचे और PHP 5.2+ के साथ सभी)।

स्रोत एक उपवर्तन भंडार में उपलब्ध है और हम अपने संकुल को लिनक्स सर्वर पर बनाना और स्टोर करना चाहते हैं।

पसंदीदा रूप से हम अपडेट प्रक्रिया को एप्लिकेशन निर्देशिका में अद्यतन कमांड चलाने के जितना आसान होना चाहते हैं, जहां अद्यतन कमांड डेटाबेस (सिद्धांत स्क्रिप्ट के साथ) को अद्यतन करता है और ढांचे की निर्भरता सुनिश्चित करता है। यह अद्यतन कमांड मशीन पर एक कमांड होना चाहिए (हम उनमें शामिल नहीं हो सकते हैं)। अधिमानतः हमारे पास एक नया संस्करण डाउनलोड करने या एक नए संस्करण के साथ पहले से डाउनलोड की गई टैरबॉल प्रदान करने का विकल्प है। (लेकिन केवल डाउनलोड या केवल टैरबॉल भी ठीक है)

इंस्टॉलेशन और अपडेट (नए संस्करण) वाले पैकेज भी अधिमानतः एक ही कमांड द्वारा निर्मित होते हैं।

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

प्रारंभ में केवल php ऐप को अपडेट करना बहुत आसान होना चाहिए, शुरुआत में एक कॉन्फ़िगरेशन फ़ाइल भरना जब हाथ से किया जा सकता है।

उत्तर

0

आपने कहा कि आपके पास एक क्लस्टर है। हम एक ही स्थिति में हैं और हम जेडएफ और सिद्धांत का उपयोग करते हैं। इस प्रकार हमने समस्या हल की:

<?xml version="1.0" encoding="UTF-8"?> 
<project name="yourprojectname" basedir="."> 

<target name="deploy" depends="apply-deltas,update-app01,update-app02"> 

</target> 

<target name="update-app01"> 

    <sshexec host="app01" 
    username="yourusername" 
    password="yourpassword" 
    trust="true" 
    command="cd path/to/root/directory &amp;&amp; 
     svn update &amp;&amp; 
     php cmd/clear_cache.php 
     "/> 

</target> 

<target name="update-app02"> 

    <sshexec host="app02" 
     username="yourusername" 
     password="yourpassword" 
     trust="true" 
     command="cd path/to/root/directory &amp;&amp; 
     svn update &amp;&amp; 
     php cmd/clear_cache.php 
     "/> 

</target> 

    <target name="apply-deltas" depends="liquibase-prepare"> 
    <updateDatabase 
      changeLogFile="${db.changelog.file}" 
      driver="${database.driver}" 
      url="${database.url}" 
      username="${database.username}" 
      password="${database.password}" 
      promptOnNonLocalDatabase="${prompt.user.if.not.local.database}" 
      dropFirst="false" 
      classpathref="classpath" > 
      <changeLogProperty name="table.name" value="ant_param_table"/> 
    </updateDatabase> 
    </target> 


<target name="liquibase-prepare"> 
    <path id="classpath"> 
    <fileset dir="${basedir}/libNoPackage"> 
     <include name="**/*.jar" /> 
    </fileset> 
    </path> 

    <taskdef resource="liquibasetasks.properties"> 
     <classpath refid="classpath"/> 
    </taskdef> 
    </target> 

</project> 

यह आदर्श से बहुत दूर है लेकिन यह हमारे लिए ठीक काम करता है। उम्मीद है की वो मदद करदे।

लिंक:

Apache Ant

LiquiBase

आप कुछ प्रश्न हैं, तो मुझे बताएं ताकि मैं answer.t अद्यतन कर सकते हैं तो कृपया

0

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

3

मैं एक एसवीएन कामकाजी प्रतिलिपि के विभिन्न सर्वरों की एप्लिकेशन रूट बनाकर शुरू करूंगा। आप यह सुनिश्चित करने के लिए mod_rewrite (या IISF ASAPI फ़िल्टर IIS) फ़िल्टर में जोड़ सकते हैं ताकि लोग आपकी .svn निर्देशिकाओं को सीधे संबोधित नहीं कर सकें।

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

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

आखिरकार, इन अद्यतनों की तीव्रता और समय के आधार पर, आप अपनी अपडेट स्क्रिप्ट "रखरखाव" स्विच को फ्लिप करना भी चाहेंगे ताकि उपयोगकर्ता अस्थायी रूप से टूटी हुई साइट के बजाय उचित संदेश से मुलाकात कर सकें।

2

बेंजामिन एबरलेई ने कुछ हफ्ते पहले एक ब्लॉग पोस्ट किया था जिसका शीर्षक Trying a Two Step PEAR/PHAR approach to develop and deploy था। वह एक PHP अनुप्रयोग तैनात करने के लिए एक बहुत ही रोचक और सुरुचिपूर्ण प्रक्रिया का वर्णन करता है।

+1

प्रक्रिया, या कम से कम लेख, मेरे लिए अत्यधिक जटिल लग रहा था। मुझे पूरा करने की कोशिश कर रहा था कि मैं एक स्पष्ट स्पष्टीकरण नहीं देखा था। – rick

1

मैंने बड़े प्रभाव के लिए एक तैनाती उपकरण के रूप में उपversण का उपयोग किया है।

अपने सभी उत्पादन सर्वर पर svn अद्यतन का उपयोग करें, या फ़िंग का उपयोग करें। (या एसएचएन अपडेट करने के लिए फ़िंग का उपयोग करें।)

रोलबैक बनाता है और एक स्नैप बैकअप करता है। किसी भी .svn निर्देशिकाओं तक पहुंच को हटाने के लिए बस याद रखें।

1

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

वितरण के लिए, आप run your own PEAR server कर सकते हैं। यहां तर्क दिया गया है कि आपने कहा है कि आप चाहते हैं कि उपयोगकर्ता अपडेट खींचें, आपके पास विंडोज और लिनक्स उपयोगकर्ता दोनों हैं, और आप उनके लिए निर्भरताओं को संभालना चाहते हैं। पियर एक कमांड के साथ सभी को संभालने में सक्षम होना चाहिए।

उसने कहा, मैं सबसे सरल चीज के साथ जाऊंगा जो आपके उपयोगकर्ताओं को काम करता है और उपयुक्त बनाता है। यह केवल HTTP के माध्यम से उपलब्ध एक टैरबॉल और एक छोटी PHP अपग्रेड स्क्रिप्ट (या एक फ़िंग लक्ष्य)

निश्चित रूप से पिछले संस्करण में रोलबैक करने का एक आसान तरीका प्रदान कर सकता है। कोड/कॉन्फ़िगरेशन के साथ आप केवल एक प्रतिलिपि रख सकते हैं। डीबी के साथ, माइग्रेशन का उपयोग करें (जो ऐसा लगता है कि आप पहले से ही कर रहे हैं।)