Mini application fullstack basée sur :
- Backend : Node 24, TypeScript, Fastify, tsx
- Frontend : Vue 3, TypeScript, Vite
- Outils : Docker, docker compose, Makefile, ESLint, Vitest (+ coverage)
L’objectif est d’avoir un environnement de développement 100 % dockerisé : aucune installation de Node ou npm n’est nécessaire sur la machine hôte.
Pour faire tourner le projet, il suffit d’avoir :
- Docker
- make
Aucun besoin d’installer Node, npm… Tout est encapsulé dans les conteneurs Docker.
Le projet est structuré ainsi :
backend/: API Fastify (TypeScript)frontend/: SPA Vue 3 (Vite + TypeScript)docker-compose.yml: servicesbackendetfrontenden mode devMakefile: commandes de haut niveau pour le dev
Toutes les commandes suivantes se lancent depuis la racine du projet.
make installCette commande :
- Construit les images Docker
backendetfrontendviadocker compose build. - Exécute
npm installà l’intérieur des conteneurs pour :- le backend (
backend), - le frontend (
frontend).
- le backend (
Tout se fait dans Docker, sans utiliser npm en local.
À lancer :
- lors du premier setup,
- après toute modification des
package.json(ajout de dépendances, outils, etc.).
make startCette commande :
- lance
docker compose up backend frontend, - s’appuie sur les stages
devdes Dockerfiles :- Backend :
npm run dev→ Fastify + tsx en mode watch sur0.0.0.0:3000. - Frontend :
npm run dev→ Vite en mode HMR sur0.0.0.0:5173.
- Backend :
Une fois la commande lancée :
- API backend :
http://localhost:3000/ping- doit renvoyer un JSON du type :
{ "message": "pong", "timestamp": "..." }.
- doit renvoyer un JSON du type :
- Frontend :
http://localhost:5173- affiche une petite page Vue 3,
- un bouton permet d’appeler
/api/ping, - Vite proxifie
/api→ service Dockerbackend(http://backend:3000/ping), - la réponse JSON est affichée dans la page.
Pour arrêter les services :
make stopmake testCette commande exécute les tests dans Docker, pour les deux projets :
-
Backend :
- lance
npm run testdans un conteneur éphémèrebackend, - exécute Vitest en environnement Node,
- inclut des tests (ex. : endpoint
/ping).
- lance
-
Frontend :
- lance
npm run testdans un conteneur éphémèrefrontend, - exécute Vitest en environnement jsdom,
- inclut des tests sur les composants Vue (ex. :
App.vue).
- lance
Les tests ne nécessitent ni Node ni Vitest installés en local.
En complément, une commande
make coverageest disponible pour lancervitest --coveragesur le backend et le frontend, avec des seuils de couverture configurés (80 %). Les rapports sont générés dansbackend/coverage/etfrontend/coverage/.
-
Backend
- Fastify 4 +
@fastify/cors - Endpoint de test :
GET /ping - TypeScript compilé via
tsc - Dev :
tsx watch src/index.ts - Lint : ESLint +
@typescript-eslint - Tests : Vitest (environment Node, coverage v8)
- Fastify 4 +
-
Frontend
- Vue 3 + Vite + TypeScript
- Dev : Vite HMR (port 5173)
- Proxy
/api→ backend (via nom de service Dockerbackend) - Lint : ESLint +
eslint-plugin-vue+ config Vue/TS/Prettier - Tests : Vitest (environment jsdom, coverage v8)