TP Docker et Node.
js
Objectif du TP :
L’objectif de ce TP est de vous permettre de mettre en place une application Node.js avec
une base de données PostgreSQL, le tout conteneurisé avec Docker et orchestré avec Docker
Compose. Vous allez construire une API REST simple qui communique avec une base de
données PostgreSQL et est déployée sur plusieurs containers Docker.
Enoncé :
### Partie 1 : Mise en place de l’application Node.js
1. Créez un projet Node.js dans un dossier `backend`.
- Initialisez-le avec `npm init` et installez **Express.js** ainsi que le client **pg** pour
PostgreSQL.
2. Créez une API avec une route `/users` qui :
- Se connecte à une base de données PostgreSQL.
- Récupère une liste d’utilisateurs dans une table `users` (id, nom) et la retourne en JSON.
3. Vous devez utiliser les variables d’environnement pour la configuration de la base de
données (nom de la base, utilisateur, mot de passe).
### Partie 2 : Dockerisation du backend
1. Créez un fichier `Dockerfile` dans le dossier `backend` :
- Basez-vous sur l’image officielle de Node.js.
- Copiez les fichiers du projet et installez les dépendances.
- Exposez le port 3000 de votre container pour que l’application soit accessible.
2. Créez un fichier `.dockerignore` pour éviter d'inclure les fichiers inutiles dans l’image
Docker (comme `node_modules`).
3. Construisez et testez votre image Docker en local avec les commandes `docker build` et
`docker run`.
### Partie 3 : Dockerisation de la base de données PostgreSQL
1. Créez un fichier `docker-compose.yml` à la racine de votre projet :
- Ajoutez un service pour PostgreSQL, en utilisant l’image officielle `postgres`.
- Assurez-vous que le service PostgreSQL expose le port `5432` et que ses données sont
persistées dans un volume Docker.
- Définissez les variables d’environnement nécessaires pour la base de données (nom de la
base, utilisateur, mot de passe).
### Partie 4 : Orchestration avec Docker Compose
1. Dans le fichier `docker-compose.yml`, ajoutez un service pour votre backend Node.js :
- Ce service doit dépendre du service PostgreSQL.
- Vous devez également exposer le port 3000 du backend pour pouvoir tester l’API.
2. Reliez les services (backend et PostgreSQL) en utilisant le réseau Docker interne, ce qui
permettra à votre application de se connecter à PostgreSQL avec le nom du service comme
adresse d'hôte (ex : `db`).
3. Ajoutez un fichier `.env` pour définir les variables d’environnement utilisées dans les
services (comme les identifiants de la base de données).
### Partie 5 : Initialisation de la base de données
1. Initialisez la base de données en ajoutant une table `users` et quelques données de test
dans PostgreSQL.
- Vous pouvez utiliser un fichier `init.sql` qui sera exécuté lors du démarrage du service
PostgreSQL (via Docker Compose).
### Partie 6 : Lancer l’application et tester
1. Lancez l’ensemble de l’application avec Docker Compose : `docker-compose up --build`.
2. Vérifiez que les services démarrent correctement et que l’application est accessible sur
`http://localhost:3000`.
3. Testez l’API `/users` en y accédant via votre navigateur ou un outil comme Postman pour
vérifier qu’elle retourne bien les utilisateurs de la base de données.
Livrables :
- Projet sur GitHub.
- Fichiers `docker-compose.yml`, `Dockerfile`, et le code source de l’API.