Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions Application-Code/backend/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
FROM node:14
WORKDIR /usr/src/app

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .
CMD ["node", "index.js"]

CMD ["node","index.js"]
9 changes: 7 additions & 2 deletions Application-Code/frontend/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
FROM node:14
WORKDIR /usr/src/app

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .
CMD [ "npm", "start" ]

CMD ["npm","start"]
Comment on lines 1 to +11
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🌐 Web query:

Node.js LTS version 2025 2026 end of life schedule current

πŸ’‘ Result:

As of Jan 16, 2026 β€” key Node.js LTS / EoL dates:

  • Node.js 24 (Active LTS "Krypton") β€” Maintenance starts Oct 20, 2026; End of security fixes Apr 30, 2028. (github.com)
  • Node.js 22 (LTS) β€” End of security fixes Apr 30, 2027. (github.com)
  • Node.js 20 (Maintenance LTS) β€” End of security fixes Apr 30, 2026 (EoL: Apr 30, 2026). (github.com)

Notes: the official Node.js Releases page and the Release Working Group repo contain the authoritative schedule above. (nodejs.org)

Would you like these as a calendar file or a migration-plan checklist?

Citations:


🌐 Web query:

Node.js Docker official image node:lts tag latest LTS version

πŸ’‘ Result:

The node:lts Docker tag currently points to Node.js 24 (Active LTS) β€” e.g., tag variants like lts, 24, 24.13.0 are listed on the official Node image. [1][2]

Sources:

  • Docker Hub (official node image tags showing lts β†’ 24 / 24.13.0). [1]
  • Node.js releases page (v24 is Active LTS). [2]

Update the Node base image to a supported LTS.

node:14 is end-of-life and no longer receives security fixes. Update to node:lts (currently Node.js 24, supported through April 2028), then pin to a specific version once validated for compatibility.

πŸ”§ Proposed update
-FROM node:14
+FROM node:lts
πŸ“ Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
FROM node:14
WORKDIR /usr/src/app
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD [ "npm", "start" ]
CMD ["npm","start"]
FROM node:lts
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm","start"]
πŸ€– Prompt for AI Agents
In `@Application-Code/frontend/Dockerfile` around lines 1 - 11, Update the
Dockerfile's base image line that currently reads "FROM node:14" to use a
supported LTS tag (e.g., "FROM node:lts") so the container runs on a maintained
Node.js release; make this change in the Dockerfile (look for the FROM node:14
line) and after validating compatibility locally pin to a specific LTS version
tag (for repeatable builds) before merging.

Binary file added Kubernetes-Manifests-file/.ingress.yaml.swp
Binary file not shown.
4 changes: 2 additions & 2 deletions Kubernetes-Manifests-file/Backend/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ spec:
- name: ecr-registry-secret
containers:
- name: api
image: 407622020962.dkr.ecr.us-east-1.amazonaws.com/backend:latest
image: public.ecr.aws/y4y0r8u9/three-tier-backend:latest
imagePullPolicy: Always
env:
- name: MONGO_CONN_STR
Expand Down Expand Up @@ -54,4 +54,4 @@ spec:
port: 3500
initialDelaySeconds: 5
periodSeconds: 5
successThreshold: 1
successThreshold: 1
11 changes: 11 additions & 0 deletions Kubernetes-Manifests-file/Database/gp2-csi.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gp2-csi
provisioner: ebs.csi.aws.com
parameters:
type: gp2
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Delete
allowVolumeExpansion: true

9 changes: 5 additions & 4 deletions Kubernetes-Manifests-file/Database/pvc.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@ kind: PersistentVolumeClaim
metadata:
name: mongo-volume-claim
namespace: three-tier
spec:
accessModes:
spec:
storageClassName: gp2-csi
accessModes:
- ReadWriteOnce
storageClassName: ""
resources:
requests:
storage: 1Gi
storage: 1Gi

