Skip to content
Open
Show file tree
Hide file tree
Changes from 4 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