Ravindra BagaleCourses & study guides English

GitHub Website AWS EC2 वर Nginx ने कशी Host करायची

खरे projects nano मध्ये type करत नाहीत: developers त्यांचा code GitHub वर ठेवतात, आणि cloud engineers म्हणून आपलं काम तो host करणं. या chapter मध्ये आपण GitHub वर free static website शोधणार, wget ने EC2 server वर आणणार, unzip करणार, आणि Nginx चा root बरोबर folder वर ठेवणार. सोबत ssh अडवणारा key-permission error fix करू, index.html खरंच कुठल्या folder मध्ये आहे ते शोधायला शिकू, आणि एका server वर अनेक sites ला domain names का लागतात ते बघू. शेवटी phishing pages बद्दल सावधानता, कारण हेच hosting चं skill attackers चुकीच्या कामासाठी वापरतात.

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

  • GitHub, repository, public आणि private repos, आणि organisation accounts म्हणजे काय
  • Language bar बघून static project आणि backend लागणारा project ओळखणं
  • Linux, Mac आणि Windows वर UNPROTECTED PRIVATE KEY FILE fix करणं
  • Repository server वर आणायच्या दोन पद्धती: Download ZIP + scp, किंवा server वर wget
  • Example 1: दहा sites असलेला repo, /usr/share/nginx/tensites मधून host
  • Example 2: डझनभर mini-projects असलेला repo: index.html शोधा, pwd, root set करा
  • Folder नावाने अनेक projects उघडणं, आणि domains हीच योग्य पद्धत का
  • चांगल्या सवयी: rm -rf * आधी pwd, विचित्र URLs ला quotes, file.zip.1, LICENSE check
  • Phishing login pages passwords कसे चोरतात, आणि स्वतःला कसं वाचवायचं

1. का: खरे projects GitHub वर असतात

का. मागच्या chapters मध्ये आपण pages हाताने लिहिली किंवा agent कडून लिहून घेतली. खऱ्या companies मध्ये code एका ठिकाणी असतो जिथे पूर्ण team काम करते, आणि बऱ्याचदा ते ठिकाण GitHub असतं. Developers code लिहितात; आपण तो host करतो.

Classroom line

We keep our code stored on github.com.

2. काय: GitHub आणि repositories

का. Company चा code host करण्याआधी तो कुठे आहे आणि तो download करायची परवानगी आहे का, हे माहीत हवं. Public आणि private repositories हे उत्तर देतात.

GitHub (github.com, Microsoft च्या मालकीचं) ही website आहे जिथे companies आणि developers source code ठेवतात. एका project चा code ठेवायची जागा म्हणजे repository, किंवा repo.

  1. Public repository internet वर कोणीही बघू आणि download करू शकतो. Public repos search किंवा download करायला sign in करायची गरज नाही.
  2. Private repository फक्त तुम्ही allow केलेल्या लोकांना दिसते. ते sign in करतात, किंवा token वापरतात.
  3. Free accounts मध्ये unlimited public आणि private repositories बनवता येतात.
  4. Companies त्यांचे repositories organisation accounts मध्ये ठेवतात, जे पूर्ण team share करते.

Classroom line

A public repository means anyone in the world can download that code from the internet.

GitHub: projects चा code जिथे ठेवतात github.com Companies आणि developers इथे source code ठेवतात. एक project = एक repository (repo). Public repository Internet वर कोणीही बघू आणि download करू शकतो. Sign-inनको. Private repository फक्त तुम्ही allow केलेले लोक. ते sign in करतात किंवा tokenवापरतात. Free accounts मध्ये unlimited public आणि privaterepositories. Companies त्यांचे repos organisation accountsमध्ये ठेवतात, team सोबत share.

Figure 1. एक project म्हणजे एक repository. Public: कोणीही download करू शकतो. Private: फक्त तुम्ही allow केलेले लोक.

Static की backend? Language bar वाचा. प्रत्येक repository च्या page वर तो कुठल्या languages वापरतो त्याचा रंगीत bar असतो.

  1. फक्त HTML, CSS आणि JavaScript: static site. Nginx files जशाच्या तशा serve करतो. या chapter मध्ये आपण हेच host करतो.
  2. Java, Python, PHP किंवा बाकी languages: project ला code चालवणारा backend लागतो. फक्त files copy करून चालत नाही; हे course मध्ये पुढे host करू.
Download करण्याआधी language bar वाचा फक्त HTML, CSS, JavaScript Static site: साध्या files. Nginx त्या जशाच्या तशा serve करतो. या chapter मध्ये आपण हेच host करतो. Java, Python, PHP वगैरे Code चालवणारा backend लागतो. फक्त files copy करून चालत नाही; हे course मध्ये पुढे host करू.

