Ravindra BagaleCourses & study guides English

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 आणि php install करणं, आणि package names स्वतः शोधणं
  • Services start करणं, आणि सगळं install झाल्यावर restart का करायचं
  • /var/www/html मध्ये test pages, baseline म्हणून phpinfo()
  • सगळं एका line मध्ये install करणं, मग lamp.sh script ने 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.

आत्तापर्यंत आपण 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 आहोत.

  1. तुम्ही login करता. Server तुमचं user name आणि password database शी जुळवून बघतो.
  2. Server-side code तुम्ही कोणाला follow करता आणि तुम्हाला काय आवडतं ते बघतो.
  3. तो तुमचा feed बनवतो: तुमच्यासाठी cricket आणि food posts, तुमच्या मित्रासाठी travel आणि music posts.
  4. तुम्ही दोघं तोच address उघडता, पण प्रत्येकाला आत्ता, फक्त त्याच्यासाठी बनलेलं page मिळतं.

हे fixed HTML files ने शक्य नाही. Server वर चालणारी language आणि database लागतो.

Static site विरुद्ध dynamic site Static site HTML, CSS, JavaScript आणि images. प्रत्येक visitor ला तेच page. Server फक्त files पाठवतो; browser त्या दाखवतो. फक्त Apache किंवा Nginx पुरे. index.html Dynamic site Server-side code (PHP, Python, Java, Node.js) आणि database. प्रत्येक visitor साठी page बनतं, जसा तुमचा Instagram feed. User A cricket, food posts User B travel, music posts

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:

  1. LAMP = Linux + Apache + MySQL किंवा MariaDB + PHP.
  2. 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.

LAMP विरुद्ध LEMP LAMP (हा chapter) LEMP L Linux: operating system L Linux: operating system A Apache (package httpd) E Nginx, उच्चार "engine-x" M MySQL किंवा MariaDB: database M MySQL किंवा MariaDB: database P PHP, php-fpm चालवतो P PHP, php-fpm चालवतो फक्त web server बदलतो. MariaDB हा MySQL चाcommunity fork आहे आणि drop-in replacement.

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.

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 उघडणं

  1. Browser server ला port 80 वर request पाठवतो.
  2. Apache ती घेतो आणि file .php ने संपते हे बघतो.
  3. Apache request php-fpm कडे देतो.
  4. php-fpm PHP code चालवतो. Code ला data लागला (login, feed) तर तो MariaDB कडे मागतो.
  5. Code चा output साधं HTML असतं. php-fpm ते Apache ला परत देतो.
  6. Apache ते HTML browser ला पाठवतो. Browser ला PHP ची एकही line दिसत नाही.

index.html साठी रस्ता छोटा: Apache file स्वतः पाठवतो, php-fpm मध्ये येतच नाही.

index.php उघडल्यावर काय होतं Browser HTML, CSS, JS समजतो; PHP नाही 1. Browser port 80 वर /index.php मागतो. GET Apache (httpd) port 80 files देतो 2. Apache ला .php दिसतं, तो request php-fpm कडे देतो. .php php-fpm PHP code चालवतो 3. php-fpm PHP code चालवतो, तो MariaDB कडून data घेऊ शकतो. MariaDB data HTML Apache (httpd) 4. php-fpm output, म्हणजे साधं HTML, Apache ला परत देतो. HTML Browser 5. Apache HTML browser ला पाठवतो. Browser ला PHP कधीचदिसत नाही. 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.

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 चं नाव कसं शोधायचं? लक्षात ठेवायची गरज नाही.

  1. आधी guess करा. Package चं नाव बहुतेक software च्याच नावाचं असतं, उदा. php.
  2. Tab completion. sudo yum install mariadb type करून Tab दोनदा दाबा. Shell जुळणारे packages दाखवतो, जसे mariadb105 आणि mariadb105-server.
  3. Search. sudo yum search php (किंवा sudo yum search mariadb) चालवा, तो शब्द असलेले सगळे packages दिसतात.

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 शेवटी.

