Amazon Linux (EC2) वर LAMP Stack कसा Install करायचा
आत्तापर्यंत आपल्या servers नी फक्त static files पाठवल्या: HTML, CSS आणि images, जे सगळ्यांना सारखेच दिसतात. बहुतेक खऱ्या websites dynamic असतात: server वर code चालतो आणि database मधून प्रत्येक visitor साठी page बनवतो. या chapter मध्ये त्यासाठीचा classic stack, LAMP (Linux, Apache, MariaDB, PHP), Amazon Linux EC2 server वर install करू. Browser PHP का चालवू शकत नाही आणि Apache ते php-fpm कडे कसं देतो ते बघू, phpinfo page ने stack test करू, सगळ्या commands एका automation script मध्ये टाकू, आणि वाटेत येणारे errors fix करू.
या class मध्ये काय शिकणार
- Static विरुद्ध dynamic websites, खऱ्या example सह
- LAMP आणि LEMP म्हणजे काय, आणि MySQL च्या जागी MariaDB का
- Browser PHP का चालवू शकत नाही, आणि Apache, php-fpm आणि MariaDB एकत्र कसे काम करतात
- Amazon Linux वर
httpd,mariadb105-serverआणिphpinstall करणं, आणि package names स्वतः शोधणं - Services start करणं, आणि सगळं install झाल्यावर restart का करायचं
/var/www/htmlमध्ये test pages, baseline म्हणूनphpinfo()- सगळं एका line मध्ये install करणं, मग
lamp.shscript ने automate करणं (sudo tee,-y,chmod +x) - Server वरूनच
curl localhostआणिservice ... statusने test करणं - तीन नेहमीचे problems fix करणं: port 80 घेतलेला, रिकामं PHP page, PHP text म्हणून दिसणं
1. का: static sites विरुद्ध dynamic sites
का. आत्तापर्यंत प्रत्येक site सगळ्यांना त्याच files पाठवत होती. Instagram सारखी apps प्रत्येक visitor साठी वेगळं page बनवतात, आणि त्यासाठी server वर जास्त software लागतं.
Classroom line
Let's see how we came here step by step.
Class मधलं वाक्य
"Aapan step by step kasa aalo."
आपण step by step कसे आलो ते बघूया.
Classroom line
Let's see how we came here step by step.
आत्तापर्यंत आपण Apache आणि Nginx वर static websites host केल्या, domain जोडला, Elastic IP ने IP fix केला आणि AMI ने server चा backup घेतला. पुढची पायरी म्हणजे dynamic website.
Static म्हणजे काय? Static site फक्त browser ला समजणाऱ्या files ची बनलेली असते: HTML, CSS, JavaScript आणि images. Server फक्त files पाठवतो, आणि प्रत्येक visitor ला तेच page मिळतं. Apache किंवा Nginx सारखा web server पुरेसा.
Dynamic म्हणजे काय? Dynamic site server-side code (PHP, Python, Java, Node.js) चालवते आणि database वाचते, त्यामुळे ती प्रत्येक visitor साठी वेगळं page बनवू शकते.
Example 1, step by step. समजा आपण Instagram आहोत.
- तुम्ही login करता. Server तुमचं user name आणि password database शी जुळवून बघतो.
- Server-side code तुम्ही कोणाला follow करता आणि तुम्हाला काय आवडतं ते बघतो.
- तो तुमचा feed बनवतो: तुमच्यासाठी cricket आणि food posts, तुमच्या मित्रासाठी travel आणि music posts.
- तुम्ही दोघं तोच address उघडता, पण प्रत्येकाला आत्ता, फक्त त्याच्यासाठी बनलेलं page मिळतं.
हे fixed HTML files ने शक्य नाही. Server वर चालणारी language आणि database लागतो.
Figure 1. Static site सगळ्यांना त्याच files पाठवते. Dynamic site server-side code आणि database वापरून प्रत्येक visitor चं page बनवते, Instagram feed सारखं.
2. काय: LAMP आणि LEMP
का. Job posts आणि tutorials LAMP आणि LEMP म्हणतात पण समजावत नाहीत. चार अक्षरं माहीत असली की नेमकं काय install करायचं ते कळतं.
Stack म्हणजे website चालवायला एकत्र काम करणाऱ्या software चा set. PHP websites साठी दोन classic stacks:
- LAMP = Linux + Apache + MySQL किंवा MariaDB + PHP.
- LEMP = Linux + Nginx (उच्चार "Engine-x", म्हणून E) + MySQL किंवा MariaDB + PHP.
फरक फक्त web server चा. या chapter मध्ये आपण Amazon Linux वर LAMP बनवतो; Ubuntu आणि LEMP पुढच्या chapter मध्ये.
MariaDB का? MariaDB हा MySQL चा community fork आहे, MySQL च्या original developers नी सुरू केलेला. तो drop-in replacement म्हणून चालतो: त्याच commands आणि तेच SQL, त्यामुळे MySQL साठी लिहिलेलं PHP app त्यावर चालतं. Amazon Linux च्या स्वतःच्या repositories मध्ये MariaDB आहे, म्हणून आपण तोच install करतो.
PHP का? ते open source आहे आणि web चा मोठा भाग, WordPress sites सकट, त्यावर चालतो. हीच idea Python, Java किंवा Node.js सोबतही चालते; फक्त "P" बदलतो.
Classroom line
Always work on open-source languages and databases.
Class मधलं वाक्य
"Je kutla language kiva database open source ahe, tyachavarti kaam karaycha nehmi."
जी कुठली language किंवा database open source आहे, त्याच्यावरती काम करायचं नेहमी.
Classroom line
Always work on open-source languages and databases.
Figure 2. LAMP आणि LEMP मध्ये फरक फक्त web server चा: Apache किंवा Nginx. MariaDB हा MySQL चा drop-in replacement.
3. Browser PHP का चालवू शकत नाही
का. Browser ला फक्त HTML, CSS आणि JavaScript समजतं. Web server ने .php file जशीच्या तशी पाठवली तर browser ला तिचं काय करायचं कळत नाही: तो code text म्हणून दाखवतो किंवा file सरळ download करतो. तुमचा PHP कधीच चालत नाही.
Classroom line
The page will just download here; it won't run.
Class मधलं वाक्य
इथे ते page फक्त download होईल, execute नाही होणार.
Classroom line – हिंदी
"Yahan pe wo page download ho jayega, execute nahi hoga."
Fix काय: php-fpm. php-fpm (PHP FastCGI Process Manager) ही web server साठी PHP code चालवणारी service आहे. Apache स्वतः PHP चालवत नाही; तो .php requests php-fpm कडे देतो आणि php-fpm जे परत देतो ते पाठवतो.
Example 2, step by step: http://PUBLIC_IP/index.php उघडणं
- Browser server ला port 80 वर request पाठवतो.
- Apache ती घेतो आणि file
.phpने संपते हे बघतो. - Apache request php-fpm कडे देतो.
- php-fpm PHP code चालवतो. Code ला data लागला (login, feed) तर तो MariaDB कडे मागतो.
- Code चा output साधं HTML असतं. php-fpm ते Apache ला परत देतो.
- Apache ते HTML browser ला पाठवतो. Browser ला PHP ची एकही line दिसत नाही.
index.html साठी रस्ता छोटा: Apache file स्वतः पाठवतो, php-fpm मध्ये येतच नाही.
Figure 3. Animation: browser index.php मागतो, Apache ते php-fpm कडे देतो, php-fpm code चालवतो (लागलं तर MariaDB सोबत) आणि HTML परत देतो, आणि Apache ते HTML browser ला पाठवतो.
Classroom line
Why php-fpm? We use it to run PHP and give back HTML.
Class मधलं वाक्य
"php-fpm ka waparaycha? PHP cha output HTML madhe denyasathi aapan php-fpm waprato."
php-fpm का वापरायचं? PHP चा output HTML मध्ये देण्यासाठी आपण php-fpm वापरतो.
Classroom line
Why php-fpm? We use it to run PHP and give back HTML.
4. कसं: Apache, MariaDB आणि PHP install करा
का. Dynamic site ला तिन्ही भाग लागतात: web server, database आणि language runtime. एक नसला तर रिकामं page किंवा download होणारी .php file मिळते.
SSH (22) तुमच्या IP वरून आणि HTTP (80) allow करणारा security group असलेला Amazon Linux EC2 server launch करा. SSH ने connect करा, मग तिन्ही packages एकेक करून install करा.
Step 1. Apache. Amazon Linux वर Apache च्या package चं नाव httpd आहे.
sudo yum install httpd -y
Step 2. MariaDB.
sudo yum install mariadb105-server -y
-server का? फक्त mariadb105 package ने फक्त client मिळतो, म्हणजे दुसरीकडच्या database ला connect होणारी mysql command. -server package स्वतः database server install करतो, data store करणारी service. Website ला server लागतो. (105 म्हणजे MariaDB version 10.5.)
Step 3. PHP.
sudo yum install php -y
हे Amazon Linux सध्या देत असलेलं PHP version php-fpm सकट install करतं.
Package चं नाव कसं शोधायचं? लक्षात ठेवायची गरज नाही.
- आधी guess करा. Package चं नाव बहुतेक software च्याच नावाचं असतं, उदा.
php. - Tab completion.
sudo yum install mariadbtype करून Tab दोनदा दाबा. Shell जुळणारे packages दाखवतो, जसेmariadb105आणिmariadb105-server. - Search.
sudo yum search php(किंवाsudo yum search mariadb) चालवा, तो शब्द असलेले सगळे packages दिसतात.
Classroom line
Just guess; usually the package has the same name as the software.
Class मधलं वाक्य
"Guess karaycha simply. Software cha je nav asel tya navanach package asel."
Guess करायचं simply. Software चं जे नाव असेल त्या नावानेच package असेल.
Classroom line
Just guess; usually the package has the same name as the software.
5. Services start करा, मग सगळं install झाल्यावर restart करा
का. Install केलेलं software चालू होईपर्यंत काहीच करत नाही. शेवटचा restart Apache ला PHP उचलायला लावतो, जो Apache start झाल्यावर install झाला.
Step 1. प्रत्येक service start करा.
sudo service httpd start
sudo service mariadb start
sudo service php-fpm start
Amazon Linux वर service काम systemctl कडे देतो; Redirecting to /bin/systemctl start httpd.service अशी line दिसते.
Step 2. सगळं install झाल्यावर restart करा.
sudo service php-fpm restart
sudo service mariadb restart
sudo service httpd restart
Restart का? तुम्ही Apache PHP च्या आधी install आणि start केला असेल, तर Apache ने configuration वाचलं तेव्हा PHP ची settings file (/etc/httpd/conf.d/php.conf, .php php-fpm कडे पाठवणारा rule) अजून अस्तित्वातच नव्हती. Apache तो folder फक्त start होतानाच वाचतो. Restart केल्यावर PHP चा rule load होतो. आधी php-fpm restart करा, Apache शेवटी.
Figure 4. तिन्ही packages install करा, तिन्ही services start करा, मग सगळं install झाल्यावर restart करा म्हणजे Apache PHP चा config load करेल.
Ravindra Bagale's Tip
service ... start service फक्त आत्ता start करतो. Reboot नंतर (किंवा तुमच्या AMI मधून launch केलेल्या server वर) stack परत यावा म्हणून sudo systemctl enable httpd mariadb php-fpm पण चालवा.
6. Test pages: index.html आणि phpinfo() page
का. दोन छोटी pages प्रॉब्लेम वेगळे करतात: index.html चाललं आणि index.php नाही, तर Apache ठीक आहे आणि प्रॉब्लेम PHP मध्ये.
Amazon Linux वर Apache चा web root /var/www/html आहे. तिथे एक HTML page आणि एक PHP page बनवा.
Step 1. Web root मध्ये जा:
cd /var/www/html
Step 2. HTML test page बनवा (folder root चा आहे, म्हणून sudo):
sudo nano index.html
html page type करा, Ctrl+O, Enter ने save करा आणि Ctrl+X ने बाहेर पडा.
Step 3. PHP test page बनवा:
sudo nano index.php
ही line अगदी अशीच type करा, <?php नंतर space ठेवून:
<?php phpinfo(); ?>
Step 4. Browser मध्ये http://PUBLIC_IP/index.html उघडा. html page दिसतं. Apache चालतोय.
Step 5. http://PUBLIC_IP/index.php उघडा. PHP information page दिसतं: PHP version, आणि Server API: FPM/FastCGI, म्हणजे Apache PHP php-fpm कडे देतोय हे सिद्ध.

