MCPcopy Create free account
hub / github.com/DevMadhup/Wanderlust-Mega-Project

github.com/DevMadhup/Wanderlust-Mega-Project @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
69 symbols 191 edges 60 files 0 documented · 0% updated 2y ago★ 53

Browse by type

Functions 66 Types & classes 3
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Wanderlust - Your Ultimate Travel Blog 🌍✈️

WanderLust is a simple MERN travel blog website ✈ This project is aimed to help people to contribute in open source, upskill in react and also master git.

Preview Image

Wanderlust Mega Project End to End Implementation

In this demo, we will see how to deploy an end to end three tier MERN stack application on EKS cluster.

Project Deployment Flow:

Tech stack used in this project:

  • GitHub (Code)
  • Docker (Containerization)
  • Jenkins (CI)
  • OWASP (Dependency check)
  • SonarQube (Quality)
  • Trivy (Filesystem Scan)
  • ArgoCD (CD)
  • Redis (Caching)
  • AWS EKS (Kubernetes)
  • Helm (Monitoring using grafana and prometheus)

How pipeline will look after deployment:

  • CI pipeline to build and push image

  • CD pipeline to update application version image

  • ArgoCD application for deployment on EKS image

[!Important] Below table helps you to navigate to the particular tool installation section fast.

Tech stack Installation
Jenkins Master Install and configure Jenkins
eksctl Install eksctl
Argocd Install and configure ArgoCD
Jenkins-Worker Setup Install and configure Jenkins Worker Node
OWASP setup Install and configure OWASP
SonarQube Install and configure SonarQube
Email Notification Setup Email notification setup
Monitoring Prometheus and grafana setup using helm charts
Clean Up Clean up
#

Pre-requisites to implement this project:

  • Root user access
sudo su

[!Note] This project will be implemented on North California region (us-west-1).

  • Create 1 Master machine on AWS with 2CPU, 8GB of RAM (t2.large) and 29 GB of storage and install Docker on it.

  • Open the below ports in security group of master machine and also attach same security group to Jenkins worker node (We will create worker node shortly) image

[!Note] We are creating this master machine because we will configure Jenkins master, eksctl, EKS cluster creation from here.

Install & Configure Docker by using below command, "NewGrp docker" will refresh the group config hence no need to restart the EC2 machine.

apt-get update
apt-get install docker.io -y
usermod -aG docker ubuntu && newgrp docker

  • Install and configure Jenkins (Master machine)
sudo apt update -y
sudo apt install fontconfig openjdk-17-jre -y

sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
  https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key

echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" \
  https://pkg.jenkins.io/debian-stable binary/ | sudo tee \
  /etc/apt/sources.list.d/jenkins.list > /dev/null

sudo apt-get update -y
sudo apt-get install jenkins -y
  • Now, access Jenkins Master on the browser on port 8080 and configure it.

  • Create EKS Cluster on AWS (Master machine)
  • IAM user with access keys and secret access keys
  • AWSCLI should be configured (Setup AWSCLI) bash curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" sudo apt install unzip unzip awscliv2.zip sudo ./aws/install aws configure

  • Install kubectl (Master machine)(Setup kubectl ) bash curl -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 --client

  • Install eksctl (Master machine) (Setup eksctl) bash curl --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 version

  • Create EKS Cluster (Master machine) bash eksctl create cluster --name=wanderlust \ --region=us-west-1 \ --version=1.30 \ --without-nodegroup

  • Associate IAM OIDC Provider (Master machine) bash eksctl utils associate-iam-oidc-provider \ --region us-west-1 \ --cluster wanderlust \ --approve
  • Create Nodegroup (Master machine) bash eksctl create nodegroup --cluster=wanderlust \ --region=us-west-1 \ --name=wanderlust \ --node-type=t2.large \ --nodes=2 \ --nodes-min=2 \ --nodes-max=2 \ --node-volume-size=29 \ --ssh-access \ --ssh-public-key=eks-nodegroup-key

    [!Note] Make sure the ssh-public-key "eks-nodegroup-key is available in your aws account"

  • Setting up jenkins worker node
  • Create a new EC2 instance (Jenkins Worker) with 2CPU, 8GB of RAM (t2.large) and 29 GB of storage and install java on it bash sudo apt update -y sudo apt install fontconfig openjdk-17-jre -y
  • Create an IAM role with administrator access attach it to the jenkins worker node Select Jenkins worker node EC2 instance --> Actions --> Security --> Modify IAM role image

  • Configure AWSCLI (Setup AWSCLI) bash sudo su bash curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" sudo apt install unzip unzip awscliv2.zip sudo ./aws/install aws configure

  • generate ssh keys (Master machine) to setup jenkins master-slave bash ssh-keygen image

  • Now move to directory where your ssh keys are generated and copy the content of public key and paste to authorized_keys file of the Jenkins worker node.

  • Now, go to the jenkins master and navigate to Manage jenkins --> Nodes, and click on Add node
    • name: Node
    • type: permanent agent
    • Number of executors: 2
    • Remote root directory
    • Labels: Node
    • Usage: Only build jobs with label expressions matching this node
    • Launch method: Via ssh
    • Host: \<public-ip-worker-jenkins>
    • Credentials: Add --> Kind: ssh username with private key --> ID: Worker --> Description: Worker --> Username: root --> Private key: Enter directly --> Add Private key
    • Host Key Verification Strategy: Non verifying Verification Strategy
    • Availability: Keep this agent online as much as possible

  • And your jenkins worker node is added image

  • Install docker (Jenkins Worker)
