Ravindra BagaleCourses & study guides English

Ubuntu EC2 वर Apache Install करा: Port आणि Web Folder बदला

आत्तापर्यंत आपण बनवलेला प्रत्येक server Amazon Linux चा होता. आज आपण Ubuntu server launch करणार आणि तिथे तेच काम करणार: apt-get ने Apache install करायचा, आपलं page live करायचं, आणि Nginx वर switch करायचं. काय तसंच राहतं आणि काय बदलतं ते दिसेल. दुसऱ्या भागात आपण परत Amazon Linux वर जाऊ आणि Apache ची settings file उघडू, म्हणजे website आपल्या folder मधून, आपल्या port वर, आपल्या पहिल्या page सोबत चालवता येईल. आणि Apache start व्हायला नकार देतो तेव्हा त्याचा report वाचून तो fix कसा करायचा तेही शिकू.

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

  • Ubuntu का, आणि EC2 वर तो launch कसा करायचा
  • Key pairs: प्रत्येक app ला एक
  • Login user ubuntu आणि package manager apt-get
  • Install आधी sudo apt-get update, आणि failed fetch चा अर्थ
  • apache2 install, check आणि start करणं
  • Ubuntu चं default page बदलणं
  • Permission denied (publickey) ची चार कारणं
  • Disks: 8 GB root disk आणि extra disks
  • Ubuntu वर Apache वरून Nginx, आणि Amazon Linux पेक्षा folders मधला फरक
  • Apache ची settings file httpd.conf: DocumentRoot, Listen, DirectoryIndex
  • Security Group मध्ये नवीन port उघडणं
  • httpd start होत नसेल तेव्हा काय करायचं

1. Ubuntu का

का. Amazon Linux AWS ने बनवलाय, आणि तो बहुतेक AWS वरच भेटतो. Companies Azure, Google Cloud, Oracle Cloud, IBM Cloud आणि DigitalOcean वर पण servers चालवतात. Ubuntu जवळजवळ प्रत्येक cloud वर मिळतो, म्हणून कामावर तुमच्या हातात येणाऱ्या सगळ्यात common server systems पैकी तो एक आहे.

काय. Amazon Linux, Ubuntu, Debian, CentOS, Fedora, SUSE आणि Kali हे सगळे Linux distributions आहेत: प्रत्येक Linux kernel वर बनलाय आणि स्वतःची tools add करतो. Ubuntu Debian वर आधारित आहे. तुम्ही शिकलेल्या बहुतेक commands (cd, ls, nano, sudo, mv) तशाच चालतात. दोन गोष्टी बदलतात:

  1. Login user ubuntu आहे, ec2-user नाही.
  2. Software apt-get (किंवा apt) ने install करतात, yum किंवा dnf ने नाही.

2. Ubuntu server launch करा

का. योग्य image निवडल्याने पुढच्या सगळ्यासाठी user name, package manager आणि service names ठरतात, म्हणून ती विचारपूर्वक निवडा.

कसं.

Step 1. EC2 console मध्ये Launch instance click करा. नाव द्या.

Step 2. Application and OS Images मध्ये Ubuntu निवडा (Free tier eligible Ubuntu Server image).

Step 3. Instance type: आधीसारखाच free-tier वाला.

Step 4. Key pair: तुमची आधीची key pair निवडा, किंवा नवीन बनवा (खाली बघा).

Step 5. Network settings: port 22 (SSH) आणि port 80 (HTTP) allow करणारा तुमचा आधीचा Security Group select करा.

Step 6. Storage: root disk default size वरच ठेवा. Launch instance click करा.

Key pairs: प्रत्येक app ला एक. एकाच application चे servers एक key pair share करू शकतात. वेगळ्या applications ना वेगळ्या key pairs द्यायच्या.

Example 1. समजा आपण Instagram चे 10 आणि Facebook चे 10 servers चालवतो. Instagram चे दहाही servers instagram-key.pem वापरतात; Facebook चे दहाही facebook-key.pem. एखादी key लीक झाली तर फक्त त्या app च्या servers ना धोका, तुमच्या सगळ्या servers ना नाही.

Classroom line

But suppose you have ten Instagram servers and ten Facebook servers... use separate key pairs for the two.

प्रत्येक app ला वेगळी key pair,सगळ्यांना एकच नको समजा: Instagram चे 10 servers दहाही एकच key वापरतात: instagram-key.pem समजा: Facebook चे 10 servers दहाही एकच key वापरतात: facebook-key.pem एकाच app चे servers एक key share करू शकतात.वेगळ्या apps ना वेगळ्या keys. एखादी key लीक झाली तर फक्त त्या app ला धोका, तुमच्यासगळ्या servers ना नाही.

Figure 1. समजा Instagram चे 10 आणि Facebook चे 10 servers: प्रत्येक app ला एक key pair, म्हणजे एक key लीक झाली तरी सगळं उघडत नाही.

