This repository contains a full-stack service: a Java Spring Boot backend and a React frontend.
It is packaged and deployed as Docker containers to Kubernetes (AWS EKS). Infrastructure is provisioned with Terraform and configured with Ansible. CI/CD runs via Jenkins and monitoring is provided by Prometheus.
- Backend: Java, Spring Boot, Maven
- Frontend: TypeScript, React, npm
- CI/CD: Jenkins (
Jenkinsfile) - Containerization: Docker
- Orchestration: Kubernetes (EKS)
- Infrastructure: Terraform
- Configuration: Ansible
- Monitoring: Prometheus
- Cloud: AWS
Developer -> Git (CI: Jenkins) -> Build & Test -> Docker images -> Container Registry -> Kubernetes (EKS) -> AWS
Infra (provision/configure): Terraform + Ansible
Monitoring: Prometheus scrapes application /metrics endpoints
backend/— Spring Boot service, Maven projectfrontend/— React app, npm/TypeScriptDockerfile(orbackend/Dockerfile,frontend/Dockerfile) — container build filesk8s/— Kubernetes manifests (deployments, services, ingress)infra/— Terraform code for AWS resourcesansible/— Ansible playbooks for configurationJenkinsfile— CI/CD pipelinemonitoring/— Prometheus config, alerting rules
- Java 17+ and Maven
- Node 18+ and npm/yarn
- Docker
- kubectl and access to a Kubernetes cluster
- AWS CLI (if deploying to EKS)
- Terraform and Ansible (for infra changes)
Start backend: mvn spring-boot:run
Start frontend: cd frontend npm install npm start
By default, the frontend expects the backend API at the configured base URL. Adjust frontend env file if needed.
Backend: cd backend mvn -DskipTests=false clean test package
Frontend: cd frontend npm install npm test npm run build
Build images locally: docker build -t my-backend:latest -f backend/Dockerfile . docker build -t my-frontend:latest -f frontend/Dockerfile . frontend/Dockerfile frontend
Tag and push to your registry (example for ECR):
Apply manifests: kubectl apply -f k8s/
If using Terraform for cluster and infra: cd terraform terraform init terraform plan terraform apply
After infra is provisioned, update image references and apply k8s/ manifests.
Jenkinsfile defines the pipeline:
- Checkout
- Build & test backend/frontend
- Build Docker images
- Push images to registry
- Deploy to Kubernetes
Adjust credentials and environment variables in your Jenkins configuration.
terraform/holds Terraform modules for EKS, networking, and registry.ansible/contains playbooks used post-provisioning (node configuration, secrets distribution).
Make infrastructure changes in infra/ and use terraform plan / terraform apply. Use Ansible for runtime configuration tasks.
Prometheus scrapes application /actuator/prometheus or /metrics endpoints. Check monitoring/ for scrape rules and alerting configuration.
- Backend logs:
kubectl logs deploy/<backend-deployment> - Frontend logs: browser devtools or
kubectl logs - Kubernetes status:
kubectl get pods -A - Terraform state:
terraform state listinterraform/
- Follow existing project structure.
- Run unit tests before opening PRs.
- Update
k8s/manifests when changing service ports or environment variables.
backend/README.md— backend dev notesfrontend/README.md— frontend dev notesJenkinsfile— CI/CD pipelineterraform/— Terraform configurationk8s/— deployment manifests
cd scripts ls -la chmod +x *.sh ./deploy.sh