diff --git a/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/backend/Dockerfile b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/backend/Dockerfile new file mode 100644 index 0000000..9f0754e --- /dev/null +++ b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/backend/Dockerfile @@ -0,0 +1,7 @@ +FROM node:18-alpine +WORKDIR /app +COPY package*.json ./ +RUN npm install +COPY . . +EXPOSE 3000 +CMD ["node", "server.js"] \ No newline at end of file diff --git a/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/backend/package.json b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/backend/package.json new file mode 100644 index 0000000..d000a82 --- /dev/null +++ b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/backend/package.json @@ -0,0 +1,10 @@ +{ + "name": "api-stock-it", + "version": "1.0.0", + "main": "server.js", + "dependencies": { + "cors": "^2.8.5", + "express": "^4.18.2", + "mysql2": "^3.6.0" + } +} \ No newline at end of file diff --git a/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/backend/server.js b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/backend/server.js new file mode 100644 index 0000000..074e3be --- /dev/null +++ b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/backend/server.js @@ -0,0 +1,63 @@ +const express = require('express'); +const mysql = require('mysql2'); +const cors = require('cors'); + +const app = express(); +app.use(cors()); +app.use(express.json()); + +// Connexion à la base de données via variables d'environnement +const db = mysql.createPool({ + host: process.env.DB_HOST || 'localhost', + user: process.env.DB_USER || 'root', + password: process.env.DB_PASSWORD || 'password', + database: process.env.DB_NAME || 'stock_it' +}); + +// Route GET à la racine : Health Check +app.get('/', (req, res) => { + res.json({ + status: 'OK', + message: 'L\'API de gestion de stock est bien en ligne et fonctionnelle !', + timestamp: new Date().toISOString() + }); +}); + +// Route GET : Récupérer tout le stock +app.get('/api/materiel', (req, res) => { + db.query('SELECT * FROM materiel', (err, results) => { + if (err) return res.status(500).json({ error: err.message }); + res.json(results); + }); +}); + +// Route POST : Ajouter un nouvel équipement +app.post('/api/materiel', (req, res) => { + const { nom, quantite } = req.body; + db.query('INSERT INTO materiel (nom, quantite) VALUES (?, ?)', [nom, quantite], (err, results) => { + if (err) return res.status(500).json({ error: err.message }); + res.status(201).json({ id: results.insertId, nom, quantite }); + }); +}); + +// Route PUT : Mettre à jour la quantité d'un équipement +app.put('/api/materiel/:id', (req, res) => { + const { quantite } = req.body; + db.query('UPDATE materiel SET quantite = ? WHERE id = ?', [quantite, req.params.id], (err, results) => { + if (err) return res.status(500).json({ error: err.message }); + res.json({ message: 'Quantité mise à jour avec succès' }); + }); +}); + +// Route DELETE : Supprimer un équipement +app.delete('/api/materiel/:id', (req, res) => { + db.query('DELETE FROM materiel WHERE id = ?', [req.params.id], (err, results) => { + if (err) return res.status(500).json({ error: err.message }); + res.json({ message: 'Équipement supprimé avec succès' }); + }); +}); + +const PORT = 3000; +app.listen(PORT, () => { + console.log(`API Backend démarrée sur le port ${PORT}`); +}); \ No newline at end of file diff --git a/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/deploiement/01-database.yaml b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/deploiement/01-database.yaml new file mode 100644 index 0000000..97b8bcd --- /dev/null +++ b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/deploiement/01-database.yaml @@ -0,0 +1,94 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: mariadb-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi + +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: db-init-script +data: + init.sql: | + CREATE DATABASE IF NOT EXISTS stock_it; + USE stock_it; + CREATE TABLE IF NOT EXISTS materiel ( + id INT AUTO_INCREMENT PRIMARY KEY, + nom VARCHAR(255) NOT NULL, + quantite INT NOT NULL + ); + INSERT INTO materiel (nom, quantite) VALUES + ('Serveur Dell PowerEdge', 3), + ('Switch Cisco 24 ports', 5), + ('Baie de brassage', 2); + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: db-backend +spec: + replicas: 1 + selector: + matchLabels: + app: mariadb + template: + metadata: + labels: + app: mariadb + spec: + containers: + - name: mariadb + image: mariadb:10.11 + resources: + requests: + memory: "128Mi" + cpu: "100m" + limits: + memory: "256Mi" + cpu: "250m" + env: + - name: MYSQL_ROOT_PASSWORD + valueFrom: + secretKeyRef: + name: db-credentials + key: root-password + - name: MYSQL_DATABASE + valueFrom: + configMapKeyRef: + name: app-config + key: db-name + ports: + - containerPort: 3306 + volumeMounts: + - name: init-script-volume + mountPath: /docker-entrypoint-initdb.d/init.sql + subPath: init.sql + - name: mariadb-storage + mountPath: /var/lib/mysql + volumes: + - name: init-script-volume + configMap: + name: db-init-script + - name: mariadb-storage + persistentVolumeClaim: + claimName: mariadb-pvc + +--- +apiVersion: v1 +kind: Service +metadata: + name: db-service +spec: + type: ClusterIP + selector: + app: mariadb + ports: + - port: 3306 + targetPort: 3306 \ No newline at end of file diff --git a/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/deploiement/02-backend.yaml b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/deploiement/02-backend.yaml new file mode 100644 index 0000000..734f4bc --- /dev/null +++ b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/deploiement/02-backend.yaml @@ -0,0 +1,68 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: api-backend +spec: + replicas: 2 + selector: + matchLabels: + app: node-api + template: + metadata: + labels: + app: node-api + spec: + containers: + - name: node-api + image: gsz116/api-stock:v2 + imagePullPolicy: Always + resources: + requests: + memory: "64Mi" + cpu: "50m" + limits: + memory: "128Mi" + cpu: "100m" + env: + - name: DB_HOST + valueFrom: + configMapKeyRef: + name: app-config + key: db-host + - name: DB_USER + valueFrom: + configMapKeyRef: + name: app-config + key: db-user + - name: DB_NAME + valueFrom: + configMapKeyRef: + name: app-config + key: db-name + - name: PORT + valueFrom: + configMapKeyRef: + name: app-config + key: backend-port + # Variable issue du Secret + - name: DB_PASSWORD + valueFrom: + secretKeyRef: + name: db-credentials + key: root-password + ports: + - containerPort: 3000 + +--- +apiVersion: v1 +kind: Service +metadata: + name: api-service +spec: + type: NodePort + selector: + app: node-api + ports: + - port: 3000 + targetPort: 3000 + nodePort: 30001 \ No newline at end of file diff --git a/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/deploiement/03-frontend.yaml b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/deploiement/03-frontend.yaml new file mode 100644 index 0000000..acdf9a6 --- /dev/null +++ b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/deploiement/03-frontend.yaml @@ -0,0 +1,47 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: web-frontend +spec: + replicas: 2 + selector: + matchLabels: + app: nginx-front + template: + metadata: + labels: + app: nginx-front + spec: + containers: + - name: nginx-front + image: gsz116/front-stock:v2 + imagePullPolicy: Always + resources: + requests: + memory: "32Mi" + cpu: "50m" + limits: + memory: "64Mi" + cpu: "100m" + env: + - name: API_URL + valueFrom: + configMapKeyRef: + name: app-config + key: api-url + ports: + - containerPort: 80 + +--- +apiVersion: v1 +kind: Service +metadata: + name: frontend-service +spec: + type: NodePort + selector: + app: nginx-front + ports: + - port: 80 + targetPort: 80 + nodePort: 30002 \ No newline at end of file diff --git a/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/frontend/Dockerfile b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/frontend/Dockerfile new file mode 100644 index 0000000..ac52609 --- /dev/null +++ b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/frontend/Dockerfile @@ -0,0 +1,3 @@ +FROM nginx:alpine +COPY index.html /usr/share/nginx/html/index.html +EXPOSE 80 \ No newline at end of file diff --git a/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/frontend/index.html b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/frontend/index.html new file mode 100644 index 0000000..e0ab41f --- /dev/null +++ b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet/frontend/index.html @@ -0,0 +1,153 @@ + + + + + + + Gestion de Stock IT + + + + + +

