This project demonstrates the deployment of a microservices-based payment application using Docker containers, CI/CD pipelines via Jenkins, and a full suite of DevOps tools for quality assurance, monitoring, caching, and centralized logging.

| Layer | Technology |
|---|---|
| Frontend | Angular + Nginx |
| Backend | Python (FastAPI) |
| Database | MongoDB |
| Caching | Redis |
| Logging | ELK Stack (Elasticsearch, Logstash, Kibana) |
| Monitoring | Prometheus, Grafana, Node Exporter, cAdvisor |
| CI/CD | Jenkins, SonarQube, Nexus |
| Containerization | Docker, Docker Compose |
| Infrastructure | Ubuntu EC2 Instance |
Each service runs in its own Docker container:
- Frontend: Angular app served via Nginx
- Backend:
auth_service: FastAPI with Uvicornpayment_service: FastAPI with Redis integration
- Database: MongoDB
- Caching: Redis for session management
- Logging: ELK stack for centralized log aggregation
- Monitoring: Prometheus + Grafana dashboards
- Code Checkout: Jenkins pulls latest code from GitHub
- Code Quality: SonarQube static analysis for frontend and backend
- Build:
- Angular frontend via Angular CLI
- Python backend with virtualenv and Uvicorn
- Dockerization:
- Dockerfiles for each service
- Tagged and pushed to Nexus & DockerHub
- Deployment: Docker Compose orchestrates all services
- Monitoring:
- Prometheus scrapes metrics
- Grafana visualizes dashboards and alerts
- Logging:
- Logstash collects container logs
- Elasticsearch indexes logs
- Kibana visualizes logs
- Caching: Redis stores session data for fast retrieval
- Ubuntu EC2 instance
- Installed tools:
- Git, Jenkins, SonarQube, Nexus
- Docker & Docker Compose
- Node.js (via nvm), Angular CLI
- Python 3.x, virtualenv
- Prometheus, Grafana, ELK Stack
- Install required plugins
- Configure global tools and credentials
- Define pipeline stages for:
-
Grafana Dashboards:
-
Prometheus Alerts:
-
ELK Stack:
- Redis container runs on shared Docker network
- Integrated with
payment_servicefor session caching - Speeds up transaction retrieval and reduces DB load
- Backend services use same internal ports due to Docker network isolation
- Nginx reverse proxy routes requests to appropriate backend services
- Custom
nginx.confanddefault.confdefine routing logic
Thomas V Varghese
Junior DevOps/Cloud Engineer at Keyshell IT Solutions
Focused on scalable CI/CD workflows, cloud-native deployment, and infrastructure automation.



