This is a endβtoβend DevOps project showcasing the complete containerization, deployment, and automation of a full-stack MEAN (MongoDB, Express, Angular, Node.js) application.
The app manages a collection of tutorials and supports full CRUD operations plus search β all built and shipped with a production mindset.
What I implemented:
- Docker containerization
- Cloud deployment
- Reverse proxy
- CI/CD automation
Developer β GitHub β GitHub Actions (CI/CD)
β Docker Hub β AWS EC2 β Docker Compose
β MongoDB β Backend β Frontend β Nginx Reverse Proxy
- Node.js
- Express.js
- MongoDB
- Mongoose
- Angular 15
- HTTPClient
- Docker
- Docker Compose
- AWS EC2 (Ubuntu)
- Nginx
- GitHub Actions
- Docker Hub
β Create, Read, Update, Delete tutorials β Search tutorials by title β REST API based architecture β Containerized microservices β Cloud deployment β Reverse proxy on port 80 β Automated CI/CD pipeline β GitOps-style, zero-touch deployments
crud-dd-task-mean-app
β
βββ backend
β βββ app
β βββ server.js
β βββ Dockerfile
β
βββ frontend
β βββ src
β βββ Dockerfile
β
βββ docker-compose.yml
βββ README.md
git clone https://github.com/deep-priyo/mean-crud-devops
cd mean-crud-devops
cd backend
npm install
node server.js
cd frontend
npm install
ng serve
Application runs on:
http://localhost:4200
Both frontend and backend are containerized using Docker.
docker build -t <docker-username>/mean-backend ./backend
docker build -t <docker-username>/mean-frontend ./frontend
docker push <docker-username>/mean-backend
docker push <docker-username>/mean-frontend
An Ubuntu EC2 instance was configured with:
- Docker
- Docker Compose
- Nginx
The application is deployed using:
docker compose up -d
MongoDB is deployed as an official Docker container.
GitHub Actions is configured to automate:
- Docker image build
- Image push to Docker Hub
- Automatic deployment on AWS EC2
The CI/CD workflow is scoped to application and infra changes to avoid unnecessary builds on docs-only commits.
It runs on changes to:
-
Backend source code
-
Frontend source code
-
Dockerfiles and container configurations
-
Deployment and infrastructure configuration files
Documentation-only updates do not trigger the pipeline. This optimization reduces cloud usage and avoids redundant Docker Hub pushes.
Nginx is configured to:
- Route frontend and backend traffic
- Expose the application on port 80
- Hide internal container ports
- Enable production-style deployment
Users can access the deployed application using the EC2 public IPv4 address:
http://<EC2-public-ipv4-address>
Example:
http://13.127.148.3
β οΈ Note: The public IPv4 address of the EC2 instance is dynamic and may change when the instance is stopped and restarted.
In production, pin with an Elastic IP or use a custom domain + DNS + HTTPS (SSL).
To ensure production reliability and prevent data loss, additional improvements were implemented in the infrastructure.
Initially, MongoDB data was lost whenever Docker containers were restarted.
To solve this, a named Docker volume was configured:
mongo:
image: mongo
container_name: mongo
restart: always
ports:
- "27017:27017"
volumes:
- mongo-data:/data/dbβ Docker containers isolated β MongoDB internal network β SSH secure access β Secrets managed using GitHub Actions β Reverse proxy architecture
This is the main dashboard of the MEAN stack CRUD app deployed on AWS EC2.
Served via Nginx on port 80 β confirming successful cloud deployment.
Full CRUD in action: update, publish, delete.
All actions hit REST APIs (Node.js/Express) with data persisted in MongoDB (Dockerized).
Create flow from Angular β Backend β MongoDB, validating endβtoβend cloud integration.
Docker images for frontend and backend in Docker Hub β built and pushed automatically via GitHub Actions.
All services (frontend, backend, MongoDB) running on AWS EC2 via Docker Compose.
Automated CI/CD pipeline execution: image build β push β deploy to cloud infra.
Successful automated deployment: remote container updates and service restarts on EC2.
Served through Nginx reverse proxy on port 80.
Internal container ports hidden for production-style security and ergonomics.
This project demonstrates a production-ready DevOps workflow:
- Scalable architecture
- Automated deployment
- Containerized services
- Cloud-ready
- High availability
This approach ensures: β Faster deployment β Reduced manual errors β Improved scalability β Easy maintenance
- HTTPS with SSL (Letβs Encrypt / ACM)
- Custom domain + DNS
- Kubernetes (EKS/K3s) deployment
- Monitoring with Prometheus & Grafana
- Load balancing (ALB/Nginx)
- BlueβGreen/Canary deployments
- IaC with Terraform or Pulumi
Hi, Iβm P M β DevOps | FullβStack | Cloud | Automation.
I built this project to showcase realβworld DevOps skills across build, ship, and run.
Letβs connect for collaboration or opportunities! βοΈ
β If you found this useful, consider leaving a star β it helps recruiters discover it! β¨
β
Made with β€οΈ for learning, reliability, and speed.







