2012-05-22 12 views
29

अभी है, जब भी मैं अपने उत्पादन सर्वर पर node.js सर्वर को तैनात करना चाहता हूं, तो मुझे अपने विभिन्न कनेक्शन के लिए सभी आईपी/DNS/उपयोगकर्ता नाम/पासवर्ड को बदलने की आवश्यकता है मेरे डेटाबेस और बाहरी एपीआई।सत्यापित करें कि मेरा node.js उदाहरण dev या उत्पादन

यह प्रक्रिया परेशान है, क्या यह सत्यापित करने का कोई तरीका है कि वर्तमान में चल रहा है node.js उदाहरण क्लाउड 9इड में है या वास्तव में मेरा उत्पादन खुशी स्मार्टमैचिन है?

अगर मैं (मेरे चलने वाले कोड में) का पता लगाने में सक्षम हूं, जिस पर मेरा node.js उदाहरण चल रहा है, तो मैं एक शर्त जोड़ दूंगा जो मान को प्रोड या देव पर सेट करेगी।

आप

+0

अपने Node.js एक HTTP सर्वर अनुप्रयोग है? –

+0

हां यह है। मोंगोडब के साथ भी एक कनेक्शन है। – guiomie

उत्तर

44

आम तौर पर आप इस तरह के उत्पादन में एक नोड अनुप्रयोग चलाने चाहिए:

NODE_ENV=production node app.js

एक्सप्रेस, Socket.IO और अन्य उपयोग process.env.NODE_ENV साथ आवेदन पर्यावरण यह पता लगाने की।

विकास में आप इसे छोड़ सकते हैं और केवल सामान्य रूप से node app.js के साथ ऐप चला सकते हैं।

var env = process.env.NODE_ENV || 'dev'; 
loadConfigFile(env + '.json', doStuff); 

संसाधन::

आप पर्यावरण अपने कोड में इस तरह का पता लगा सकते

How do you detect the environment in an express.js app?

+3

एक्सप्रेस 3.x और 4.x में, env चर ही [यहां] 'विकास के लिए एक्सप्रेस (https://github.com/visionmedia/express/blob/master/lib/application.js#L52) द्वारा निर्धारित है '। – Ryley

9

मुझे लगता है कि पर्यावरण स्थापित करने के लिए सबसे आसान तरीका है अपने आवेदन करने के लिए कमांड लाइन तर्क पारित करने के लिए है धन्यवाद।

node ./server.js dev 

आपकी स्क्रिप्ट में आपको इस तर्क को संभालने और कॉन्फ़िगरेशन सेट करने की आवश्यकता है जो आपको इसके लिए चाहिए।

var env = process.argv[2] || 'dev'; 
switch (env) { 
    case 'dev': 
     // Setup development config 
     break; 
    case 'prod': 
     // Setup production config 
     break; 
} 

इसके अलावा, मैं module कि विन्यास प्रक्रिया थोड़ा आसान बना देता है बनाया गया था। शायद यह आपकी मदद करेगा।

+1

+1 यह आपको देव से मंच तक उत्पादन तक कई सेटअप बनाने की अनुमति देता है। –

2

वास्तव में, मैं डेटाबेस कनेक्शन जानकारी, पासवर्ड की तरह कॉन्फ़िगरेशन मान स्टोर करने के लिए सिफारिश नहीं होगा, निम्नलिखित कारणों से टोकन तक पहुंचें और वास्तविक अनुप्रयोग कोड के अंदर:

  1. उन मानों को हार्डकोड करना उन्हें बाद में बदलना मुश्किल बनाता है। आपको उन मानों को बदलने के लिए एप्लिकेशन का एक नया संस्करण जारी करना होगा।

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

बेहतर डेटा इस डेटा को बाहरी करने और निष्पादन के दौरान आपके आवेदन को पास करना होगा। यह आमतौर पर पर्यावरण चर के माध्यम से किया जाता है। आपको डेटा की प्रत्येक शांति के लिए अद्वितीय पर्यावरण परिवर्तक को परिभाषित करने की आवश्यकता है जिसे विभिन्न वातावरणों के बीच बदलने योग्य होने की आवश्यकता है।

उदाहरण के लिए: DB_HOST, DB_USER, DB_PASSWORD

$ NODE_ENV=production DB_HOST=1.2.3.4 DB_USER=someusername DB_PASSWORD=somerandompassword /bin/node app.js 

वास्तव में, यह मान एन्क्रिप्टेड किया जा सकता है और codebase को जोड़ा गया और उसके बाद तैनाती के दौरान decrypted: तो फिर तुम उन मूल्यों को आप करने के लिए एप्लिकेशन उत्पादन में इस तरह से दे सकते हैं। हालांकि, सुनिश्चित करें कि डिक्रिप्शन कुंजी को तैनाती प्रणाली में सुरक्षित रूप से संग्रहीत किया जाता है या रिलीज इंजीनियर द्वारा इंटरैक्टिव रूप से प्रदान किया जाता है। बॉक्स के बाहर Shippable allows to do this

विकास के वातावरण है क्योंकि आप बहुत सुविधाजनक dotenv module उपयोग कर सकते हैं यह, सरल हो जाता है में

। बस अपनी परियोजना के रूट निर्देशिका में एक .env फ़ाइल बनाने और इसे करने के लिए सभी चर जोड़ें:

DB_HOST=1.2.3.4 
DB_USER=someusername 
DB_PASSWORD=somerandompassword 

लेकिन,, आप VCS से बाहर करने के लिए है क्योंकि प्रत्येक डेवलपर शायद व्यक्तिगत कॉन्फ़िगरेशन से करना चाहते हैं सुनिश्चित करें। cp .env.dist .env: आप डिफ़ॉल्ट विन्यास, जो बाद में एक टेम्पलेट के रूप में इस्तेमाल किया जा सकता है शामिल करने के लिए एक .env.dist फ़ाइल बना सकते हैं।


इसके अलावा, मैं एक पुन: प्रयोज्य मॉड्यूल, जो स्वचालित रूप से दोनों CLI तर्कों और NODE_ENV चर का विश्लेषण करके पर्यावरण का पता लगाने के लिए अनुमति देता है क्रियान्वित किया है। यह आपके विकास मशीन पर उपयोगी हो सकता है क्योंकि आप आसानी से इस तरह Node.js कार्यक्रम आप के लिए एक CLI तर्क पारित करके वातावरण को बदल सकते हैं: $ node app.js --prod। Gulp के साथ उपयोग करना भी अच्छा है: $ gulp build --prod

कृपया अधिक जानकारी देख सकते हैं और detect-environment's page पर मामलों का उपयोग करें।