Ravindra BagaleCourses & study guides English

Ubuntu (EC2) वर LAMP आणि LEMP Stack कसा Install करायचा

मागच्या chapter मध्ये आपण Amazon Linux वर LAMP बनवला. आता तेच काम Ubuntu वर करू, जिथे package names, PHP service चं नाव आणि PHP चं set-up वेगळं आहे. आपण Ubuntu साठी lamp.sh लिहू, Apache .php files download करतो ते fix करू, तीच website Apache वरून Nginx वर (LEMP) हलवू, आणि Nginx ला PHP शी जोडू. वाटेत error messages वाचायला शिकू, apt lock error हाताळू, आणि MySQL database shell मध्ये पहिली पावलं टाकू.

या class मध्ये काय शिकणार

  • Dynamic website ला database का लागतो, आणि LAMP साठी Ubuntu Amazon Linux पेक्षा वेगळं कसं
  • Ubuntu चा lamp.sh: apt-get, apache2 mysql-server php php-fpm, version नावात असलेली php8.x-fpm service, Ubuntu चं default index.html काढणं
  • Apache .php download करतो ते fix: a2enmod proxy_fcgi setenvif आणि a2enconf php8.x-fpm
  • /var/www/html तसंच ठेवून Apache वरून Nginx वर जाणं; Disable cache ने browser cache बंद करणं
  • Nginx चा PHP location block, बरोबर socket version, nginx -t आणि reload
  • चार नेहमीचे errors वाचणं, आणि "status च्या खालच्या lines" ची सवय
  • apt lock error, आणि root च्या file वर sudo chmod
  • MySQL मधली पहिली पावलं: sudo mysql, ALTER USER, mysql -u root -p, न दिसणारा password, आणि खऱ्या setups मध्ये database वेगळ्या server वर का

1. का: dynamic sites ना database लागतो

Classroom line

Yesterday we did LAMP/LEMP on Amazon Linux; today we do the same on Ubuntu.

Static site फक्त files दाखवते. Dynamic site तुमच्याकडून data घेते आणि तो ठेवते:

  1. Sign-up form तुमचं नाव, email आणि password save करतो.
  2. Login form ते save केलेल्याशी जुळवून बघतो.
  3. Upload form तुमच्या photo किंवा document ची माहिती ठेवतो.

हे सगळं MySQL सारख्या database मध्ये save होतं. PHP code database शी SQL नावाच्या language मध्ये बोलतो, जी आपण पुढच्या chapters मध्ये शिकू. या chapter मध्ये आपण पूर्ण stack install करतो, म्हणजे त्यासाठी तयार राहील.

Classroom line

Until we learn SQL, PHP and MySQL won't talk.

2. Ubuntu वर काय बदलतं

Classroom line

Now we do the same work in Ubuntu.

Stack तोच: Linux, web server, database, PHP. त्याच्या आजूबाजूची नावं बदलतात:

  1. Package manager: yum ऐवजी apt-get.
  2. Apache म्हणजे apache2 package (httpd नाही), आणि त्याची service पण apache2.
  3. Database: Ubuntu mysql-server देतं (स्वतः MySQL). त्याची service mysql.
  4. PHP: php आणि php-fpm install करा. Ubuntu त्याचं स्वतःचं default PHP version install करतं; तुम्ही version type करत नाही.
  5. php-fpm service च्या नावात version असतं, उदा. php8.3-fpm. तुमचं version php -v ने (ते PHP 8.3.x ... दाखवतं) किंवा ls /run/php/ ने (ते php8.3-fpm.sock दाखवतं) शोधा.
  6. Ubuntu चा Apache /var/www/html मध्ये default index.html ठेवतो.
  7. तुम्ही चालू करेपर्यंत Apache PHP php-fpm कडे देत नाही (section 5).
