Wednesday, 9 April 2025

6. A school stores records of Class XII students using a list that contains multiple lists as its elements.

 A school stores records of Class XII students using a list that contains multiple lists as its elements. The structure of each such element is [Student_Name, Marks, MainSubject]. Crate user-defined functions to perform the operations as mentioned below:

(a) Push_student(): To push the Student_Name and Marks of all those students, who have Science as MainSubject, into a Stack StudentInfo
(b) Pop_student(): To delete all items (one at a time) from the stack StudentInfo in LIFO order and display them. Also display "Empty Stack" when there are no items remaining in the stack.
For Example:
If the stored information is:
[['Akansha',98,"Mathematics"],["Priti",96,"Science"],["Garima",99,"Science"],["Ayushi",78,"English"]]
The stack should contain:
[['Priti', 96], ['Garima', 99]]
The output should be:
["Garima",99]
["Priti",96]
Empty Stack

Solution:

def Push_student():
    for S in L:
        if S[2]=="Science":
            StudentInfo.append([S[0],S[1]])
    print(StudentInfo)
    
def Pop_student():
    while StudentInfo!=[]:
        print(StudentInfo.pop())
    else:
        print("Stack is Empty")

Push_student()
Pop_student()




8. Write a program in Python to input 5 words and push them one by one into a list named All.

  Write a program in Python to input 5 words and push them one by one into a list named All.

The program should then use the function PushNV() to create a stack of words in the list NoVowel so that it store only those words which do not have any vowel present in it, from the list All.
Thereafter, pop each word from the list NoVowel and display the popped word. When the stack is empty display the message 'EmptyStack'.
For Example:
If the words accepted and pushed into the list All are
['DRY','LIKE','RHYTHM','WORK','GYM']
Then the stack NoVowel should store
['DRY','RHYTHM','GYM']
And the output should be displayed as
GYM 
RHYTHM 
DRY 
EmptyStack


Solution:

Words=[]
for i in range(5):
    w=input("Enter any word: ")
    Words.append(w)

print(Words)
Stk=[]
V='aeiouAEIOU'

def  PushNV():
    for w in Words:
        c=0
        for v in V:
            if v in w:
                c=c+1
        if c==0:
            Stk.append(w)

def PopNV():
    while Stk!=[]:
        print(Stk.pop())
    else:
        print("Stack is Empty")


PushNV()
PopNV()

5. Priyanka has created a dictionary 'emeployee_data' containing EmpCode and Salary as key value pairs

 Priyanka has created a dictionary 'emeployee_data' containing EmpCode and Salary as key value pairs for 5 Employees of Cyber Intratech. Write a program, With separate user defined function, as mentioned below, to perform the following operations:

(a)  push_emp(): Push all those EmpCode, where the Salary is less than 25000, from the dictionary into a stack 'stk_emp'
(b)  pop_emp(): Remove all the elements from the stack, one at a time, in a Last-In-First-Out(LIFO) manner and displays them. It also displays 'Stack is empty' once all the element have been removed.
For Example:
If the sample content of the dictionary is as follows:
{'E001':15000,'E002':27000,'E003':30000,'E004':15000,'E005':19000}, then the stack 'stk_emp' will contain EmpCode E001, E004, E005 after push_emp(). pop_emp() will pop and display employee record in LIFO fashion and display 'Stack is empty' at last.

Solution:

stk_emp=[]
employee_data={'E001':15000,'E002':27000,'E003':30000,'E004':15000,'E005':19000}

def push_emp():
    for k in employee_data.keys():
        if employee_data[k]<25000:
            stk_emp.append(k)

def pop_emp():
    while stk_emp!=[]:
        print(stk_emp.pop())
    else:
        print("Stack is Empty")



push_emp()
pop_emp()

3. Write a program in Python, with separate user defined functions to perform the following operations on Stack 'City'.

Write a program in Python, with separate user defined functions to perform the following operations on Stack 'City'.

(a) - Push the pin code and name of the city in the stack 'City'
(b) - Display the latest added element in the stack 'City'


Solutions:


City=[]
data=[['Delhi',110001],['Sonipat',152364],['Khatauli',251201]]

def Push_City():
    for i in data:
        City.append(i)
    

def Display_City():
    L=len(City)
    print(City[L-1])

Push_City()
Display_City()

2. A School has created a dictionary containing top players and their runs as key value pairs of cricket team.

 A School has created a dictionary containing top players and their runs as key value pairs of cricket team. Write a program with separate user defined functions to perform the following operations:

