2011-12-05 21 views
74

मैं एक Node.js एप्लिकेशन लिखा है नियोजित करना, मैं इसे अपने उत्पादन मशीनों में से एक पर चल रहे करने के लिए देख रहा हूँ। यह एक बहुत ही आम अनुरोध की तरह लगता है फिर भी मुझे पर्याप्त समाधान नहीं मिल रहा है। क्या उत्पादन Node.js ऐप्स को तैनात करने के लिए समाधान स्थापित नहीं किए गए हैं?एक उत्पादन Node.js सर्वर

एप्लिकेशन सरल (< 100 एलओसी) है, लेकिन बहुत ही कुशल, विश्वसनीय होने की और पुन: प्रारंभ करने के बिना साल के लिए लगातार चला सकते हैं की जरूरत है। यह दर्जनों कनेक्शन/सेकंड के साथ, एक बड़ी साइट पर चलने जा रहा है। (एप्लिकेशन एक वेबसर्वर के रूप में इस्तेमाल नहीं कर रहा है, यह केवल एक JSON एपीआई है)

यहाँ दृष्टिकोण मैं माना जाता है कर रहे हैं लेकिन मैं अभी भी के बारे में यकीन नहीं है:।

एक रूपरेखा का उपयोग करना (जैसे एक्सप्रेस)

क्योंकि ऐप को उच्च प्रदर्शन की आवश्यकता है और यह इतना आसान है, ढांचे के रूप में ब्लोट जोड़ना कुछ ऐसा है जिसे मैं टालना चाहता हूं।

nohup

मुख्य समस्या यहाँ के साथ सर्वर शुरू अपवाद हैंडलिंग के साथ है, हम (जाहिर है) पूरा सर्वर एक अपवाद की वजह से दुर्घटना नहीं करना चाहती। जो मैं समझता हूं, पूरे एप को try {} catch {} लूप में लपेटने से मदद नहीं मिलेगी क्योंकि जावास्क्रिप्ट दुभाषिया को अपवाद के बाद एक अप्रत्याशित स्थिति में छोड़ दिया गया है। क्या वो सही है?

हमेशा के लिए

मैं हमारा एक FreeBSD मशीन में हमेशा के लिए स्थापित किया है और यह बहुत ही गाड़ी था की तरह कुछ का उपयोग करना। यह अंतहीन प्रक्रियाओं को खत्म कर देता है जिसे हमेशा से नहीं मारा जा सकता है। मुझे अपनी मशीन वापस पाने के लिए kill -9 चलाया गया था और मुझे हमेशा के लिए एक उत्पादन ऐप चलाने के बारे में बहुत विश्वास नहीं है। ऐसा लगता है कि अपस्टार्ट (समान उपकरण, लेकिन अधिक सामान्य) फ्रीबीएसडी पर नहीं चलेंगे।

की मेजबानी समाधान (जैसे। Heroku, रैकस्पेस, अमेज़न EC2, आदि)

यह शायद सबसे सरल समाधान है, लेकिन हम पहले से ही हमारे वेबसर्वर के बाकी के लिए एक गंभीर हार्डवेयर की है। वित्तीय विचारों के लिए, यह समझ में नहीं आता है।

निश्चित रूप से इस के लिए कुछ स्थापित समाधान होना चाहिए? क्या मैं कुछ भूल रहा हूँ?

+0

नवोदय को संभालने के लिए तैयार है FreeBSD पर sysvinit के लिए एक स्थानापन्न है। – chovy

+3

इस एसओ को पढ़ने वाले 2014 के भीड़ के लिए। 'हमेशा के लिए' छूट नहीं दी जानी चाहिए क्योंकि यह इस मामले में दो साल से अधिक विफल रहा और कई पहले काम करता था। पिछले कुछ महीनों से मुझे सफलता मिली है। –

+6