Gestion de Stock Informatique

+ +
+

Ajouter un équipement

+
+ + + +
+
+ +
+

Inventaire actuel

+ +
+ + + + + \ No newline at end of file diff --git a/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet_Guillaume_Sanchez.zip b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet_Guillaume_Sanchez.zip new file mode 100644 index 0000000..b624dd5 Binary files /dev/null and b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/Mini_projet_Guillaume_Sanchez.zip differ diff --git a/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/TP_5_Cluster Kubernetes.docx b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/TP_5_Cluster Kubernetes.docx index 46d02bf..ca62748 100644 Binary files a/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/TP_5_Cluster Kubernetes.docx and b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/TP_5_Cluster Kubernetes.docx differ diff --git a/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/TP_5_Cluster_Kubernetes_Guillaume_Sanchez.docx b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/TP_5_Cluster_Kubernetes_Guillaume_Sanchez.docx new file mode 100644 index 0000000..f8562a4 Binary files /dev/null and b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/TP_5_Cluster_Kubernetes_Guillaume_Sanchez.docx differ diff --git a/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/TP_5_Cluster_Kubernetes_Guillaume_Sanchez.pdf b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/TP_5_Cluster_Kubernetes_Guillaume_Sanchez.pdf new file mode 100644 index 0000000..fb87b6c Binary files /dev/null and b/UE2.24_Systemes_distribues_et_applications_sous_Windows_et_Linux/TP5/TP_5_Cluster_Kubernetes_Guillaume_Sanchez.pdf differ