Whiteboard: phpinfo() page: वर PHP version, आणि Server API FPM/FastCGI, म्हणजे Apache PHP php-fpm कडे देतोय.
आधी phpinfo का? ही baseline test आहे. phpinfo() चाललं तर Linux, Apache, php-fpm आणि PHP सगळं ठीक आहे. त्यानंतर खरं application fail झालं, तर problem application मध्ये आहे (उदा. ते जुन्या PHP version साठी लिहिलेलं आहे), server मध्ये नाही. ही test नसेल तर सगळे server ला दोष देतात.
Classroom line
"My project worked on my laptop... your server has a problem." (That's what you'll hear, so test with phpinfo first.)
Class मधलं वाक्य
"माझ्या laptop वर तर माझा project दिसत होता... तुझ्या server मध्ये problem आहे." (असं ऐकायला मिळेल, म्हणून आधी phpinfo ने test करा.)
Classroom line – हिंदी
"Mere laptop me to dikh raha tha mera project... tere server me problem hai."
7. सगळं एका line मध्ये install करा
का. कमी commands म्हणजे एखादी विसरायची शक्यता कमी, आणि पुढच्या section मधल्या script कडे हे पहिलं पाऊल.
yum install एकाच वेळी अनेक package names घेतो, म्हणून section 4 च्या steps 1 ते 3 ची एक command होते:
sudo yum install httpd mariadb105-server php -y
Start commands पण ; ने वेगळ्या करून एका line मध्ये बसतात:
sudo service mariadb start; sudo service php-fpm start; sudo service httpd start
8. Automate करा: lamp.sh script
का. हा stack तुम्ही परत परत बनवणार: practice साठी, प्रत्येक नवीन project साठी, प्रत्येक नवीन server साठी. दर वेळी दहा commands type करणं हळू आहे आणि चुका होतात. त्या एका shell script मध्ये टाका आणि एकच file चालवा.
8.1 Script nano वापरू शकत नाही: sudo tee ने files लिहा
Section 6 मध्ये आपण test pages nano मध्ये type केली. Script nano मध्ये type करू शकत नाही; तिला स्वतःहून files लिहिणाऱ्या commands लागतात. पहिली idea म्हणजे redirect:
sudo echo "html page" > index.html
हे Permission denied ने fail होतं. का? sudo फक्त echo ला root म्हणून चालवतो. > redirect तुमचा स्वतःचा shell करतो, ec2-user म्हणून, sudo सुरू व्हायच्या आधीच, आणि ec2-user ला /var/www/html मध्ये लिहिता येत नाही.
Fix म्हणजे tee. tee pipe मधून text वाचतो आणि file मध्ये लिहितो, आणि तो root म्हणून चालू शकतो:
echo "html page" | sudo tee index.html
echotext print करतो.- Pipe
|तोteeकडे देतो. sudo tee index.htmlroot म्हणून चालतो आणि file लिहितो. (तो text screen वर पण print करतो; शांत हवं असेल तर शेवटी> /dev/nullजोडा.)
tee file overwrite करतो. त्याऐवजी शेवटी line जोडायची असेल तर tee -a वापरा:
echo "second line" | sudo tee -a index.html
Classroom line
Add -a and it appends to the file.
Class मधलं वाक्य
"Dash-a kela ki append hota."
Dash-a केलं की append होतं.
Classroom line
Add -a and it appends to the file.
Figure 5. sudo echo आणि > fail होतं कारण redirect तुमचा स्वतःचा shell करतो; echo pipe करून sudo tee चालतं कारण tee root म्हणून चालतो. tee -a शेवटी जोडतो.
8.2 Script लिहा
Step 1. तुमच्या home folder मध्ये जाऊन नवीन file उघडा:
cd ~
nano lamp.sh
Step 2. Script type करा:
#!/bin/bash
sudo yum update -y
sudo yum install httpd mariadb105-server php -y
sudo service mariadb start
sudo service php-fpm start
sudo service httpd restart
cd /var/www/html
sudo touch index.html index.php
echo "html page" | sudo tee index.html
echo "<?php phpinfo(); ?>" | sudo tee index.php
Save करून बाहेर पडा (Ctrl+O, Enter, Ctrl+X).
प्रत्येक भाग काय करतो:
#!/bin/bashscript कोणता program चालवणार ते सांगतो.sudo yum update -yinstall असलेले सगळे packages आधी update करतो. प्रत्येक automation script अशीच सुरू करा, म्हणजे current software वर बांधकाम होईल. (Ubuntu वर जोडी आहेsudo apt-get update, जो package list refresh करतो, मगsudo apt-get upgrade -y.)- Section 7 मधलं one-line install.
- MariaDB आणि php-fpm आधी start होतात, आणि Apache शेवटी restart होतो, म्हणजे तो नेहमी PHP चा config load करतो.
restartबंद असलेली service start पण करतो, म्हणून script परत चालवली तरी safe. cd /var/www/htmlweb root मध्ये नेतो.sudo touchदोन रिकाम्या files बनवतो (teeत्या तशाही बनवेल).- दोन
teelines test pages root म्हणून लिहितात, बरोबर<?php phpinfo(); ?>सह.
सगळीकडे -y का? -y नसेल तर yum थांबतो आणि Is this ok [y/N]: विचारतो. उत्तर द्यायला कोणी नसतं, म्हणून script कायमची थांबून राहते.
Classroom line
At the start of any automation, update the packages first.
Class मधलं वाक्य
"Aata automation chya saglyat starting la package manager update karun takaycha."
आता automation च्या सगळ्यात starting ला package manager update करून टाकायचा.
Classroom line
At the start of any automation, update the packages first.
Classroom line
If you don't add -y, the script gets stuck in the middle.
Class मधलं वाक्य
"Tumhi jar last la dash y nahi lihila tar te madhye adkun rahata, stuck hota."
तुम्ही जर last ला dash y नाही लिहिलं तर ते मध्येच अडकून राहतं, stuck होतं.
Classroom line
If you don't add -y, the script gets stuck in the middle.
Home folder का, /var/www/html का नाही? Web root मधलं सगळं browser मधून उघडता येतं. lamp.sh तिथे असती तर कोणीही http://PUBLIC_IP/lamp.sh type करून तुमची script वाचू शकला असता. Scripts ~ मध्ये ठेवा (इथे /home/ec2-user).
Classroom line
Don't keep lamp.sh in the html folder; anyone typing its URL could see it.
Class मधलं वाक्य
"Lamp.sh html madhe thevaycha nahi, karan koni URL madhe takla tar file disel."
Lamp.sh html मध्ये ठेवायचं नाही, कारण कोणी URL मध्ये टाकलं तर file दिसेल.
Classroom line
Don't keep lamp.sh in the html folder; anyone typing its URL could see it.
Figure 6. lamp.sh च्या आत: आधी update, -y सह एका line मध्ये install, database आणि php-fpm start, Apache शेवटी restart, मग sudo tee ने test pages लिहा. ती home folder मध्ये ठेवा.
8.3 Executable करा आणि चालवा
Step 1. File ला execute permission द्या:
chmod +x lamp.sh
Step 2. Home folder मधून चालवा:
./lamp.sh
(bash lamp.sh पण चालतं, chmod +x शिवायसुद्धा.)
Step 3. Output बघा. Packages install होतात, services start होतात, आणि दोन tee lines तुमच्या pages चा content दाखवतात. Error ने थांबली तर नेहमीची कारणं: sudo राहिला, package नावात typo, किंवा चुकीच्या folder मधून चालवली.
Example 3: fresh server वर पूर्ण प्रक्रिया.
- नवीन Amazon Linux server launch करा (HTTP आणि SSH allow) आणि connect करा.
nano lamp.sh, script paste करा, save करा.chmod +x lamp.sh, मग./lamp.sh.http://PUBLIC_IP/index.phpउघडा. phpinfo page दिसतं. काही मिनिटांत पूर्ण LAMP server, typing च्या चुकांशिवाय.
9. Server वरूनच test करा: curl आणि status
का. Browser नेहमी उघडता येत नाही, उदाहरणार्थ script मध्ये किंवा security group तयार नसताना. curl आणि status stack आतून तपासतात.
दर वेळी browser लागत नाही. SSH session मधून:
Step 1. Apache कडे HTML page मागा:
curl http://localhost/index.html
html page print होतं.
Step 2. PHP page मागा:
curl http://localhost/index.php
PHP Version असलेलं मोठं HTML page print होतं. त्याऐवजी raw <?php phpinfo(); ?> line दिसली तर PHP चालत नाहीये (section 10.3).
Step 3. प्रत्येक service check करा:
sudo service httpd status
sudo service mariadb status
sudo service php-fpm status
हिरव्या रंगात active (running) बघा. Status screen मधून बाहेर पडायला q दाबा.
localhost server ला आतून test करतो. curl localhost चाललं पण browser नाही, तर security group मध्ये HTTP (80) allow आहे का आणि तुम्ही https:// नाही तर http:// वापरलंय का ते check करा.
10. Troubleshooting: तुम्हाला भेटणारे तीन problems
Figure 7. तीन नेहमीचे problems: port 80 घेतलेला, typo मुळे रिकामं PHP page, आणि Apache php-fpm कडे देत नसल्याने PHP text म्हणून दिसणं.
10.1 Apache start होत नाही: port 80 आधीच घेतलेला
Symptom. sudo service httpd start लाल रंगात print करतो: Job for httpd.service failed because the control process exited with error code.

