आप कोड परिवर्तन के साथ लाइव वेब साइटों को कैसे अपडेट करते हैं?


21

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

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

कई बार मुझे पता चलता है कि जब मैं इस स्थिति में होता हूं, तो मैं चीजों को करने के लिए कुछ दर्दनाक तरीके से याद कर रहा हूं - यह कंपनी में एकमात्र डेवलपर होने से आता है।

  • ASP.NET वेब अनुप्रयोग मेरे कंप्यूटर पर काम पर विकसित हुआ
  • समाधान में 2 परियोजनाएँ हैं:
    • वेबसाइट (फाइलें)
    • वेबसाइटलिब (C # / dll)
  • Git भंडार का उपयोग करना
  • एक GoGrid 2008R2 वेब सर्वर पर तैनात है

तैनाती:

  1. कोड परिवर्तन करें।
  2. पुश टू गिट।
  3. दूरस्थ डेस्कटॉप सर्वर के लिए।
  4. गिट से खींचो।
  5. खिड़कियों एक्सप्लोरर के साथ / खींचकर लाइव फ़ाइलों को अधिलेखित करें।

चरण 5 में, मैं वेबसाइट रूट से सभी फाइलें हटाता हूं। यह एक अच्छी बात नहीं हो सकती है। इसलिए मैं SynTToy स्थापित करने के बारे में हूँ ...

अद्यतन: सभी उपयोगी प्रतिक्रियाओं के लिए धन्यवाद। मैं जवाब नहीं दे सकता, जो कि एक वेब परिनियोजन का उपयोग करने के बीच उत्तर को चिह्नित करता है - ऐसा लगता है कि मेरे पास कई उपयोगी शर्करा हैं:

  1. वेब प्रोजेक्ट = एक डीएलएल में पैक की गई पूरी साइट - मेरे लिए डाउनसाइड मैं सरल अपडेट को धक्का नहीं दे सकता - 50 की कंपनी में एक अकेला डेवलपर होने के नाते, यह कुछ ऐसा है जो कई बार सरल होता है।
  2. साइट के वेब रूट में SCM से सीधे खींचते हुए - मैंने मूल रूप से इस डर से ऐसा नहीं किया कि मेरी SCM छिपी हुई निर्देशिका समाप्त हो सकती है, लेकिन यहां दिए गए जवाबों ने मुझे इससे उबरने में मदद की (हालांकि मुझे अभी भी एक पसंद नहीं है सुनिश्चित करने के लिए भूल जाने के बारे में चिंता करने वाली अधिक बात समय के साथ अभी भी सही है)
  3. वेब फ़ार्म का उपयोग करना, और व्यवस्थित रूप से नोड्स पर तैनाती करना - यह शून्य डाउनटाइम के लिए आदर्श समाधान है, जो वास्तव में कुछ है जिसकी मुझे परवाह है क्योंकि साइट अनिवार्य रूप से मेरी कंपनी के लिए एक वास्तविक समय का राजस्व स्रोत है - हो सकता है कि मुझे उन्हें समझाने में मुश्किल समय हो। हालांकि सर्वर की लागत से दोगुना है।

-> आखिरकार, मूल प्रिंसिपल का पुन: प्रवर्तन जो साइट के लिए एक सिंगल क्लिक परिनियोजन की आवश्यकता है या फिर ELSE THIME SOMETHING WRONG शायद सबसे उपयोगी चीज है जो मुझे उत्तरों से मिली।

अद्यतन 2: मैंने सोचा था कि मैं इस पर वापस आता हूं और वास्तविक समाधान के साथ अद्यतन करता हूं जो अब कई महीनों के लिए है और पूरी तरह से काम कर रहा है (मेरे एकल वेब सर्वर समाधान के लिए)।

मेरे द्वारा उपयोग की जाने वाली प्रक्रिया है:

  1. कोड परिवर्तन करें
  2. पुश टू गिट
  3. दूरस्थ डेस्कटॉप सर्वर के लिए
  4. गिट से खींचो
  5. निम्न बैच स्क्रिप्ट चलाएँ:

    सीडी सी: \ उपयोगकर्ता \ प्रशासक

    % systemroot% \ system32 \ inetsrv \ appcmd.exe रोक साइट "/site.name:Defin वेब साइट"

    डॉक्यूमेंट्री डॉक्यूमेंट्स \ कोड \ दा \ 1 \ वर्क \ ट्री \ LendingTreeWebSite1 c: \ inetpub \ wwwroot / E / XF connectionconfig Web.config

    % systemroot% \ system32 \ inetsrv \ appcmd.exe साइट शुरू करें "/ site.name:Defin वेब साइट"

जैसा कि आप देख सकते हैं कि यह साइट को नीचे लाता है, रोबोकॉपी का उपयोग बुद्धिमानी से उन फ़ाइलों को कॉपी करने के लिए करता है जो बदल गई हैं और फिर साइट को वापस लाती हैं। यह आमतौर पर 2 सेकंड से भी कम समय में चलता है। चूँकि इस साइट पर पीक ट्रैफिक लगभग 2 अनुरोध प्रति सेकंड है, इसलिए साइट अपडेट प्रति 4 अनुरोध गायब हैं।

साइन मैंने जिट के साथ अधिक कुशल प्राप्त किया है मैंने पाया है कि "मैनुअल प्रक्रिया" होने के ऊपर पहले चार चरण भी स्वीकार्य हैं, हालांकि मुझे यकीन है कि मैं पूरी चीज को एक क्लिक में रोल कर सकता था अगर मैं चाहता था।

AppCmd.exe के लिए प्रलेखन यहाँ है । रोबोकॉपी के लिए प्रलेखन यहाँ है


6
सर्वरफॉल्ट के लिए बेहतर फिट है।
कार्ल बेज़ेलफेल्ट

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

5
मुझे लगता है कि यह सवाल यहां रहने के लिए ठीक है। एक वेबसाइट की तैनाती मुझे एक sysadmin नौकरी से अधिक एक डेवलपर चिंता की तरह लगती है, हालांकि मुझे लगता है कि कंपनी द्वारा भिन्न हो सकती है। फिर भी, डेवलपर-केंद्रित के रूप में अब तक के सभी जवाब।
एडम लेअर

1
@ मालफिस्ट - विंडोज़ सर्वर में वास्तव में एक ssh कैसे होता है?
वायट बार्नेट 21

@Wyatt दूरस्थ मशीन पर SSH सर्वर चलाकर, (लगभग) उसी तरह जैसे आप लिनक्स बॉक्स पर होते हैं।
एडम लेअर

जवाबों:


3

आपको वीएस 2010 की वेब तैनाती की जांच करनी चाहिए। यदि GoGrid इसका समर्थन करता है, तो वेब परिनियोजन पैकेज एक अच्छा समाधान है।

http://weblogs.asp.net/scottgu/archive/2010/07/29/vs-2010-web-deployment.aspx


जब आप वेब परिनियोजन का उपयोग करते हैं, तो आप हॉटफ़िक्स का विकल्प खो देते हैं, नहीं? मुझे पता है कि ऐसे बहुत से लोग हैं जो औपचारिक प्रक्रिया से बाहर कुछ नहीं करना चाहते हैं, लेकिन मुझे आपात स्थिति के लिए विकल्प पसंद है ...
हारून एनोडाइड

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

3

मेरे पिछले नियोक्ता में, कोड परिवर्तन को लागू करने के लिए, हम लोड बैलेंसर सेट करेंगेएक वेबसर्वर के लिए सर्विसिंग बंद करने के लिए। पहले वेब सर्वर पर सत्र समाप्त होने में 20 मिनट लग सकते हैं। हम परिनियोजन ज़िप फ़ाइल खोलकर उस वेबसर्वर पर कोड को अपडेट करेंगे, फिर उस पहले वेब सर्वर के लिए डायरेक्ट आईपी एड्रेस को हिट करके चीजों को ठीक से चलाएंगे। जब हम आश्वस्त हो जाते हैं कि यह ठीक काम करता है, तो हम अब अपडेट किए गए वेबसर्वर को हिट करने के लिए लोड बैलेंसर सेट करेंगे और सत्रों के दूसरे सर्वर पर समाप्त होने की प्रतीक्षा करेंगे और फिर अपडेट करेंगे कि (और जब तक कि वे सभी अपडेट नहीं हो गए)। वे ठीक से जाँचने के बाद, हम अपने काम को करने के लिए भार बैलेंसर सेट करेंगे। यह तब जटिल हो गया जब हमारे पास पीक मौसमी भार के दौरान लोड बैलेंसर से जुड़े 10 वेब सर्वर थे (इसलिए उन्हें एक-एक करके अपडेट करने में घंटों लग सकते थे क्योंकि हम लाइव वेबसाइट को बंद नहीं कर सकते थे - ग्राहकों को प्राप्त करने में सक्षम होना था साइट के लिए)।

ASP.NET में, यदि आप किसीApp_Offline.htm वेबसाइट के रूट डायरेक्टरी में किसी भी फाइल को ड्रॉप करते हैं, तो उस वेबसइटन को अनलोड किया जाता है जो आपको फिर DLLS (और जो भी) अपडेट करने देगा। IIS "एप्लिकेशन ऑफ़लाइन" नामक एक पृष्ठ पर काम करेगा। जब फ़ाइल को हटा दिया जाता है, नाम बदल दिया जाता है या हटा दिया जाता है, तो वेब एप्लिकेशन पुनः आरंभ होगा और IIS उस वेबसाइट पर वेब पेजों की सेवा देगा। जब आप VS के अंदर से कोई वेबसाइट प्रकाशित करते हैं तो विज़ुअल स्टूडियो यही करता है।


2

आमतौर पर मैं क्या करता हूं मैं सब कुछ एक SVN रिपॉजिटरी में रखता हूं। जब मैं कुछ बदलावों के साथ समाप्त हो जाता हूं, तो मैं देव साइट पर, और फिर उत्पादन पर चेकआउट करता हूं। सब कुछ समन्‍वयित रखता है, यह तेज़ और आसान है। यदि चेक आउट करना बहुत अधिक परेशानी वाला है, तो आप Apache को WebDAV के साथ सेटअप कर सकते हैं और यह आपके लिए यह काम करेगा।


क्या आप .svn निर्देशिका जैसी चीजों के बारे में चिंता करते हैं जो आपकी लाइव साइट प्रस्तुत करते हैं?
आरोन एनोडाइड 19

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

IIS डिफ़ॉल्ट रूप से भी .svn (या .गित या .hg) को अस्वीकार करता है।
वायट बार्नेट 21

यदि दुर्भावनापूर्ण उपयोगकर्ता को निर्देशिका तक पहुंच प्राप्त होती है, तो उसे स्पष्ट स्थिति में सभी कोड तक पहुंच प्राप्त होगी।
oleksii

5
यदि कोई दुर्भावनापूर्ण उपयोगकर्ता आपके फ़ाइल सिस्टम तक पहुंच पाता है, तो आपके पास चिंता करने के लिए और चीजें हैं।
मालफिस्ट

2

मेरे प्रत्येक वेब ऐप के लिए मेरे पास तीन शाखाओं के साथ गिट रिपॉजिटरी सेटअप है। लाइव, बीटा, सुविधाएँ। जियो बेशक लाइव साइट है। बीटा वह साइट है जिसका उपयोग बग्स को ठीक करने या कार्यान्वयन से ठीक पहले सुविधाओं के अंतिम परीक्षण के लिए किया जाता है। फिर जैसा कि आपने कहा कि मैं एक साधारण git पुश करता हूं, जानकारी को खींचने के लिए लाइव पुल पर git पुल करता है। सुविधाओं का उपयोग "अगले संस्करण" संवर्द्धन के लिए किया जाता है।


वही लगभग सभी स्रोत नियंत्रण प्रणालियों के साथ काम करता है।
deadalnix 17

2

आप लगातार डिलीवरी की समस्या को हल करने की कोशिश कर रहे हैं । प्रारंभ में आप मैनुअल चरणों के साथ शुरू करेंगे, लेकिन जल्द ही आपको समस्याओं का एहसास होगा। ये सबसे आम हैं:

  1. कोड आपके पीसी पर काम करता है, उत्पादन पर काम नहीं करता है
  2. नया बदलाव पुराने कोड को तोड़ता है
  3. वृद्धिशील परिवर्तन इसे कठिन और कठिन तैनात करेंगे, आपको संलग्न करने के लिए नए पुस्तकालय, आवेदन करने के लिए पैच आदि मिलेंगे।

TeamCity (या किसी भी समान टूल) पर एक नज़र डालें ।


2

एक स्वचालित बिल्ड और स्क्रिप्ट का उपयोग करें

इसका सबसे अच्छा तरीका यह है कि आप एक स्वचालित बिल्ड और डिप्लॉय स्क्रिप्ट जैसे MsBuild या Nant का उपयोग करें।

इसका कारण यह है कि आप किसी वेबसाइट को रोल करने के लिए केवल 1 कमांड टाइप कर सकते हैं और फिर उसे वापस रोल करने के लिए केवल 1 कमांड टाइप कर सकते हैं। और यदि आप पूरी तरह से पर्याप्त हैं तो इसमें आपका डेटाबेस स्कीमा माइग्रेशन शामिल होगा। (Migrator.Net)

एसवीएन या जीआईटी का उपयोग न करने के मुख्य कारणों में से एक यह है कि पर्यावरण उत्पादन और मंचन के बीच बदल सकता है। अपनी NANT स्क्रिप्ट में आप इसे अपनी .config फ़ाइलों को विशेष रूप से उस वातावरण के लिए बना सकते हैं जिसे आप लक्षित कर रहे हैं। यह उत्पादन में एक विन्यास सेटिंग दर्ज करने के लिए भूल से बचाता है।

यह पूरी प्रक्रिया को स्वचालित करता है इसलिए यह एक कमांड मामला बन जाता है, और किसी भी संख्या में मैनुअल प्रक्रिया 1 सरल प्रक्रिया बन जाती है।


1

सबसे पहले, आपको एक वेब परियोजना का उपयोग करना चाहिए। आपके द्वारा पूछे गए अंतर क्या हैं?

एक वेब प्रोजेक्ट एक सीएलएल (सुरक्षा के लिए बेहतर, और तथ्य यह है कि यह एक फ़ाइल को स्थानांतरित करने के लिए) में सी # वर्ग फ़ाइलों (कोड behinds शामिल) के सभी गठबंधन करेगा

दूसरा, आपको एप्लिकेशन को प्रकाशित करना चाहिए और फिर आप अभी भी डेस्कटॉप को दूरस्थ कर सकते हैं, अपने प्रकाशन फ़ोल्डर में सभी फ़ाइलों को खींच सकते हैं और बस इसे अधिलेखित करने के लिए सेट कर सकते हैं (नई फाइलें पुरानी फाइलों को बदल देंगी)।

प्रकाशन एक फ़ोल्डर में आवेदन के लिए सभी आवश्यक फाइलें डाल देगा।


1

मेरे वर्तमान नियोक्ता कठपुतली का उपयोग कर दर्शाते हैं । (यहां अधिक सॉफ़्टवेयर पैकेज हैं जो समान समस्या को संबोधित करते हैं।)

मेरे पिछले नियोक्ता ने सॉफ्टवेयर की तैनाती, पुनः आरंभ करने आदि को संभालने के लिए एक कस्टम जॉब कंट्रोल सिस्टम का उपयोग किया था, भले ही यह उपलब्ध हो, यह आपकी आवश्यकताओं के लिए ओवरकिल था।

मेरे पास जो नियोक्ता था, उसके पास कस्टम स्क्रिप्ट थी जो सर्वर से तोड़फोड़ के डेटा को कॉपी करने और एक रोलिंग रीस्टार्ट करने के लिए थी।

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

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


1

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

इस उपकरण का उपयोग करके हम एक निर्देशिका से दूसरे में लिंक बनाने में सक्षम हैं। सर्वर पर ऐप रूट में 3 फ़ोल्डर हैं। लाल, नीला, करंट। IIS हमेशा फ़ाइलों के लिए करंट को देखने के लिए कॉन्फ़िगर किया गया है।

आप एक आदेश जारी कर सकते हैं junction currentजो आपको बताएगा कि वर्तमान में कौन सा फ़ोल्डर चालू है। उदाहरण के लिए कहें कि यह वर्तमान में ब्लू पर इंगित कर रहा था। हम क्या करेंगे नई तैनाती के लिए लाल रंग में फ़ाइलों को कतारबद्ध करें और सुनिश्चित करें कि सभी कॉन्फ़िगरेशन जाने के लिए तैयार थे।

एक बार जब हम तैयार हो जाते हैं तो हम junction current redइसे फिर से इंगित करने के लिए आदेश जारी कर सकते हैं ।

दो चीजें हैं जो इस समाधान को इतना महान बनाती हैं

1) आपके पास फ़ोल्डर में अपने परिवर्तनों को कतार में रखने के लिए दुनिया में हर समय है। कोई जल्दी नहीं है और केवल नीचे का समय है जब ऐप पूल ऊपर स्पिन कर रहा है। (इस चरण को भी पूर्व संकलित करने का एक तरीका है।)

