Skip to content

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

52 Commits

Folders and files

Repository files navigation

🔍 Cloud-Native CV Application

This project is a modern online CV display and generation application, designed using a microservices architecture and deployed in a highly available Cloud environment. The main objective is to practice key DevOps concepts: Infrastructure as Code (IaC), containerization, Kubernetes orchestration, and continuous deployment (CI/CD).

🏗️ Technical Architecture

The application is split into three distinct, autonomous, and scalable microservices:

Component Technology Role
cv-frontend React / Nginx Responsive web user interface to view the CV.
cv-api Node.js / Express REST API managing dynamic profile data.
cv-pdf Node.js Worker PDF generation and export service for the CV.

🛠️ DevOps & Cloud Stack

  • Cloud Provider: Microsoft Azure (Managed resources)
  • Orchestration: Azure Kubernetes Service (AKS) (Cluster: aks-cv-cluster)
  • Image Registry: Azure Container Registry (ACR) (cvregistryfranck.azurecr.io)
  • CI/CD: GitHub Actions (Automated Build & Push)
  • Routing & Ingress: Nginx Ingress Controller (Reverse-proxy and single entry point to the cluster)
  • IaC: Terraform (Automated provisioning of Azure infrastructure)

🐳 Alternative: Fast Local Run (Docker Compose)

If you want to test the application locally without deploying to Azure/Kubernetes, you can spin up the entire stack in seconds using Docker Compose:

  1. Clone the repository and navigate to the root directory.
  2. Run the following command:
docker-compose up --build

Open your browser and navigate to http://localhost:3000 (or the port configured for your frontend) to view the application.

🔀 Deployment Workflow (CI/CD Pipeline)

The code lifecycle is fully automated using a GitHub Actions pipeline (ci.yml):

  1. Build & Tag: On every commit to the main branch, GitHub Actions triggers Docker image builds for each microservice.
  2. Push to ACR: Secure authentication to Azure via repository deployment secrets, followed by pushing images with both the latest tag and the commit hash (SHA).
  3. Rotation Strategy: Managed Azure access keys with dual-entry rotation to ensure continuous security without service interruption.

[ Code Commit ] ──> [ GitHub Actions ] ──> [ Azure Container Registry (ACR) ] │ (Image Pull) ▼ [ Azure Kubernetes Service ] ├── Ingress Nginx Controller ├── Pod cv-frontend (Running) ├── Pod cv-api (Running) └── Pod cv-pdf (Running)

Note: All application pods are configured to run resiliently and are self-managed by Kubernetes.


⚙️ Configuration & Environment

The proper functioning of the application depends on the configuration of environment variables.

1. Local Configuration

Before running the project locally, create a .env file at the root by copying the provided example:

cp .env.example .env
Variable Description Default Value
API_URL The API URL for the cv-pdf service to fetch data. http://api:8000
  1. Cloud Deployment (Azure) When deploying to Azure (via App Service, Container Apps, or Kubernetes), these variables must be defined directly in the Azure Portal:

Navigate to your specific Azure resource.

Access Configuration (or Environment variables).

Add API_URL with the public URL value of your deployed API service (e.g., https://api-cv.azurewebsites.net).


🚀 Local Deployment & Key Commands

Prerequisites

  • Configured Azure CLI
  • kubectl connected to the AKS cluster

1. Apply Kubernetes Manifests

To deploy the entire stack (Deployments, Services, Ingress) to the cluster:

kubectl apply -f k8s/
  1. Check Cluster Health Status
kubectl get pods -n default

Expected status: All components (cv-frontend, cv-api, cv-pdf, ingress-nginx) must display a Running status.

  1. Retrieve Public Access IP
kubectl get ingress

Copy the public IP address from the ADDRESS column to browse the live application.

🧠 Skills Validated Through This Project Microservices Architecture: Decoupling responsibilities and managing inter-service communication.

Cloud Security: Advanced secret management (GitHub Secrets), network isolation, and access role management (AcrPull) between Azure services.

Resilience & High Availability: Configuring Kubernetes deployment strategies, automatic container restarts upon failure, and traffic management via Ingress.

Troubleshooting: Deep container log analysis (kubectl logs), investigating Pod lifecycles (ImagePullBackOff debugging), and workflow pipeline analysis.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages