A comprehensive Python web application demonstrating enterprise-grade DevOps practices with a complete CI/CD pipeline, Infrastructure as Code, GitOps implementation, and comprehensive monitoring.
This project showcases a Solar System visualization web application built with modern DevOps practices, featuring:
|
|
π± Application Stack
| Technology | Purpose | Version |
|---|---|---|
| Frontend Structure | Latest | |
| Styling & Animations | Latest | |
| Interactive UI | ES6+ | |
| Backend API | 3.x | |
| Database | Latest | |
| Testing Framework | Latest |
π DevOps & Infrastructure
π Monitoring & Observability
| Tool | Purpose |
|---|---|
| Metrics collection and alerting | |
| Visualization dashboards and analytics | |
| π Health Checks | Built-in health checks and structured logging |
π‘ Tip: Make sure you have the following tools installed and configured before starting:
Follow these steps to get your Solar System DevOps application up and running:
git clone https://github.com/karimzakzouk/graduation-project-devops.git
cd graduation-project-devopsUpdate the Terraform/2-backend.tf file with your S3 bucket details for Terraform remote state storage.
Navigate to the Terraform directory and initialize the deployment:
cd Terraform/
terraform init
terraform apply -auto-approveβ³ This will provision: VPC, EKS cluster, ArgoCD, and the monitoring stack.
After Terraform completes, it will output the command to configure kubectl. Run that command to connect to your new EKS cluster.
The CI/CD pipeline handles this automatically. To deploy manually:
kubectl apply -f argocd/application.yamlποΈ Click to expand project structure
βββ π± Application Code
β βββ app.py # Main Python application
β βββ app_test.py # Test suites
β βββ index.html # Frontend UI
β βββ Dockerfile # Container definition
β
βββ βΈοΈ Helm
β βββ helm/
β βββ Chart.yaml # Helm chart metadata
β βββ values.yaml # Configuration values
β βββ templates/ # Kubernetes manifests
β
β
βββ ποΈ Terraform
β βββ 0-versions.tf # Provider versions
β βββ ... # Main infrastructure files
β βββ modules/
β βββ vpc/ # VPC module
β βββ eks/ # EKS cluster module
βββ π Scalability (Karpenter)
β βββ karpenter/
β βββ karpenter-resources.yaml # Auto-scaling configuration
β
βββ π Monitoring & GitOps
β βββ argocd/
β βββ monitoring.yml # Prometheus & Grafana configuration
β βββ application.yml # Application dashboards
β
βββ π CI/CD Workflows
β βββ .github/workflows/
β βββ main-pipeline.yml # Orchestrator workflow
β βββ ci.yml # Test, quality checks & SonarQube
β βββ docker.yml # Container build & push
β βββ terraform.yml # Infrastructure deployment
β βββ karpenter.yml # Auto-scaling provisioner
β βββ argocd.yml # GitOps controller setup
β βββ monitoring.yml # Observability stack deployment
β βββ deploy.yml # Application deployment
βββ π§ backend/
β βββ main.tf # Terraform S3 & DynamoDB
β
βββ πΌοΈ Static Assets
βββ static/ # Planet images & backgrounds
|
|
|
π Detailed Workflow Breakdown
- Orchestrates all sub-workflows (CI, Docker, Terraform, etc.)
- Allows configurable skips for faster development cycles
- Runs unit tests and code coverage
- Enforces quality gates before allowing code to be merged
- Builds multi-architecture container images
- Scans images for vulnerabilities and pushes to multiple registries
- Manages infrastructure provisioning and updates via IaC
- Uses an S3 backend for secure state management
- Manages auto-scaling and resource management
- Manages monitoring stack deployment
- Manages ArgoCD deployment and drift detection
- Manages application deployment
|
Git repository serves as the single source of truth for all deployments |
ArgoCD continuously monitors Git repo and automatically syncs changes to cluster |
Automatically corrects configuration drift to ensure live state matches desired state |
Easily revert to previous stable application states with a single command |
|
|
|
|
|
|
|
Contributions are welcome! If you have suggestions for improvement, please open an issue or submit a pull request.
- π΄ Fork the Project
- πΏ Create your Feature Branch
git checkout -b feature/AmazingFeature
- πΎ Commit your Changes
git commit -m 'Add some AmazingFeature' - π€ Push to the Branch
git push origin feature/AmazingFeature
- π Open a Pull Request
