An end-to-end DevOps project that automates the deployment of a containerized Node.js application on Kubernetes using Docker, Amazon ECR, Helm, and GitHub Actions.
The project demonstrates a complete CI/CD workflow—from writing code to automatically building Docker images, pushing them to Amazon ECR, and deploying the latest version to a Kubernetes cluster using Helm.
Deploying applications manually is time-consuming and error-prone.
The goal of this project was to understand how modern DevOps teams automate software delivery using containers, Kubernetes, CI/CD pipelines, and monitoring tools.
This project helped me gain hands-on experience with real-world deployment workflows instead of only running applications locally.
- Node.js
- Docker
- Amazon ECR
- Kubernetes
- Helm
- GitHub Actions
- NGINX Ingress
- Prometheus
- Grafana
- AWS EC2
- Minikube
Developer
│
▼
GitHub Repository
│
▼
GitHub Actions
(Build & Push Docker Image)
│
▼
Amazon ECR
│
▼
Helm Upgrade
│
▼
Kubernetes Cluster
│
┌─────────────┐
│ Deployment │
└─────────────┘
│
▼
Service
│
▼
NGINX Ingress
│
▼
Application
Prometheus
│
▼
Grafana Dashboard
- Developer pushes code to GitHub.
- GitHub Actions automatically builds the Docker image.
- The image is pushed to Amazon ECR.
- GitHub Actions connects to the Kubernetes server.
- ECR credentials are refreshed automatically.
- Helm upgrades the application deployment.
- Kubernetes pulls the latest Docker image.
- The updated application becomes available without manual deployment.
- Dockerized Node.js application
- Automated Docker image build
- Private image storage using Amazon ECR
- Kubernetes Deployment & Service
- Helm chart for reusable deployments
- Automated CI/CD using GitHub Actions
- NGINX Ingress configuration
- Prometheus & Grafana monitoring
- Automatic ECR authentication refresh
- Rolling updates using Kubernetes
.
├── .github/
│ └── workflows/
│ └── ci-cd.yml
├── nodeapp/
│ ├── templates/
├── deployment.yml
├── service.yml
│ ├── Chart.yaml
│ └── values.yaml
├── Dockerfile
├── index.js
└── package.json
During this project, I learned how to:
- Containerize applications using Docker
- Push private images to Amazon ECR
- Deploy applications on Kubernetes
- Package Kubernetes resources using Helm
- Build CI/CD pipelines using GitHub Actions
- Configure NGINX Ingress
- Monitor Kubernetes using Prometheus & Grafana
- Troubleshoot real deployment issues such as ImagePullBackOff, private ECR authentication, and rollout failures
- Deploy on Amazon EKS instead of Minikube
- Configure a custom domain using Route 53
- Enable HTTPS with Let's Encrypt
- Replace SSH deployment with GitOps using ArgoCD
- Provision infrastructure using Terraform
Utsav
Feel free to connect or suggest improvements.



