Automated-To-Do-List-Deployment-with-Monitoring-Excellence
CI/CD Pipeline and Monitoring

Hello, I am sumit and currently pursing my final year of graduation with IT stream from JSPM BSIOTR Wagholi Pune. I am currently learning DevOps with TrainWIthShubham. I have prior knowledge of Java, JSP, Servlet, SQL and Data structure also.I am a hard worker, smart and quick learner.
Successfully deployed a single-node todo app using Docker, while implementing a robust CI/CD pipeline via Jenkins to automate code integration, building, testing, and deployment. Enhanced monitoring capabilities through the integration of Grafana and Prometheus for comprehensive performance monitoring and analysis.
Perequisites:
Launch AWS ec2 instance
Install Git:
sudo apt update sudo apt install gitInstall Docker
sudo apt update sudo apt install docker.io sudo chown $USER:docker /var/run/docker.sockInstall Docker-Compose
sudo apt update sudo apt install docker-composeInstall Jenkins
sudo apt update sudo apt install fontconfig openjdk-17-jre 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 sudo apt-get install jenkinsInstall Grafana
sudo apt-get install -y apt-transport-https sudo apt-get install -y software-properties-common wget sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key sudo apt-get update sudo apt-get install grafana sudo systemctl start grafana-serverInstall Prometheus Config file
Wget https://raw.githubusercontent.com/prometheus/prometheus/main/documentation/examples/prometheus.ymlcreate on docker-compose.yml file
version: '3.2' services: prometheus: image: prom/prometheus:latest container_name: prometheus ports: - 9090:9090 command: - --config.file=/etc/prometheus/prometheus.yml volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro depends_on: - cadvisor cadvisor: image: gcr.io/cadvisor/cadvisor:latest container_name: cadvisor ports: - 8080:8080 volumes: - /:/rootfs:ro - /var/run:/var/run:rw - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro depends_on: - redis redis: image: redis:latest container_name: redis ports: - 6379:6379
Now our installation is done, lets start:
Pull code from git
ubuntu@ip-172-31-33-17:~/project/node-todo-cicd$ git clone https://github.com/LondheShubham153/node-todo-cicd.git
Create docker.yml file
command: vim docker

#to build the use command
docker build -t node-app .
#to run the image use command
docker run -d -p 8000:8000 node-app:latest
#to check is container is running or not use
docker ps
You can see on port 8000 our project is running

Now lets use Docker-Compose to run the project
Command: vim docker-compose.yml

Here:
version: It's version Docker Compose file format being used.
services: This section defines the services that make up your application.
app: This is the name of the service.
build: This section is used to configure the build process for the Docker image
context: This sets the build context to the current directory (
.), meaning that Docker will look for the Dockerfile and related files in the current directory.ports: This section defines the ports that should be exposed by the container.
Note:
if you want to pull the image from the docker-hub you can do this just do one change in docker-compose file

image: This line specifies the Docker image to use for the
appservice. In this case, the Docker image is "sumit9730/node-app".if we pulling the image from docker-hub we not need to write docker file
#to run docker-compose file use
docker-compose up
#you can check on 8000 port our app is running
#to stop the container use
docker-compose down

Lets add some volume to our app so app data will not lost
Open docker-compose file and do change

now run the app

you can see our app running and we have add some data also that will add in app_data

Lets create a jenkins CI/CD pipeline
Open Jenkins on port no 8080
steps:
click on new item & select pipeline

add discription
select github project and add the github app URL

write pipeline script

save the file
Click on build now button

you can see pipeline is created
Our app also running

Lets do monitoring for our app through
grafana and Prometheus
our installation is already done
open grafana on 3000 port
default id is admin, pass is admin
then you can set password
Note:
- make sure you stoped the jenkins server because cAdvisor also running on 8080 port
What is monitoring:
Grafana is an open-source analytics and monitoring platform that integrates with various data sources, including time-series databases, log data, and more. It is commonly used for monitoring and visualizing the performance of applications, systems, and infrastructure. Monitoring by Grafana involves using Grafana to create dashboards that display real-time or historical data in a visually appealing and easily understandable format.
Steps:
click on datasource
click on prometheus
give me name, link and save this
search the grafana dashboards on google
search docker container and host metrics and copy the dashboards id
you can now monitor your containers



Note:
you have to add a job in prometheus.yml file
- job_name: "Docker" static_configs: - targets: - "cadvisor: 8080"restart the prometheus by
docker-compose up -dPorts that must be added in AWS instance security group (Inbound rules)

- Port 8000 for Node-App
- Port 3000 for Grafana
- Port 8080 for Jenkins & cAdvisor
- Port 9090 for Prometheus
Finally our project is done. I hope you liked this blog. If you want more project you can comment for it. We successfully deployed app also we created CI/CD Pipeline through jenkins and monitoring by grafana