Disks. एका EC2 instance ला अनेक EBS disks असू शकतात:

  1. Root disk वर operating system असते. Ubuntu आणि Amazon Linux images साठी ती default 8 GB असते. Launch करताना ती मोठी करता येते, आणि Windows सारख्या काही दुसऱ्या images मोठ्याच सुरू होतात.
  2. Extra disks attach करता येतात, तुम्हाला हव्या त्या size च्या, उदाहरणार्थ practice साठी 1 GB.

Classroom line

We can attach several hard disks to one server.

3. Connect: user आहे ubuntu

का. Key तीच, पण user वेगळा. Ubuntu images मध्ये ec2-user नसतो, म्हणून तो वापरला तर Permission denied (publickey) येतं.

कसं. Laptop च्या terminal मधून, तुमची key आणि नवीन server चा public IP वापरून:

ssh -i mykey.pem ubuntu@PUBLIC_IP

पहिल्यांदा fingerprint च्या प्रश्नाला yes द्या. Prompt आता ubuntu@ip-172-31-xx-xx:~$ असा दिसतो.

Example 2: एकच key, दोन servers.

  1. Amazon Linux: ssh -i mykey.pem ec2-user@PUBLIC_IP
  2. Ubuntu: ssh -i mykey.pem ubuntu@PUBLIC_IP

फक्त @ च्या आधीचं user name बदलतं.

4. apt-get: आधी list update, मग install

का. Package manager ला माहीत असतं software कुठून download करायचं. तो server वर packages ची आणि त्यांच्या download links ची एक list ठेवतो. अगदी नवीन server वर ती list जुनी असू शकते, आणि जुन्या links अशा files कडे point करतात ज्या आता नाहीत.

काय.

  1. sudo apt-get update नवीन list download करतो. तो काही install करत नाही आणि काही प्रश्न विचारत नाही, म्हणून -y लागत नाही.
  2. sudo apt-get install apache2 -y Apache install करतो. Ubuntu वर Apache चं package आणि service apache2 नावाने आहेत, httpd नाही.
Handwritten board: sudo apt-get install apache2 -y with yum circled above apt-get, apache2 -v, sudo service apache2 start, sudo service apache2 status, cd /var/www/html.

Whiteboard: Ubuntu च्या commands: sudo apt-get install apache2 -y (yum ऐवजी apt-get), apache2 -v, sudo service apache2 start आणि status, cd /var/www/html.

Example 3: नवीन server वर लगेच install. तुम्ही आधी sudo apt-get install apache2 -y चालवता. खूप lines पळतात, म्हणून install होतंय असं वाटतं, पण शेवटी हे दिसतं:

Err:1 http://...archive.ubuntu.com/ubuntu ... apache2-bin amd64 ...
  404  Not Found [IP: ... 80]
E: Failed to fetch http://.../apache2-bin_..._amd64.deb  404  Not Found [IP: ... 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

मग apache2 -v म्हणतो command not found. काहीच install झालं नाही. 404 Not Found आणि Failed to fetch म्हणजे list जुनी आहे: spelling बरोबर आहे, links नाहीत.

Classroom line

With all that output it looks installed... but look closely: it didn't install, the install failed.

Classroom line

If everything is right and the software still won't install, the link is probably old.

नवीन Ubuntu server: आधी list update, मग install 1. लगेच install sudo apt-get install apache2 -y E: Failed to fetch http://…/apache2-bin_…deb 404 NotFound नवीन server वरची package list जुनी असते, म्हणून downloadlinks सापडत नाहीत. 2. sudo apt-get update sudo apt-get update Reading package lists... Done apt-get packages ची आणि त्यांच्या links ची नवीन list आणतो. 3. परत install sudo apt-get install apache2 -y apache2 -v → Server version: Apache/… (Ubuntu) आता सगळ्या links चालतात, Apache install होतो आणि apache2 -vversion दाखवतो.

Figure 2. Animation: नवीन server वर install 404 Not Found ने fail होतं; sudo apt-get update list नवीन करतो; परत install केल्यावर चालतं.

कसं.

Step 1. Package list नवीन करा:

sudo apt-get update

Step 2. Apache install करा:

sudo apt-get install apache2 -y

Step 3. तो आहे का ते check करा:

apache2 -v

तो दोन lines दाखवतो, Server version: Apache/... (Ubuntu) आणि Server built: .... command not found आलं, तर install झालंच नाही.

सवय लावा: प्रत्येक नवीन Ubuntu server वर आधी sudo apt-get update, मग install.

5. Apache start करा आणि आपलं page live करा

का. Browser मध्ये तुमचं page दिसेपर्यंत install काहीच सिद्ध करत नाही. Ubuntu चं default page तुमच्या page ने बदलणं ही पूर्ण साखळी चालते याची शेवटची खात्री.

कसं.

Step 1. Apache start करा आणि check करा:

sudo service apache2 start
sudo service apache2 status

Active: active (running) बघा. Ubuntu वर Apache बहुतेक install नंतर स्वतःच start होतो; परत start चालवलं तरी काही बिघडत नाही.

Step 2. Status screen तुमची वाट बघत थांबतो. Prompt परत मिळवायला q दाबा.

Classroom line

When you check the status, some of you will get stuck here... then press q.

Step 3. http://PUBLIC_IP/ उघडा. Ubuntu logo असलेलं Apache2 Default Page दिसतं. ते /var/www/html/index.html मधून येतं:

