Petit laboratoire DevOps : provisionnement d'infrastructure avec Terraform, configuration/vérification avec Ansible, et une application desktop JavaFX qui consomme la base de données ainsi créée.
L'objectif est pédagogique : comprendre le rôle de chaque outil dans une chaîne DevOps complète, du provisionnement de l'infrastructure jusqu'à une application qui l'utilise réellement.
Terraform → crée les conteneurs Docker (PostgreSQL + Adminer)
Ansible → vérifie les conteneurs et initialise les données
JavaFX → application desktop qui lit/écrit dans PostgreSQL
devops-stock-lab/
├── terraform/ # Provisionnement de l'infrastructure
│ ├── main.tf
│ ├── variables.tf
│ ├── terraform.tfvars
│ └── outputs.tf
├── ansible/ # Vérification et interaction avec les conteneurs
│ ├── ansible.cfg
│ ├── inventory.ini
│ └── playbook.yml
├── screen/ # Captures d'écran utilisées dans ce README
└── stock-manager/ # Application desktop JavaFX
├── pom.xml
└── src/main/
├── java/com/stockmanager/
│ ├── Main.java
│ ├── db/ # Connexion JDBC
│ ├── model/ # Produit, Fournisseur
│ ├── dao/ # Requêtes SQL (CRUD)
│ └── controller/ # Logique des vues JavaFX
└── resources/
├── fxml/ # Vues (Main, Produit, Fournisseur)
└── db/init.sql # Script de création des tables
Pas de cloud public (AWS, Azure, GCP) ici : ce projet tourne entièrement en local, sans carte de crédit ni compte cloud. Terraform utilise le provider Docker, ce qui permet de manipuler de vraies ressources (conteneurs, réseaux, volumes) avec le même workflow init / plan / apply / destroy qu'on utiliserait avec un provider cloud, mais sans aucun coût ni dépendance externe.
- Docker
- Terraform >= 1.0
- Ansible
- Java 17+ et Maven
- NetBeans (ou tout IDE supportant Maven) pour l'application JavaFX
cd terraform/
terraform init
terraform plan
terraform applyCela crée :
- un réseau Docker isolé
- un volume persistant pour PostgreSQL
- un conteneur
postgres(PostgreSQL 15) - un conteneur
adminer(interface web de gestion de base de données)
cd ../ansible/
ansible-playbook playbook.ymlLe playbook vérifie que les conteneurs tournent, attend que PostgreSQL accepte les connexions, et effectue quelques opérations de test directement en base.
Ouvrir Adminer dans un navigateur :
| Champ | Valeur |
|---|---|
| Système | PostgreSQL |
| Serveur | postgres |
| Utilisateur | devops_user |
| Mot de passe | devops_password |
| Base de données | devops_db |
Dans le menu Commande SQL, exécuter le contenu de stock-manager/src/main/resources/db/init.sql. Ce script crée les tables produits et fournisseurs, et insère quelques données de test.
Avant de lancer l'application, vérifier dans stock-manager/src/main/java/com/stockmanager/db/DatabaseConnection.java que le port configuré correspond bien au port exposé par le conteneur PostgreSQL (docker ps pour vérifier).
cd ../stock-manager/
mvn javafx:runOu directement depuis NetBeans : ouvrir le projet, puis Run.
Une application desktop avec deux vues :
- Produits : nom, description, prix, quantité, fournisseur associé
- Fournisseurs : nom, contact, téléphone
Chaque vue permet d'ajouter, modifier et supprimer des enregistrements (CRUD complet), avec un tableau cliquable qui pré-remplit le formulaire pour faciliter la modification.
L'accès aux données se fait en JDBC pur (pas d'ORM), avec des PreparedStatement pour éviter les injections SQL. L'architecture suit le pattern MVC : chaque vue FXML a son propre contrôleur, les DAO encapsulent les requêtes SQL, et les modèles représentent les entités métier.
Toute donnée modifiée dans l'application est immédiatement visible dans Adminer, et inversement, puisque les deux outils pointent vers la même base PostgreSQL.
cd terraform/
terraform destroyCela supprime les conteneurs, le réseau et le volume créés par Terraform.
- Terraform : déclaration d'infrastructure as code, gestion d'état (
terraform state), cycle de vie complet (plan/apply/destroy) - Ansible : automatisation de tâches de vérification et de configuration, idempotence des tasks
- JavaFX : architecture MVC, FXML avec
fx:includepour découper les vues, communication entre contrôleurs - JDBC : accès direct à une base relationnelle sans couche d'abstraction ORM
Projet académique à but pédagogique.