2) अगर आपकी तैनाती में कुछ गलत हो जाता है, तो आपको बदलावों को वापस लाने की कोशिश करने के बजाय एक आदेश जारी करना होगा। हमारे मामले में कमान होगीjunction current blue

उम्मीद है कि चीजों को करने का हमारा तरीका आपके लिए एक नए समाधान पर कुछ प्रकाश डाल सकता है।


0

मैंने क्या किया है और मुझे यकीन नहीं है कि आपके पास इसके लिए गुंजाइश है, लेकिन यहां जाता है। एक डेवलपर एक क्यूए शाखा में कोड की जांच करेगा, फिर इसे सिस्टम इंजीनियर द्वारा एक क्यूए वातावरण में लोड किया जाएगा, क्यूए पास होने के बाद इसे उत्पादन शाखा में पदोन्नत किया जाएगा। लोड बैलेंसर ऑड्स पर एक सर्वर से जुड़े प्रत्येक साइट के कम से कम 2 थे और इस मामले में, दो सर्वरों में से एक को ऑफ़लाइन ले जाया जाएगा आईआईएस को रोक दिया जाएगा साइट को संग्रहीत किया जाएगा और नई साइट के साथ तैनात किया जाएगा किसी भी iis परिवर्तन के लिए आवश्यक iis को फिर से शुरू किया जाएगा और आप फिर अगले सर्वर पर चले जाएंगे। यह सब हमारे मामले में C # का उपयोग करके लिपिबद्ध किया गया था, लेकिन यह पूर्व में vb स्क्रिप्ट का उपयोग करके किया गया था। मुझे आशा है कि वह मदद करेंगे। चियर्स

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.