Install, start, मग restart 1. Install sudo yum install httpd -y sudo yum install mariadb105-server -y sudo yum install php -y httpd म्हणजे Apache चा package. -server: स्वतः database server, फक्त client नाही. 2. Start sudo service httpd start sudo service mariadb start sudo service php-fpm start प्रत्येक service start करा. Amazon Linux वर service काम systemctlकडे देतो. 3. सगळं install झाल्यावर restart sudo service php-fpm restart sudo service mariadb restart sudo service httpd restart Apache ने start होताना config वाचला, तेव्हा PHP ची config fileनव्हती. Restart केल्यावर तो load होतो.

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 कडे देतोय हे सिद्ध.

Browser showing the PHP information page: a blue header PHP Version 8.5.9 with the PHP logo, then a table with System (host name hidden), Build Date (hidden), Build System Linux, Build Provider Amazon Linux, Compiler gcc, Architecture x86_64 and Server API FPM/FastCGI.

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.)

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
  1. echo text print करतो.
  2. Pipe | तो tee कडे देतो.
  3. sudo tee index.html root म्हणून चालतो आणि 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.

Script मधून root ची file लिहिणं sudo echo "hi" > index.html Permission denied sudo फक्त echo ला root म्हणून चालवतो. Redirect तुमचा स्वतःचा shell ec2-user म्हणून करतो, आणि ec2-user /var/www/html मध्ये लिहू शकत नाही. echo "hi" | sudo tee index.html चालतं echo text print करतो; pipe | तो tee ला देतो, जो root म्हणून चालतो आणि file लिहितो. sudo tee -a file overwrite न करता शेवटी जोडतो.

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).

प्रत्येक भाग काय करतो:

  1. #!/bin/bash script कोणता program चालवणार ते सांगतो.
  2. sudo yum update -y install असलेले सगळे packages आधी update करतो. प्रत्येक automation script अशीच सुरू करा, म्हणजे current software वर बांधकाम होईल. (Ubuntu वर जोडी आहे sudo apt-get update, जो package list refresh करतो, मग sudo apt-get upgrade -y.)
  3. Section 7 मधलं one-line install.
  4. MariaDB आणि php-fpm आधी start होतात, आणि Apache शेवटी restart होतो, म्हणजे तो नेहमी PHP चा config load करतो. restart बंद असलेली service start पण करतो, म्हणून script परत चालवली तरी safe.
  5. cd /var/www/html web root मध्ये नेतो.
  6. sudo touch दोन रिकाम्या files बनवतो (tee त्या तशाही बनवेल).
  7. दोन tee lines 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.

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.

lamp.sh च्या आत #!/bin/bash bash ने चालवा. sudo yum update -y आधी update; प्रत्येक install ला -y. sudo yum install httpd mariadb105-server php -y तिन्ही packages एका line मध्ये. sudo service mariadb start sudo service php-fpm start sudo service httpd restart Database आणि php-fpm start, मग Apache शेवटी (re)start. cd /var/www/html Web root मध्ये जा. sudo touch index.html index.php दोन रिकाम्या files. echo "html page" | sudo tee index.html echo "<?php phpinfo(); ?>" | sudo tee index.php tee ने root म्हणून लिहा. ~/lamp.sh म्हणून save करा, /var/www/html मध्ये नाही. मग: chmod+x lamp.sh आणि ./lamp.sh

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 वर पूर्ण प्रक्रिया.

  1. नवीन Amazon Linux server launch करा (HTTP आणि SSH allow) आणि connect करा.
  2. nano lamp.sh, script paste करा, save करा.
  3. chmod +x lamp.sh, मग ./lamp.sh.
  4. 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

LAMP मधले तीन नेहमीचे problems Symptom httpd start होत नाही: "Job for httpd.service failed" कारण Port 80 आधीच घेतलेला, उदा. Nginx अजून चालू. Fix sudo service nginx stop   sudo service httpd start Symptom index.html चालतं, index.php रिकामं. कारण Typo: tag नंतर space नाही.   <?phpphpinfo(); ?> Fix View Source बघा, मग fix:   <?php phpinfo(); ?> Symptom PHP code text म्हणून दिसतो किंवा download होतो. कारण Apache .php files php-fpm कडे देत नाही. Fix sudo service php-fpm restart   sudo service httpd restart

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.

Terminal: httpd, mariadb105-server and php8.5 are already installed; Redirecting to /bin/systemctl start httpd.service, then in red Job for httpd.service failed because the control process exited with error code, see systemctl status httpd.service and journalctl -xeu httpd.service for details; then mariadb.service and php-fpm.service start.