6 changes: 3 additions & 3 deletions Kubernetes-Manifests-file/Frontend/deployment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ spec:
- name: ecr-registry-secret
containers:
- name: frontend
image: 407622020962.dkr.ecr.us-east-1.amazonaws.com/frontend:latest
image: public.ecr.aws/y4y0r8u9/three-tier-frontend:latest
imagePullPolicy: Always
env:
- name: REACT_APP_BACKEND_URL
value: "http://backend.amanpathakdevops.study/api/tasks"
value: "/api/tasks"
ports:
- containerPort: 3000
- containerPort: 3000
13 changes: 13 additions & 0 deletions Kubernetes-Manifests-file/Frontend/frontend-service.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
apiVersion: v1
kind: Service
metadata:
name: frontend-service
namespace: three-tier
spec:
type: ClusterIP
selector:
role: frontend
ports:
- port: 80 # πŸ‘ˆ REQUIRED for Ingress
targetPort: 3000 # πŸ‘ˆ containerPort

12 changes: 0 additions & 12 deletions Kubernetes-Manifests-file/Frontend/service.yaml

This file was deleted.

251 changes: 251 additions & 0 deletions Kubernetes-Manifests-file/iam_policy.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,251 @@
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iam:CreateServiceLinkedRole"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"iam:AWSServiceName": "elasticloadbalancing.amazonaws.com"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:DescribeAccountAttributes",
"ec2:DescribeAddresses",
"ec2:DescribeAvailabilityZones",
"ec2:DescribeInternetGateways",
"ec2:DescribeVpcs",
"ec2:DescribeVpcPeeringConnections",
"ec2:DescribeSubnets",
"ec2:DescribeSecurityGroups",
"ec2:DescribeInstances",
"ec2:DescribeNetworkInterfaces",
"ec2:DescribeTags",
"ec2:GetCoipPoolUsage",
"ec2:DescribeCoipPools",
"ec2:GetSecurityGroupsForVpc",
"ec2:DescribeIpamPools",
"ec2:DescribeRouteTables",
"elasticloadbalancing:DescribeLoadBalancers",
"elasticloadbalancing:DescribeLoadBalancerAttributes",
"elasticloadbalancing:DescribeListeners",
"elasticloadbalancing:DescribeListenerCertificates",
"elasticloadbalancing:DescribeSSLPolicies",
"elasticloadbalancing:DescribeRules",
"elasticloadbalancing:DescribeTargetGroups",
"elasticloadbalancing:DescribeTargetGroupAttributes",
"elasticloadbalancing:DescribeTargetHealth",
"elasticloadbalancing:DescribeTags",
"elasticloadbalancing:DescribeTrustStores",
"elasticloadbalancing:DescribeListenerAttributes",
"elasticloadbalancing:DescribeCapacityReservation"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"cognito-idp:DescribeUserPoolClient",
"acm:ListCertificates",
"acm:DescribeCertificate",
"iam:ListServerCertificates",
"iam:GetServerCertificate",
"waf-regional:GetWebACL",
"waf-regional:GetWebACLForResource",
"waf-regional:AssociateWebACL",
"waf-regional:DisassociateWebACL",
"wafv2:GetWebACL",
"wafv2:GetWebACLForResource",
"wafv2:AssociateWebACL",
"wafv2:DisassociateWebACL",
"shield:GetSubscriptionState",
"shield:DescribeProtection",
"shield:CreateProtection",
"shield:DeleteProtection"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:AuthorizeSecurityGroupIngress",
"ec2:RevokeSecurityGroupIngress"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateSecurityGroup"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags"
],
"Resource": "arn:aws:ec2:*:*:security-group/*",
"Condition": {
"StringEquals": {
"ec2:CreateAction": "CreateSecurityGroup"
},
"Null": {
"aws:RequestTag/elbv2.k8s.aws/cluster": "false"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:CreateTags",
"ec2:DeleteTags"
],
"Resource": "arn:aws:ec2:*:*:security-group/*",
"Condition": {
"Null": {
"aws:RequestTag/elbv2.k8s.aws/cluster": "true",
"aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
}
}
},
{
"Effect": "Allow",
"Action": [
"ec2:AuthorizeSecurityGroupIngress",
"ec2:RevokeSecurityGroupIngress",
"ec2:DeleteSecurityGroup"
],
"Resource": "*",
"Condition": {
"Null": {
"aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
}
}
},
{
"Effect": "Allow",
"Action": [
"elasticloadbalancing:CreateLoadBalancer",
"elasticloadbalancing:CreateTargetGroup"
],
"Resource": "*",
"Condition": {
"Null": {
"aws:RequestTag/elbv2.k8s.aws/cluster": "false"
}
}
},
{
"Effect": "Allow",
"Action": [
"elasticloadbalancing:CreateListener",
"elasticloadbalancing:DeleteListener",
"elasticloadbalancing:CreateRule",
"elasticloadbalancing:DeleteRule"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": [
"elasticloadbalancing:AddTags",
"elasticloadbalancing:RemoveTags"
],
"Resource": [
"arn:aws:elasticloadbalancing:*:*:targetgroup/*/*",
"arn:aws:elasticloadbalancing:*:*:loadbalancer/net/*/*",
"arn:aws:elasticloadbalancing:*:*:loadbalancer/app/*/*"
],
"Condition": {
"Null": {
"aws:RequestTag/elbv2.k8s.aws/cluster": "true",
"aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
}
}
},
{
"Effect": "Allow",
"Action": [
"elasticloadbalancing:AddTags",
"elasticloadbalancing:RemoveTags"
],
"Resource": [
"arn:aws:elasticloadbalancing:*:*:listener/net/*/*/*",
"arn:aws:elasticloadbalancing:*:*:listener/app/*/*/*",
"arn:aws:elasticloadbalancing:*:*:listener-rule/net/*/*/*",
"arn:aws:elasticloadbalancing:*:*:listener-rule/app/*/*/*"
]
},
{
"Effect": "Allow",
"Action": [
"elasticloadbalancing:ModifyLoadBalancerAttributes",
"elasticloadbalancing:SetIpAddressType",
"elasticloadbalancing:SetSecurityGroups",
"elasticloadbalancing:SetSubnets",
"elasticloadbalancing:DeleteLoadBalancer",
"elasticloadbalancing:ModifyTargetGroup",
"elasticloadbalancing:ModifyTargetGroupAttributes",
"elasticloadbalancing:DeleteTargetGroup",
"elasticloadbalancing:ModifyListenerAttributes",
"elasticloadbalancing:ModifyCapacityReservation",
"elasticloadbalancing:ModifyIpPools"
],
"Resource": "*",
"Condition": {
"Null": {
"aws:ResourceTag/elbv2.k8s.aws/cluster": "false"
}
}
},
{
"Effect": "Allow",
"Action": [
"elasticloadbalancing:AddTags"
],
"Resource": [
"arn:aws:elasticloadbalancing:*:*:targetgroup/*/*",
"arn:aws:elasticloadbalancing:*:*:loadbalancer/net/*/*",
"arn:aws:elasticloadbalancing:*:*:loadbalancer/app/*/*"
],
"Condition": {
"StringEquals": {
"elasticloadbalancing:CreateAction": [
"CreateTargetGroup",
"CreateLoadBalancer"
]
},
"Null": {
"aws:RequestTag/elbv2.k8s.aws/cluster": "false"
}
}
},
{
"Effect": "Allow",
"Action": [
"elasticloadbalancing:RegisterTargets",
"elasticloadbalancing:DeregisterTargets"
],
"Resource": "arn:aws:elasticloadbalancing:*:*:targetgroup/*/*"
},
{
"Effect": "Allow",
"Action": [
"elasticloadbalancing:SetWebAcl",
"elasticloadbalancing:ModifyListener",
"elasticloadbalancing:AddListenerCertificates",
"elasticloadbalancing:RemoveListenerCertificates",
"elasticloadbalancing:ModifyRule",
"elasticloadbalancing:SetRulePriorities"
],
"Resource": "*"
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,21 +10,20 @@ metadata:
spec:
ingressClassName: alb
rules:
- host: backend.amanpathakdevops.study
http:
- http:
paths:
- path: /api
pathType: Prefix
backend:
service:
name: api
port:
port:
number: 3500
- path: /
pathType: Prefix
backend:
service:
name: frontend
port:
number: 3000
name: frontend-service
port:
number: 80

Loading