cd /var/www/html
ls
The Apache2 Default Page with the Ubuntu logo and an It works! banner, followed by text saying this page is used to test the Apache2 server after installation on Ubuntu, and a Configuration Overview section.

Whiteboard: Ubuntu चं Apache2 Default Page: Apache install झालाय आणि /var/www/html/index.html serve करतोय.

Step 4. त्याच्या जागी आपलं page ठेवा:

sudo rm index.html
sudo nano index.html

Type करा:

<h1>ubuntu</h1>

Ctrl+X, Y, Enter ने save करा, मग browser refresh करा. ubuntu दिसेल. खरी site publish करायची असेल तर मागच्या chapter सारखं scp ने तुमची HTML pages /var/www/html मध्ये upload करा.

Classroom line

Suppose you don't want this page; so remove it.

Step 5. सगळं क्रमाने बघायला history चालवा:

sudo apt-get update
sudo apt-get install apache2 -y
apache2 -v
sudo service apache2 start
sudo service apache2 status
cd /var/www/html
sudo rm index.html
sudo nano index.html

6. Permission denied (publickey): चार कारणं

का. हा सगळ्यात common SSH error आहे, आणि Amazon Linux आणि Ubuntu दोन्ही servers असले की तो खूप वेळा येतो.

ubuntu@PUBLIC_IP: Permission denied (publickey).

काय. त्याची चार नेहमीची कारणं:

  1. चुकीची key file: दुसऱ्या key pair ची .pem, किंवा तिचा चुकीचा path.
  2. चुकीचा IP: दुसऱ्या server चा IP, किंवा stop आणि start नंतरचा जुना IP.
  3. चुकीचं user name: Ubuntu वर ubuntu, Amazon Linux वर ec2-user.
  4. वाटतं त्यापेक्षा वेगळी OS: launch केला Amazon Linux आणि login करताय ubuntu ने, किंवा उलटं.

Classroom line

When you get publickey permission denied... there are four kinds of permission denied.

कुठली OS आहे ते कसं बघायचं.

Step 1. EC2 › Instances › तुमचा instance select करा.

Step 2. Details tab मध्ये AMI name वाचा. Ubuntu images ubuntu/images/... ने सुरू होतात; Amazon Linux 2023 images al2023-ami-... ने.

Permission denied (publickey): या चार गोष्टीतपासा ubuntu@PUBLIC_IP: Permission denied (publickey). 1. चुकीची key file दुसऱ्या key pair ची .pem, किंवा चुकीचा path 2. चुकीचा IP दुसरा server, किंवा stop-start नंतरचा जुना IP 3. चुकीचं user name Ubuntu वर ubuntu, Amazon Linux वर ec2-user 4. वाटतं त्यापेक्षा वेगळी OS instance details मध्ये AMI name बघा EC2 › Instances › instance select करा › Details: AMI nameubuntu ने किंवा al2023 ने सुरू होतं.

Figure 3. Permission denied (publickey): चुकीची key file, चुकीचा IP, चुकीचं user name, किंवा वेगळी OS. Instance details मधलं AMI name OS सांगतं.

7. Ubuntu वर Apache वरून Nginx

का. Amazon Linux सारखंच, Apache आणि Nginx दोघांनाही port 80 पाहिजे, आणि एका port वर एका वेळी एकच program बसू शकतो. म्हणून Nginx install करण्याआधी Apache बंद करा: Ubuntu वर Nginx चं package install झाल्या झाल्या स्वतः start व्हायचा प्रयत्न करतं, आणि Apache ने port 80 धरून ठेवला असेल तर तो start fail होतो.

Classroom line

You can install it, but you can't start it.

कसं.

Step 1. Apache बंद करा:

sudo service apache2 stop

Step 2. Nginx install करा:

sudo apt-get install nginx -y

Step 3. तो start करा:

sudo service nginx start

Step 4. http://PUBLIC_IP/ refresh करा. अजूनही ubuntu, तुमचंच page दिसतं, आता Nginx serve करतोय. तुम्ही काहीच copy केलं नाही: Ubuntu वर Nginx पण /var/www/html च वापरतो, आणि स्वतःच्या default page आधी तुमची index.html serve करतो.

Classroom line

On Ubuntu, whether it's Apache or Nginx... both have the same website folder, /var/www/html.

Defaults एकत्र. Amazon Linux वर Apache /var/www/html वापरतो आणि Nginx /usr/share/nginx/html, म्हणून switch करताना files copy कराव्या लागतात. Ubuntu वर दोघंही /var/www/html वापरतात. दोन्ही systems पहिलं page म्हणून index.html देतात, http साठी port 80 आणि https साठी 443 वर.

Amazon Linux आणि Ubuntu एकत्र Login user Amazon Linux ec2-user Ubuntu ubuntu Package manager Amazon Linux yum / dnf Ubuntu apt-get / apt Apache package आणि service Amazon Linux httpd Ubuntu apache2 Apache चा website folder Amazon Linux /var/www/html Ubuntu /var/www/html Nginx चा website folder Amazon Linux /usr/share/nginx/html Ubuntu /var/www/html Apache वरून Nginx Amazon Linux files copy करा Ubuntu copy लागत नाही