2015 के लिए इस एसओ को पढ़ने के लिए भीड़। हमेशा के लिए [पीएम 2] (http://www.nikola-breznjak.com/blog/nodejs/using-pm2-to-run-your-node-js-apps-like-a-pro/) का उपयोग करें। – Nikola

उत्तर

38
  • आप वास्तव में वास्तव में एक रूपरेखा का उपयोग करना चाहिए जब तक आप सत्र, कुकीज़, खुद के द्वारा मिडलवेयर आदि से निपटने के लिए चाहते हैं (मैं एक्सप्रेस की तरह कुछ के बाद से यह लड़ाई-परीक्षण किया गया था सलाह देते हैं)। एक्सप्रेस वास्तव में हल्का है।
  • नोहप के साथ सर्वर प्रारंभ करना: आपको ऐसा नहीं करना चाहिए, बस इसे नियमित "नोड" कमांड से शुरू करें। एक्सप्रेस भी प्रयासों में मार्गों को लपेटता है, इसलिए आपका सर्वर किसी रूट में क्रैश नहीं होगा। हालांकि अगर आपके सर्वर में कोई गंभीर समस्या है, तो आपको इसे पुनरारंभ करने से डरना नहीं चाहिए (इसके अलावा, यदि आपके पास कम से कम 2-3 प्रक्रियाएं हैं, तो केवल एक ही मर जाएगा, इसलिए कम से कम 1-2 शेष होंगे और उपयोगकर्ता ' टी एक चीज़ महसूस नहीं करते हैं)।
  • निगरानी के लिए मैं व्यक्तिगत रूप से ओएस-स्तर पर Upstart और Monit पर कुछ और पसंद करता हूं।
  • होस्टिंग समाधान: चूंकि आपके पास पहले से ही आपकी गंभीर हार्डवेयर सामग्री है, इसलिए किसी और चीज़ में पैसा निवेश करने की आवश्यकता नहीं है। प्रॉक्सी सामग्री में बस लोड-बैलेंसर (शायद nginx या node-http-proxy) का उपयोग करें।
2

आपको सर्वरफॉल्ट पर बेहतर उत्तर मिल सकते हैं, लेकिन का उपयोग कर one user's experience here का विवरण है। आपको node प्रक्रिया को जीवित रखने के लिए किसी प्रकार की प्रक्रिया वॉचर का उपयोग करने की आवश्यकता होगी, और एक और सामान्य अनुशंसा किसी भी तरह node प्रक्रिया के विपरीत-प्रॉक्सी कनेक्शन के रूप में प्रतीत होती है। मैं शायद nginx के लिए (इस तरह से आप nginx हो सकता है लॉगिंग, प्रमाणीकरण, या आप के रूप में उन्हें किसी भी तरह नोड में पाक का विरोध करने की जरूरत है किसी भी अन्य उच्च स्तर HTTP सुविधाओं संभाल) वोट चाहते हैं, लेकिन ऊपर उल्लिखित लेख यहाँ टिप्पणी में haproxy का उल्लेख है और वहां जो अधिक हल्का हो सकता है। रिवर्स-प्रॉक्सी की आपकी पसंद शायद इस बात पर निर्भर करेगी कि आपको वेबसॉकेट समर्थन की आवश्यकता है या नहीं।

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

15

Hosting Node Apps देखें।

यह ट्यूटोरियल आपको एक सर्वर स्थापित करने के माध्यम से चलता है जो सर्वर-साइड जावास्क्रिप्ट अनुप्रयोगों के लिए node.js ऐप्स होस्ट कर सकता है। अभी, node.js होस्टिंग विकल्प वेब सर्वर से बात करने वाले नोड डिमन प्रक्रियाओं को चलाने के लिए उबाल लें। अधिकांश वेब सर्वर एक अलग पोर्ट से कनेक्शन प्रॉक्सी कर सकते हैं, ताकि आप ऐसा करने के लिए अपाचे या nginx का उपयोग कर सकें।

+2

लिंक टूटा हुआ है। –

4

मुझे लगता है कि यहां तीन प्रश्न हैं।

प्रश्न 0: "क्या मुझे अपने नोड ऐप के लिए ढांचे का उपयोग करना चाहिए?"

प्रश्न 1: "मैं उत्पादन मशीनों पर नोड सर्वर कैसे चला सकता हूं?"

प्रश्न 2: "मैं उत्पादन में नोड ऐप्स कैसे तैनात करूं"।

प्रश्न 1 के लिए, मैं वास्तव में Cluster की तरह (नवीनतम नोड संस्करण, में बनाया ताकि आप उस की जाँच हो सकता है ऐसा ही कुछ है, हालांकि)। ओएस स्तर की घटनाओं की निगरानी करने के लिए मुझे मॉनिट/अपस्टार्ट जैसे कुछ के साथ अच्छी सफलता मिली है और सुनिश्चित करें कि आपके सर्वर अच्छे स्वास्थ्य में हैं। (यह रुबी थिन सर्वर के एन क्लस्टर की निगरानी कर रहा था, लेकिन एक ही बात)।

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

एक ढांचा आपको बेहतर त्रुटि प्रबंधन देता है, और सामान्य node.js ऐप्स से बाहर निकलने वाली त्रुटियों को पकड़ता है। यदि आप इसे ढांचे के बिना करते हैं, तो सुनिश्चित करें कि आप node.js. में त्रुटि प्रबंधन पर पढ़ते हैं।

प्रश्न 2, मुझे नहीं लगता कि नोड समुदाय के पास अभी तक एक अच्छा तैनाती मानक है। आप रूबी के कैपिस्ट्रानो टूल (और यहां a blog entry talking about deploying cluster with Capinstrano) का उपयोग करने का प्रयास कर सकते हैं।

कैपिस्ट्रानो के बारे में बुरी बात यह है कि यह कुछ धारणाएं बनाती है जो सच नहीं हो सकती हैं (यानी: कि आप रेल परियोजना को तैनात कर रहे हैं), ताकि आप ढांचे के साथ लड़ने को समाप्त कर सकें।

सामान्य रूप से मेरा गोटो परिनियोजन समाधान पायथन का Fabric उपकरण है, जो आपको तैनाती उपकरण देता है और आपको जो करने की आवश्यकता है वह करने देता है।

Nodester जैसी चीजों के साथ एक और परिनियोजन विकल्प "क्लाउड" है: उन्हें इसकी देखभाल करने दें।

0

क्लाउडकिक के लोगों ने इसका एक उत्कृष्ट समाधान लिखा। इसे Cast, http://cast-project.org/ कहा जाता है।

अपने सर्वर पर और अपने वर्कस्टेशन पर डालें इंस्टॉल करें। आप सर्वर पर कास्ट-एजेंट शुरू करते हैं और सर्वर कास्ट इंस्टेंस के साथ अपना वर्कस्टेशन साइन करते हैं। फिर आप "बंडल" बना सकते हैं, उन्हें सर्वर पर अपलोड कर सकते हैं, उनसे बना/अपग्रेड/नष्ट कर सकते हैं और साथ ही अपने उदाहरणों को शुरू/बंद कर सकते हैं। क्रैश होने पर कास्ट स्वचालित रूप से आपकी सेवाओं को पुनरारंभ कर देगा। आप stdout/strerr को दूरस्थ रूप से पूंछ भी कर सकते हैं साथ ही चल रहे उदाहरणों और पीआईडी ​​# एस की एक सूची प्राप्त कर सकते हैं और अपने वर्कस्टेशन से अपने इंस्टेंस/सर्वर प्रबंधित कर सकते हैं (कोई एसएसएचइंग आवश्यक नहीं है)। दस्तावेज़ थोड़े से पुराने हैं, लेकिन परिणाम अतिरिक्त काम के लायक हैं। सभी इंटरैक्शन/कमांड HTTPS और एक विश्वसनीय API पर हैं।

इससे पहले मैं एससीपी/एसएसएच के साथ सभी उन्नयन कर रहा था। हमारे पास supervise चीजें रखने के लिए है। हमने वापस नहीं देखा है।

+1

यह मर चुका है, जिम! वेबसाइट अब एसईओ-कचरा से भरी हुई है और Google को "node.js cast" – Sergey

+0

यूप के लिए कुछ भी दिलचस्प नहीं लगता है, यह छोड़ दिया गया है। हम एक इन-हाउस संस्करण एटीएम बनाए रख रहे हैं। रेपो पाया जा सकता है: https://github.com/cloudkick/cast –

संबंधित मुद्दे