Configurer Docker avec un Dockerfile et mettre à jour docker-compose.yml pour utiliser la construction d'image

This commit is contained in:
2025-03-10 14:46:29 +01:00
parent 7785bfa10f
commit 39a7b897bf
3 changed files with 70 additions and 47 deletions

23
Dockerfile Normal file
View File

@@ -0,0 +1,23 @@
# Utiliser une image de base officielle de Node.js
FROM node:latest
# Installer ffmpeg
RUN apt-get update && apt-get install -y ffmpeg
# Définir le répertoire de travail dans le conteneur
WORKDIR /backend
# Copier le fichier package.json et package-lock.json (si disponible)
COPY package*.json ./
# Installer les dépendances Node.js
RUN npm install
# Copier le reste de l'application
COPY . .
# Exposer le port sur lequel l'application va tourner
EXPOSE 3000
# Commande pour démarrer l'application
CMD ["npm", "run", "dev"]

View File

@@ -1,6 +1,8 @@
services:
timelapse-api:
image: node:latest
build:
context: . # Chemin vers le répertoire contenant le Dockerfile
dockerfile: Dockerfile # Nom du Dockerfile, par défaut c'est "Dockerfile"
container_name: timelapse-api
ports:
- "8053:3000"
@@ -11,7 +13,6 @@ services:
- NODE_VERSION=22.9.0
- YARN_VERSION=1.22.22
working_dir: /backend
command: /bin/bash -c "npm install && npm run dev"
restart: always
networks:
- bridge

View File

@@ -1,7 +1,6 @@
const express = require('express');
import express from 'express';
import serverError from '../utils/serverError.js';
const router = express.Router();
const db = require('../db');
const serverError = require('../utils/serverError');
// Status du Projet :
// 0 = En attente de capture
@@ -14,45 +13,6 @@ const maxInterval = 60; // Minutes
var captureProjectID = -1;
var captureInterval = 0; // Minutes
function startProcedure(projectId, interval) {
console.log('Démarrage de la procédure de capture');
captureProjectID = projectId;
if (interval < minInterval) {
throw new Error('L\'intervalle de capture doit être supérieur ou égal à ' + minInterval + ' minutes.');
}
if (interval > maxInterval) {
throw new Error('L\'intervalle de capture doit être inférieur ou égal à ' + maxInterval + ' minutes.');
}
captureInterval = interval;
console.log('Procédure de capture démarrée avec succès, projet ID: ' + projectId + ', interval: ' + interval + ' minutes.');
return { message: 'Procédure de capture démarrée avec succès, projet ID: ' + projectId + ', interval: ' + interval + ' minutes.' };
}
function stopProcedure() {
console.log('Arrêt de la procédure de capture');
return { message: 'Procédure de capture arrêtée avec succès.' };
}
router.post('/procedure/start/', async (req, res) => {
const { projectId, interval } = req.body;
try {
const result = startProcedure(projectId, interval);
res.status(200).json(result);
} catch (err) {
serverError(res, err);
}
}
);
router.get('/procedure/stop/', async (req, res) => {
try {
const result = stopProcedure();
res.status(200).json(result);
} catch (err) {
serverError(res, err);
}
});
/**
* @swagger
* /procedure/start/:
@@ -82,10 +42,36 @@ router.get('/procedure/stop/', async (req, res) => {
* properties:
* message:
* type: string
* example: Procédure de capture démarrée avec succès, projet ID: 1, interval: 10 minutes.
* example: "Procédure de capture démarrée avec succès, projet ID: 1, interval: 10 minutes."
* 500:
* description: Internal server error.
*
*/
router.post('/procedure/start/', async (req, res) => {
const { projectId, interval } = req.body;
try {
const result = startProcedure(projectId, interval);
res.status(200).json(result);
} catch (err) {
serverError(res, err);
}
});
function startProcedure(projectId, interval) {
console.log('Démarrage de la procédure de capture');
captureProjectID = projectId;
if (interval < minInterval) {
throw new Error('L\'intervalle de capture doit être supérieur ou égal à ' + minInterval + ' minutes.');
}
if (interval > maxInterval) {
throw new Error('L\'intervalle de capture doit être inférieur ou égal à ' + maxInterval + ' minutes.');
}
captureInterval = interval;
console.log('Procédure de capture démarrée avec succès, projet ID: ' + projectId + ', interval: ' + interval + ' minutes.');
return { message: 'Procédure de capture démarrée avec succès, projet ID: ' + projectId + ', interval: ' + interval + ' minutes.' };
}
/**
* @swagger
* /procedure/stop/:
* get:
* summary: Stop the capture procedure
@@ -100,9 +86,22 @@ router.get('/procedure/stop/', async (req, res) => {
* properties:
* message:
* type: string
* example: Procédure de capture arrêtée avec succès.
* example: "Procédure de capture arrêtée avec succès."
* 500:
* description: Internal server error.
*/
router.get('/procedure/stop/', async (req, res) => {
try {
const result = stopProcedure();
res.status(200).json(result);
} catch (err) {
serverError(res, err);
}
});
function stopProcedure() {
console.log('Arrêt de la procédure de capture');
return { message: 'Procédure de capture arrêtée avec succès.' };
}
module.exports = router;