Figure 4. Amazon Linux आणि Ubuntu: login user, package manager, Apache चं नाव, आणि Apache आणि Nginx चे website folders.

Handwritten board titled A-linux: Apache with folder /var/www/html, first page (index) index.html, port http 80 and https 443; below it Nginx with folder /usr/share/nginx/html, index index.html, port 80 and 443.

Whiteboard: Amazon Linux वरचे defaults: Apache /var/www/html serve करतो, पहिलं page index.html, http साठी port 80 आणि https साठी 443; Nginx /usr/share/nginx/html serve करतो.

Ubuntu practice झाली की Ubuntu instance terminate करा (किंवा stop करा), म्हणजे तो चालूच राहणार नाही.

8. Apache च्या settings /etc मधल्या एका file मध्ये असतात

का. Folder /var/www/html, पहिलं page index.html आणि port 80 हे फक्त defaults आहेत. एखाद्या project ला site स्वतःच्या folder मध्ये, दुसऱ्या port वर, किंवा दुसऱ्या पहिल्या page सोबत हवी असू शकते. हे Apache च्या settings file मध्ये बदलतात.

काय. Settings (configuration) files /etc मध्ये राहतात:

  1. Amazon Linux वर Apache: /etc/httpd/conf/httpd.conf
  2. Nginx: /etc/nginx/nginx.conf

Folder की file? Folder म्हणजे tiffin box, आणि आतल्या चपात्या म्हणजे files. Folder मध्ये files असतात, आणि दुसरे folders पण असू शकतात. /etc/httpd/conf हा folder आहे; httpd.conf त्याच्या आतली file आहे.

Classroom line

A folder is like a box. It's a tiffin box. The chapatis inside it are the files.

httpd.conf कसं वाचायचं. कुठली language शिकायची गरज नाही. ही साधी text file आहे:

  1. # ने सुरू होणारी line comment असते. Apache ती ignore करतो; ती तुमच्यासाठी explanation आहे.
  2. Setting म्हणजे नाव, एक space आणि value, उदाहरणार्थ Listen 80.
  3. काही settings <IfModule dir_module> ... </IfModule> सारख्या block च्या आत असतात.

Nginx ची file थोड्या वेगळ्या style ची असते (प्रत्येक setting ; ने संपते आणि blocks { } वापरतात), पण idea तीच: बरोबर नाव शोधा आणि त्याची value बदला.

Classroom line

Pay attention only to what you need.

आज आपण बदलणार त्या तीन lines file मध्ये अशा दिसतात:

Listen 80
DocumentRoot "/var/www/html"
<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>
  1. DocumentRoot: website चा folder. फक्त folder, कधीच file नाही.
  2. Listen: Apache कुठल्या port वर थांबतो तो.
  3. DirectoryIndex: URL folder ने संपते तेव्हा दिसणारं पहिलं page. अनेक नावं देता येतात; Apache ती डावीकडून उजवीकडे try करतो आणि जे पहिलं सापडेल ते serve करतो.

9. आपला folder, port आणि पहिलं page (Amazon Linux)

का. Real servers क्वचितच defaults ठेवतात. एक server college site स्वतःच्या port आणि folder वर host करू शकतो, म्हणून कोणत्या तीन ओळी बदलायच्या हे नेमकं माहीत हवं.

Example 4: आपण काय बनवणार.

  1. Folder: /var/www/mycollege
  2. Port: 90
  3. पहिलं page: college.html
  4. URL: http://PUBLIC_IP:90/

/var/www का. Public website चे folders /var (किंवा /usr) खाली ठेवायचे, /home खाली नाही, कारण तो प्रत्येक user चा private असतो. httpd.conf आधीच Apache ला /var/www खालचं सगळं वाचायची परवानगी देतो (<Directory "/var/www"> block, Require all granted सोबत), म्हणून तिथला नवीन folder लगेच चालतो. /var/www च्या बाहेरच्या folder ला स्वतःचा <Directory> block लागेल.

httpd.conf मधल्या तीन lines port,folder आणि पहिलं page ठरवतात Browser http://PUBLIC_IP:90/ Listen 90 DocumentRoot "/var/www/mycollege" DirectoryIndex college.html index.html Listen: Apache कुठल्या port वर थांबतो URL मध्ये :90 आहे, म्हणून ती Apache पर्यंतपोचते. :90 नसेल तर browser port 80 वापरतो. DocumentRoot: website चा folder Apache /var/www/mycollege च्या आत बघतो. तोfolder च पाहिजे, file नाही. DirectoryIndex: पहिलं page नावं डावीकडून उजवीकडे बघतो: आधीcollege.html, मग index.html. Result /var/www/mycollege/college.html →browser

Figure 5. Animation: Listen 90 request ला port 90 वर आत घेतो, DocumentRoot folder निवडतो, DirectoryIndex पहिलं page निवडतो.

कसं.

Step 1. तुमचा Amazon Linux instance start करा, ec2-user ने connect करा, आणि Apache start करा:

