Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -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
2 changes: 0 additions & 2 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
version: "3.8"

networks:
traefik-network:
name: traefik-network
Expand Down
44 changes: 44 additions & 0 deletions docs/GUIDE_INSTALLATION.md
Original file line number Diff line number Diff line change
@@ -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 [email protected]: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
122 changes: 122 additions & 0 deletions docs/GUIDE_UTILISATEUR.md
Original file line number Diff line number Diff line change
@@ -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
3 changes: 1 addition & 2 deletions src/main/java/controllers/DockerController.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<String> configAppByName(@PathVariable("name") String name, @RequestBody Map<String, Object> 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")
Expand Down