तोच LAMP stack, दोन distributions काम Amazon Linux → Ubuntu Package manager yum → apt-get Web server package httpd → apache2 Database package mariadb105-server →mysql-server PHP packages php → php php-fpm PHP service चं नाव php-fpm → php8.x-fpm Web root मधलं default page नाही → index.html Apache PHP php-fpm कडे देतो आपोआप → a2enmod + a2enconf Ubuntu PHP service ला version सह नाव देतो: php -v किंवा ls/run/php/ ने शोधा.

Figure 1. Amazon Linux आणि Ubuntu वर तोच LAMP stack: वेगळा package manager, package names, PHP service चं नाव आणि PHP set-up.

3. कसं: Ubuntu ची lamp.sh script

तुमच्या IP वरून SSH (22) आणि HTTP (80) allow असलेला Ubuntu EC2 server launch करा, आणि ubuntu म्हणून connect करा.

Step 1. Home folder मध्ये नवीन file उघडा. इथे sudo वापरू नका; script तुमची असली पाहिजे:

cd ~
nano lamp.sh

Step 2. Script type करा:

#!/bin/bash
sudo apt-get update
sudo apt-get install apache2 mysql-server php php-fpm -y
PHPV=$(php -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')
sudo service apache2 start
sudo service mysql start
sudo service php$PHPV-fpm start
cd /var/www/html
sudo rm -f index.html
sudo touch index.html index.php
echo "html page" | sudo tee index.html
echo "<?php phpinfo(); ?>" | sudo tee index.php

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

  1. sudo apt-get update आधी Ubuntu ची package list refresh करतो.
  2. एक line Apache, MySQL, PHP आणि php-fpm install करते, -y सह म्हणजे script कधी प्रश्नावर थांबत नाही.
  3. PHPV=... PHP ला त्याचं स्वतःचं version विचारतं (उदा. 8.3) आणि variable मध्ये ठेवतं. म्हणून तुमच्या server वर php$PHPV-fpm चं php8.3-fpm होतं, आणि Ubuntu कुठलंही version install करो, script चालते. (तुम्ही स्वतः version type केलं, उदा. php8.5-fpm, आणि तुमच्या Ubuntu मध्ये ते नसेल, तर Unable to locate package किंवा Unit php8.5-fpm.service not found येतं.)
  4. तीन service ... start lines Apache, MySQL आणि php-fpm start करतात.
  5. sudo rm -f index.html Ubuntu चं default Apache page काढतो, म्हणजे तुम्हाला तुमचं page दिसेल.
  6. tee lines दोन्ही test pages root म्हणून लिहितात (मागच्या chapter सारखंच).

अनेक lines ची file लिहिणं. मोठ्या page साठी heredoc वापरा: EOF line पर्यंतचं सगळं file मध्ये जातं.

cat <<'EOF' | sudo tee index.php
<?php
phpinfo();
?>
EOF

Step 3. Save करा, executable करा आणि चालवा:

chmod +x lamp.sh
./lamp.sh

4. चालवताना भेटू शकणारे दोन errors

4.1 chmod म्हणतो "Operation not permitted"

File तुम्ही sudo nano lamp.sh ने बनवली असेल, तर ती root ची असते. मग ubuntu म्हणून chmod +x lamp.sh (किंवा chmod u+x lamp.sh) Operation not permitted ने fail होतं: permissions फक्त owner किंवा root बदलू शकतो.

  1. Owner बघा: ls -l lamp.sh root root दाखवतो.
  2. sudo वापरा: sudo chmod +x lamp.sh.
  3. पुढच्या वेळी चांगलं: scripts ~ मध्ये sudo शिवाय बनवा.

4.2 apt म्हणतो "Could not get lock"

Symptom. E: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 1234 (apt-get).

कारण. दुसरं install अजून चालू आहे. नवीन Ubuntu server वर boot नंतरच्या पहिल्या काही मिनिटांत automatic updates चालू असतात, किंवा तुमचं आधीचं apt-get अजून संपलेलं नसतं.

Classroom line

Lock error means the earlier install is still running.

Fix:

  1. काही मिनिटं थांबा आणि command परत चालवा.
  2. काय चालू आहे ते बघा: ps aux | grep -i apt.
  3. खूप वेळ थांबूनही अडकलं असेल, तर server reboot करा: sudo reboot.
  4. apt चालू असताना lock files कधीच delete करू नका. एकाच वेळी दोन installs लिहू लागले तर package database बिघडू शकतो.

5. Ubuntu Apache index.php download करतो: PHP hand-off चालू करा

Step 1. http://PUBLIC_IP/index.html उघडा. html page दिसतं.

Step 2. http://PUBLIC_IP/index.php उघडा. Ubuntu वर browser PHP page दाखवण्याऐवजी file download करतो.

का? php-fpm install आणि चालू आहे, पण Ubuntu च्या Apache कडे .php files त्याच्याकडे पाठवणारा rule अजून नाही. म्हणून Apache file जशीच्या तशी पाठवतो.

Step 3. Hand-off चालू करा (php -v मधलं तुमचं version वापरा):

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.3-fpm
sudo service apache2 restart
  1. a2enmod Apache modules चालू करतो: proxy_fcgi मुळे Apache php-fpm शी बोलू शकतो, setenvif त्याच्या config ला लागतो.
  2. a2enconf .php php-fpm socket कडे पाठवणारी config file php8.3-fpm.conf चालू करतो.
  3. Restart दोन्ही load करतो.

Step 4. http://PUBLIC_IP/index.php refresh करा. PHP information page दिसतं, Server API: FPM/FastCGI आणि Build Provider: Ubuntu सह.

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

Whiteboard: Ubuntu वर PHP: Build Provider Ubuntu आणि Server API FPM/FastCGI, म्हणजे Apache आता PHP php-fpm कडे देतोय.

Ubuntu Apache index.php download करतो: PHPhand-off चालू करा आधी Apache कडे .php साठी rule नाही, म्हणून तो file जशीच्या तशी पाठवतो.Browser ती download करतो. Fix (फक्त Ubuntu) sudo a2enmod proxy_fcgi setenvif sudo a2enconf php8.x-fpm sudo service apache2 restart तुमचं version वापरा: php -v नंतर .php php-fpm कडे जातं, तो ते चालवून HTML परत देतो. a2enmod Apache modules चालू करतो; a2enconf php-fpm ची configfile चालू करतो.

Figure 2. a2enmod proxy_fcgi setenvif आणि a2enconf php8.x-fpm चालवून apache2 restart करेपर्यंत Ubuntu Apache .php download करतो.

Final lamp.sh. हा fix script मध्ये start lines नंतर जोडा, म्हणजे नवीन server पहिल्याच वेळी चालेल:

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php$PHPV-fpm
sudo service apache2 restart

Amazon Linux वर

या a2en... commands फक्त Ubuntu वर असतात. Amazon Linux वर PHP config आधीच /etc/httpd/conf.d/ मध्ये असतो, म्हणून फक्त php-fpm आणि मग httpd restart करायचं (मागचा chapter).

6. Error वाचा: चार messages, आणि खालच्या lines

Errors भीतीदायक दिसतात, पण प्रत्येक error काय बिघडलं ते सांगतो. काहीही करून बघण्याआधी message वाचा.

  1. command not found: command मध्ये typo, किंवा program install नाही. उदा. ngnix -t. Spelling बघा, किंवा package install करा.
  2. Operation not permitted (किंवा Permission denied): sudo लागतो, किंवा तुम्ही file चे owner नाही. उदा. root च्या file वर chmod +x lamp.sh (section 4.1).
  3. Unit ... not found: ती service install नाही, किंवा तिचं नाव चुकलं. उदा. Ubuntu वर sudo service php-fpm start केलं की Unit php-fpm.service not found येतं, कारण नाव php8.3-fpm आहे.
  4. Job for ... failed: service install आहे पण start होताना crash झाली. कारण तिच्या status मध्ये असतं.
Error वाचा: नेहमी भेटणारे चार messages command not found Typo, किंवा program install नाही. Spelling बघा; install करा. Operation not permitted Root लागतो, किंवा तुम्ही ownerनाही. sudo लावा; ls -l बघा. Unit ... not found ती service install नाही, किंवानाव चुकलं. ls /run/php/, नाव तपासा. Job for ... failed Service start होताना crash झाली. Status च्या खालच्या linesवाचा. Message · बहुतेक अर्थ · हे करा

Figure 3. चार नेहमीचे messages: command not found, operation not permitted, unit not found, job failed; प्रत्येकाचा बहुतेक अर्थ आणि काय करायचं.

Status ची सवय. Service fail झाली की त्याच service चा status बघा:

sudo service apache2 status

Classroom line

Check the status of whichever software stopped.

  1. वर काय झालं ते दिसतं: Active: failed.
  2. खालच्या lines का ते सांगतात. दोन नेहमीची:
    • Address already in use ... could not bind to address [::]:80: port 80 आधीच दुसऱ्या web server कडे आहे. तो stop करा.
    • unknown directive किंवा Invalid command: config file मध्ये typo. Line number message मध्ये असतो.
  3. कारण fix करा, मग service परत start करा.

Classroom line

Someone else is using the port.

Status: वर काय, खाली का $ sudo service apache2 status x apache2.service - The Apache HTTP Server Active: failed (Result: exit-code) ... apachectl: (98)Address already in use: AH00072: make_sock: could not bind to address[::]:80 apachectl: no listening sockets available, shuttingdown वर failed: काहीतरी बिघडलं. खालच्या lines खरं कारण: port 80 घेतलेला. कारण fix करा (दुसरा server stop करा किंवा typo fix करा), मगservice परत start करा.

Figure 4. Fail झालेल्या service चा status: वर failed दिसतं, खालच्या lines खरं कारण देतात, इथे port 80 आधीच वापरात.

7. LEMP: तीच website Nginx वर हलवा

का. बऱ्याच companies Apache ऐवजी Nginx वापरतात. Server Nginx वर हलवून त्याच website files ठेवता येतात.

Step 1. Port 80 मोकळा करा. तो एकाच web server कडे राहू शकतो:

sudo service apache2 stop
sudo systemctl disable apache2

(disable मुळे पुढच्या boot ला Apache परत port घेत नाही.)

Step 2. Nginx install करून start करा:

sudo apt-get install nginx -y
sudo service nginx start

Step 3. Web root तपासा. /etc/nginx/sites-available/default उघडून root line शोधा. Ubuntu वर ती आधीच root /var/www/html; असते, Apache वापरायचा तोच folder. (तुमची दुसरीकडे point करत असेल, तर /var/www/html करा.)

Step 4. Test करून reload करा:

sudo nginx -t
sudo service nginx reload

Step 5. http://PUBLIC_IP/index.html उघडा. तेच html page, आता Nginx देतोय.

Apache वरून Nginx वर, त्याच files Browser port 80 Apache: चालू owns port 80 1. Port 80 Apache कडे, तो /var/www/html देतो. Apache: बंद service apache2 stop 2. sudo service apache2 stop: port 80 मोकळा. Nginx: चालू owns port 80 3. Nginx install करून start करा; त्याचा root पण/var/www/html. 4. sudo nginx -t, sudo service nginx reload: त्याच files, नवीनserver. /var/www/html index.html, index.php

Figure 5. Animation: port 80 मोकळा करायला Apache stop करा, त्याच /var/www/html सह Nginx start करा, test करून reload: त्याच files, नवीन server.

नवीन servers साठी lemp.sh. Script copy करून web server बदला:

cp lamp.sh lemp.sh
nano lemp.sh

Install line sudo apt-get install nginx mysql-server php-fpm -y करा, start line मध्ये apache2 चं nginx करा, आणि तीन a2en.../apache2 restart lines काढून टाका (त्या फक्त Apache च्या). मग section 9 मधला Nginx PHP block जोडा.

अजून जुनं page दिसतंय? Browser cache

Server बदलल्यावर किंवा page edit केल्यावर browser आधी save केलेली जुनी copy दाखवत राहू शकतो. काम करताना cache बंद ठेवा:

  1. Page वर right-click, Inspect.
  2. Network tab उघडा.
  3. Disable cache ला tick करा.
  4. Developer tools उघडेच ठेवून refresh करा.

Classroom line

Right-click, Inspect, Network, tick Disable cache.

Firefox developer tools with the Network tab selected; the toolbar shows filter buttons All, HTML, CSS, JS, XHR, Fonts, Images, Media, WS, Other and a ticked Disable Cache checkbox next to No Throttling; below, Perform a request or Reload the page to see detailed information about network activity.

Whiteboard: Developer tools, Network tab: Disable cache ला tick करा, tools उघडेच ठेवा, आणि refresh करा.

8. Nginx पण .php download का करतो

Nginx वर http://PUBLIC_IP/index.php उघडा: browser ते परत download करतो. Ubuntu च्या Apache सारखाच Nginx ला पण .php files php-fpm कडे पाठवणारा rule लागतो.

Classroom line

If the URL ends in .php, hand that page to php-fpm.

9. कसं: Nginx चा PHP location block

Step 1. तुमचा php-fpm socket शोधा:

ls /run/php/

php8.3-fpm.sock सारखं काहीतरी दिसतं.

Step 2. Site file edit करा (खरी file sites-available मध्ये आहे; sites-enabled/default फक्त तिचा link आहे):

sudo nano /etc/nginx/sites-available/default

Step 3. index line मध्ये index.php जोडा:

index index.php index.html index.htm index.nginx-debian.html;

Step 4. खाली # pass PHP scripts to FastCGI server खालचा commented block शोधा. location line, include line, php-fpm ची fastcgi_pass line आणि शेवटचा } यांच्या पुढचा # काढा. 127.0.0.1:9000 ची line commented राहू द्या. fastcgi_pass मध्ये तुमचा socket लिहा:

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
  1. location ~ \.php$ .php ने संपणाऱ्या प्रत्येक URL ला match करतो. (~ म्हणजे regular expression, \. म्हणजे खरा dot, $ म्हणजे शेवट.)
  2. include snippets/fastcgi-php.conf; Ubuntu च्या नेहमीच्या PHP settings जोडतो.
  3. fastcgi_pass म्हणजे php-fpm जिथे listen करतो ती जागा. इथे चुकीचं version (उदा. तुमच्याकडे 8.3 असताना php8.5-fpm.sock) असेल तर 502 Bad Gateway येतो.

Step 5. Config test करा, मग reload करा:

sudo nginx -t
sudo service nginx reload

nginx -t ने syntax is ok आणि test is successful म्हणायला हवं. Error दाखवला तर तो file आणि line सांगतो; reload करण्याआधी ते fix करा. Reload केल्यावर Nginx नवीन config वाचत असताना site चालूच राहते.

Step 6. http://PUBLIC_IP/index.php refresh करा (Disable cache tick करून). PHP information page दिसतं, आता Nginx मधून: तुमचा LEMP stack चालतोय.

Nginx: .php php-fpm कडे द्या server { root /var/www/html; Apache सारखाच web root. index index.php index.html; index line मध्ये index.php जोडा. location ~ \.php$ { .php ने संपणाऱ्या URLs ला match. include snippets/fastcgi-php.conf; नेहमीच्या PHP settings.     fastcgi_pass       unix:/run/php/php8.x-fpm.sock; तुमच्या version चा socket: ls /run/php/   } } /etc/nginx/sites-available/default edit करा, मग: sudo nginx -t आणिsudo service nginx reload.

Figure 6. PHP साठी Nginx server block: तोच web root, index line मध्ये index.php, तुमच्या PHP version च्या socket सह location ~ \.php$, मग nginx -t आणि reload.

10. MySQL मधली पहिली पावलं

SQL म्हणजे काय? SQL (Structured Query Language) ही relational databases सोबत काम करायची language: tables बनवणं, rows save करणं, त्या परत वाचणं. MySQL आणि MariaDB दोघंही ती वापरतात. नेहमीचे SQL databases:

  1. Open source: MySQL, MariaDB, PostgreSQL.
  2. Commercial: Oracle Database (banks सारख्या मोठ्या enterprises मध्ये जास्त), Microsoft SQL Server, IBM Db2.
  3. AWS वर managed: Amazon Aurora (MySQL आणि PostgreSQL compatible) आणि Amazon RDS.

MySQL हा सगळ्यात जास्त वापरल्या जाणाऱ्यांपैकी एक.

Step 1. Database shell उघडा. Ubuntu वर सुरुवातीला MySQL चा root user Linux च्या root account मधून login होतो, म्हणून sudo वापरा:

sudo mysql

Prompt mysql> होतो. तुम्ही आता Linux मध्ये नाही, database च्या आत आहात.

Classroom line

Linux commands like ls, cd don't work in the DB shell.

Step 2. Database admin ला password द्या:

ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'YOUR_STRONG_PASSWORD';
  1. 'root' म्हणजे database चा administrator (MySQL user, Linux चा root नाही).
  2. 'localhost' म्हणजे हा login फक्त त्याच server वरून allow.
  3. IDENTIFIED WITH caching_sha2_password BY root ला या password ने नेहमीच्या password login वर नेतो.
  4. दुसरीकडे कुठेही न वापरलेला लांब, unique password वापरा, आणि quotes आणि शेवटचा ; ठेवा.

Step 3. Shell मधून बाहेर पडा:

exit;

Step 4. आता password ने परत login करा:

mysql -u root -p

-u root म्हणजे user, आणि -p मुळे MySQL password विचारतो. Password कधीच command line वर -p नंतर type करू नका: तो तुमच्या shell history मध्ये save होईल.

Step 5. Enter password: आल्यावर password type करा. Type करताना काहीच दिसत नाही, stars पण नाही. ते normal आहे; अडकलं नाहीये. Enter दाबा, आणि तुम्ही परत mysql> वर.

Classroom line

The cursor doesn't move while typing the password.

MySQL shell मधली पहिली पावलं $ sudo mysql mysql> 1. sudo mysql database shell उघडतो. इथे ls, cd चालत नाहीत. mysql> ALTER USER 'root'@'localhost' IDENTIFIEDWITH caching_sha2_password BY '....'; 2. Database admin (root) ला strong password द्या. mysql> exit; $ mysql -u root -p 3. exit; ने बाहेर पडा आणि password ने परत login करा. Enter password: 4. Type करताना password दिसत नाही. Type करून Enter दाबा.

Figure 7. Animation: sudo mysql database shell उघडतो, ALTER USER root password सेट करतो, exit; ने बाहेर, mysql -u root -p ने परत login, आणि type करताना password दिसत नाही.

Ravindra Bagale's Tip

Amazon Linux वर MariaDB सोबत याच steps अशा: sudo mariadb, मग ALTER USER 'root'@'localhost' IDENTIFIED BY 'YOUR_STRONG_PASSWORD';, exit; आणि mysql -u root -p.

11. Web server आणि database वेगळ्या servers वर

Practice मध्ये आपण सगळं एकाच server वर चालवतो. खऱ्या websites बहुतेक database त्याच्या स्वतःच्या server वर (किंवा Amazon RDS वर) ठेवतात, जो फक्त web server कडून connections accept करतो.

का? Attacker web server मध्ये घुसला तरी data त्याच machine वर नसतो. Database server ला स्वतःचा size, backups आणि security rules पण मिळतात. हे आपण पुढे Amazon RDS सोबत बनवू.

Practice विरुद्ध खरे setups Practice: एक server Apache किंवा Nginx + PHP MySQL त्याच server वर Web server फोडला की data पर्यंत पोच. खरं: वेगळे servers Web server Apache/Nginx + PHP DB server MySQL, किंवा Amazon RDS Database फक्त web server ला accept करतो.

Figure 8. Practice: web server, PHP आणि MySQL एकाच server वर. खरे setups: database वेगळ्या server वर, जो फक्त web server ला accept करतो.

12. Clean up: instance stop करा

Practice झाल्यावर EC2 console मध्ये Instance state > Stop instance करा (आधी region तपासा). Stop केलेल्या instance ला running time चा charge लागत नाही; नको असलेले test servers terminate करा.

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

  1. Ubuntu LAMP: sudo apt-get update, मग sudo apt-get install apache2 mysql-server php php-fpm -y.
  2. apache2, mysql आणि php8.x-fpm start करा (version php -v किंवा ls /run/php/ ने शोधा); Ubuntu चं default index.html काढा.
  3. Apache वर .php download: a2enmod proxy_fcgi setenvif, a2enconf php8.x-fpm, apache2 restart.
  4. Root ची script: sudo chmod +x. apt lock: थांबा, lock files कधीच delete करू नका.
  5. Message वाचा; fail झालेल्या service साठी status च्या खालच्या lines वाचा.
  6. LEMP: apache2 stop आणि disable, nginx install आणि start, root /var/www/html तसाच.
  7. Nginx PHP: index line मध्ये index.php, तुमच्या socket सह location ~ \.php$, nginx -t, reload.
  8. जुनं page? DevTools, Network, Disable cache.
  9. MySQL: sudo mysql, ALTER USER ... ;, exit;, mysql -u root -p (password दिसत नाही).
  10. खरे setups database वेगळ्या server वर ठेवतात. Practice नंतर instances stop करा.

14. Try at home

Try at home

Task 1: Ubuntu वर LAMP

  1. SSH आणि HTTP allow असलेला Ubuntu server launch करा.
  2. Section 3 मधली lamp.sh home folder मध्ये लिहा, chmod +x करा, आणि चालवा.
  3. index.php उघडा. Download होत असेल तर a2enmod/a2enconf lines जोडा आणि apache2 restart करा.
  4. मुद्दाम sudo service php-fpm start चालवा. Unit ... not found message वाचा आणि बरोबर service start करा.

Task 2: LEMP वर जा

  1. apache2 stop आणि disable करा, मग Nginx install करून start करा.
  2. तुमच्या socket version सह PHP location block जोडा, sudo nginx -t चालवा, आणि reload करा.
  3. Disable cache ला tick करून Nginx मधून index.php उघडा.
  4. Nginx चालू असताना apache2 परत start करा, आणि status च्या खालच्या lines वाचा.

Task 3: MySQL

  1. sudo mysql, ALTER USER ने strong root password सेट करा, आणि exit;.
  2. mysql -u root -p ने login करा.
  3. झाल्यावर instance stop करा.

Recap

थोडक्यात

  1. Dynamic sites sign-ups, logins आणि uploads database मध्ये save करतात; PHP त्याच्याशी SQL मध्ये बोलतो.
  2. Ubuntu वर: apt-get, apache2, mysql-server, php php-fpm; PHP service च्या नावात version (php8.x-fpm), php -v किंवा ls /run/php/ ने शोधा.
  3. a2enmod proxy_fcgi setenvif + a2enconf php8.x-fpm + restart करेपर्यंत Ubuntu चा Apache .php download करतो.
  4. Errors: command not found, operation not permitted, unit not found, job failed. Fail झालेल्या service साठी status च्या खालच्या lines कारण देतात.
  5. Root च्या file ला sudo chmod लागतो; apt lock म्हणजे दुसरं install चालू आहे, म्हणून थांबा.
  6. Nginx वर जा: apache2 stop, nginx install, तोच /var/www/html; तुमच्या socket सह location ~ \.php$ block जोडा, nginx -t, reload.
  7. Browser जुनं page दाखवत असेल तर DevTools मध्ये Disable cache.
  8. MySQL: sudo mysql, ALTER USER 'root'@'localhost' ..., mysql -u root -p; password दिसत नाही. खरे setups database वेगळ्या server वर ठेवतात.

सराव Tasks

या scenario बद्दल

Konkan Cashews हा रत्नागिरी मधला अन्न निर्यात व्यवसाय आहे. Prakash Sawant त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे INR मध्ये मोजले जातात आणि AWS resources ap-south-1 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: Amazon Linux vs Ubuntu. Amazon Linux: EC2 साठी AWS चं स्वतःचं Linux. Ubuntu: Canonical चं लोकप्रिय Linux.
तुलना: Amazon Linux vs Ubuntu · PNG download करा
उजळणी card: Ubuntu वर Apache .php download करतो, fix. index.php उघडल्यावर run होण्याऐवजी file download होते. Apache ने .php files php-fpm ला द्यायला हव्यात. दोन modules आणि एक config ते करतात. Enable करा, मग Apache restart आणि browser cache clear. Commands (PHP 8.3):
उजळणी card: Ubuntu वर Apache .php download करतो, fix · PNG download करा
उजळणी card: Nginx PHP location block. Nginx स्वतः PHP चालवत नाही; .php text दिसतो किंवा download होतो. location block .php ला php-fpm socket कडे पाठवतो. Socket च्या नावात PHP version असतं. Block uncomment करा, version बरोबर करा, nginx -t, reload. Socket line:
उजळणी card: Nginx PHP location block · PNG download करा
उजळणी card: apt lock error. Boot नंतर लगेच apt install "Could not get lock" ने fail होतं. Ubuntu आधी automatic updates चालवतं. एका वेळी एकच apt चालू शकतो. काही minutes थांबा आणि परत try करा. Lock files delete करू नका. Error:
उजळणी card: apt lock error · PNG download करा
उजळणी card: Ubuntu वर MySQL च्या पहिल्या steps. App ला MySQL मध्ये login करायला password लागतो. Ubuntu वर root sudo mysql ने login (password नाही). ALTER USER password set करतो. Set करा, exit, मग -p ने login. Typing दिसत नाही; हे normal आहे. SQL:
उजळणी card: Ubuntu वर MySQL च्या पहिल्या steps · PNG download करा
मुलाखत card: .php page run होण्याऐवजी download होतं. काय चुकलंय?. Web server .php php-fpm ला देत नाही. Handler शिवाय Apache किंवा Nginx file जशीच्या तशी पाठवतो. Apache: a2enmod proxy_fcgi + a2enconf php8.3-fpm. Nginx: php location block.
मुलाखत card: .php page run होण्याऐवजी download होतं. काय चुकलंय? · PNG download करा
मुलाखत card: Amazon Linux ऐवजी Ubuntu वर LAMP करताना काय बदलतं?. yum ऐवजी apt-get, httpd ऐवजी apache2, आणि version असलेली php8.x-fpm service. Distribution नुसार package आणि service names वेगळी. Ubuntu:
मुलाखत card: Amazon Linux ऐवजी Ubuntu वर LAMP करताना काय बदलतं? · PNG download करा
मुलाखत card: Service start होत नाही. तुमची पहिली सवय काय?. Status output च्या शेवटच्या lines वाचा, मग journal. खरा error बहुतेक खालच्या lines मध्ये. Commands:
मुलाखत card: Service start होत नाही. तुमची पहिली सवय काय? · PNG download करा
मुलाखत card: खऱ्या setups मध्ये MySQL वेगळ्या server वर का?. Security, वेगळं scaling आणि web server तुटला तरी data सुरक्षित. Hack झालेला web server database थेट उघडा करू नये. Web EC2 वर, data private subnet मधल्या RDS वर.
मुलाखत card: खऱ्या setups मध्ये MySQL वेगळ्या server वर का? · PNG download करा

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