sudo service httpd start

Step 2. Settings file उघडा. ती root ची आहे, म्हणून sudo:

sudo nano /etc/httpd/conf/httpd.conf

त्यात खूप काही आहे. काळजी करू नका; तुम्हाला फक्त तीन lines लागतात. एखादा शब्द शोधायला nano मध्ये Ctrl+W वापरा.

Classroom line

There's a lot in here, but don't be scared, okay.

Step 3. Port बदला. Listen 80 शोधा आणि असं करा:

Listen 90

Step 4. Folder बदला. DocumentRoot "/var/www/html" शोधा आणि असं करा:

DocumentRoot "/var/www/mycollege"

Step 5. पहिलं page बदला. DirectoryIndex index.html शोधा आणि असं करा:

DirectoryIndex college.html index.html

आता आधी college.html try होतं, आणि index.html fallback आहे.

Terminal with nano showing part of httpd.conf: comment lines starting with #, the end of a Directory block with Require all granted, and the block IfModule dir_module containing DirectoryIndex index.html.

Whiteboard: nano मध्ये उघडलेली httpd.conf: IfModule dir_module block मधली DirectoryIndex line, बदलण्याच्या आधी, default index.html वर.

Step 6. Ctrl+X, Y, Enter ने save करा.

Step 7. Folder आणि page बनवा:

cd /var/www
sudo mkdir mycollege
cd mycollege
sudo nano college.html

एक page type करा. मराठी पण चालतं:

<h1>माझं कॉलेज</h1>
<p>पुण्याचा पाऊस, कॉलेजचा कट्टा आणि चहा.</p>

Terminal मध्ये मराठी अक्षरांच्या जागी boxes दिसू शकतात, कारण त्याच्या font मध्ये ती अक्षरं नाहीत. Browser ती बरोबर दाखवतो.

Step 8. Apache ला file परत वाचायला सांगा:

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

reload मुळे Apache न थांबता httpd.conf परत वाचतो. Redirecting line फक्त सांगते की service ने तुमची command systemctl कडे दिली, जो services manage करतो. sudo service httpd restart (stop, मग start) पण चालतं.

Step 9. http://PUBLIC_IP/ उघडा. आता ते उघडत नाही, कारण Apache आता port 90 वर थांबतो, आणि port नसलेली URL म्हणजे port 80.

Classroom line

When we don't write a port number, it becomes the default port 80.

Step 10. http://PUBLIC_IP:90/ उघडा. ते थांबून राहतं आणि time out होतं: Security Group अजून port 90 allow करत नाही.

Step 11. Security Group मध्ये port 90 उघडा:

  1. EC2 › Instances › instance select करा › Security tab › Security Group वर click करा.
  2. Edit inbound rules.
  3. 22 आणि 80 चे आधीचे rules आहेत तसेच ठेवा.
  4. Add rule: Type Custom TCP, Port range 90, Source 0.0.0.0/0 (सगळ्यांसाठी; public website साठी बरोबर).
  5. Save rules.
AWS Edit inbound rules table with three rows: SSH TCP 22 source 0.0.0.0/0, HTTP TCP 80 source 0.0.0.0/0, and a new Custom TCP row with port range 90 being typed.

Whiteboard: Edit inbound rules: SSH (22) आणि HTTP (80) चे rules तसेच राहतात, आणि port 90 साठी नवीन Custom TCP rule add होतो.

Classroom line

Now here, don't touch the rules that are there. Add a new one.

Step 12. http://PUBLIC_IP:90/ refresh करा. /var/www/mycollege/college.html मधलं तुमचं मराठी page उघडतं.

Example 5: पहिलं page fallback वर जातं. college.html चं नाव old.html करा आणि refresh करा. Apache ला college.html सापडत नाही, तो पुढचं नाव index.html try करतो, आणि तेही नसेल तर Apache चं test page येतं. नाव परत आधीसारखं करा.

10. httpd start होत नसेल तेव्हा

का. httpd.conf मध्ये एक चुकीचं अक्षर, आणि Apache start होत नाही. Server patient आहे आणि तुम्ही doctor: अंदाज लावू नका, report वाचा.

Classroom line

Our server is our patient and we're the doctor... we have to find out what happened to our patient.

काय दिसतं.

[ec2-user@ip-172-31-xx-xx ~]$ sudo service httpd restart
Redirecting to /bin/systemctl restart httpd.service
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.

कसं.

Step 1. जी service fail झाली तिचा status check करा:

sudo service httpd status

(systemctl status httpd.service पण तेच दाखवतो.)

Classroom line

Whichever service gives the error, check that service's status.

Step 2. शेवटच्या lines वाचा. त्यात file, line number आणि कारण असतं. दोन सगळ्यात common कारणं:

  1. Port आधीच वापरात आहे, उदाहरणार्थ त्याच port वर Nginx चालू आहे.
  2. Config file मध्ये typo.

Example 6: DocumentRoot मध्ये file. Status असं दाखवतो:

AH00526: Syntax error on line 124 of /etc/httpd/conf/httpd.conf:
DocumentRoot '/var/www/index.html' is not a directory, or is not readable

