Architecture & DevOps – Letter Box
Architecture logique
flowchart LR Client --> Frontend Frontend --> Backend Backend --> PostgreSQL Scraper --> MongoDB Scraper --> Backend
Ce schéma illustre l’architecture réelle du projet : le client interagit avec le frontend (React), qui communique avec le backend (FastAPI). Le backend gère la persistance dans PostgreSQL. Le scraper (Scrapy) collecte des films, les stocke dans MongoDB, puis les transmet au backend pour intégration.
Sommaire
- Objectif du projet
- Vue Fonctionnelle
- Vue Technique / Infrastructure
- Déploiement Kubernetes
- CI/CD – Pipeline DevOps
- Exemple de workflow GitHub Actions
- Ports utilisés
- Flux applicatif
Objectif du projet
Ce projet consiste à concevoir, développer et déployer une application web de gestion de films, intégrant une architecture full-stack, un scraper, une base de données relationnelle, et une chaîne DevOps complète (CI/CD, conteneurisation, orchestration Kubernetes).
Les objectifs pédagogiques sont :
- Mettre en œuvre les pratiques DevOps modernes
- Automatiser le cycle de vie applicatif
- Garantir la qualité, la sécurité et la reproductibilité
Vue Fonctionnelle
L’application permet de gérer des films, avec opérations CRUD :
- Ajout, édition et suppression d’un film
- Visualisation d’une liste publique
- Interaction entre frontend et backend via API REST
Composants principaux :
| Couche | Technologie | Description |
|---|---|---|
| Frontend | React / HTML / CSS | Interface utilisateur |
| Backend | FastAPI (Python) | API de gestion des données |
- Build des images Docker
- Exécution des tests backend
- Push des images sur le registry
- Déploiement automatique sur le cluster Kubernetes
- Gestion des secrets via GitHub Secrets
Déploiement Kubernetes
- Un Deployment pour chaque service (frontend / backend / DB / scraper)
- Service NodePort pour l’accès à l’interface
- Utilisation de variables d’environnement pour la connexion DB
Exemple de manifest simplifié :
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
spec:
replicas: 1
template:
spec:
containers:
- name: backend
image: badrtajini/letterboxd-backend:latest
env:
- name: DATABASE_URL
value: postgres://...CI/CD – Pipeline DevOps
Intégration et Livraison Continue (CI/CD) pour Letter Box :
- Utilisation de GitHub Actions pour automatiser les tests, le build, et le déploiement
- Lint, tests unitaires, build Docker, push registry, déploiement Kubernetes
Exemple de workflow GitHub Actions
name: CI/CD
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install backend dependencies
run: |
cd projet/backend
pip install -r requirements.txt
- name: Run backend tests
run: |
cd projet/backend
pytest
- name: Build Docker images
run: docker-compose build
- name: Push Docker images
run: docker-compose push
- name: Deploy to Kubernetes
run: |
kubectl apply -f projet/devops/kubernetes-deployment.yamlPorts utilisés
| Composant | Port |
|---|---|
| Frontend | 3000 |
| Backend | 8001 |
| PostgreSQL | 5432 |
| MongoDB | 27017 |
| Quartz (doc) | 8080 |
Flux applicatif
- Un utilisateur consulte le frontend (port 3000), qui interroge l’API backend (port 8001).
- Le backend lit/écrit dans PostgreSQL (port 5432).
- Le scraper importe des films depuis AlloCiné, stocke dans MongoDB, puis exporte vers le backend.
Cette architecture garantit la modularité, la scalabilité et la maintenabilité du projet.
Architecture logique
flowchart LR Client --> Frontend Frontend --> Backend Backend --> PostgreSQL Scraper --> MongoDB Scraper --> Backend
Ce schéma illustre l’architecture réelle du projet : le client interagit avec le frontend (React), qui communique avec le backend (FastAPI). Le backend gère la persistance dans PostgreSQL. Le scraper (Scrapy) collecte des films, les stocke dans MongoDB, puis les transmet au backend pour intégration.