Un environnement de développement intégré (IDE) léger et accessible via navigateur, conçu pour exécuter du code Java et Python sur un serveur distant de façon sécurisée.
- Éditeur de Code Multi-fichiers : Basé sur Monaco Editor (le moteur de VS Code). Supporte la coloration syntaxique et l'édition de multiples fichiers
.javaou.pyen simultané. - Console Temps Réel : Retour direct des flux standards (
stdout,stderr) depuis le serveur vers le navigateur grâce à WebSockets. - Sécurité et Bacs à sable :
- Java : Exécution protégée par un
SecurityManagerstrict. - Python : Exécution protégée contre l'accès réseau et la manipulation du système (
os,subprocess, réseau bloqués dynamiquement). - Prévention des attaques de type Path Traversal.
- Java : Exécution protégée par un
- Déploiement Multi-Architecture : Image Docker optimisée nativement pour
linux/amd64(PC, serveurs) etlinux/arm64(aarch64, Raspberry Pi, serveurs ARM, Mac M1/M2). - Auto-Installation : Pas besoin de pré-installer Java ou Python ! Le serveur télécharge la bonne version des runtime au démarrage.
C'est la méthode la plus simple pour déployer le projet, que ce soit en développement ou en production.
- Clonez ce dépôt.
- Démarrez simplement le conteneur avec
docker-compose:
docker-compose up -dL'IDE sera alors accessible sur http://localhost:8080.
Si vous souhaitez modifier le code et compiler votre propre image Docker publique compatible toutes architectures :
docker buildx create --use --name multiarch-builder
docker buildx build --platform linux/amd64,linux/arm64 -t votre-nom/ide-mmi:latest --push .Si vous préférez développer et modifier le code source directement sur votre machine locale (Node 20+ requis).
- Installez les dépendances du projet :
npm install- Téléchargez automatiquement les environnements Java, JDK, et Python localement en tapant :
npm run setup- Lancez simultanément le client React (Vite) et le serveur Node.js (Express + Socket.io) :
npm run devL'IDE s'ouvrira sur le port standard de Vite (généralement http://localhost:5173), qui communiquera avec le backend tournant en arrière-plan.
Vous pouvez ajuster les limites du serveur directement via le fichier docker-compose.yml ou en passant ces variables à l'exécution.
| Variable | Description | Défaut |
|---|---|---|
PORT |
Le port d'écoute du serveur Node.js. | 8080 |
MAX_CONNECTED_CLIENTS |
Nombre maximal de visiteurs sur la page web. | 200 |
MAX_CONCURRENT_CLIENTS |
Nombre maximal de programmes s'exécutant à l'instant T. | 60 |
CLIENT_IDLE_TIMEOUT_MS |
Déconnexion automatique si la page web est inactive. | 1800000 (30m) |
INACTIVITY_TIMEOUT_MS |
Temps max pour un script en attente d'input ou boucle infinie muette. | 30000 (30s) |
ABSOLUTE_MAX_TIME_MS |
Limite vitale du temps d'exécution total du programme. | 120000 (2m) |
MAX_MEMORY_MB |
RAM maximale allouée pour l'exécution d'un seul programme. | 128 |
MAX_FILES_PER_SESSION |
Nombre de fichiers textes autorisés par exécution. | 5 |
MAX_FILE_SIZE_BYTES |
Poids maximal uploadé par fichier code source. | 102400 (100Ko) |
- Frontend : React 18, Vite, Tailwind CSS (indirectement via classes personnalisées), Socket.IO-Client, Monaco Editor.
- Backend : Node.js, Express, Socket.IO.
- Execution Engine : Le backend reçoit les fichiers, les isole dans des dossiers temporaires uniques (UUID), compile/exécute le code via des
spawnprocessus (java.exe,python/bin/python), et transmet la sortie (stdout/stderr) du processus fils vers Socket.IO. - Nettoyage : Un script de nettoyage ("cleanup") ("Garbage Collector") scrute et supprime automatiquement les dossiers de sessions orphelins toutes les heures.