Whiteboard: दुसऱ्या web server ने port 80 आधीच घेतल्यामुळे Apache start होत नाही; MariaDB आणि php-fpm व्यवस्थित start होतात.
कारण. Port 80 वर एकच program listen करू शकतो. या server वर आधीच्या lab मधला Nginx अजून चालू होता आणि त्याने port धरून ठेवला होता.
Fix, step by step:
- Details वाचा:
sudo systemctl status httpd.Address already in useशोधा. - Port 80 कोणाकडे आहे ते बघा:
sudo ss -tlnp | grep :80.nginxदिसतो. - दुसरा web server stop करा:
sudo service nginx stop. - Apache परत start करा:
sudo service httpd start. - पुढच्या boot ला Nginx ने port घेऊ नये म्हणून:
sudo systemctl disable nginx.
10.2 index.php रिकामं page दाखवतं
Symptom. index.html चालतं, पण index.php रिकामं पांढरं page दाखवतं.
Fix, step by step:
- Page वर right-click, View Page Source.
- Source मध्ये PHP ची line जशीच्या तशी दिसते, उदा.
<?phpphpinfo(); ?>. PHP code browser पर्यंत पोचला, म्हणजे तो कधी चाललाच नाही. - Typo शोधा:
<?phpनंतर space नाही. PHP त्याचा opening tag<?phpफक्त नंतर space किंवा नवीन line असेल तरच ओळखतो, म्हणून त्याने पूर्ण line साधा text समजली, आणि browser ने ती अनोळखी tag म्हणून लपवली. - File fix करा:
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/index.php - Refresh करा. phpinfo page दिसतं.
धडा: page रिकामं असेल तर आधी View Source. Server ने खरंच काय पाठवलं ते त्यात दिसतं.
10.3 PHP code text म्हणून दिसतो (किंवा download होतो)
Symptom. http://PUBLIC_IP/index.php screen वर <?php phpinfo(); ?> दाखवतं, किंवा browser file download करतो. curl localhost/index.php पण तीच raw line print करतो.
कारण. Apache .php file php-fpm कडे न देता जशीच्या तशी पाठवतोय. बहुतेक वेळा php-fpm चालू नसतो, किंवा Apache PHP install होण्याआधी start झाला आणि त्याने PHP चा config कधी load केलाच नाही.
Amazon Linux वर fix:
- php-fpm check करा:
sudo service php-fpm status. Install नसेल तरsudo yum install php -y. -
आधी php-fpm, मग Apache restart करा, याच क्रमाने:
sudo service php-fpm restart sudo service httpd restart -
Ctrl+F5 ने refresh करा (browser ने जुनं उत्तर cache केलं असू शकतं).
Ubuntu वर (वेगळी OS)
Ubuntu वर Apache म्हणजे apache2 package, आणि PHP hand-off Ubuntu च्या स्वतःच्या tools ने चालू करावं लागतं. या commands फक्त Ubuntu साठी; Amazon Linux वर त्या नसतात.
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.x-fpm
sudo service apache2 restart
php8.x-fpm च्या जागी तुमचं install असलेलं version लिहा (उदा. php8.3-fpm; ls /etc/apache2/conf-available ते दाखवतो). Ubuntu LAMP आणि LEMP आपण पुढच्या chapter मध्ये set up करू.
Tip: अडकलात तर नेमका symptom लिहा ("index.html चालतं, index.php code दाखवतं") आणि तुमची script search engine किंवा AI assistant मध्ये paste करा. नेमक्या symptom ला नेमकं उत्तर मिळतं.
11. Clean up: न वापरलेलं stop करा
का. LAMP server दिवसभर database आणि तीन services चालवतो. काम संपल्यावर stop केल्याने free-tier hours वाचतात.
चालू instance ला कोणी visit करो वा न करो, दर तासाला पैसे लागतात.
- EC2 console मध्ये वरचा region selector check करा. दुसऱ्या region मध्ये launch केलेला server या list मध्ये दिसत नाही; तो शोधायला region बदला.
- आता नको असलेले सगळे test servers select करा, Instance state > Stop instance.
- परत कधीच न लागणारे servers terminate करा (set-up ठेवायचं असेल तर आधी AMI बनवून).
12. पूर्ण flow एका page वर
- Static = सगळ्यांना त्याच files; dynamic = server-side code + database, प्रत्येक visitor चं page.
- LAMP = Linux, Apache, MySQL/MariaDB, PHP. LEMP मध्ये Apache च्या जागी Nginx.
- Browser PHP चालवू शकत नाही: Apache
.phpphp-fpm कडे देतो, तो HTML परत देतो. sudo yum install httpd mariadb105-server php -y(-server= स्वतः database server).- httpd, mariadb, php-fpm start करा; सगळं install झाल्यावर restart (आधी php-fpm, Apache शेवटी).
/var/www/htmlमध्येindex.htmlआणि<?php phpinfo(); ?>ने test करा.~/lamp.shमध्ये automate करा: आधी update, सगळीकडे-y,echo ... | sudo teeने files लिहा.chmod +x lamp.sh,./lamp.sh, मगcurl localhostआणिservice ... status.- Port 80 घेतलेला: Nginx stop करा. रिकामं page: View Source, typo fix करा. PHP text म्हणून: आधी php-fpm, मग httpd restart.
- न वापरलेले servers stop करा.
13. Hands-on lab: LAMP server बनवा आणि तपासा
हा lab का. Dynamic site static पेक्षा जास्त ठिकाणी बिघडते. हा lab stack install करतो, प्रत्येक service start करतो, आणि HTML व PHP वेगवेगळे तपासतो, म्हणजे काही fail झालं तर कोणता भाग जबाबदार ते कळतं.
- एका ओळीत तिन्ही install करा
- Command:
sudo yum install httpd mariadb105-server php -y - काय दिसेल: Download च्या ओळी, मग
Complete!. - Check करा:
httpd -v,mysql --versionआणिphp -vप्रत्येक एक version print करतात. - का:
yumएकदम अनेक packages घेतो. Amazon Linux 2023 वर MariaDB server चं packagemariadb105-server;phpसोबत php-fpm येतो.
- Command:
- Services start करा
- Command:
sudo service mariadb start; sudo service php-fpm start; sudo service httpd restart - काय दिसेल: तीन
Redirecting to /bin/systemctl ...ओळी. - Check करा:
sudo service httpd statusमध्येactive (running);mariadbआणिphp-fpmसाठीही तेच. - का: आधी database आणि PHP, शेवटी Apache, म्हणजे Apache आधीच चालू असलेल्या PHP शी जोडला जातो.
- Command:
- Boot ला start होतील असं करा
- Command:
sudo systemctl enable httpd mariadb php-fpm - काय दिसेल: तीन
Created symlink ...ओळी. - Check करा:
systemctl is-enabled httpd mariadb php-fpmतीन वेळाenabledprint करतो. - का:
startपुढच्या reboot पर्यंतच.enableशिवाय प्रत्येक stop आणि start नंतर site बंद.
- Command:
- HTML test page लिहा
- Command:
echo "<h1>HTML works</h1>" | sudo tee /var/www/html/index.html - काय दिसेल:
<h1>HTML works</h1> - Check करा:
curl http://localhost→<h1>HTML works</h1> - का:
sudo echo ... > filefail होतो, कारण redirect ec2-user म्हणून चालतो.sudo teeमध्ये pipe केल्याने root म्हणून लिहिलं जातं.
- Command:
- PHP test page लिहा
- Command:
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/index.php - काय दिसेल:
<?php phpinfo(); ?> - Check करा:
curl -s http://localhost/index.php | grep -m1 "PHP Version"PHP version असलेली ओळ print करतो. - का: त्याऐवजी कच्चा
<?phptext परत आला, तर PHP चालू नाही: php-fpm start करा आणि Apache restart करा.
- Command:
- दोन्ही pages browser मध्ये उघडा
- करा: Security group मध्ये HTTP (80) allow करा, मग
http://PUBLIC_IP/आणिhttp://PUBLIC_IP/index.phpउघडा. - काय दिसेल: HTML works, मग जांभळ्या-राखाडी रंगाचं PHP information page.
- Check करा: PHP page मध्ये
Server API: FPM/FastCGIदिसतं. - का: Browser test बाहेरचा रस्ताही चालतो हे सिद्ध करतो. FPM/FastCGI दाखवतं की Apache PHP php-fpm कडे देतो, वरच्या diagram प्रमाणे.
- करा: Security group मध्ये HTTP (80) allow करा, मग
- phpinfo काढा आणि stop करा
- Command:
sudo rm /var/www/html/index.php - काय दिसेल: काहीच नाही.
- Check करा:
http://PUBLIC_IP/index.phpआता404देतं. Instance stop करा. - का:
phpinfo()तुमच्या server चे versions आणि paths कोणालाही दाखवतो, ज्याचा attackers ना फायदा होतो. Test पास झाली की ते delete करा.
- Command:
14. Try at home
Try at home
Task 1: हाताने LAMP
- SSH आणि HTTP allow असलेला Amazon Linux server launch करा.
httpd,mariadb105-serverआणिphpएकेक करून install करा, आणि तिन्ही services start करा.- त्या restart करा (आधी php-fpm, शेवटी httpd).
index.htmlआणि<?php phpinfo(); ?>असलेलंindex.phpबनवा, आणि दोन्ही browser मध्ये उघडा. phpinfo page वर Server API शोधा.
Task 2: एका script ने LAMP
- Fresh server launch करा. Home folder मध्ये section 8.2 मधली
lamp.shलिहा. chmod +x lamp.sh,./lamp.shचालवा, आणिcurl http://localhost/index.phpने test करा.tee -aनेindex.htmlमध्ये एक line जोडा, आणिcurlने check करा.- मुद्दाम बिघडवा:
<?php phpinfo(); ?>मधली space काढा, रिकामं page बघा, View Source वापरा, आणि fix करा. - Bonus: Nginx install करून start करा, मग
sudo service httpd restartकरून बघा. Error वाचा, आणि fix करा. - झाल्यावर दोन्ही servers stop किंवा terminate करा.
Recap
थोडक्यात
- Static site सगळ्यांना त्याच files पाठवते; dynamic site server-side code आणि database वापरून प्रत्येक visitor चं page बनवते.
- LAMP = Linux, Apache, MySQL किंवा MariaDB, PHP; LEMP मध्ये Apache ऐवजी Nginx ("engine-x"). MariaDB हा MySQL चा drop-in fork.
- Browsers PHP चालवू शकत नाहीत. Apache
.phpphp-fpm कडे देतो, तो चालवून HTML परत देतो. - Amazon Linux वर:
sudo yum install httpd mariadb105-server php -y;-serverफक्त client नाही तर database server install करतो. नावं guess, Tab किंवाyum searchने शोधा. sudo service ... startने services start करा, आणि सगळं install झाल्यावर restart करा म्हणजे Apache PHP चा config load करेल./var/www/htmlमधलंphpinfo()ही baseline test; Server API FPM/FastCGI म्हणजे PHP चालतंय.~/lamp.shमध्ये automate करा: आधीyum update -y, सगळीकडे-y,echo ... | sudo tee(sudo नंतरचा>redirect तुमच्या नावाने चालतो), जोडायलाtee -a;chmod +x, मग./lamp.sh.- Port 80 घेतलेला: दुसरा server stop करा. रिकामं page: typos साठी View Source. PHP text म्हणून: आधी php-fpm, मग httpd restart. Ubuntu वर:
a2enmod proxy_fcgi setenvifआणिa2enconf php8.x-fpm.
सराव Tasks
Zurich Insurance Partners हा झुरिच मधला विमा व्यवसाय आहे. Anna Müller त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे CHF मध्ये मोजले जातात आणि AWS resources eu-central-2 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.
0 / 12
सोपं 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 दाबा.
सोपं बदलानंतर 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 दाबा.
सोपं MariaDB मध्ये login करा
का: mysql client ने database server वर SQL चालवता येतं.
काय करायचं: MariaDB client root user म्हणून उघडा व password विचारू द्या.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
सोपं मोठ्या orders आधी
का: RDS setup नंतर database query करणं रोजचं काम.
काय करायचं: Order id व amount, मोठी amount आधी.
Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).
- Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
- SQL statement step by step लिहा: काय, कुठून, कोणते rows.
- Statement ; ने संपवा.
- Check answer दाबा. Query table च्या practice copy वर चालते.
सोपं City नुसार customers
का: RDS setup नंतर database query करणं रोजचं काम.
काय करायचं: Pune मधल्या customers ची नावं.
Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).
- Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
- SQL statement step by step लिहा: काय, कुठून, कोणते rows.
- Statement ; ने संपवा.
- Check answer दाबा. Query table च्या practice copy वर चालते.
मध्यम Service आत्ता व boot ला सुरू करा
का: enable reboot नंतर सुरू करतो; --now आत्ताच सुरू करतो.
काय करायचं: nginx service enable करा व लगेच सुरू करा, एका command ने.
- हे काम करणारा Linux command शोधा.
- Task ला लागणारे options (उदा. -r, -h) जोडा.
- File नावं, folders किंवा users योग्य क्रमाने लिहा.
- System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.
मध्यम लहान orders काढा
का: RDS setup नंतर database query करणं रोजचं काम.
काय करायचं: 200 पेक्षा कमी amount चे orders delete.
Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).
- Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
- SQL statement step by step लिहा: काय, कुठून, कोणते rows.
- Statement ; ने संपवा.
- Check answer दाबा. Query table च्या practice copy वर चालते.
मध्यम Customer नावांसह orders
का: RDS setup नंतर database query करणं रोजचं काम.
काय करायचं: प्रत्येक customer नाव व order amount.
Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).
- Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
- SQL statement step by step लिहा: काय, कुठून, कोणते rows.
- Statement ; ने संपवा.
- Check answer दाबा. Query table च्या practice copy वर चालते.
अवघड Customer नुसार sales
का: RDS setup नंतर database query करणं रोजचं काम.
काय करायचं: Customer नुसार total, फक्त 1000 पेक्षा जास्त.
Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).
- Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
- SQL statement step by step लिहा: काय, कुठून, कोणते rows.
- Statement ; ने संपवा.
- Check answer दाबा. Query table च्या practice copy वर चालते.
अवघड Orders नसलेले customers
का: RDS setup नंतर database query करणं रोजचं काम.
काय करायचं: कधीच order न केलेल्या customers ची नावं.
Tables: customers(id, name, city) व orders(id, customer_id, amount, odate).
- Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
- SQL statement step by step लिहा: काय, कुठून, कोणते rows.
- Statement ; ने संपवा.
- Check answer दाबा. Query table च्या practice copy वर चालते.
झटपट उजळणी cards
हा lesson दोन मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR त्याचा lesson उघडतो.









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