Line 124 वर DocumentRoot "/var/www/index.html" आहे. DocumentRoot ला folder लागतो; file चं नाव DirectoryIndex मध्ये जातं. Line folder वर आणा, उदाहरणार्थ DocumentRoot "/var/www/mycollege", save करा, आणि परत start करा:

sudo service httpd start

Step 3 (उपयोगी सवय). Reload करण्याआधी Apache ला file check करू द्या:

sudo apachectl configtest

File बरोबर असेल तर तो Syntax OK दाखवतो, नसेल तर line number सकट तोच error message.

httpd start होत नाही: doctor बना, report वाचा 1. Start fail Job for httpd.service failed ... 2. Status बघा sudo service httpd status 3. Line वाचा file चं नाव, line number, कारण AH00526: Syntax error on line 124 of/etc/httpd/conf/httpd.conf: DocumentRoot '/var/www/index.html' is not adirectory, or is not readable 4. कारण fix करा port busy, किंवा config मध्ये typo 5. परत start sudo service httpd start DocumentRoot ला folder लागतो; file चं नाव DirectoryIndexमध्ये जातं. File बरोबर असेल तर sudo apachectl configtest Syntax OK दाखवतो.

Figure 6. httpd start होत नाही: status वाचा, file, line आणि कारण शोधा, fix करा, परत start करा. DocumentRoot folder च पाहिजे.

11. पूर्ण flow एका ठिकाणी

  1. Ubuntu: user ubuntu, packages apt-get ने.
  2. sudo apt-get update, मग sudo apt-get install apache2 -y, apache2 -v, sudo service apache2 start, sudo service apache2 status (बाहेर पडायला q).
  3. आपलं page /var/www/html मध्ये (sudo rm index.html, sudo nano index.html).
  4. Permission denied (publickey): key file, IP, user name, OS (AMI name).
  5. Ubuntu वर Nginx: sudo service apache2 stop, sudo apt-get install nginx -y, sudo service nginx start; तोच folder, copy नको.
  6. Amazon Linux settings: sudo nano /etc/httpd/conf/httpd.conf; Listen, DocumentRoot, DirectoryIndex; sudo service httpd reload.
  7. नवीन port: Security Group मध्ये Custom TCP rule add करा, आणि URL मध्ये :port टाका.
  8. Start होत नाही: sudo service httpd status, line वाचा, fix, start; sudo apachectl configtest.

12. Billing चा प्रश्न? Free AWS Support case उघडा

हा विषय का आला. Practice साठी extra servers launch करताना learners ना कधी अनपेक्षित charge किंवा account वर billing hold दिसतो, आणि कोणाला विचारायचं ते कळत नाही.

पार्श्वभूमी. 1. प्रत्येक AWS account, अगदी free Basic support plan वर असलं तरी, Account and billing cases फुकट उघडू शकतं. 2. Console मध्ये वर उजवीकडचा ? menu → Support Center → Create case. 3. Account and billing निवडा, योग्य service आणि category निवडा (उदाहरणार्थ General), आणि प्रॉब्लेम लिहा: कोणता charge, कोणता महिना, तुम्हाला काय अपेक्षित होतं. 4. AWS Support Center मध्ये आणि email ने उत्तर देतं. Technical प्रश्नांसाठी paid support plan लागतो; billing प्रश्नांसाठी नाही. 5. Case उघडण्याआधी Billing and Cost Management → Bills मध्ये बघा charge कोणत्या service आणि Region मधून आला. बहुतेक वेळा तो stop किंवा delete करायचा विसरलेला server किंवा disk असतो.

या chapter शी संबंध. या chapter मध्ये Amazon Linux च्या बाजूला Ubuntu server चालवायचा आहे. दोन servers free-tier hours दुप्पट वेगाने वापरतात, म्हणून काम संपल्यावर दोन्ही stop करणं, आणि bill चुकीचं वाटलं तर कुठे विचारायचं हे माहीत असणं, ही एकाच सवयीचा भाग.

13. Hands-on lab: Ubuntu वर Apache, मग Amazon Linux वर स्वतःचा port आणि folder

