Node.js
उत्पादन में Node.js अनुप्रयोगों की तैनाती
खोज…
NODE_ENV = "उत्पादन" सेट करना
उत्पादन तैनाती कई मायनों में अलग-अलग होगी, लेकिन उत्पादन में तैनात करते समय एक मानक सम्मेलन NODE_ENV
नामक एक पर्यावरण चर को परिभाषित करने और "उत्पादन" के लिए इसका मूल्य निर्धारित करता है।
रनटाइम झंडे
आपके एप्लिकेशन में चलने वाला कोई भी कोड (बाहरी मॉड्यूल सहित) NODE_ENV
का मान जाँच सकता है:
if(process.env.NODE_ENV === 'production') {
// We are running in production mode
} else {
// We are running in development mode
}
निर्भरता
जब NODE_ENV
पर्यावरण चर आपके पैकेज में सभी उत्पादन devDependencies
को 'उत्पादन' के लिए सेट कर दिया जाता है। devDependencies
npm install
चलाने पर फ़ाइल को पूरी तरह से अनदेखा कर दिया जाएगा। आप इसे एक --production
झंडे के साथ भी लागू कर सकते हैं:
npm install --production
NODE_ENV
सेट करने के लिए आप इनमें से किसी भी तरीके का उपयोग कर सकते हैं
विधि 1: सभी नोड ऐप्स के लिए NODE_ENV सेट करें
खिड़कियाँ :
set NODE_ENV=production
लिनक्स या अन्य यूनिक्स आधारित प्रणाली:
export NODE_ENV=production
यह वर्तमान bash सत्र के लिए NODE_ENV
सेट NODE_ENV
, इस प्रकार इस कथन के बाद शुरू होने वाले किसी भी एप्लिकेशन का production
करने के लिए NODE_ENV
सेट होगा।
विधि 2: वर्तमान एप्लिकेशन के लिए NODE_ENV सेट करें
NODE_ENV=production node app.js
यह केवल वर्तमान ऐप के लिए NODE_ENV
सेट करेगा। यह तब मदद करता है जब हम विभिन्न वातावरणों पर अपने ऐप्स का परीक्षण करना चाहते हैं।
विधि 3: .env
फ़ाइल बनाएँ और उसका उपयोग करें
यह यहां बताए गए विचार का उपयोग करता है । अधिक विस्तृत विवरण के लिए इस पोस्ट को देखें।
मूल रूप से आप .env
फ़ाइल बनाते हैं और उन्हें पर्यावरण पर सेट करने के लिए कुछ बैश स्क्रिप्ट चलाते हैं।
बैश स्क्रिप्ट लिखने से बचने के लिए, env-cmd पैकेज का उपयोग .env
फ़ाइल में परिभाषित पर्यावरण चर को लोड करने के लिए किया जा सकता है।
env-cmd .env node app.js
विधि 4: cross-env
पैकेज का उपयोग करें
यह पैकेज पर्यावरण चर को हर मंच के लिए एक तरह से सेट करने की अनुमति देता है।
Npm के साथ इसे स्थापित करने के बाद, आप इसे package.json
में अपनी तैनाती स्क्रिप्ट में जोड़ सकते हैं।
"build:deploy": "cross-env NODE_ENV=production webpack"
प्रक्रिया प्रबंधक के साथ एप्लिकेशन प्रबंधित करें
प्रक्रिया प्रबंधकों द्वारा नियंत्रित NodeJS ऐप चलाना एक अच्छा अभ्यास है। प्रक्रिया प्रबंधक हमेशा के लिए आवेदन को जीवित रखने में मदद करता है, विफलता पर पुनः आरंभ, डाउनटाइम के बिना पुनः लोड करना और व्यवस्थापन को सरल बनाता है। उनमें से अधिकांश शक्तिशाली (जैसे पीएम 2 ) में एक अंतर्निहित लोड बैलेंसर है। PM2 आपको एप्लिकेशन लॉगिंग, निगरानी और क्लस्टरिंग का प्रबंधन करने में सक्षम बनाता है।
PM2 प्रक्रिया प्रबंधक
PM2 की स्थापना:
npm install pm2 -g
प्रक्रियाओं के बीच लोड फैलाने के लिए एकीकृत लोड बैलेंसर को शामिल करते हुए क्लस्टर मोड में प्रक्रिया शुरू की जा सकती है:
pm2 start app.js -i 0 --name "api"
( -i स्पॉन के लिए प्रक्रियाओं की संख्या निर्दिष्ट करने के लिए है। यदि यह 0 है, तो प्रक्रिया संख्या सीपीयू कोर काउंट पर आधारित होगी)
उत्पादन में कई उपयोगकर्ता होने के बावजूद, इसके लिए PM2 के लिए एक बिंदु होना चाहिए। इसलिए pm2 कमांड को एक स्थान (PM2 कॉन्फिगरेशन के लिए) के साथ उपसर्ग करना चाहिए अन्यथा यह संबंधित होम डायरेक्टरी में कॉन्फिगरेशन के साथ हर उपयोगकर्ता के लिए एक नई pm2 प्रक्रिया को स्पॉन करेगा। और यह असंगत होगा।
उपयोग: PM2_HOME=/etc/.pm2 pm2 start app.js
PM2 का उपयोग कर परिनियोजन
PM2
Node.js
अनुप्रयोगों के लिए एक उत्पादन प्रक्रिया प्रबंधक है, जो आपको अनुप्रयोगों को हमेशा जीवित रखने और डाउनटाइम के बिना उन्हें पुनः लोड करने की अनुमति देता है। PM2 आपको एप्लिकेशन लॉगिंग, निगरानी और क्लस्टरिंग का प्रबंधन करने में सक्षम बनाता है।
pm2
विश्व स्तर पर स्थापित करें।
npm install -g pm2
फिर, PM2.
का उपयोग करके node.js
ऐप node.js
PM2.
pm2 start server.js --name "my-app"
PM2
साथ काम करते समय निम्नलिखित आदेश उपयोगी होते हैं।
सभी चल रही प्रक्रियाओं की सूची बनाएं:
pm2 list
ऐप बंद करें:
pm2 stop my-app
एप्लिकेशन पुनः प्रारंभ करें:
pm2 restart my-app
ऐप के बारे में विस्तृत जानकारी देखने के लिए:
pm2 show my-app
PM2 की रजिस्ट्री से ऐप हटाने के लिए:
pm2 delete my-app
प्रक्रिया प्रबंधक का उपयोग कर परिनियोजन
प्रक्रिया प्रबंधक आमतौर पर एक नोडज एप्लिकेशन को तैनात करने के लिए उत्पादन में उपयोग किया जाता है। प्रक्रिया प्रबंधक के मुख्य कार्य सर्वर को पुनरारंभ कर रहे हैं यदि यह दुर्घटनाग्रस्त हो जाता है, तो संसाधन की खपत की जांच करना, रनटाइम प्रदर्शन में सुधार करना, निगरानी करना आदि।
नोड समुदाय द्वारा किए गए कुछ लोकप्रिय प्रक्रिया प्रबंधक हमेशा के लिए हैं, pm2, आदि।
Forvever
forever
यह सुनिश्चित करने के लिए एक कमांड-लाइन इंटरफ़ेस टूल है कि दी गई स्क्रिप्ट लगातार चलती है। forever
सरल इंटरफ़ेस यह Node.js
ऐप्स और स्क्रिप्ट्स की छोटी तैनाती को चलाने के लिए आदर्श बनाता है।
forever
आपकी प्रक्रिया पर नज़र रखता है और क्रैश होने पर उसे पुनरारंभ करता है।
विश्व स्तर पर forever
स्थापित करें।
$ npm install -g forever
एप्लिकेशन चलाएँ:
$ forever start server.js
यह सर्वर को शुरू करता है और प्रक्रिया के लिए एक आईडी देता है (0 से शुरू होता है)।
एप्लिकेशन को पुनरारंभ करें:
$ forever restart 0
यहाँ 0
सर्वर की आईडी है।
आवेदन रोकें:
$ forever stop 0
पुनरारंभ करने के लिए समान, 0
आईडी सर्वर है। आप हमेशा के लिए दिए गए आईडी के स्थान पर प्रोसेस आईडी या स्क्रिप्ट नाम भी दे सकते हैं।
अधिक आदेशों के लिए: https://www.npmjs.com/package/forever
विभिन्न वातावरणों जैसे देव, क्यूए, मंचन आदि के लिए विभिन्न गुणों / विन्यास का उपयोग करना।
विभिन्न वातावरणों पर चलने पर बड़े पैमाने पर अनुप्रयोगों को अक्सर विभिन्न गुणों की आवश्यकता होती है। हम NodeJs आवेदन के लिए तर्क पारित करके और विशिष्ट पर्यावरण संपत्ति फ़ाइल लोड करने के लिए नोड प्रक्रिया में एक ही तर्क का उपयोग करके इसे प्राप्त कर सकते हैं।
मान लीजिए कि हमारे पास अलग-अलग पर्यावरण के लिए दो संपत्ति फाइलें हैं।
dev.json
{ "PORT": 3000, "DB": { "host": "localhost", "user": "bob", "password": "12345" } }
qa.json
{ "PORT": 3001, "DB": { "host": "where_db_is_hosted", "user": "bob", "password": "54321" } }
आवेदन में निम्नलिखित कोड संबंधित संपत्ति फ़ाइल को निर्यात करेगा जिसे हम उपयोग करना चाहते हैं।
process.argv.forEach(function (val) {
var arg = val.split("=");
if (arg.length > 0) {
if (arg[0] === 'env') {
var env = require('./' + arg[1] + '.json');
exports.prop = env;
}
}
});
हम निम्नलिखित की तरह आवेदन के लिए तर्क देते हैं
node app.js env=dev
अगर हम प्रक्रिया प्रबंधक को हमेशा की तरह सरलता से उपयोग कर रहे हैं
forever start app.js env=dev
समूहों का लाभ उठाते हुए
Node.js का एक एकल उदाहरण एक ही थ्रेड में चलता है। मल्टी-कोर सिस्टम का लाभ उठाने के लिए उपयोगकर्ता कभी-कभी लोड को संभालने के लिए Node.js प्रक्रियाओं का एक क्लस्टर लॉन्च करना चाहेगा।
var cluster = require('cluster');
var numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
// In real life, you'd probably use more than just 2 workers,
// and perhaps not put the master and worker in the same file.
//
// You can also of course get a bit fancier about logging, and
// implement whatever custom logic you need to prevent DoS
// attacks and other bad behavior.
//
// See the options in the cluster documentation.
//
// The important thing is that the master does very little,
// increasing our resilience to unexpected errors.
console.log('your server is working on ' + numCPUs + ' cores');
for (var i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('disconnect', function(worker) {
console.error('disconnect!');
//clearTimeout(timeout);
cluster.fork();
});
} else {
require('./app.js');
}