Figure 2. फक्त HTML, CSS आणि JavaScript: static, Nginx serve करतो. Java, Python किंवा PHP: backend लागतो.

Example 1: search करणं. github.com वर html websites search करा. काही repositories मध्ये एक site असते, आणि काहींमध्ये डझनभर छोटे beginner projects. Sign in न करता search pages खूप पटापट उघडले तर GitHub Too many requests page दाखवतो. एक minute थांबा, किंवा sign in करा.

3. कसं: server ला connect करा

का. Server वर पोहोचल्याशिवाय या chapter मधलं काहीच चालत नाही. इथला key permission fix Mac, Linux आणि नवीन Windows users ना सगळ्यात आधी लागतो.

Step 1. SSH आणि HTTP allow करून Amazon Linux server launch करा (किंवा आधीचा वापरा). Free-tier eligible instance types वापरा, आणि AWS च्या सध्याच्या free-tier terms check करा.

Step 2. Username साठी AMI बघा: Amazon Linux साठी ec2-user, Ubuntu साठी ubuntu.

Step 3. Connect करा:

ssh -i mykey.pem ec2-user@PUBLIC_IP

ssh ने key नाकारली तर. असं दिसू शकतं:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'mykey.pem' are too open.
...
ec2-user@PUBLIC_IP: Permission denied (publickey).

का. Private key म्हणजे घराची चावी. तुमच्या computer वरचे दुसरे users ती file वाचू शकत असतील, तर ssh ती वापरायला नकार देतो. File फक्त तुम्हालाच वाचता आली पाहिजे.

Classroom line

The PEM file needs only 400 permission.

Linux आणि Mac वर fix.

Step 1. हे चालवा:

chmod 400 mykey.pem

400 म्हणजे: 4 = तुमच्यासाठी (owner) read, 0 = group ला काहीच नाही, 0 = बाकी सगळ्यांना काहीच नाही.

Windows वर fix. PowerShell मध्ये cd आणि ls चालतात कारण PowerShell च्या स्वतःच्या commands ची ती नावं आहेत, आणि ssh आणि scp चालतात कारण Windows मध्ये OpenSSH client येतो. chmod तिथे नाही, म्हणून file चे Properties वापरा. आधीच्या Windows versions मध्ये key चालून जायची; नवीन updates पण strict आहेत.

Classroom line

In Windows we could ssh directly. Now Windows too is slowly making this compulsory in the new updates.

Step 1. mykey.pem वर right-click करून Properties निवडा, मग Security tab, मग Advanced.

Step 2. Disable inheritance click करा आणि Remove all inherited permissions निवडा. Inheritance म्हणजे file ला तिच्या parent folder कडून मिळालेल्या permissions.

Classroom line