Whiteboard: दुसऱ्या web server ने port 80 आधीच घेतल्यामुळे Apache start होत नाही; MariaDB आणि php-fpm व्यवस्थित start होतात.

कारण. Port 80 वर एकच program listen करू शकतो. या server वर आधीच्या lab मधला Nginx अजून चालू होता आणि त्याने port धरून ठेवला होता.

Fix, step by step:

  1. Details वाचा: sudo systemctl status httpd. Address already in use शोधा.
  2. Port 80 कोणाकडे आहे ते बघा: sudo ss -tlnp | grep :80. nginx दिसतो.
  3. दुसरा web server stop करा: sudo service nginx stop.
  4. Apache परत start करा: sudo service httpd start.
  5. पुढच्या boot ला Nginx ने port घेऊ नये म्हणून: sudo systemctl disable nginx.

10.2 index.php रिकामं page दाखवतं

Symptom. index.html चालतं, पण index.php रिकामं पांढरं page दाखवतं.

Fix, step by step:

  1. Page वर right-click, View Page Source.
  2. Source मध्ये PHP ची line जशीच्या तशी दिसते, उदा. <?phpphpinfo(); ?>. PHP code browser पर्यंत पोचला, म्हणजे तो कधी चाललाच नाही.
  3. Typo शोधा: <?php नंतर space नाही. PHP त्याचा opening tag <?php फक्त नंतर space किंवा नवीन line असेल तरच ओळखतो, म्हणून त्याने पूर्ण line साधा text समजली, आणि browser ने ती अनोळखी tag म्हणून लपवली.
  4. File fix करा: echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/index.php
  5. 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:

  1. php-fpm check करा: sudo service php-fpm status. Install नसेल तर sudo yum install php -y.
  2. आधी php-fpm, मग Apache restart करा, याच क्रमाने:

    sudo service php-fpm restart
    sudo service httpd restart
    
  3. 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 करो वा न करो, दर तासाला पैसे लागतात.

  1. EC2 console मध्ये वरचा region selector check करा. दुसऱ्या region मध्ये launch केलेला server या list मध्ये दिसत नाही; तो शोधायला region बदला.
  2. आता नको असलेले सगळे test servers select करा, Instance state > Stop instance.
  3. परत कधीच न लागणारे servers terminate करा (set-up ठेवायचं असेल तर आधी AMI बनवून).

12. पूर्ण flow एका page वर

  1. Static = सगळ्यांना त्याच files; dynamic = server-side code + database, प्रत्येक visitor चं page.
  2. LAMP = Linux, Apache, MySQL/MariaDB, PHP. LEMP मध्ये Apache च्या जागी Nginx.
  3. Browser PHP चालवू शकत नाही: Apache .php php-fpm कडे देतो, तो HTML परत देतो.
  4. sudo yum install httpd mariadb105-server php -y (-server = स्वतः database server).
  5. httpd, mariadb, php-fpm start करा; सगळं install झाल्यावर restart (आधी php-fpm, Apache शेवटी).
  6. /var/www/html मध्ये index.html आणि <?php phpinfo(); ?> ने test करा.
  7. ~/lamp.sh मध्ये automate करा: आधी update, सगळीकडे -y, echo ... | sudo tee ने files लिहा.
  8. chmod +x lamp.sh, ./lamp.sh, मग curl localhost आणि service ... status.
  9. Port 80 घेतलेला: Nginx stop करा. रिकामं page: View Source, typo fix करा. PHP text म्हणून: आधी php-fpm, मग httpd restart.
  10. न वापरलेले servers stop करा.

13. Hands-on lab: LAMP server बनवा आणि तपासा

हा lab का. Dynamic site static पेक्षा जास्त ठिकाणी बिघडते. हा lab stack install करतो, प्रत्येक service start करतो, आणि HTML व PHP वेगवेगळे तपासतो, म्हणजे काही fail झालं तर कोणता भाग जबाबदार ते कळतं.

  1. एका ओळीत तिन्ही 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 चं package mariadb105-server; php सोबत php-fpm येतो.
  2. 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 शी जोडला जातो.
  3. Boot ला start होतील असं करा
    • Command: sudo systemctl enable httpd mariadb php-fpm
    • काय दिसेल: तीन Created symlink ... ओळी.
    • Check करा: systemctl is-enabled httpd mariadb php-fpm तीन वेळा enabled print करतो.
    • का: start पुढच्या reboot पर्यंतच. enable शिवाय प्रत्येक stop आणि start नंतर site बंद.
  4. 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 ... > file fail होतो, कारण redirect ec2-user म्हणून चालतो. sudo tee मध्ये pipe केल्याने root म्हणून लिहिलं जातं.
  5. 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 करतो.
    • का: त्याऐवजी कच्चा <?php text परत आला, तर PHP चालू नाही: php-fpm start करा आणि Apache restart करा.
  6. दोन्ही 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 प्रमाणे.
  7. 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 करा.

