You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
OpsCI_filmfinder — Docker + Kubernetes
Une application web entièrement conteneurisée avec un frontend, une API REST et PostgreSQL — orchestrée avec Docker Compose et Kubernetes (Minikube).
OpsCI_filmfinder est une application web trois-tiers entièrement conteneurisée, conçue pour démontrer une approche DevOps moderne. Elle permet de consulter et rechercher des films via une API REST, le tout déployable localement avec Docker Compose ou sur un cluster Kubernetes via Minikube.
Objectifs du projet
Conteneuriser une application multi-services avec Docker
Orchestrer les déploiements avec Kubernetes (Minikube)
Mettre en place un pipeline CI/CD (GitLab CI & GitHub Actions)
Introduire l'event streaming avec Apache Kafka
Automatiser les opérations via scripts Bash et Makefile
Stack Technique
Composant
Technologie
Frontend
Nginx (HTML / JS / CSS)
Backend
Python — FastAPI (API REST)
Base de données
PostgreSQL 15
Messagerie
Apache Kafka + ZooKeeper
Conteneurisation
Docker + Docker Compose
Orchestration
Kubernetes — Minikube
CI/CD
GitLab CI/CD + GitHub Actions
Automatisation
Scripts Bash + Makefile + CRON
Justifications techniques
FastAPI — haute performance (ASGI), documentation automatique via /docs, syntaxe Python simple et productive. Nginx — léger, idéal pour servir du contenu statique et jouer le rôle de reverse proxy. PostgreSQL — fiable, robuste, adapté aux données structurées. Kafka — introduction à l'event streaming et simulation d'architecture distribuée.
make run # Lancer le mode développement interactif
make docker # Démarrer avec Docker Compose
make k8s # Déployer sur Kubernetes
make test# Exécuter les tests
make status # Afficher l'état du système
make logs # Afficher les logs
make clean # Nettoyage complet
# Construire et démarrer tous les services
docker-compose up --build
# Arrêter les services
docker-compose down
# Réinitialisation complète (supprime les volumes)
docker-compose down -v
docker system prune -a --volumes
kubectl apply -f k8s/postgres-deploy.yaml
kubectl wait --for=condition=ready pod -l app=postgres --timeout=60s
kubectl get pods | grep postgres
Étape 4 — Déployer le backend et le frontend
kubectl apply -f k8s/k8s-deploy.yaml
kubectl set env deployment/backend \
DATABASE_URL="postgresql://filmfinder:filmfinder123@postgres-service:5432/filmfinder"
kubectl delete pod -l app=backend # redémarrage pour prendre en compte la variable
Étape 5 — Accéder à l'application
# Frontend
minikube service frontend
minikube service frontend --url
# Backend (terminal séparé)
kubectl port-forward deployment/backend 8000:8000
curl http://localhost:8000/movies
Le script prend en charge : démarrage de Minikube, construction des images, déploiement PostgreSQL, déploiement backend/frontend, configuration des variables d'environnement et vérification de l'état des pods.
Base de Données
Le projet utilise PostgreSQL comme base de données principale. Les données sont initialement chargées depuis backend/data/movies.json (30 films), puis insérées automatiquement dans PostgreSQL au démarrage.
Source de données contrôlée par variable d'environnement
Valeur
Mode
DATA_SOURCE=json
Prototype — données depuis movies.json
DATA_SOURCE=db
Production — données depuis PostgreSQL
Endpoints API
Endpoint
Description
GET /movies
Liste paginée des films
GET /movies/{id}
Détail d'un film
GET /movies/{id}/similar
Recommandations par réalisateur
GET /movies/search?query=
Recherche par titre
Kafka — Event Streaming
Kafka est intégré pour simuler une architecture orientée événements et gérer la communication asynchrone entre les services.
Composants
ZooKeeper (port 2181) — gestion des métadonnées et coordination du cluster
curl -I http://127.0.0.1:<PORT>/images/image_1.jpeg
kubectl exec deployment/frontend -- ls -la /usr/share/nginx/html/images/
Redémarrer les déploiements
kubectl rollout restart deployment/backend
kubectl rollout restart deployment/frontend
# Ou redémarrer tous les pods
kubectl delete pods --all
Limitations Connues
Pas de Kubernetes Secrets — le mot de passe de la base est en clair dans les manifests
Déploiement local uniquement — Minikube n'est pas adapté à la production
Base de données éphémère — les volumes emptyDir perdent les données au redémarrage du pod ; utiliser un PersistentVolume en production
Pas d'outil de monitoring — Prometheus/Grafana non intégrés
Nettoyage
Docker
docker-compose down -v
docker system prune -af
docker volume rm opsci_filmfinder_postgres_data
Kubernetes
kubectl delete -f k8s/postgres-deploy.yaml
kubectl delete -f k8s/k8s-deploy.yaml
# Ou tout supprimer dans le namespace
kubectl delete all --all
minikube stop
minikube delete # optionnel — supprime le cluster entièrement
Documentation
La documentation détaillée est disponible dans le dossier /docs :
Fichier
Description
Conception_backend_frontend.md
TME2: Conception backend & frontend
Database_Integration.md
TME3: Intégration de la base de données
CI-CD-integration_raport.md
TME4: d'intégration CI/CD
Dockerisation.md
TME5/6: Configuration Docker
Kubernettes.md
TME7 de déploiement Kubernetes
Kafka & Event.md
TME10/11: Streaming d'événements Kafka
RAPPORT.md
Rapport complet du projet
FilmFinder — Projet DevOps OpsCI · Sorbonne Université · 2025–2026