apt install docker.io -y
usermod -aG docker ubuntu && newgrp docker

  • Install and configure SonarQube (Master machine)
docker run -itd --name SonarQube-Server -p 9000:9000 sonarqube:lts-community

  • Install Trivy (Jenkins Worker)
sudo apt-get install wget apt-transport-https gnupg lsb-release -y
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list
sudo apt-get update -y
sudo apt-get install trivy -y

  • Install and Configure ArgoCD (Master Machine)
  • Create argocd namespace bash kubectl create namespace argocd
  • Apply argocd manifest bash kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
  • Make sure all pods are running in argocd namespace bash watch kubectl get pods -n argocd
  • Install argocd CLI bash curl --silent --location -o /usr/local/bin/argocd https://github.com/argoproj/argo-cd/releases/download/v2.4.7/argocd-linux-amd64
  • Provide executable permission bash chmod +x /usr/local/bin/argocd
  • Check argocd services bash kubectl get svc -n argocd
  • Change argocd server's service from ClusterIP to NodePort bash kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "NodePort"}}'
  • Confirm service is patched or not bash kubectl get svc -n argocd
  • Check the port where ArgoCD server is running and expose it on security groups of a worker node image
  • Access it on browser, click on advance and proceed with bash <public-ip-worker>:<port> image image image
  • Fetch the initial password of argocd server bash kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
  • Username: admin
  • Now, go to User Info and update your argocd password

Steps to add email notification

  • Go to your Jenkins Master EC2 instance and allow 465 port number for SMTPS

  • Now, we need to generate an application password from our gmail account to authenticate with jenkins
  • Open gmail and go to Manage your Google Account --> Security

    [!Important] Make sure 2 step verification must be on

image

  • Search for App password and create a app password for jenkins image image

  • Once, app password is create and go back to jenkins Manage Jenkins --> Credentials to add username and password for email notification image

  • Go back to Manage Jenkins --> System and search for Extended E-mail Notification image

  • Scroll down and search for E-mail Notification and setup email notification

    [!Important] Enter your gmail password which we copied recently in password field E-mail Notification --> Advance

image image image

Steps to implement the project:

  • Go to Jenkins Master and click on Manage Jenkins --> Plugins --> Available plugins install the below plugins:
  • OWASP
  • SonarQube Scanner
  • Docker
  • Pipeline: Stage View

  • Configure OWASP, move to Manage Jenkins --> Plugins --> Available plugins (Jenkins Worker) image

  • After OWASP plugin is installed, Now move to Manage jenkins --> Tools (Jenkins Worker) image

  • Login to SonarQube server and create the credentials for jenkins to integrate with SonarQube
  • Navigate to Administration --> Security --> Users --> Token image image image

  • Now, go to Manage Jenkins --> credentials and add Sonarqube credentials: image

  • Go to Manage Jenkins --> Tools and search for SonarQube Scanner installations: image

  • Go to Manage Jenkins --> credentials and add Github credentials to push updated code fro

Extension points exported contracts — how you extend this code

browse all types & interfaces →

Core symbols most depended-on inside this repo

browse all functions →

Shape

Function 66
Interface 3

Languages

TypeScript100%

Modules by API surface

frontend/src/pages/add-blog.tsx10 symbols
backend/controllers/auth-controller.js9 symbols
backend/controllers/posts-controller.js8 symbols
backend/utils/cache-posts.js4 symbols
frontend/src/components/category-pill.tsx3 symbols
frontend/src/pages/signup-page.tsx2 symbols
frontend/src/pages/signin-page.tsx2 symbols
frontend/src/pages/details-page.tsx2 symbols
frontend/src/components/theme-toggle-button.tsx2 symbols
frontend/src/components/modal.tsx2 symbols
backend/tests/utils/helper-objects.js2 symbols
backend/services/redis.js2 symbols

Datastores touched

(mongodb)Database · 1 repos

For agents

$ claude mcp add Wanderlust-Mega-Project \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page