हा lab का. तेच काम दोन Linux families वर वेगळं दिसतं, आणि real server वर defaults क्वचितच टिकतात. हा lab Ubuntu वर page host करतो, मग Amazon Linux ची site port 90, स्वतःचा folder आणि स्वतःचं पहिलं page वर नेतो.

  1. Ubuntu मध्ये login करा
    • Command: ssh -i mykey.pem ubuntu@PUBLIC_IP
    • काय दिसेल: ubuntu@ip-...:~$ सारखा prompt.
    • Check करा: whoami → ubuntu
    • का: Ubuntu images वर login user ubuntu. इथे ec2-user वापरलं तर Permission denied (publickey).
  2. Package list refresh करा
    • Command: sudo apt-get update
    • काय दिसेल: Hit: आणि Get: ओळी, मग Reading package lists... Done.
    • Check करा: Failed to fetch ओळी नाहीत.
    • का: नवीन Ubuntu server ची list जुनी असते, म्हणून installs 404 Not Found ने fail होतात. update list refresh करतो; काहीही install करत नाही.
  3. Apache install करा
    • Command: sudo apt-get install apache2 -y
    • काय दिसेल: Download आणि setup च्या ओळी, आणि परत prompt.
    • Check करा: apache2 -v → Server version: Apache/2.4... (Ubuntu)
    • का: Ubuntu वर package आणि service apache2, httpd नाही. Install नंतर Ubuntu तो स्वतः start पण करतो.
  4. Default page बदला
    • Command: cd /var/www/html && sudo rm index.html && sudo nano index.html
    • काय दिसेल: रिकामी file. <h1>ubuntu</h1> type करा, Ctrl+O, Enter ने save, Ctrl+X ने बाहेर.
    • Check करा: http://PUBLIC_IP/ मध्ये ubuntu दिसतं.
    • का: Apache2 Ubuntu Default Page फक्त install सिद्ध करतं. तुमचं स्वतःचं page पूर्ण साखळी सिद्ध करतं: service, folder, port 80 आणि security group.
  5. Amazon Linux वर: httpd.conf चा backup घ्या
    • Command: sudo cp /etc/httpd/conf/httpd.conf ~/httpd.conf.bak
    • काय दिसेल: काहीच नाही.
    • Check करा: ls ~ मध्ये httpd.conf.bak दिसतं.
    • का: एका चुकीच्या अक्षराने Apache थांबतो. Copy असली की working file कडे नेहमी परत जाता येतं.
  6. नवीन folder आणि पहिलं page बनवा
    • Command: sudo mkdir /var/www/mycollege && echo "<h1>My college</h1>" | sudo tee /var/www/mycollege/college.html
    • काय दिसेल: <h1>My college</h1>
    • Check करा: ls /var/www/mycollege → college.html
    • का: /var/www खाली Apache ला आधीच वाचायची परवानगी आहे, म्हणून नवीन folder जादा <Directory> block शिवाय चालतो. tee root म्हणून लिहितो.
  7. तीन ओळी बदला
    • Command: sudo nano /etc/httpd/conf/httpd.conf
    • काय दिसेल: Listen 90, DocumentRoot "/var/www/mycollege" आणि DirectoryIndex college.html index.html set करा. Save करून बाहेर पडा.
    • Check करा: sudo apachectl configtest → Syntax OK
    • का: Listen म्हणजे port, DocumentRoot म्हणजे folder (कधीच file नाही), DirectoryIndex म्हणजे पहिलं page. Restart ने site बंद पडण्याआधी configtest typos पकडतो.
  8. Restart करा आणि आतून तपासा
    • Command: sudo service httpd restart && curl http://localhost:90
    • काय दिसेल: <h1>My college</h1>
    • Check करा: curl http://localhost (port 80) आता Connection refused ने fail होतो.
    • का: Apache settings फक्त start ला वाचतो. Port 80 ने नकार दिला म्हणजे तो खरंच 90 वर गेला.
  9. Port 90 उघडा आणि बाहेरून तपासा
    • करा: Security group → Edit inbound rules → Add rule → Custom TCP, port 90, source Anywhere-IPv4 → Save rules.
    • Check करा: http://PUBLIC_IP:90/ मध्ये My college दिसतं.
    • का: Security group परवानगी देईपर्यंत नवीन port बंद असतो. :90 शिवाय browser port 80 वापरतो.
  10. पूर्ववत करा आणि दोन्ही servers stop करा
    • Command: sudo cp ~/httpd.conf.bak /etc/httpd/conf/httpd.conf && sudo service httpd restart
    • काय दिसेल: काहीच नाही.
    • Check करा: curl http://localhost परत port 80 वर चालतं. Ubuntu आणि Amazon Linux दोन्ही instances stop करा.
    • का: Backup म्हणजेच undo. दोन चालू servers free-tier hours दुप्पट वेगाने वापरतात.

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

Try at home

Task 1: Ubuntu web server

  1. Ubuntu instance launch करा आणि ubuntu ने connect करा.
  2. sudo apt-get update आणि sudo apt-get install apache2 -y ने Apache install करा, आणि apache2 -v ने check करा.
  3. Default page च्या जागी आपली index.html ठेवा.

Task 2: Ubuntu वर Nginx

  1. Apache बंद करा, Nginx install करून start करा, आणि तुमचं page अजून उघडतंय ते check करा.
  2. झालं की Ubuntu instance terminate करा.

Task 3: Permission denied

  1. मुद्दाम तुमच्या Amazon Linux server वर ubuntu ने login करून बघा आणि error वाचा. मग बरोबर login करा.

Task 4: आपला folder, port आणि पहिलं page

  1. Amazon Linux वर Listen 90, DocumentRoot "/var/www/mycollege" आणि DirectoryIndex college.html index.html करा.
  2. Folder आणि page बनवा, reload करा, Security Group मध्ये port 90 उघडा आणि http://PUBLIC_IP:90/ उघडा.

Task 5: doctor बना

  1. आधी copy करा: sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak.
  2. DocumentRoot मध्ये file चं नाव टाका, restart करा, sudo service httpd status वाचा, fix करा, आणि sudo apachectl configtest ने खात्री करा.
  3. जुनी site परत हवी असेल तर default values परत ठेवा (Listen 80, /var/www/html, index.html).

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

