diff --git a/README.md b/README.md new file mode 100644 index 0000000..5121e8b --- /dev/null +++ b/README.md @@ -0,0 +1,19 @@ +# JaFeur + +Ce projet a été développé dans le cadre d’un projet de cours à Polytech Montpellier (filière DO). + +## Documentation + +Vous trouverez toute la documentation dans le dossier [`/docs`](./docs) : + +- `GUIDE_INSTALLATION.md` : guide d’installation du projet (via Docker) +- `GUIDE_UTILISATEUR.md` : guide utilisateur pour comprendre et exploiter toutes les fonctionnalités exposées par l’API + +--- + +## Auteurs + +Projet réalisé par : +- Auriane PUSEL +- Noa DESPAUX +- Nathan DILHAN \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index eaac9f5..f529da4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,3 @@ -version: "3.8" - networks: traefik-network: name: traefik-network diff --git a/docs/GUIDE_INSTALLATION.md b/docs/GUIDE_INSTALLATION.md new file mode 100644 index 0000000..8c74143 --- /dev/null +++ b/docs/GUIDE_INSTALLATION.md @@ -0,0 +1,44 @@ +# JaFeur + +JaFeur est une application backend en Java (Spring Boot) permettant de gérer dynamiquement des conteneurs Docker via une API REST. + +## Installation via Docker + +### Clonez le dépôt JaFeur +```bash +git clone https://github.com/aurianecodebien/JaFeur.git +``` +ou +```bash +git clone git@github.com:aurianecodebien/JaFeur.git +``` + +### Lancer l'application + +Mettez vous à la racine du projet JaFeur et lancer cette commande : +```bash +docker-compose up -d --build +``` + +Cela démarre automatiquement le backend JaFeur ainsi qu'un conteneur traefik pour gérer les applications. + +### Accès API + +Une fois le conteneur lancé, vous pouvez accéder à l’interface Swagger pour tester l’API : + +[http://localhost:8080/swagger-ui/index.html](http://localhost:8080/swagger-ui/index.html) + +Le port peut être amené à changer selon les applications existantes dans la machine, le vérifier grâce à la commande suivante : +```bash +docker ps +``` +Regardez ensuite la colonne PORTS pour le conteneur `jafeur`. + +--- + +## Groupe JaFeur + +Ce projet a été réalisé par trois élèves de la filière DO de l'école Polytech Montpellier : +- Auriane PUSEL +- Noa DESPAUX +- Nathan DILHAN diff --git a/docs/GUIDE_UTILISATEUR.md b/docs/GUIDE_UTILISATEUR.md new file mode 100644 index 0000000..0542f2d --- /dev/null +++ b/docs/GUIDE_UTILISATEUR.md @@ -0,0 +1,122 @@ +# Guide Utilisateur – JaFeur + +Bienvenue dans JaFeur, une application backend en Java Spring Boot permettant de gérer dynamiquement des conteneurs Docker via une API REST. + +--- + +## Objectif de l'application + +JaFeur est une interface de contrôle pour lancer, configurer, arrêter et surveiller des conteneurs Docker depuis une API REST. + +--- + +## Prise en main + +## Structure du projet + +- `controllers/` : endpoints REST pour démarrer, arrêter et relancer les conteneurs Docker. +- `services/` : logique métier pour interagir avec Docker en local. +- `model/` : objets de transfert de données. +- `config/` : configuration Spring, notamment l’accès à Docker. +- `src/test/` : tests unitaires des fonctions principales. + +--- +### Accès à l’API + +Une fois l’application lancée (voir documentation d'installation), l’interface Swagger est accessible ici : + +👉 [http://localhost:8080/swagger](http://localhost:8080/swagger) *(changez le port si nécessaire)* + +Swagger permet de visualiser et tester tous les endpoints de l’application de manière interactive. + +--- + + +### Lancer et gérer des applications +- Démarrer une application (conteneur déjà existant) `PUT /Start/{name}` +- Redémarrer ou arrêter une application à la demande `PUT /Stop/{name}` +- Supprimer un conteneur devenu inutile `PUT /Remove/{name}` + +--- + +### Configurer dynamiquement une application + +Le point d’entrée `POST /Config/{id}` permet d’ajouter, de modifier ou de supprimer des variables d’environnement sur un conteneur existant. + +Le corps de la requête doit être au format suivant : + +```json +{ + "add": { + "NEW_VAR": "new" + }, + "update": { + "EXISTING_VAR": "updated" + }, + "delete": { + "OLD_VAR": "" + } +} +``` + +- `add` ajoute une ou plusieurs nouvelles variables. +- `update` modifie la valeur de variables existantes. +- `delete` supprime les variables spécifiées (en mettant une valeur vide). +--- + +### Surveiller les erreurs et crashs +- Détection automatique si un conteneur est dans un état anormal (crash) +- Lister tous les conteneurs qui ont planté `PUT List/IsCrash` +- Permet de bâtir des outils de monitoring simples ou de diagnostic + +--- + +### Gérer les images Docker +- **Pull** d’une image publique depuis Docker Hub (ex: `nginx:latest`) `POST /image/run/{applicationName}` +- **Build** d’une image à partir d’un Dockerfile local (ex: projet en développement) `POST /image/buildDockerfile` +- **Start** d’une image en lui passant directement les paramètres (pas besoin de docker run) `POST /image/start/` +- **Suppression** d’images obsolètes `DELETE /image` + +--- + +### Accéder à l’état actuel du système Docker +- Voir tous les conteneurs lancés ou arrêtés `GET /containers{showAll}` + +Si le paramètre `showAll` est à `true`, il permet de voir tous les conteneurs, même ceux qui ne sont pas lancés. +- Voir toutes les images présentes localement `GET /images` + +--- + +### Mettre à jour une application +`POST /update` +- Rebuild depuis un Dockerfile donné +- Redéploiement automatique d’un conteneur avec la nouvelle version +- Très utile dans un workflow CI/CD manuel ou en déploiement progressif + +--- + +## Astuces + +- Si une image n’existe pas en local, Docker la téléchargera automatiquement (si disponible sur Docker Hub). +- Vérifier que les noms de conteneurs sont uniques pour éviter les conflits. + +--- + +## Test et validation + +L'application intègre des tests unitaires exécutables avec : + +```bash +mvn test +``` + +Ces tests couvrent les principales fonctionnalités, notamment la gestion des conteneurs et les erreurs courantes (image non trouvée, redémarrage invalide, etc). + +--- + +## Groupe JaFeur + +Ce projet a été réalisé par trois élèves de la filière DO de l'école Polytech Montpellier : +- Auriane PUSEL +- Noa DESPAUX +- Nathan DILHAN \ No newline at end of file diff --git a/src/main/java/controllers/DockerController.java b/src/main/java/controllers/DockerController.java index 0bb3214..c4ab112 100644 --- a/src/main/java/controllers/DockerController.java +++ b/src/main/java/controllers/DockerController.java @@ -59,12 +59,11 @@ public void restartApp(@PathVariable("name") String name) { summary = "Configure an application", description = "Allows adding, updating, or deleting environment variables of a container. The JSON body must contain `add`, `update`, and/or `delete` keys." ) - @Tag(name = "Configuration") + @Tag(name = "Application") public ResponseEntity configAppByName(@PathVariable("name") String name, @RequestBody Map config) { return dockerService.configApp(name, config); } - @PutMapping("IsCrash/{name}") @Operation(summary = "Check application crash status", description = "Checks whether a specific application has crashed.") @Tag(name = "Crash Status and Errors")