What is inheritance? We call it 'varasa' (what's handed down).

Step 3. Add click करा, मग Select a principal, तुमचं Windows user name type करा, Check Names आणि OK click करा.

Step 4. फक्त Read tick करा, मग OK आणि Apply. आता key फक्त तुम्हीच वाचू शकता, आणि ssh ती accept करतो.

Key file फक्त तुम्हालाच वाचता आली पाहिजे WARNING: UNPROTECTED PRIVATE KEY FILE! ec2-user@PUBLIC_IP: Permission denied(publickey). Linux आणि Mac chmod 400 mykey.pem 4 = तुमच्यासाठी (owner) read 0 = group ला काहीच नाही 0 = बाकी सगळ्यांना काहीच नाही Windows: file चे Properties 1. Security tab, मग Advanced 2. Disable inheritance, सगळ्या inherited काढा 3. Add, मग Select a principal: तुमचा user 4. फक्त Read tick करा, मग OK आणि Apply

Figure 3. दुसरे वाचू शकतील अशी key ssh नाकारतो. Linux आणि Mac: chmod 400. Windows: Properties, Security, Advanced, फक्त तुमचा user आणि Read.

4. कसं: code server वर आणायच्या दोन पद्धती

का. GitHub पासून server पर्यंत एकापेक्षा जास्त रस्ते आहेत. दोन्ही माहीत असले की जलद रस्ता निवडता येतो, आणि link चालली नाही तर दुसरा वापरता येतो.

GitHub Code dropdown: Clone section with HTTPS and GitHub CLI tabs, a clone URL https://github.com/OWNER/REPO.git with a copy button, Clone using the web URL, then Open in GitHub Copilot app, Open with GitHub Desktop, and Download ZIP with the mouse pointer on it.

Whiteboard: Repository वरचं हिरवं Code button: clone URL, आणि खाली Download ZIP. त्याची link copy करायला Download ZIP वर right-click करा.

पद्धत A: Download ZIP, मग scp. तुमच्या computer वर Code > Download ZIP click करा, मग server वर copy करा:

scp -i mykey.pem main.zip ec2-user@PUBLIC_IP:/home/ec2-user/

File दोनदा प्रवास करते: GitHub वरून तुमचा computer, computer वरून server.

पद्धत B: link copy करा, server वर wget. Download ZIP वर right-click करून Copy link निवडा, आणि server terminal मध्ये wget च्या पुढे paste करा. Server थेट GitHub वरून download करतो: जलद, आणि एक step कमी.

Classroom line

Right-click Download ZIP, copy the link... and go to the terminal and paste it after wget.

Repository server वर आणायच्या दोन पद्धती A. Computer वर Download ZIP, मग scp GitHub → तुमचा computer → EC2 scp -i mykey.pem main.zipec2-user@PUBLIC_IP:/home/ec2-user/ File दोनदा प्रवास करते: GitHub वरून computer, मग computer वरूनserver. B. ZIP ची link copy, मग server वर wget GitHub → EC2 sudo wgethttps://github.com/OWNER/REPO/archive/refs/heads/main.zip Server थेट GitHub वरून download करतो. जलद, एक step कमी.

Figure 4. पद्धत A: Download ZIP आणि scp. पद्धत B: ZIP ची link copy करून server वर sudo wget.

5. Example 1: दहा sites असलेला एक repository

का. वरच्या पातळीवर index.html असलेली repository ही सगळ्यात सोपी खरी case: download, unzip, Nginx ला तिथे point करा, झालं.

काय बनवणार. एका repository मध्ये दहा sample sites आणि त्या सगळ्यांच्या links असलेली index.html आहे. आपण तो /usr/share/nginx/tensites मध्ये ठेवणार आणि Nginx ला तिकडे point करणार.

Step 1. Nginx start करा (गरज असेल तर आधी sudo yum install nginx -y ने install करा) आणि आत्ता तो कुठून serve करतो ते बघा:

sudo service nginx start
cd /usr/share/nginx/html
ls

Step 2. एक folder वर जा:

cd /usr/share/nginx

Step 3. ZIP download करा. हा folder root चा आहे म्हणून sudo लागतो:

sudo wget https://github.com/OWNER/REPO/archive/refs/heads/master.zip

काही repos master ऐवजी main वापरतात; GitHub देतो तशीच link copy करा.

Step 4. Unzip करा:

sudo unzip master.zip

यामुळे REPO-master नावाचा folder तयार होतो.

Step 5. त्याला छोटं नाव द्या:

sudo mv REPO-master tensites

Step 6. index.html लगेच आत आहे ते check करा:

[ec2-user@ip-172-31-xx-xx nginx]$ cd tensites
[ec2-user@ip-172-31-xx-xx tensites]$ ls
README.md  index.html  style.css  ...  (one folder per site)
[ec2-user@ip-172-31-xx-xx tensites]$ pwd
/usr/share/nginx/tensites

Step 7. Settings file उघडा:

sudo nano /etc/nginx/nginx.conf

Step 8. server block मधला root directive बदला:

root         /usr/share/nginx/tensites;

Ctrl+O, Enter, मग Ctrl+X ने save करा.

Step 9. Apply करा:

[ec2-user@ip-172-31-xx-xx tensites]$ sudo service nginx reload
Redirecting to /bin/systemctl reload nginx.service

Step 10. http://PUBLIC_IP/ उघडा. Repo चं index page दिसतं; दहाही sites वर click करून बघा.

Example 1: GitHub ZIP पासून live site पर्यंत 1. cd cd /usr/share/nginx Nginx च्या default html folder शेजारच्या folder मध्ये जा. 2. wget sudo wgethttps://github.com/OWNER/REPO/archive/refs/heads/master.zip ZIP थेट GitHub वरून download. Folder root चा आहे म्हणूनsudo. 3. unzip sudo unzip master.zip REPO-master नावाचा folder तयार होतो. 4. mv sudo mv REPO-master tensites छोटं नाव द्या. 5. root root /usr/share/nginx/tensites; nginx.conf मध्ये, मग sudo service nginx reload आणिhttp://PUBLIC_IP/ उघडा.

Figure 5. Animation: cd, sudo wget, sudo unzip, sudo mv ने छोटं नाव, nginx.conf मध्ये root, reload.

त्याऐवजी html folder मधली जुनी site बदलायची असेल तर. /usr/share/nginx/html च्या आत unzip करायचं असेल, तर आधी जुन्या files sudo rm -rf * ने काढाव्याशा वाटतील. ते current folder मधलं सगळं delete करतं, undo नाही. आधी pwd चालवा आणि तो /usr/share/nginx/html दाखवतो याची खात्री करा.

6. Example 2: डझनभर mini-projects असलेला repository

हे वेगळं का. काही repositories मध्ये डझनभर छोटे projects असतात, प्रत्येक स्वतःच्या folder मध्ये. root ZIP च्या top folder वर असेल, तर तिथे index.html नसते आणि site दिसत नाही. index.html असलेला folder शोधावा लागतो.

Classroom line

You must understand folders.

Step 1. html folder मध्ये download आणि unzip करा:

cd /usr/share/nginx/html
sudo wget https://github.com/OWNER/REPO/archive/refs/heads/main.zip
sudo unzip main.zip
sudo mv REPO-main projects

Step 2. cd आणि ls ने आत जा:

[ec2-user@ip-172-31-xx-xx html]$ cd projects
[ec2-user@ip-172-31-xx-xx projects]$ ls
LICENSE  README.md  projects
[ec2-user@ip-172-31-xx-xx projects]$ cd projects
[ec2-user@ip-172-31-xx-xx projects]$ ls
age-calculator  dad-jokes-generator  music-player  rock-paper-scissors-game  ...

Step 3. एका project मध्ये जा आणि index.html आहे का बघा:

[ec2-user@ip-172-31-xx-xx projects]$ cd music-player
[ec2-user@ip-172-31-xx-xx music-player]$ ls
index.html  script.js  style.css  ...

Step 4. ज्या folder मध्ये index.html दिसते तिथे pwd चालवा आणि path copy करा:

[ec2-user@ip-172-31-xx-xx music-player]$ pwd
/usr/share/nginx/html/projects/projects/music-player

Classroom line

In the folder that has index.html, simply fire pwd.

Step 5. तो /etc/nginx/nginx.conf मध्ये root setting म्हणून paste करा. फक्त हीच line बदला:

root         /usr/share/nginx/html/projects/projects/music-player;

Step 6. Reload करा आणि http://PUBLIC_IP/ उघडा. Music player दिसतो.

sudo service nginx reload
Example 2: एका repo मध्ये अनेक projects.index.html असलेला folder शोधा 1. cd आणि ls cd projects/projects ; ls डझनभर folders, प्रत्येक mini-project चा एक. इथे अजूनindex.html नाही. 2. index.html? cd music-player ; ls -> index.html script.js style.css या folder मध्ये index.html आहे: हीच site. 3. pwd pwd ->/usr/share/nginx/html/projects/projects/music-player pwd पूर्ण path दाखवतो. तो copy करा. 4. root, reload root/usr/share/nginx/html/projects/projects/music-player; तो root setting म्हणून paste करा, save, reload.

Figure 6. Animation: index.html दिसेपर्यंत cd आणि ls, pwd, path root म्हणून paste, reload.

Example 3: दुसऱ्या project वर switch. त्याच steps, दुसरा folder:

cd ../dad-jokes-generator
pwd
sudo nano /etc/nginx/nginx.conf
sudo service nginx reload

root /usr/share/nginx/html/projects/projects/dad-jokes-generator; सोबत. root बदलला की server कुठली एक site दाखवतो ते बदलतं.

7. एकाच वेळी अनेक projects: folder URLs, ports, domains

का. एका repository मध्ये अनेक projects असतील, तर visitors प्रत्येकापर्यंत कसे पोहोचणार ते ठरवावं लागतं. Folder URLs, ports आणि domains हे तीन पर्याय, प्रत्येकाची किंमत वेगळी.

Root parent folder वर. root ला /usr/share/nginx/html/projects/projects; ठेवा. आता प्रत्येक project त्याच्या folder नावावर उघडतो:

  1. http://PUBLIC_IP/music-player/
  2. http://PUBLIC_IP/dad-jokes-generator/
  3. http://PUBLIC_IP/rock-paper-scissors-game/

चालतं, पण visitors ना तुमची folder नावं माहीत असावी लागतील.

Classroom line

The user doesn't know our folder's name, right?

Root parent folder वर: प्रत्येकproject त्याच्या folder नावावर उघडतो .../projects/projects/ (root) music-player/ dad-jokes-generator/ rock-paper-scissors-game/ ... dozens more http://PUBLIC_IP/music-player/ http://PUBLIC_IP/dad-jokes-generator/ http://PUBLIC_IP/rock-paper-...game/ चालतं, पण visitors ना folder नावं माहीत नसतात. अनेक sites साठी योग्य पद्धत: प्रत्येक site लाdomain name आणि server block (पुढचा chapter).

Figure 7. Root parent folder वर: प्रत्येक project http://PUBLIC_IP/folder-name/ वर. योग्य पद्धत म्हणजे प्रत्येक site ला domain आणि server block.

योग्य पद्धत. प्रत्येक site ला स्वतःचं domain name आणि स्वतःचा server block. दुसरा पर्याय तुम्ही आधी पाहिलाय: वेगवेगळे ports. Domains आणि server blocks पुढच्या chapter मध्ये.

Classroom line

If you want to host more than one website, you actually need a domain name.

Classroom line

Hosting fifty-five websites means writing fifty-five server blocks.

8. लोक अडकतात अशा छोट्या गोष्टी

का. यातली प्रत्येक छोटी चूक गोंधळात टाकणारा error देते. त्या आधीच माहीत असल्या की debugging चा एक तास वाचतो.

  1. Spaces किंवा brackets असलेले URLs. पूर्ण URL double quotes मध्ये टाका, नाहीतर shell तो तोडतो:

    sudo wget "https://example.com/files/my song (live).mp3"
    
  2. main.zip.1. main.zip आधीच असेल तर wget पुढचा download main.zip.1 म्हणून save करतो. आधी जुनी file delete करा (sudo rm main.zip), किंवा download ला स्वतः नाव द्या:

    sudo wget -O site2.zip https://github.com/OWNER/REPO/archive/refs/heads/main.zip
    
  3. Unzip ला sudo. /usr/share/nginx आणि त्यातला html folder root चे आहेत, म्हणून तिथे unzip आणि mv ला sudo लागतो.

  4. Quality वेगवेगळी. कोणीही repo publish करू शकतो. काही polished दिसतात, काही rough. Promise करण्याआधी preview करा.
  5. LICENSE check करा. Template पुन्हा वापरण्याआधी, किंवा त्यावरून बनवलेली site विकण्याआधी, repo ची LICENSE file उघडा आणि ती पाळा; credit मागितलं असेल तर द्या.

खरं skill. समजा एखाद्या local bakery किंवा tuition class ला साधी website हवीये. ज्याचं licence परवानगी देतं असा template निवडा, text आणि images बदला, आणि EC2 वर host करा.

Classroom line

You can earn money from the people around you.

9. सावधान: phishing login pages

Phishing: look-alike login pages

हेच hosting चं skill attackers चुकीच्या कामासाठी वापरतात. ते कसं चालतं ते माहीत असलं की तुम्ही फसणार नाही.

  1. Attacker खऱ्या login page चा look copy करतो, समजा Instagram चं, आणि स्वतःच्या server वर host करतो.
  2. Message मध्ये link पाठवतो: "तुमचं account block होईल, आत्ता login करा."
  3. Page खरं दिसतं, म्हणून victim username आणि password टाकतो.
  4. Form ते attacker च्या server ला पाठवतो, खऱ्या company ला नाही.

स्वतःला वाचवा:

  1. Password टाकण्याआधी address bar मधलं domain check करा.
  2. Messages मधल्या links वरून login करू नका. App उघडा, किंवा address स्वतः type करा.
  3. Two-factor sign-in किंवा passkeys चालू करा.
  4. Fake pages खऱ्या company ला report करा.

Classroom line

They'll think it's Instagram, so they'll type their username and password.

Classroom line

This is exactly what's called a phishing attack.

सावधान: phishing login pagepasswords कसे चोरतं 1. Attacker खऱ्या login page चा look copyकरून स्वतःच्या server वर host करतो. 2. Message मध्ये link पाठवतो: तुमचंaccount block होईल, आत्ता login करा. 3. Page खरं दिसतं, म्हणून victimusername आणि password टाकतो. 4. Form ते attacker च्या server लापाठवतो, खऱ्या company ला नाही. स्वतःला वाचवा Password टाकण्याआधी address bar मधलं domaincheck करा. Messages मधल्या links वरून login नको; app उघडाकिंवा address स्वतः type करा. Two-factor sign-in किंवा passkeys चालू करा,आणि fake pages report करा.

Figure 8. Phishing page passwords कसे चोरतं, आणि स्वतःला वाचवायचे चार मार्ग.

10. Clean up आणि पुढे काय

का. विसरलेला practice server पैसे घेत राहतो. काम संपल्यावर तो terminate करणं हा कामाचाच भाग.

Step 1. Practice झाली की EC2 console मध्ये instance terminate करा, म्हणजे पैसे लागणं थांबतं.

पुढे. Domain names आणि server blocks ने एका server वर अनेक websites host करणं.

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

  1. ज्याच्या language bar मध्ये फक्त HTML, CSS आणि JavaScript आहे असा public repo शोधा.
  2. ssh -i mykey.pem ec2-user@PUBLIC_IP (key फक्त तुम्हालाच वाचता यावी: chmod 400, किंवा Windows Properties).
  3. Download ZIP वर right-click, link copy करा.
  4. cd /usr/share/nginx, sudo wget <link>, sudo unzip master.zip, sudo mv REPO-master tensites.
  5. index.html दिसेपर्यंत cd आणि ls; मग pwd.
  6. sudo nano /etc/nginx/nginx.conf: root <तो path>;.
  7. sudo service nginx reload, http://PUBLIC_IP/ उघडा.
  8. LICENSE check करा; काम झालं की instance terminate करा.

12. Hands-on lab: GitHub repository पासून live site पर्यंत

हा lab का. खऱ्या कामात code तुमच्या keyboard मधून नाही, GitHub वरून येतो. हा lab एक public HTML/CSS/JavaScript repository घेऊन Nginx ने live करतो, प्रत्येक step ला check सकट.

  1. Static repository निवडा
    • करा: GitHub वर अशी public repository उघडा जिच्या language bar मध्ये फक्त HTML, CSS आणि JavaScript आहे, आणि वरच्या पातळीवर index.html आहे.
    • Check करा: File list मध्ये index.html दिसते.
    • का: Nginx एकटा फक्त साध्या files देऊ शकतो. Java, Python किंवा PHP असलेल्या repo ला backend लागतो, तो course मध्ये पुढे येतो.
  2. Key fix करा आणि login करा
    • Command: chmod 400 mykey.pem && ssh -i mykey.pem ec2-user@PUBLIC_IP
    • काय दिसेल: ec2-user चा prompt.
    • Check करा: UNPROTECTED PRIVATE KEY FILE warning नाही.
    • का: इतरांना वाचता येणारी key ssh नाकारतो. Windows वर chmod ऐवजी file च्या Properties → Security वापरा.
  3. Nginx start करा
    • Command: sudo yum install nginx -y && sudo service nginx start
    • काय दिसेल: Complete! (किंवा Nothing to do.), मग systemctl redirect ची ओळ.
    • Check करा: http://PUBLIC_IP/ मध्ये Nginx welcome page दिसतं.
    • का: आधी welcome page दिसलं की Nginx आणि port 80 चालतात हे सिद्ध होतं, म्हणून नंतरचा प्रॉब्लेम तुमच्या files किंवा settings मध्येच.
  4. Server वर ZIP download करा
    • Command: cd /usr/share/nginx && sudo wget https://github.com/OWNER/REPO/archive/refs/heads/master.zip
    • काय दिसेल: master.zip ... saved.
    • Check करा: ls मध्ये master.zip दिसतं.
    • का: Link Code → Download ZIP मधून जशीच्या तशी copy करा; काही repos main वापरतात. Laptop वर download करून scp ने upload करण्यापेक्षा server वरचा wget जलद.
  5. Unzip आणि rename करा
    • Command: sudo unzip master.zip && sudo mv REPO-master mysite
    • काय दिसेल: प्रत्येक file साठी एक inflating: ओळ.
    • Check करा: ls mysite मध्ये index.html दिसते.
    • का: छोटं folder नाव root ची ओळ सोपी ठेवतं. index.html थेट आत असायला हवी, नाहीतर Nginx 403 किंवा 404 दाखवतो.
  6. Nginx ला folder कडे point करा
    • Command: sudo nano /etc/nginx/nginx.conf
    • काय दिसेल: server block मध्ये root /usr/share/nginx/mysite; set करा. Save करून बाहेर पडा.
    • Check करा: sudo nginx -t → syntax is ok आणि test is successful.
    • का: root Nginx ला सांगतो कोणता folder म्हणजे website. Typo ने site बंद पडू नये म्हणून reload आधी test.
  7. Reload करा आणि site उघडा
    • Command: sudo service nginx reload
    • काय दिसेल: Redirecting to /bin/systemctl reload nginx.service
    • Check करा: http://PUBLIC_IP/ मध्ये repository ची site, styles आणि images सकट दिसते.
    • का: Page दिसलं पण styles नाहीत, तर CSS path चुकलाय किंवा file नावात case वेगळा आहे; DevTools → Network उघडून 404 शोधा.
  8. Practice संपली की terminate करा
    • करा: EC2 console → instance select करा → Instance state → Terminate instance.
    • Check करा: State Terminated; थोड्या वेळाने तो list मधून जातो.
    • का: Code अजूनही GitHub वर आहे, म्हणून काहीच हरवत नाही. विसरलेला server पैसे घेत राहतो.

13. घरी करून बघा

Try at home

Task 1: एक site

  1. ssh तक्रार करत असेल तर key च्या permissions fix करा.
  2. Static repo शोधा, त्याची ZIP /usr/share/nginx मध्ये sudo wget करा, unzip करा आणि नाव बदला.
  3. root set करा, reload करा आणि http://PUBLIC_IP/ उघडा.

Task 2: अनेक projects

  1. अनेक mini-projects असलेला repo /usr/share/nginx/html मध्ये download करा.
  2. एका project ची index.html शोधा, pwd चालवा, root set करा, reload करा.
  3. त्याच पद्धतीने दुसऱ्या project वर switch करा.
  4. root parent folder वर ठेवा आणि दोन projects folder नावाने उघडा.

झालं की instance terminate करा.

Recap

थोडक्यात

  1. GitHub code ठेवतो; एक project म्हणजे एक repository. Public repos कोणीही download करू शकतो, private फक्त तुम्ही allow केलेले लोक.
  2. Language bar मध्ये फक्त HTML, CSS आणि JavaScript = static, Nginx serve करू शकतो.
  3. UNPROTECTED PRIVATE KEY FILE: Linux आणि Mac वर chmod 400; Windows वर फक्त तुमच्या user ला Read.
  4. Code server वर आणायला Download ZIP + scp, किंवा ZIP link + sudo wget.
  5. sudo unzip, sudo mv ने छोटं नाव, मग root index.html असलेल्या folder वर.
  6. Folders मध्ये हरवलात? index.html दिसेपर्यंत cd आणि ls, मग pwd आणि paste.
  7. Root parent folder वर असेल तर projects folder नावाने उघडतात; अनेक sites साठी domains आणि server blocks.
  8. rm -rf * आधी pwd, विचित्र URLs ला quotes, file.zip.1 कडे लक्ष, LICENSE check, आणि messages मधल्या login links वर कधीच विश्वास नको.

Ravindra Bagale, trainer: linkedin.com/in/ravindra-bagale. OWNER/REPO म्हणजे कुठलाही public repository; tensites, projects, project folders ची नावं आणि mykey.pem शिकण्यासाठीची उदाहरणं आहेत; PUBLIC_IP म्हणजे तुमच्या instance चा public IPv4 address. Outputs "..." ने छोटे केलेत; prompt मधलं hostname उदाहरणादाखल आहे.

सराव Tasks

या scenario बद्दल

Goa Beach Stays हा पणजी मधला हॉस्पिटॅलिटी व्यवसाय आहे. Rosario Fernandes त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे INR मध्ये मोजले जातात आणि AWS resources ap-south-1 Region मध्ये चालतात. खालच्या tasks मध्ये तुम्ही या lesson मध्ये शिकलेलं वापरून त्यांची खरी कामं करता. सगळी नावं, account IDs, IP addresses व numbers सरावासाठी काल्पनिक आहेत.

0 / 12

सोपं बदलानंतर 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 दाबा.

सोपं 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 दाबा.

सोपं GitHub वरून code घ्या

का: git clone पूर्ण repository server वर copy करतो.

काय करायचं: https://github.com/goabeachstays/website.git सध्याच्या folder मध्ये clone करा.

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

सोपं Server वरून website test करा

का: DNS तयार होण्याआधीही web server उत्तर देतो का ते curl दाखवतो.

काय करायचं: http://localhost ला request पाठवा व फक्त response headers दाखवा.

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

सोपं SSH चा port

का: Security group rules ला योग्य port हवा.

काय करायचं: SSH साठी security group ने कोणता TCP port उघडावा?

कसं करायचं:
  1. Task मधले numbers लिहून घ्या.
  2. कागदावर step by step काढा.
  3. Box मध्ये फक्त final उत्तर लिहा.
  4. Check answer दाबा.

मध्यम nginx config test करा

का: Restart मुळे site बंद पडण्याआधी test चुका पकडतो.

काय करायचं: nginx configuration files मधल्या चुका तपासा.

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

मध्यम 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 दाबा.

मध्यम Port 80 सगळ्यांसाठी उघडा

का: Security group HTTP allow करत असेल तरच visitors website पाहू शकतात.

काय करायचं: Security group sg-013a13c4b3634c3b2 वर 0.0.0.0/0 कडून inbound TCP port 80 allow करा.

कसं करायचं:
  1. Task वाचा आणि ते कोणत्या AWS service बद्दल आहे ते ठरवा.
  2. aws लिहा, मग service चं नाव, मग operation (action शब्द).
  3. प्रत्येक आवश्यक flag (--name) व त्यापुढे task मधली value लिहा.
  4. Flags कोणत्याही क्रमाने चालतात. Check answer दाबा.

मध्यम CloudFormation: web SG

का: फक्त 443 उघडल्याने server सुरक्षित.

काय करायचं: 0.0.0.0/0 कडून TCP 443 allow करणारा AWS::EC2::SecurityGroup. GroupDescription द्या.

कसं करायचं:
  1. Task मधल्या top-level keys पासून सुरू करा.
  2. Child keys 2 spaces ने indent करा (tabs नकोत).
  3. प्रत्येक property मध्ये task मधली value भरा.
  4. Check answer दाबा. Keys चा क्रम महत्त्वाचा नाही.

अवघड Ubuntu वर nginx site enable करा

का: Ubuntu वर sites-available पासून sites-enabled ला symbolic link ने site enable होते.

काय करायचं: /etc/nginx/sites-enabled/ मध्ये /etc/nginx/sites-available/goabeachstays ची symbolic link बनवा.

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

उजळणी, तुलना आणि मुलाखत cards

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

उजळणी card: GitHub repository basics. Host करायचे बहुतेक projects GitHub वरून येतात. वापरण्याआधी repo वाचता यायला हवा. Repository म्हणजे GitHub वरचा project folder. Language bar सांगतो static (HTML, CSS) आहे की backend लागतो. Host करण्याआधी language bar आणि LICENSE तपासा. HTML 60%, CSS 30%, JS 10% = static, फक्त Nginx host करू शकतो.
उजळणी card: GitHub repository basics · PNG download करा
उजळणी card: UNPROTECTED PRIVATE KEY FILE fix. इतर users वाचू शकतात अशी key SSH नाकारतो. .pem file फक्त तुम्हालाच वाचता यायला हवी. 400 = फक्त owner read. Linux/Mac: chmod 400. Windows: file Properties › Security मधून इतर users काढा. Fix:
उजळणी card: UNPROTECTED PRIVATE KEY FILE fix · PNG download करा
उजळणी card: wget ने repo server वर. Laptop वर download करून परत upload करणं slow. wget URL थेट server वर download करतो. unzip ते extract करतो. Download ZIP link copy करा, quotes मध्ये wget करा, unzip, मग Nginx root folder कडे. Commands:
उजळणी card: wget ने repo server वर · PNG download करा
उजळणी card: Nginx root folder set करा. Files कुठे आहेत हे Nginx ला कळेपर्यंत site Nginx test page दाखवते. root म्हणजे Nginx serve करतो तो folder. त्यात index.html हवं. index.html असलेल्या folder मध्ये cd, pwd चालवा, तो path root मध्ये, nginx -t, reload. nginx.conf मध्ये:
उजळणी card: Nginx root folder set करा · PNG download करा
तुलना: Public repository vs Private repository. Public repository: कोणीही बघू आणि download करू शकतो असा GitHub repo. Private repository: फक्त invited लोक बघू शकतात असा GitHub repo.
तुलना: Public repository vs Private repository · PNG download करा
तुलना: Download ZIP + scp vs wget on the server. Download ZIP + scp: Laptop वर download, मग EC2 ला upload. wget on the server: GitHub वरून थेट EC2 वर download.
तुलना: Download ZIP + scp vs wget on the server · PNG download करा
मुलाखत card: GitHub project फक्त Nginx वर host होईल का हे कसं ओळखता?. Language bar बघा: फक्त HTML, CSS, JavaScript म्हणजे static. PHP, Python किंवा Node ला runtime आणि कदाचित database लागतो. HTML 70% CSS 30% › Nginx root. PHP 80% › LEMP stack.
मुलाखत card: GitHub project फक्त Nginx वर host होईल का हे कसं ओळखता? · PNG download करा
मुलाखत card: rm -rf * आधी pwd का?. rm -rf * CURRENT folder मधलं सगळं undo शिवाय delete करतो. चुकीच्या folder मध्ये website किंवा system पुसू शकतो. pwd /usr/share/nginx/html दाखवतो › मग delete.
मुलाखत card: rm -rf * आधी pwd का? · PNG download करा
मुलाखत card: Phishing login page passwords कसे चोरतं?. खरं login page look-alike domain वर copy करून तुम्ही type केलेलं save करतं. Page अगदी सारखं दिसतं, म्हणून लोक विश्वास ठेवतात. Domain तपासा आणि MFA वापरा: faceb00k-login.com हे facebook.com नाही.
मुलाखत card: Phishing login page passwords कसे चोरतं? · PNG download करा

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