14. Try at home

Try at home

Task 1: हाताने LAMP

  1. SSH आणि HTTP allow असलेला Amazon Linux server launch करा.
  2. httpd, mariadb105-server आणि php एकेक करून install करा, आणि तिन्ही services start करा.
  3. त्या restart करा (आधी php-fpm, शेवटी httpd).
  4. index.html आणि <?php phpinfo(); ?> असलेलं index.php बनवा, आणि दोन्ही browser मध्ये उघडा. phpinfo page वर Server API शोधा.

Task 2: एका script ने LAMP

  1. Fresh server launch करा. Home folder मध्ये section 8.2 मधली lamp.sh लिहा.
  2. chmod +x lamp.sh, ./lamp.sh चालवा, आणि curl http://localhost/index.php ने test करा.
  3. tee -a ने index.html मध्ये एक line जोडा, आणि curl ने check करा.
  4. मुद्दाम बिघडवा: <?php phpinfo(); ?> मधली space काढा, रिकामं page बघा, View Source वापरा, आणि fix करा.
  5. Bonus: Nginx install करून start करा, मग sudo service httpd restart करून बघा. Error वाचा, आणि fix करा.
  6. झाल्यावर दोन्ही servers stop किंवा terminate करा.

Recap

थोडक्यात

  1. Static site सगळ्यांना त्याच files पाठवते; dynamic site server-side code आणि database वापरून प्रत्येक visitor चं page बनवते.
  2. LAMP = Linux, Apache, MySQL किंवा MariaDB, PHP; LEMP मध्ये Apache ऐवजी Nginx ("engine-x"). MariaDB हा MySQL चा drop-in fork.
  3. Browsers PHP चालवू शकत नाहीत. Apache .php php-fpm कडे देतो, तो चालवून HTML परत देतो.
  4. Amazon Linux वर: sudo yum install httpd mariadb105-server php -y; -server फक्त client नाही तर database server install करतो. नावं guess, Tab किंवा yum search ने शोधा.
  5. sudo service ... start ने services start करा, आणि सगळं install झाल्यावर restart करा म्हणजे Apache PHP चा config load करेल.
  6. /var/www/html मधलं phpinfo() ही baseline test; Server API FPM/FastCGI म्हणजे PHP चालतंय.
  7. ~/lamp.sh मध्ये automate करा: आधी yum update -y, सगळीकडे -y, echo ... | sudo tee (sudo नंतरचा > redirect तुमच्या नावाने चालतो), जोडायला tee -a; chmod +x, मग ./lamp.sh.
  8. Port 80 घेतलेला: दुसरा server stop करा. रिकामं page: typos साठी View Source. PHP text म्हणून: आधी php-fpm, मग httpd restart. Ubuntu वर: a2enmod proxy_fcgi setenvif आणि a2enconf php8.x-fpm.

सराव Tasks

या scenario बद्दल

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 करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. 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 करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं बदलानंतर service restart करा

का: Config बदल service restart/reload नंतरच लागू होतात.

काय करायचं: nginx service restart करा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं Service चालू आहे का ते पाहा

का: Site बंद असेल तर आधी web server चालू आहे का ते पाहा.

काय करायचं: httpd service चं status दाखवा.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. System files/users बदलत असाल तर sudo वापरा. Check answer दाबा.

सोपं MariaDB मध्ये login करा

का: mysql client ने database server वर SQL चालवता येतं.

काय करायचं: MariaDB client root user म्हणून उघडा व password विचारू द्या.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. 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).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. 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).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. Check answer दाबा. Query table च्या practice copy वर चालते.

मध्यम Service आत्ता व boot ला सुरू करा

का: enable reboot नंतर सुरू करतो; --now आत्ताच सुरू करतो.