Recap

थोडक्यात

  1. Ubuntu जवळजवळ प्रत्येक cloud वर मिळतो. Login ubuntu ने; install apt-get ने.
  2. नवीन Ubuntu server वर आधी sudo apt-get update. 404 Not Found आणि Failed to fetch म्हणजे package list जुनी आहे.
  3. Ubuntu वर Apache म्हणजे apache2; apache2 -v ने check, sudo service apache2 start ने start, status screen मधून बाहेर पडायला q.
  4. प्रत्येक app ला एक key pair. या images ची root disk default 8 GB असते आणि मोठी करता येते; extra disks add करता येतात.
  5. Permission denied (publickey): चुकीची key, चुकीचा IP, चुकीचा user, किंवा वेगळी OS (AMI name बघा).
  6. Ubuntu वर Apache आणि Nginx /var/www/html share करतात; Nginx install करण्याआधी Apache बंद करा.
  7. /etc/httpd/conf/httpd.conf: DocumentRoot = folder, Listen = port, DirectoryIndex = पहिलं page (किंवा pages), डावीकडून उजवीकडे. मग sudo service httpd reload.
  8. नवीन port ला Security Group rule आणि URL मध्ये :port लागतो. httpd start होत नसेल तर त्याचा status वाचा आणि तो सांगतो ती line fix करा.

Ravindra Bagale, trainer: linkedin.com/in/ravindra-bagale. Key names (mykey.pem, instagram-key.pem, facebook-key.pem), mycollege folder, college.html page आणि त्यातला मराठी text शिकण्यासाठीची उदाहरणं आहेत; PUBLIC_IP म्हणजे तुमच्या instance चा public IPv4 address. Outputs मधली package names, links आणि version numbers "..." ने छोटे केलेत; prompt मधलं hostname उदाहरणादाखल आहे.

सराव Tasks

या scenario बद्दल

Jakarta Batik हा जकार्ता मधला हस्तकला व्यवसाय आहे. Siti Rahmawati त्यांचं IT व cloud काम पाहतात. त्यांचे पैसे IDR मध्ये मोजले जातात आणि AWS resources ap-southeast-3 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 दाबा.

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

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

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

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

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

मध्यम Security group बनवा

का: Security group म्हणजे instance भोवतीचा firewall.

काय करायचं: vpc-04a15af432deadbee मध्ये jakartabatik-web-sg नावाचा security group "Web servers" description सह बनवा.

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

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

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

काय करायचं: /etc/nginx/sites-enabled/ मध्ये /etc/nginx/sites-available/jakartabatik ची 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: Ubuntu वर apt-get. Ubuntu yum वापरत नाही. Package list जुनी असेल तर installs fail. apt-get हा Ubuntu चा package manager. update packages ची list refresh करतो. नेहमी आधी update, मग -y सोबत install. Commands:
उजळणी card: Ubuntu वर apt-get · PNG download करा
उजळणी card: Ubuntu login user: ubuntu. Ubuntu वर ec2-user वापरल्यास Permission denied (publickey). प्रत्येक AMI चा स्वतःचा default user. Ubuntu चा ubuntu. ssh मध्ये तो वापरा; तरी fail झालं तर key, IP आणि SG तपासा. Login:
उजळणी card: Ubuntu login user: ubuntu · PNG download करा
उजळणी card: Apache httpd.conf settings. Apache चा folder, port किंवा पहिलं page बदलायला settings file लागते. DocumentRoot = folder, Listen = port, DirectoryIndex = पहिलं page. /etc/httpd/conf/httpd.conf edit करा, httpd restart, SG मध्ये port उघडा. Lines:
उजळणी card: Apache httpd.conf settings · PNG download करा
उजळणी card: Root disk आणि extra disks. 8 GB root disk logs आणि uploads ने पटकन भरते. Root disk मध्ये OS. Extra EBS disks मध्ये data, हलवता येतात. lsblk disks दाखवतो; df -h किती भरल्या ते. lsblk:
उजळणी card: Root disk आणि extra disks · PNG download करा
मुलाखत card: Permission denied (publickey) कशामुळे?. चुकीचा user, चुकीची key, चुकीच्या key permissions, किंवा चुकीचा server. तुम्ही दिलेली key server ने नाकारली. Ubuntu ला ubuntu@, ec2-user@ नाही.
मुलाखत card: Permission denied (publickey) कशामुळे? · PNG download करा
मुलाखत card: Install आधी apt-get update का?. उपलब्ध packages आणि versions ची list refresh करतो. जुनी list नसलेल्या files कडे point करते (404 fetch errors). Commands:
मुलाखत card: Install आधी apt-get update का? · PNG download करा
मुलाखत card: प्रत्येक app ला एक key pair का?. मग leak झालेली key फक्त एका app चे servers उघडते. नुकसान मर्यादित आणि keys बदलणं सोपं. shop servers साठी shop.pem, blog साठी blog.pem.
मुलाखत card: प्रत्येक app ला एक key pair का? · PNG download करा

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