2014-05-14 12 views
5

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

ऐसा लगता है कि वहां एक विचार का स्कूल है जो वास्तव में उन परियोजनाओं के लिए स्रोत पेड़ में नोड_मोड्यूल में जांच करता है जो वास्तव में तैनात किए जा रहे हैं।

स्रोत 1: http://www.futurealoof.com/posts/nodemodules-in-git.html

स्रोत 2: http://eng.yammer.com/managing-node-js-dependencies-and-deployments-at-yammer/

तो उन्हें सही दृष्टिकोण है में जाँच की तरह लगता है, लेकिन फिर वहाँ कुछ संकलित संकुल के लिए अलग बाइनरी स्वरूपों में से एक समस्या है (मैक और पर विकासशील लिनक्स पर तैनाती)

मैंने यमर लोगों के सुझाव के रूप में करने की कोशिश की है (बिन फ़ोल्डरों को छोड़कर चेकइन मॉड्यूल), लेकिन फिर भी स्थानीय "एनपीएम पुनर्निर्माण" कमांड विफल रहता है (यह एक बिन फ़ोल्डर में कुछ चीज करने की कोशिश करता है जो नहीं करता है express.js मॉड्यूल में मौजूद है) इसलिए मुझे कोशिश करने के लिए भी नहीं मिला है देखें कि बीनस्टॉक डिफ़ॉल्ट परिनियोजन पर्यावरण इस तरह के भंडार के साथ क्या करेगा। मुझे लगता है कि यह "एनपीएम इंस्टॉल" चलाता है (जो कुछ भी नहीं करेगा), लेकिन क्या यह "एनपीएम पुनर्निर्माण" चलाएगा?

तो, फिर, एक निर्भर परियोजना को एकाधिक निर्भरताओं के साथ तैनात करने का सबसे अच्छा अभ्यास क्या है? अब नोड/बीनस्टॉक दुनिया में यह एक हल समस्या होनी चाहिए, है ना?

धन्यवाद

+0

से सीखा तुम एक lib कि एक binary.If पर निर्भर करता है का उपयोग कर रहा हो सकता है अपने मचान env 100% है आपके उत्पादन env के समान ही आगे बढ़ें, node_modules फ़ोल्डर में जांचें, कोई प्रश्न नहीं। अगर आप स्टेजिंग और उत्पादन में नोड के विभिन्न संस्करणों का उपयोग नहीं कर रहे हैं तो आपको एनपीएम पुनर्निर्माण की आवश्यकता नहीं है। बस सबकुछ कॉपी करें और आपको ठीक होना चाहिए। – mpm

+0

mongodb bson, kerberos बाइनरी का उपयोग करते हैं और मैं एक मैज़न पर एक अमेज़ॅन लिनक्स मशीन पर तैनाती करते समय विकास कर रहा हूं, मैं रिपॉजिटरी –

+0

में बाइनरी नहीं कर सकता हूं। लेकिन इस बिंदु पर आप योनि की तरह कुछ इस्तेमाल करने के बारे में सोचना चाहेंगे, आपके जीवन को और अधिक सरल बना देगा। – mpm

उत्तर

2

यहाँ मेरी विन्यास करता है कि तुम क्या बारे में बात कर रहे हैं। इसे .ebextensions फ़ोल्डर में सहेजें और आप सेट हो जाएंगे। मेरा और https://stackoverflow.com/a/23242623/34340 में बेहतर जवाब के बीच फर्क सिर्फ इतना है NPM_CONFIG_UNSAFE_PERM = सच लाइन है, जो मैं https://forums.aws.amazon.com/thread.jspa?messageID=534612

packages: 
    yum: 
    git: [] 
    gcc: [] 
    make: [] 
    openssl-devel: [] 
    libxml2: [] 
    libxml2-devel: [] 

files: 
    "/opt/elasticbeanstalk/env.vars" : 
    mode: "000775" 
    owner: root 
    group: users 
    content: | 
     export HOME=/home/ec2-user # ADDED EXPORT COMMAND 
     export NPM_CONFIG_LOGLEVEL=error 
     export NPM_CONFIG_UNSAFE_PERM=true 
     export NODE_PATH=`ls -td /opt/elasticbeanstalk/node-install/node-* | head -1`/bin 
    "/opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh" : 
    mode: "000775" 
    owner: root 
    group: users 
    content: | 
     #!/bin/bash 
     . /opt/elasticbeanstalk/env.vars 
     function error_exit 
     { 
     eventHelper.py --msg "$1" --severity ERROR 
     exit $2 
     } 

     #install not-installed yet app node_modules 
     if [ ! -d "/var/node_modules" ]; then 
     mkdir /var/node_modules ; 
     fi 
     if [ -d /tmp/deployment/application ]; then 
     ln -s /var/node_modules /tmp/deployment/application/ 
     fi 

     OUT=$([ -d "/tmp/deployment/application" ] && cd /tmp/deployment/application && $NODE_PATH/npm install 2>&1) || error_exit "Failed to run npm install. $OUT" $? 
     echo $OUT 
    "/opt/elasticbeanstalk/hooks/configdeploy/pre/50npm.sh" : 
    mode: "000666" 
    owner: root 
    group: users 
    content: | 
     #no need to run npm install during configdeploy 
+0

मुझे लगता है कि यह समाधान एनपीएम को तेज़ी से इंस्टॉल करता है, लेकिन यह नए उदाहरणों को तैनात करते समय एनपीजेजे या अन्य सर्वर पर निर्भरता को नहीं हटाता है, और न ही यह घटनाओं में असंगत मॉड्यूल संस्करणों की समस्या को हल करता है, है ना? –

+0

यह सही है - बाहरी सेवाएं और असंगत मॉड्यूल संस्करण अभी भी आपको प्रभावित कर सकते हैं। उन परिस्थितियों के लिए, आप शायद "git aws.push" से कुछ हटना चाहेंगे जैसे https://github.com/simoneb/grunt-awsebtdeploy + तंग पैकेज.जेसन संस्करण और एनपीएम सिकंक्रैप की स्वस्थ सहायता। –

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