काय करायचं: nginx service enable करा व लगेच सुरू करा, एका command ने.

कसं करायचं:
  1. हे काम करणारा Linux command शोधा.
  2. Task ला लागणारे options (उदा. -r, -h) जोडा.
  3. File नावं, folders किंवा users योग्य क्रमाने लिहा.
  4. 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).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. 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).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. 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).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. 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).

कसं करायचं:
  1. Task कोणत्या table बद्दल आहे ते पाहा (box वरची table list).
  2. SQL statement step by step लिहा: काय, कुठून, कोणते rows.
  3. Statement ; ने संपवा.
  4. Check answer दाबा. Query table च्या practice copy वर चालते.

झटपट उजळणी cards

हा lesson दोन मिनिटांत revise करा. Cards phone वर save करा किंवा PNG download करा. प्रत्येक card वरचा QR त्याचा lesson उघडतो.

तुलना card: LAMP vs LEMP. LAMP: Linux + Apache + MySQL/MariaDB + PHP. LEMP: Linux + Nginx ('engine-x') + MySQL/MariaDB + PHP.
तुलना: LAMP vs LEMP · PNG download करा
उजळणी card: LAMP stack म्हणजे काय?. Dynamic site ला web server, language आणि database एकत्र लागतात. LAMP = Linux, Apache, MariaDB/MySQL, PHP. LEMP मध्ये Apache ऐवजी Nginx (Engine-x). Amazon Linux वर तिन्ही एका line मध्ये install, मग start. एक line:
उजळणी card: LAMP stack म्हणजे काय? · PNG download करा
उजळणी card: Browser PHP का चालवू शकत नाही. Browser मध्ये PHP code म्हणजे passwords आणि logic उघडे. PHP server वर चालतं. Apache .php php-fpm ला देतो, तो साधं HTML परत देतो. Apache सोबत php-fpm start करा. View Page Source मध्ये HTML दिसतं, PHP कधीच नाही.  browser मध्ये असं येतं:
उजळणी card: Browser PHP का चालवू शकत नाही · PNG download करा
उजळणी card: phpinfo() ने PHP test. App बनवण्याआधी PHP चालतं हे सिद्ध करा. phpinfo() PHP version आणि loaded modules चं page दाखवतं. info.php बनवा, उघडा, मग delete करा (ते server details उघड करतं). File /var/www/html/info.php:
उजळणी card: phpinfo() ने PHP test · PNG download करा
उजळणी card: lamp.sh ने setup automate. प्रत्येक server वर तेच install type करणं slow, steps विसरतात. Shell script म्हणजे वरून खाली चालणाऱ्या commands ची file. -y yes म्हणतं. लिहा, executable करा, चालवा. lamp.sh मध्ये:
उजळणी card: lamp.sh ने setup automate · PNG download करा
मुलाखत card: LAMP चा प्रत्येक भाग काय करतो?. Linux सगळं चालवतो, Apache pages देतो, MariaDB data ठेवतो, PHP pages बनवतं. प्रत्येक layer बदलता येतो, उदा. Apache ऐवजी Nginx (LEMP). Login page: Apache › PHP › MariaDB मधून SELECT › HTML.
मुलाखत card: LAMP चा प्रत्येक भाग काय करतो? · PNG download करा
मुलाखत card: Browser मध्ये PHP code text म्हणून दिसतो. का?. PHP किंवा php-fpm install नाही किंवा web server शी जोडलेला नाही. त्याशिवाय server file चे contents परत करतो. Install करा, मग दोन्ही restart:
मुलाखत card: Browser मध्ये PHP code text म्हणून दिसतो. का? · PNG download करा
मुलाखत card: Apache "Address already in use" ने fail. का?. दुसरा program, बहुतेक Nginx, आधीच port 80 वर ऐकतो. एकाच program कडे port असू शकतो. शोधा आणि थांबवा:
मुलाखत card: Apache "Address already in use" ने fail. का? · PNG download करा
मुलाखत card: Amazon Linux MySQL साठी MariaDB का वापरतं?. MariaDB हा MySQL चा open-source fork, त्याच्या repos मध्ये असतो. तेच SQL आणि commands, म्हणून apps न बदलता चालतात. Package:
मुलाखत card: Amazon Linux MySQL साठी MariaDB का वापरतं? · PNG download करा

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