Welcome to the Three-Tier App Deployment Challenge by @AhmadProjects-git! This repository showcases the deployment of a Three-Tier Web Application built with ReactJS βοΈ, NodeJS π, and MongoDB π, deployed on Amazon EKS βΈοΈ (Elastic Kubernetes Service).
The goal is to demonstrate modern DevOps practices, scalable infrastructure, and end-to-end CI/CD automation using AWS Cloud services.
π― Deploy, Enhance, and Learn! Feel free to clone, customize, and extend this setup β perfect for portfolio or production-ready Kubernetes projects.
Before starting, make sure you have:
- π³ Basic knowledge of Docker, Kubernetes, and AWS
- βοΈ An AWS account with necessary permissions
Located in the Application-Code directory β contains the frontend (ReactJS) and backend (NodeJS) source code for the three-tier application.
In the Jenkins-Pipeline-Code directory β includes Jenkins pipeline scripts for CI/CD automation, ensuring smooth build, test, and deploy processes.
Found in Jenkins-Server-TF β Terraform scripts that automate Jenkins server provisioning on AWS, simplifying infrastructure management.
In Kubernetes-Manifests-Files β YAML manifests for deploying the app on EKS, managing pods, services, and deployments.
π οΈ Core Tools:
- Terraform & AWS CLI for Infrastructure as Code
- Jenkins, SonarQube, Kubectl, and Helm for CI/CD setup
- Prometheus, Grafana for Monitoring
- ArgoCD for GitOps
π’ Deployment Flow:
- IAM user setup & Terraform provisioning π§©
- Jenkins deployment with AWS integration βοΈ
- EKS cluster creation & load balancer setup βΈοΈ
- Secure Docker image storage in ECR π³
- Helm-based monitoring stack π
- ArgoCD for GitOps automation π
π This journey covers everything from infrastructure to continuous delivery β the full DevOps lifecycle!
For a detailed step-by-step guide, check out my detailed DevSecOps walkthrough.
# Create a user with AdministratorAccess
aws iam create-user --user-name eks-adminGenerate and configure access keys.
Launch an Ubuntu instance and SSH into it:
ssh -i "key.pem" ubuntu@<EC2-IP>curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
sudo apt install unzip -y
unzip awscliv2.zip
sudo ./aws/install
aws configuresudo apt update
sudo apt install docker.io -y
sudo usermod -aG docker $USER
docker pscurl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.19.6/2021-01-05/bin/linux/amd64/kubectl
chmod +x ./kubectl && sudo mv ./kubectl /usr/local/bin
kubectl version --short --clientcurl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
sudo mv /tmp/eksctl /usr/local/bin
eksctl versioneksctl create cluster --name three-tier-cluster --region us-west-2 --node-type t2.medium --nodes-min 2 --nodes-max 2
aws eks update-kubeconfig --region us-west-2 --name three-tier-cluster
kubectl get nodeskubectl create namespace workshop
kubectl apply -f .curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.5.4/docs/install/iam_policy.json
aws iam create-policy --policy-name AWSLoadBalancerControllerIAMPolicy --policy-document file://iam_policy.jsonhelm repo add eks https://aws.github.io/eks-charts
helm repo update
helm install aws-load-balancer-controller eks/aws-load-balancer-controller -n kube-system --set clusterName=three-tier-cluster --set serviceAccount.create=false --set serviceAccount.name=aws-load-balancer-controllereksctl delete cluster --name three-tier-cluster --region us-west-2Then:
- Stop or terminate EC2 instances
- Delete load balancers and security groups to avoid extra costs
- π΄ Fork this repository
- π± Create your feature branch (
git checkout -b feature/amazing-feature) - π» Commit your changes (
git commit -m "Added awesome enhancement") - π Push to your branch (
git push origin feature/amazing-feature) - π Open a Pull Request
π The best implementations or enhancements may be showcased on this repository! Share your creative deployments and GitOps workflows.
Having issues or questions? Open an issue here β letβs troubleshoot together!
Happy Learning! ππ¨βπ»π©βπ» Maintained by: @AhmadProjects-git
Would you like me to also create a short version for the GitHub βAboutβ section (the 1β2 line repo description + tags for visibility like #AWS #DevOps #Kubernetes #EKS)?