(a)    Push the name of the players(Keys) of the dictionary into a stack, where the corresponding runs (value) is greater than 49.
(b)    Pop and display the content of the stack.
For Example
If dictionary has the following values:
Data={'Rohan':40, 'Rihaan':55, 'Tejas':80,'Ajay':90}
The output should be:
Ajay
Tejas
Rihaan


Solutions

S=[]
Data={'Rohan':40, 'Rihaan':55, 'Tejas':80,'Ajay':90}
def Push_Player():
    for k in Data.keys():
        if Data[k]>49:
            S.append(k)

def Pop_Player():
    while S!=[]:
        print(S.pop())
    else:
        print("Stack is Empty")



Push_Player()
Pop_Player()

1. Suppose L = [3, 4, 5, 20, 4, 5], What is L after L.pop()?

 1. Suppose L = [3, 4, 5, 20, 4, 5], What is L after L.pop()?

  1. [3,4,5,20,4]
  2. [3,5,20,4,5]
  3. [3,5,20,5]
  4. Error

Ans: 

1. [3, 4, 5, 20, 4]

Explanation:

>>> L = [3, 4, 5, 20, 4, 5]
>>> L.pop()
5
>>> L
[3, 4, 5, 20, 4]

Sunday, 6 April 2025

How to Host Multiple Next.js Applications on a Single VM with Nginx and Custom Domains

 If you're working with multiple Next.js applications and want to host them all on a single virtual machine (VM) while assigning different domains or subdomains to each, this guide is for you. We'll walk through setting up PM2, Nginx, domain pointing, and even HTTPS using Let's Encrypt.


๐Ÿงฑ Step 1: Set Up Each Next.js Application

1. Build Each App

First, navigate to each app directory and build it for production:

# App 1 cd /path/to/your/nextjs-app1 npm install npm run build # App 2 cd /path/to/your/nextjs-app2 npm install npm run build # App 3 cd /path/to/your/nextjs-app3 npm install npm run build

2. Manage Your Apps Using PM2

Create an ecosystem.config.js file to manage your apps:

module.exports = { apps: [ { name: "app1", script: "npm", args: "run start", cwd: "/path/to/your/nextjs-app1", env: { NODE_ENV: "production", PORT: 4300 } }, { name: "app2", script: "npm", args: "run start", cwd: "/path/to/your/nextjs-app2", env: { NODE_ENV: "production", PORT: 4301 } }, { name: "app3", script: "npm", args: "run start", cwd: "/path/to/your/nextjs-app3", env: { NODE_ENV: "production", PORT: 4302 } } ] };

Start all apps using PM2:

pm2 start ecosystem.config.js

๐ŸŒ Step 2: Install and Configure Nginx

1. Install Nginx

sudo apt update sudo apt install nginx

2. Create Nginx Configuration for Each Domain

Create a configuration file for each app in /etc/nginx/sites-available/.

Example: app1.yourdomain.com

server { listen 80; server_name app1.yourdomain.com ; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }

Repeat the same for other domains like app2.yourdomain.com and app3.yourdomain.com using the corresponding ports.

3. Enable the Sites

sudo ln -s /etc/nginx/sites-available/app1.yourdomain.com /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/app2.yourdomain.com /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/app3.yourdomain.com /etc/nginx/sites-enabled/

4. Test and Restart Nginx

sudo nginx -t sudo systemctl restart nginx

๐ŸŒ Step 3: Point Your Domains to the VM

Log in to your domain provider (e.g., GoDaddy, Namecheap) and update the DNS records:

app1.yourdomain.com[Your VM IP] app2.yourdomain.com[Your VM IP] app3.yourdomain.com[Your VM IP]

Add A records for each subdomain, pointing to the public IP of your VM.


๐Ÿ” Step 4: Enable SSL with Let's Encrypt (Recommended)

1. Install Certbot

sudo apt install certbot python3-certbot-nginx

2. Obtain SSL Certificates

sudo certbot --nginx -d upload.inditechit.com -d app2.yourdomain.com -d app3.yourdomain.com

Follow the prompts to complete the setup.

3. Test Renewal (Optional)

sudo certbot renew --dry-run

✅ Done!

Now you have multiple Next.js apps running on a single VM, each served on a custom domain with HTTPS. Nginx handles the routing via reverse proxy, while PM2 keeps your apps alive and running in the background.