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.
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.
