Scolaire

Coursero — prototype conteneurisé de correction automatique de code

Prototype réalisé en binôme d'une plateforme où des étudiants soumettent du code corrigé et noté automatiquement — deux frontaux derrière Nginx, MySQL répliqué, Docker Compose.

Terminé
Schéma du prototype sur un seul hôte. Dans Docker Compose, un répartiteur Nginx envoie les requêtes HTTP vers deux frontaux identiques (Nginx et PHP-FPM 8.1) qui portent l'application PHP ; celle-ci utilise la base MySQL principale et se rabat sur une base secondaire si la principale est injoignable. Les fichiers soumis sont déposés dans un dossier partagé ; hors des conteneurs, un script de correction lancé toutes les cinq secondes les traite dans l'ordre d'arrivée avec Python et écrit les notes dans la base principale. Une réplication entre les deux bases a été configurée à la main pendant le projet, sans être conservée dans le dépôt.
Architecture réalisée — prototypeVue fonctionnelle du prototype réalisé : répartition HTTP entre deux frontaux PHP, traitement des soumissions par un script de correction et stockage MySQL. La réplication de la base a été configurée à la main pendant le projet et n'est pas décrite comme reproductible dans le dépôt.

Ma contribution

Projet réalisé en binôme, avec une contribution partagée sur l'infrastructure, l'application web, la base de données, le déploiement et le pipeline de correction.

Points clés

  • Soumission, correction automatique et consultation des notes, de bout en bout
  • File de soumissions traitée dans l'ordre d'arrivée par un correcteur scripté
  • Continuité démontrée lors de l'arrêt d'un frontal web puis de la base principale

Objectif

Mettre en place une plateforme où des étudiants déposent leur code, qui est ensuite exécuté, comparé à une correction et noté automatiquement. Le projet portait autant sur l’application que sur l’infrastructure qui l’héberge, avec une exigence de redondance. Le résultat est un prototype : une chaîne fonctionnelle de soumission et de correction, pas une plateforme de production.

Fonctionnement

Une interface web en PHP permet de choisir un exercice, d’envoyer son fichier, puis de retrouver ses notes. Les soumissions arrivent dans un dossier commun ; un correcteur écrit en Bash le surveille toutes les cinq secondes, traite la plus ancienne en premier, exécute le programme Python soumis avec plusieurs jeux d’arguments, compare les résultats et les erreurs attendues, puis enregistre la note en base et archive la soumission. Deux exercices Python sont corrigés automatiquement.

Infrastructure

L’ensemble tourne sous Docker Compose. Un Nginx placé en tête répartit les requêtes entre deux frontaux web, chacun associant Nginx et PHP-FPM. Les données reposent sur deux instances MySQL : la réplication entre elles a été configurée manuellement pendant le projet, et l’application se replie sur la base secondaire si la principale ne répond plus. Des scripts Shell et PowerShell lancent, surveillent et arrêtent l’environnement.

Redondance démontrée

Deux scénarios ont été démontrés pendant la soutenance. L’arrêt d’un des deux frontaux n’a pas interrompu le service : le site restait accessible par l’autre. L’arrêt de la base principale a montré la bascule de l’application vers la base secondaire. Ce sont deux mécanismes de redondance ciblés, pas une architecture entièrement hautement disponible.

Limites du prototype

Le prototype privilégiait la chaîne fonctionnelle de soumission et de correction. L’isolation de l’exécution du code soumis et certaines protections prévues initialement n’ont pas été finalisées. La configuration de la réplication MySQL, réalisée à la main dans les conteneurs, n’a pas été conservée avec le projet.

Médias