Node.js Express App AWS EC2 वर Host करा: PM2 आणि Nginx
Node.js server वर JavaScript चालवतो, आणि बहुतेक Node.js APIs Express नावाच्या छोट्या framework ने बनवलेले असतात. तुम्ही Python app host केला असेल, तर रस्ता जवळपास तोच आहे; फक्त tools ची नावं बदलतात. या chapter मध्ये तुम्ही दोन्ही बाजूबाजूला compare करता, Amazon Linux 2023 EC2 instance वर Node.js आणि npm install करता, package.json आणि JSON route असलेली Express index.js लिहिता, libraries node_modules मध्ये install करता, app port 3000 वर test करता, PM2 ने तो चालू ठेवता (reboot नंतरसुद्धा), आणि visitors नी साधा port 80 वापरावा म्हणून समोर nginx ठेवता.
या class मध्ये काय शिकणार
- Python app vs Node.js app host करणं, step by step बाजूबाजूला
- Amazon Linux 2023 आणि Ubuntu वर Node.js आणि npm install करणं
package.json: name, version,dependenciesआणिdevDependencies/route आणि/getusersJSON route असलेली Expressindex.jsnpm install,node_modulesfolder आणिpackage-lock.jsonnode index.jsआणि तात्पुरत्या port 3000 rule ने testing- PM2:
start,list,logs,restart,stop, आणि reboot साठीpm2 startupआणिpm2 save - Port 3000 ला nginx
proxy_pass,sudo nginx -t, आणि port 3000 बंद करणं - नेहमीचे errors सोडवणं:
Cannot find module,EADDRINUSE,502 Bad Gateway
1. Python app vs Node.js app, बाजूबाजूला
का: Dynamic app, PHP, Python किंवा Node.js, एकाच पद्धतीने host होतो: language install करा, app च्या libraries install करा, app internal port वर चालवा, तो background मध्ये चालू ठेवा, आणि समोर port 80 वर nginx ठेवा. Steps बाजूबाजूला पाहिल्या की नवीन language म्हणजे फक्त commands ची नवीन नावं.
Figure 1. Python app आणि Node.js app साठी त्याच नऊ steps: install, folder, library list, framework, code, libraries install, test run, background run आणि समोर nginx. मोठा फरक: Python ला virtual environment लागतं, Node.js प्रत्येक app च्या libraries त्याच्या स्वतःच्या node_modules folder मध्ये ठेवतो.
Classroom line
Python needs a virtual environment; Node.js doesn't.
Class मधलं वाक्य
Python मध्ये virtual environment बनवावं लागायचं, पण Node.js मध्ये नाही.
Classroom line – हिंदी
"Python me virtual environment create karne ki zaroorat padti thi, lekin Node.js me nahi."
Python ची बाजू step by step Host a Python Flask app on EC2 with gunicorn and nginx मध्ये समजावली आहे.
2. Node.js आणि npm install करा
का: Node.js शिवाय server JavaScript चालवूच शकत नाही, आणि Express आणायला npm लागतो. Current version निवडला की security fixes मिळत राहतात.
काय: Node.js browser च्या बाहेर JavaScript चालवतो. npm (Node Package Manager) Express सारख्या libraries download करतो; तो Node.js सोबत येतो.
कसं, Amazon Linux 2023 वर:
- SSH (22) My IP वरून आणि HTTP (80) कुठूनही allow करणाऱ्या security group सह Amazon Linux 2023 instance (
t2.microकिंवाt3.micro) launch करा, आणिssh -i mykey.pem ec2-user@PUBLIC_IPने connect करा. -
Node.js install करा आणि versions check करा:
sudo yum install nodejs24 -y node -v npm -v -
node -vv24.xदाखवतो आणिnpm -vnpm चं version.nodejs24package सोबत npm पण install होतो. - Amazon Linux 2023 मध्ये प्रत्येक Node.js version चं वेगळं package आहे:
nodejs22आणिnodejs24current आहेत. साधंnodejspackage म्हणजे Node.js 18, ज्याला आता security fixes मिळत नाहीत, म्हणून नवीन app साठी ते वापरू नका.
कसं, Ubuntu वर: package चं नाव इथेही nodejs आहे, आणि npm वेगळं package आहे:
sudo apt update
sudo apt install nodejs npm -y
node -v
3. Project आणि package.json बनवा
का: package.json मुळे कोणताही server एका npm install ने app परत उभं करू शकतो. ते नसेल तर प्रत्येक library हाताने लक्षात ठेवावी लागेल.
काय: package.json app चं वर्णन करतो: त्याचं नाव, version, आणि त्याला लागणाऱ्या libraries. हे requirements.txt चं काम करतं, फक्त JSON मध्ये लिहिलेलं: { } च्या आत "key": "value" pairs, commas ने वेगळे.
कसं:
-
Folder बनवा आणि file उघडा:
mkdir nodeapp cd nodeapp nano package.json -
लिहा:
{ "name": "node-app", "description": "sample Express API", "version": "0.0.1", "private": true, "dependencies": { "express": "^5.3.0" }, "devDependencies": { "mocha": "^12.0.3", "supertest": "^7.3.1" } } -
Ctrl+O,Enterने save करा, आणिCtrl+Xने बाहेर पडा.
प्रत्येक भागाचा अर्थ:
nameआणिversionapp ओळखतात."private": trueमुळे app चुकून npm registry वर publish होत नाही.dependenciesम्हणजे app चालायला लागणाऱ्या libraries: इथे फक्त Express.devDependenciesफक्त code लिहिताना आणि test करताना लागतात:mochatests चालवतो आणिsupertestapp ला test requests पाठवतो. Live app त्या कधीच वापरत नाही.^5.3.0म्हणजे "version 5.3.0 किंवा कुठलंही नवीन 5.x". npm स्वतःहून 6.0 वर उडी मारत नाही, कारण नवीन major version code बिघडवू शकतं.
Classroom line
Libraries needed only for coding and testing are called development dependencies.
Class मधलं वाक्य
"Fakt coding kartana testing sathi je framework lagtat, tyala development dependencies mhanto."
फक्त coding करताना testing साठी जे framework लागतात, त्याला development dependencies म्हणतो.
Classroom line
Libraries needed only for coding and testing are called development dependencies.
Figure 2. package.json मध्ये दोन प्रकारच्या libraries असतात. express सारख्या dependencies server वर app चालवायला लागतात. mocha आणि supertest सारख्या devDependencies फक्त code लिहिताना आणि test करताना लागतात; npm install --omit=dev त्या सोडून देतो.
तयार sample app GitHub repository ravibagale/nodeapp मध्ये आहे; git clone https://github.com/ravibagale/nodeapp.git तो download करतो.
4. Express app लिहा: index.js
का: ही छोटी file म्हणजेच पूर्ण app. प्रत्येक ओळ काय करते हे कळलं की routes जोडणं आणि errors सोडवणं स्वतः जमतं.
कसं: nano index.js, आणि लिहा:
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello from Node.js on EC2');
});
app.get('/getusers', function (req, res) {
res.json({ username: 'ravi' });
});
app.listen(process.env.PORT || 3000);
module.exports = app;
प्रत्येक ओळ काय करते:
require('express')node_modulesमधून Express load करतो;express()app object बनवतो, नावapp.app.get('/', ...)/साठीच्या GET request ला उत्तर देतो. हे Flask च्या@app.route('/')चं Express version आहे.- Function ला request
reqआणि responseresमिळतात.res.send()text किंवा HTML पाठवतो. /getusersहा API route आहे:res.json()object JSON म्हणून पाठवतो,{"username":"ravi"}, content typeapplication/jsonसह.app.listen(process.env.PORT || 3000)PORTenvironment variable मधल्या port वर ऐकतो, तो set नसेल तर 3000 वर.module.exports = appमुळे test files, जसंsupertesttest, app load करू शकतात.
Classroom line
Python had app.route; here it's app.get.
Class मधलं वाक्य
Python मध्ये तिथे app dot route होतं, इथे app dot get आहे.
Classroom line – हिंदी
"Udhar app dot route tha Python me, yaha app dot get hai."
5. npm install आणि node_modules folder
का: Library node_modules मध्ये येईपर्यंत require('express') fail होतो. npm install ती तिथे आणतो, package.json ने मागितलेल्या versions मध्ये.
कसं: ~/nodeapp मध्ये:
npm install
ls
काय होतं:
- npm
package.jsonवाचतो, Express आणि Express ला स्वतःला लागणारी प्रत्येक library download करतो, आणि त्या सगळ्या project मध्ये नवीन foldernode_modulesमध्ये ठेवतो. - तो
package-lock.jsonपण लिहितो, install केलेल्या प्रत्येक package च्या नेमक्या version सह, म्हणजे पुढच्याnpm installला, कुठल्याही server वर, त्याच versions मिळतात. node_modulesफक्त या app चा आहे. म्हणूनच Node.js ला virtual environment लागत नाही: दोन folders मधल्या दोन apps चे स्वतःचे वेगळेnode_modulesअसतात.- Live server वर
npm install --omit=devने test libraries वगळू शकता. node_modulesकधीच GitHub वर किंवा servers मध्ये copy करू नका.node_modules.gitignoreमध्ये टाका,package.jsonआणिpackage-lock.jsonठेवा, आणि प्रत्येक server वरnpm installचालवा.npm installvulnerabilities दाखवत असेल, तरnpm auditकुठलं package ते सांगतो;package.jsonमध्ये त्या package चं version update केलं की सहसा प्रश्न सुटतो.
Classroom line
When npm install runs, it creates a folder named node_modules.
Class मधलं वाक्य
"Npm install run hota tevha node_modules navacha folder tayar hoto."
Npm install run होतं तेव्हा node_modules नावाचा folder तयार होतो.
Classroom line
When npm install runs, it creates a folder named node_modules.
Figure 3. npm install package.json वाचतो, express आणि तो ज्या packages वर अवलंबून आहे ते सगळे project च्या स्वतःच्या node_modules folder मध्ये download करतो, आणि नेमकी versions package-lock.json मध्ये नोंदवतो. दुसऱ्या folder मधल्या दुसऱ्या app ला स्वतःचा node_modules मिळतो.
6. node index.js ने app test करा
का: आधी server वरच curl ने test केलं की nginx किंवा security group आड येण्याआधीच app चालतं हे सिद्ध होतं.
कसं:
-
App foreground मध्ये start करा:
node index.js -
Prompt परत येत नाही: app या terminal मध्ये चालतोय. दुसऱ्या SSH window मध्ये, server वरच test करा:
curl http://127.0.0.1:3000/ curl http://127.0.0.1:3000/getusers -
तुमच्या browser मधून test करायला security group मध्ये तात्पुरता inbound rule टाका: Custom TCP, port 3000, source My IP.
http://PUBLIC_IP:3000/आणिhttp://PUBLIC_IP:3000/getusersउघडा. Ctrl+Cदाबा: app थांबतो. SSH window बंद केली तरी तो थांबतो. Test साठी हे ठीक आहे, live app साठी नाही.
7. PM2 ने app चालू ठेवा
का: node ने सुरू केलेलं app SSH window बंद होताच मरतं. Live API चालू राहायला हवं आणि crash नंतर परत यायला हवं, हे PM2 चं काम.
काय: PM2 हा Node.js साठी process manager आहे. तो app background मध्ये चालवतो, crash झाला तर restart करतो, त्याचे logs ठेवतो, आणि reboot नंतर परत start करू शकतो. Python साठी gunicorn आणि systemd जे काम करतात, ते Node.js साठी PM2 करतो.
कसं:
-
एकदाच, globally (
-g) install करा, म्हणजेpm2command प्रत्येक folder मध्ये चालते:sudo npm install -g pm2 -
~/nodeappमधून app start करा:pm2 start index.js -
PM2 एक table दाखवतो:
id 0, nameindex(.jsशिवाय file चं नाव), modefork, statusonline. Prompt परत येतो, आणि logout नंतरही app चालू राहतो. -
रोजच्या commands:
pm2 list pm2 logs index pm2 restart index pm2 stop index pm2 delete index -
pm2 listtable परत दाखवतो;↺column restarts मोजतो.pm2 logs indexapp चा output आणि errors live दाखवतो (Ctrl+Cने log view मधून बाहेर; app चालूच राहतो).stopapp थांबवतो पण list मध्ये ठेवतो;deleteतो PM2 मधून काढतो. - App ला जास्त स्पष्ट नाव द्यायचं असेल, तर
pm2 start index.js --name nodeappने start करा आणि बाकीच्या commands मध्येnodeappवापरा.
Classroom line
To run it in the background, you need PM2.
Class मधलं वाक्य
"Background madhe run karaycha asel tar pm2 vaparava lagel."
Background मध्ये run करायचं असेल तर pm2 वापरावा लागेल.
Classroom line
To run it in the background, you need PM2.
![काळा terminal: [PM2] Spawning PM2 daemon with pm2_home=/home/ec2-user/.pm2, PM2 Successfully daemonized, Starting /home/ec2-user/nodeapp/index.js in fork_mode (1 instance), Done. खाली id, name, namespace, version, mode, pid, uptime, restarts, status, cpu, mem, user, watching columns असलेलं table आणि एक row: 0, index, default, 0.0.1, fork, online, 0%, 33.9mb, ec2-user, disabled.](../../../assets/img/aws/host-nodejs-express-app-on-ec2-with-pm2-and-nginx-01-pm2-start-status-table.webp)
Whiteboard: pm2 start index.js: PM2 त्याचा daemon start करतो, index.js fork mode मध्ये start करतो आणि app online असलेलं process table दाखवतो.
8. Reboot नंतर app परत start करा: pm2 startup आणि pm2 save
का: PM2 स्वतः एक साधा program आहे. Reboot नंतर, किंवा instance stop आणि start केल्यावर, त्याला कोणी start करत नाही, म्हणून तुम्ही login करेपर्यंत app बंद राहतो.
कसं:
-
PM2 ला startup service बनवायला सांगा:
pm2 startup -
तो
sudo env PATH=$PATH:/usr/bin ... pm2 startup systemd -u ec2-user --hp /home/ec2-userने सुरू होणारी एक command दाखवतो. ती नेमकी ओळ copy करून चालवा. तीpm2-ec2-userनावाची systemd service बनवते, जी boot ला PM2 start करते. -
चालू apps ची list save करा:
pm2 save -
pm2 saveसध्याची list~/.pm2/dump.pm2मध्ये लिहितो. Boot ला PM2 त्या list मधला प्रत्येक app start करतो. - Test करा:
sudo reboot, एका मिनिटाने परत connect करा, आणिpm2 listचालवा: तुम्ही start न करताindexonlineआहे. - App add किंवा delete केला की प्रत्येक वेळी परत
pm2 saveचालवा.
Figure 4. Animation: foreground मधला node index.js SSH बंद झाल्यावर थांबतो; pm2 start logout नंतरही app online ठेवतो; app crash झाला तर PM2 तो restart करतो; reboot नंतर pm2 startup आणि pm2 save तो परत online आणतात.
9. समोर nginx ठेवा: port 3000 ला proxy_pass
का: Visitors नी port 3000 नाही, तर साधा http://ADDRESS port 80 वर (आणि HTTPS साठी 443) वापरायला हवा. nginx प्रत्येक request घेतो आणि ती app कडे पाठवतो. हे Python app सारखंच चालतं; reverse proxy चं पूर्ण explanation Put nginx in front as the reverse proxy मध्ये आहे.
कसं:
-
nginx install करा आणि start करा:
sudo yum install nginx -y sudo service nginx start -
sudo nano /etc/nginx/nginx.confने config उघडा. आधीपासून असलेल्याserver { ... }block च्या आत,rootओळीनंतर, हे टाका:location / { proxy_pass http://127.0.0.1:3000; } -
File check करा, मग reload करा:
sudo nginx -t sudo service nginx reload -
nginx -tनेsyntax is okआणिtest is successfulम्हणायलाच हवं. नाहीतर तो सांगतो ती ओळ दुरुस्त करा आणि परत test करा; तोपर्यंत चालू nginx जुनं config वापरत राहतो. - Port शिवाय
http://PUBLIC_IP/आणिhttp://PUBLIC_IP/getusersउघडा: Express app nginx मधून उत्तर देतो.
Classroom line
Now install nginx and start it.
Class मधलं वाक्य
"Aata nginx install kara, start kara."
आता nginx install करा, start करा.
Classroom line
Now install nginx and start it.
Classroom line
Every service command needs sudo.
Class मधलं वाक्य
"Jevdhe services aahet, saglyana sudo lagtach."
जेवढे services आहेत, सगळ्यांना sudo लागतोच.
Classroom line
Every service command needs sudo.
Port 3000 बंद करा: आता बाहेरच्या कोणालाही त्याची गरज नाही.
- Security group मधून port 3000 चा rule delete करा. 22 My IP वरून, 80, आणि HTTPS टाकलं तर 443 ठेवा.
- जास्त safety साठी, app ला फक्त server वरच ऐकू द्या.
index.jsची शेवटून दुसरी ओळapp.listen(process.env.PORT || 3000, '127.0.0.1');करा आणिpm2 restart indexचालवा. http://PUBLIC_IP/चालतो;http://PUBLIC_IP:3000/आता उत्तर देत नाही.
Figure 5. Browser port 80 वर nginx पर्यंत पोहोचतो; location / block request PM2 ने चालू ठेवलेल्या 127.0.0.1:3000 वरच्या Express app कडे पाठवतो. Security group 22 आणि 80 allow करतो; तात्पुरता port 3000 rule delete केला आहे.
10. Code बदला: pm2 restart
का: PM2 जुना code memory मध्ये ठेवतो. Restart करेपर्यंत तुमचा बदल काहीच करत नाही, आणि bug नसताना bug वाटतो.
काय: App start झाला तेव्हा PM2 ने index.js load केली. File मधला बदल app restart होईपर्यंत काहीच करत नाही.
Worked example: दुसरा API route टाका.
-
index.jsमध्येapp.listenओळीच्या वर route टाका:app.get('/health', function (req, res) { res.json({ status: 'ok' }); }); -
http://PUBLIC_IP/healthउघडा: तोCannot GET /healthम्हणतो, Express कडून 404. चालू app कडे अजून जुना code आहे. -
तो restart करा, आणि errors साठी log बघा:
pm2 restart index pm2 logs index --lines 20 -
/healthपरत उघडा: तो{"status":"ok"}देतो. package.jsonबदलला असेल, तर आधीnpm install, मगpm2 restart indexचालवा.pm2 restart allप्रत्येक app restart करतो.
Classroom line
Suppose you changed the code...
Class मधलं वाक्य
समजा तुम्ही code मध्ये बदल केले...
Classroom line – हिंदी
"Suppose aapne code ke andar changes kiya..."
11. काही बिघडलं तर
का: प्रत्येक लक्षण एक layer दाखवतं: app, PM2, nginx किंवा security group. क्रमाने तपासलं की प्रॉब्लेम लवकर सापडतो.
node: command not found: Node.js install नाही.sudo yum install nodejs24 -yचालवा.Error: Cannot find module 'express':npm installचालवलं नाही, किंवा दुसऱ्या folder मध्ये चालवलं.cd ~/nodeappकरूनnpm installचालवा.npm installcode EJSONPARSEदेऊन fail होतो:package.jsonvalid JSON नाही. सुटलेला comma, सुटलेला"किंवा शेवटच्या item नंतरचा comma शोधा.Error: listen EADDRINUSE: address already in use :::3000: app ची दुसरी copy आधीच port 3000 वापरतेय, बहुतेक PM2 ने start केलेली.pm2 listती दाखवतो; सोबतnode index.jsचालवू नका.- Testing करताना
http://PUBLIC_IP:3000उघडत नाही: app चालू नाही, किंवा security group मध्ये port 3000 rule नाही. pm2: command not found:sudo npm install -g pm2ने install करा.- Reboot नंतर app गायब:
pm2 startupचालवा, तो दाखवतो ती ओळ चालवा, मगpm2 save. 502 Bad Gateway: nginx चालतोय पण app उत्तर देत नाही.pm2 listआणिpm2 logs indexकारण दाखवतात;proxy_passमधला port check करा.- तुमच्या app ऐवजी nginx welcome page:
location /block नाही किंवाserverblock च्या बाहेर आहे, किंवा nginx reload केला नाही. nginx -tduplicate location "/"म्हणतो: एकाserverblock मध्ये एकचlocation /असू शकतो. जास्तीचा block delete करा.- नवीन route
Cannot GETदेतो:pm2 restart indexचालवा.
Classroom line
Only one works, not both.
Class मधलं वाक्य
"Ekach chaltay, doni nahi chalat."
एकच चालतंय, दोन्ही नाही चालत.
Classroom line
Only one works, not both.
Ravindra Bagale's Tip
तीन commands ची एक सवय लावा: प्रत्येक code बदलानंतर pm2 restart आणि pm2 logs वर एक नजर; प्रत्येक nginx बदलानंतर reload आधी sudo nginx -t; आणि प्रत्येक नवीन किंवा delete केलेल्या app नंतर pm2 save. आणि nginx चालायला लागला की port 3000 rule delete करा. App फक्त nginx मधूनच पोहोचता यायला हवा.
Practice झाली की EC2 instance stop करा. तुम्ही install केलेलं सगळं instance च्या EBS root volume वर असतं; पुढचा chapter data साठी दुसरा EBS volume जोडतो.
12. पूर्ण class एका page वर
- Python आणि Node.js apps एकाच पद्धतीने host होतात: language, libraries, internal port वर app, process manager, समोर nginx.
- Amazon Linux 2023:
sudo yum install nodejs24 -y(npm सोबत येतो); Ubuntu:sudo apt install nodejs npm -y.node -vआणिnpm -vने check करा. package.jsonapp चं वर्णन करतो;dependenciesचालवायला लागतात,devDependenciesफक्त लिहायला आणि test करायला.- Express:
app.get('/path', function (req, res) { ... }); text साठीres.send(), JSON साठीres.json();app.listen(process.env.PORT || 3000). npm installproject चा स्वतःचाnode_modulesभरतो आणिpackage-lock.jsonलिहितो; venv लागत नाही.node_modulesgit बाहेर ठेवा.node index.jsforeground मध्ये चालतो: तात्पुरत्या port 3000 rule सह test साठी चांगला.sudo npm install -g pm2,pm2 start index.js; मगpm2 list,logs,restart,stop,delete.pm2 startup(दाखवलेली ओळ चालवा) आणिpm2 savereboot नंतर app परत आणतात.- nginx:
serverblock मध्येlocation / { proxy_pass http://127.0.0.1:3000; }, एकचlocation /;sudo nginx -t, मगsudo service nginx reload. - nginx मागे असताना port 3000 rule delete करा; नवीन code ला
pm2 restart indexलागतो.
13. Hands-on lab: nginx मागे Express API, PM2 ने चालू ठेवलेला
हा lab का. हा lab नवीन Amazon Linux 2023 server पासून port 80 वर उत्तर देणाऱ्या, logout आणि reboot नंतरही टिकणाऱ्या Node.js API पर्यंत नेतो, वाटेत प्रत्येक layer तपासत.
- Node.js install करा
- Command:
sudo yum install nodejs24 -y - काय दिसेल:
Complete! - Check करा:
node -vv24.xदाखवतो;npm -vversion दाखवतो. - का:
nodejs24हा security fixes मिळणारा current version, आणि तो npm सोबत आणतो. साधाnodejspackage Node.js 18 आहे, त्याला आता fixes मिळत नाहीत.
- Command:
- Project folder बनवा
- Command:
mkdir ~/nodeapp && cd ~/nodeapp - काय दिसेल: काहीच नाही.
- Check करा:
pwd→/home/ec2-user/nodeapp - का: प्रत्येक app ला स्वतःचा folder, म्हणजे त्याचे
node_modulesदुसऱ्या app मध्ये मिसळत नाहीत.
- Command:
- package.json लिहा
- करा:
nano package.jsonआणि section 3 मधली file लिहा,dependenciesखाली"express"सह. - Check करा:
cat package.jsonमध्ये braces आणि commas section 3 सारखेच दिसतात. - का: एक comma किंवा quote राहिला तर npm JSON parse error देऊन थांबतो.
- करा:
- index.js लिहा
- करा:
nano index.jsआणि section 4 मधला code लिहा. - Check करा:
cat index.jsचा शेवटapp.listen(process.env.PORT || 3000);ने होतो. - का: Port 3000 हा app चा स्वतःचा port; नंतर nginx त्याकडे forward करेल.
- करा:
- Libraries install करा
- Command:
npm install - काय दिसेल:
added ... packagesआणि नवीनnode_modulesfolder. - Check करा:
ls node_modules/expressमध्ये Express च्या files दिसतात. - का: हे नसेल तर
node index.jsCannot find module 'express'ने fail होतो.
- Command:
- PM2 ने सुरू करा
- Command:
sudo npm install -g pm2 && pm2 start index.js - काय दिसेल:
indexआणि statusonlineअसलेला table. - Check करा:
curl http://127.0.0.1:3000/getusers→{"username":"ravi"} - का:
-gमुळेpm2प्रत्येक folder मध्ये चालतो. Logout नंतरही PM2 app चालू ठेवतो.
- Command:
- Reboot नंतरही टिका
- Command:
pm2 startup - काय दिसेल:
sudo env PATH=$PATH:/usr/binने सुरू होणारी एक ओळ. ती copy करून चालवा, मगpm2 save. - Check करा:
sudo reboot, परत connect,pm2 list:indexonlineआहे. - का:
startupboot ला PM2 सुरू करतो;saveकोणती apps सुरू करायची ते सांगतो. दोन्ही लागतात.
- Command:
- nginx पुढे ठेवा
- Command:
sudo yum install nginx -y && sudo service nginx start - काय दिसेल:
Complete! - Check करा: section 9 मधला
location / { proxy_pass http://127.0.0.1:3000; }block जोडा, मगsudo nginx -t→syntax is okआणिtest is successful. - का: Visitors port 80 वापरतात; nginx प्रत्येक request app कडे पाठवतो.
nginx -ttypos चालू server बिघडवण्याआधीच पकडतो.
- Command:
- Reload करून browser मधून test करा
- Command:
sudo service nginx reload - काय दिसेल: काहीच नाही.
- Check करा: address मध्ये port नसताना
http://PUBLIC_IP/getusers{"username":"ravi"}दाखवतो. - का: Fail झालं तर security group port 80 allow करतो का ते तपासा. Port 3000 internet ला कधीच उघडा लागत नाही.
- Command:
- Code बदला आणि restart करा
- करा: section 10 मधला
/healthroute जोडा, मगpm2 restart indexचालवा. - Check करा:
http://PUBLIC_IP/health→{"status":"ok"} - का: Restart आधी तोच address
Cannot GET /healthदाखवतो, कारण PM2 अजून जुना code चालवतो.
- करा: section 10 मधला
14. Try at home
Try at home
Task 1: app
- Amazon Linux 2023 instance launch करा,
nodejs24install करा, आणिnode -vवnpm -vcheck करा. package.jsonआणिindex.jsसह~/nodeappबनवा.npm installआधीnode index.jsचालवा आणि error वाचा. मगnpm installचालवा आणिnode_modulesमध्ये डोकावून बघा.- My IP साठी port 3000 उघडा आणि browser मध्ये
/आणि/getuserstest करा.
Task 2: PM2
- PM2 ने app start करा, SSH बंद करा, आणि app अजून उत्तर देतो का ते check करा.
pm2 startupआणिpm2 saveचालवा, instance reboot करा, आणिpm2 listcheck करा./healthroute टाका,Cannot GETबघा, मगpm2 restart indexआणि JSON बघा.
Task 3: nginx
- nginx install करा,
location /block टाका,sudo nginx -tचालवा, reload करा, आणि app port 80 वर उघडा. - दुसरा
location /block टाका,sudo nginx -tचालवा, आणि message वाचा. तो परत delete करा. pm2 stop indexने app थांबवा,502 Bad Gatewayबघा, आणि परत start करा. Port 3000 rule delete करा.
Recap
थोडक्यात
- Node.js app Python app सारखाच host होतो;
requirements.txt,pip,python3 app.pyआणि gunicorn ऐवजीpackage.json,npm install,node index.jsआणि PM2. dependenciesapp चालवतात;devDependenciesफक्त लिहायला आणि test करायला मदत करतात.- प्रत्येक project चा स्वतःचा
node_modulesअसतो, म्हणून Node.js ला virtual environment लागत नाही. - PM2 app background मध्ये चालू ठेवतो;
pm2 startupआणिpm2 savereboot नंतर तो परत आणतात. - Port 80 वरचा nginx requests 127.0.0.1:3000 ला पाठवतो;
sudo nginx -tने test करा, मग port 3000 बंद करा. - नवीन code ला
pm2 restartलागतो.
सराव Tasks
Dubai Gold Souk हा दुबई मधला दागिने व्यवसाय आहे. Fatima Al Mansoori त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे AED मध्ये मोजले जातात आणि AWS resources me-central-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.
0 / 12
सोपं बदलानंतर service restart करा
का: Config बदल service restart/reload नंतरच लागू होतात.
काय करायचं: nginx service restart करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं Service चालू आहे का ते पाहा
का: Site बंद असेल तर आधी web server चालू आहे का ते पाहा.
काय करायचं: httpd service चं status दाखवा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं Ubuntu वर package install करा
का: Ubuntu apt वापरतं. Package नावं वेगळी: Ubuntu वर Apache म्हणजे apache2.
काय करायचं: Ubuntu वर apache2 package confirm न विचारता install करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं Amazon Linux वर package install करा
का: Amazon Linux 2023 वर dnf हा package manager. -y आपोआप yes देतो.
काय करायचं: Amazon Linux 2023 वर httpd package confirm न विचारता install करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं Server वरून website test करा
का: DNS तयार होण्याआधीही web server उत्तर देतो का ते curl दाखवतो.
काय करायचं: http://localhost ला request पाठवा व फक्त response headers दाखवा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं GitHub वरून code घ्या
का: git clone पूर्ण repository server वर copy करतो.
काय करायचं: https://github.com/dubaigold/website.git सध्याच्या folder मध्ये clone करा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम nginx config test करा
का: Restart मुळे site बंद पडण्याआधी test चुका पकडतो.
काय करायचं: nginx configuration files मधल्या चुका तपासा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम Service आत्ता व boot ला सुरू करा
का: enable reboot नंतर सुरू करतो; --now आत्ताच सुरू करतो.
काय करायचं: nginx service enable करा व लगेच सुरू करा, एका command ने.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम Port 80 सगळ्यांसाठी उघडा
का: Security group HTTP allow करत असेल तरच visitors website पाहू शकतात.
काय करायचं: Security group sg-012bb45cc4124c3b2 वर 0.0.0.0/0 कडून inbound TCP port 80 allow करा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
मध्यम CloudFormation: web SG
का: फक्त 443 उघडल्याने server सुरक्षित.
काय करायचं: 0.0.0.0/0 कडून TCP 443 allow करणारा AWS::EC2::SecurityGroup. GroupDescription द्या.
- Task मधल्या top-level keys पासून सुरू करा.
- Child keys 2 spaces ने indent करा (tabs नकोत).
- प्रत्येक property मध्ये task मधली value भरा.
- Check answer दाबा. Keys चा क्रम महत्त्वाचा नाही.
मध्यम Security group बनवा
का: Security group म्हणजे instance भोवतीचा firewall.
काय करायचं: vpc-0ff45ee412deadbee मध्ये dubaigold-web-sg नावाचा security group "Web servers" description सह बनवा.
- Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
- aws लिहा, मग service चं नाव, मग operation (action शब्द).
- प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
- Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.
अवघड Ubuntu वर nginx site enable करा
का: Ubuntu वर sites-available पासून sites-enabled ला symbolic link ने site enable होते.
काय करायचं: /etc/nginx/sites-enabled/ मध्ये /etc/nginx/sites-available/dubaigold ची symbolic link बनवा.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
झटपट उजळणी cards
हा lesson दोन मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR त्याचा lesson उघडतो.










अजून cards: Ravi Sir's Cards.