henri carmelo před 7 měsíci
rodič
revize
f378952240
3 změnil soubory, kde provedl 78 přidání a 39 odebrání
  1. 8 8
      Jenkinsfile
  2. 14 18
      docker-compose.yml
  3. 56 13
      express-server/lib/db.js

+ 8 - 8
Jenkinsfile

@@ -44,14 +44,14 @@ pipeline {
         //         }
         //     }
         // }
- stage('Stop Containers') {
-            steps {
-                sh '''
-                 docker ps | grep "workflow_" -v | awk -F " " '{ if(NR>1) print $1}' | xargs docker kill || true
-                docker system prune -f
-               '''
-            }
-       }
+//  stage('Stop Containers') {
+//             steps {
+//                 sh '''
+//                  docker ps | grep "workflow_" -v | awk -F " " '{ if(NR>1) print $1}' | xargs docker kill || true
+//                 docker system prune -f
+//                '''
+//             }
+//        }
          
         stage('Build & Deploy') {
             steps {

+ 14 - 18
docker-compose.yml

@@ -14,11 +14,8 @@ volumes:
       o: bind
       device: /srv/mongo/data_preprod  # 👉 Dossier réel du serveur pour la persistance
   mongo_backups_preprod:
+    # Un volume Docker standard au lieu d'un dossier bindé
     driver: local
-    driver_opts:
-      type: none
-      o: bind
-      device: /srv/mongo/backups_preprod  # 👉 Dossier réel du serveur pour les sauvegardes
 
 services:
   express_preprod:
@@ -63,30 +60,30 @@ services:
     volumes:
       - mongo_backups_preprod:/backup
     environment:
-      # Configuration de la connexion MongoDB
+      # Configuration de la connexion MongoDB - simplifiée
       - MONGODB_HOST=database_preprod
       - MONGODB_PORT=27017
-      # Si votre MongoDB a besoin d'authentification, décommentez et ajustez les lignes suivantes:
-      # - MONGODB_USER=admin
-      # - MONGODB_PASS=password
-      # - MONGODB_AUTH_DB=admin
+      # Ne pas spécifier d'authentification si la base n'en utilise pas
       
       # Configuration des sauvegardes
       - BACKUP_LOCATION=/backup
       - BACKUP_COMPRESSION=GZIP
-      - BACKUP_SPLIT_DB=TRUE        # Sauvegarde chaque base dans un fichier séparé
-      - BACKUP_BEGIN=TRUE           # Effectue une sauvegarde immédiatement au démarrage
-      - BACKUP_NAME=mean-fatboar-db  # Spécifie la base de données à sauvegarder
+      - BACKUP_SPLIT_DB=TRUE
+      - BACKUP_BEGIN=TRUE
+      # Ne pas spécifier BACKUP_NAME si la base n'existe pas encore
       
       # Planification des sauvegardes (format CRON)
-      - SCHEDULE=*/30 * * * *       # Toutes les 30 minutes
+      - SCHEDULE=*/30 * * * *
       
       # Rotation des sauvegardes
-      - BACKUP_RETAIN_DAYS=7        # Garde les sauvegardes pendant 7 jours
-      - BACKUP_CLEANUP_TIME=0430    # Nettoyage des anciennes sauvegardes à 4h30 du matin
+      - BACKUP_RETAIN_DAYS=7
+      - BACKUP_CLEANUP_TIME=0430
       
-      # Notifications (optionnel)
-      - NOTIFICATION_TYPE=none      # Peut être configuré pour mail, slack, etc.
+      # Notifications
+      - NOTIFICATION_TYPE=none
+      
+      # Mode debug pour voir plus d'informations
+      - DEBUG_MODE=TRUE
       
       # Autres options
       - CONTAINER_ENABLE_MONITORING=TRUE
@@ -117,7 +114,6 @@ services:
     restart: always
 
 
-
 # version: '3.0' # specify docker-compose version
  
 # Define the services/ containers to be run

+ 56 - 13
express-server/lib/db.js

@@ -1,22 +1,65 @@
 const mongoose = require('mongoose');
-//const  config  = require('../config/config.json');
-//const { Ticket } = require('../models/ticket.model');
-//const { Restaurant} = require('../models/restaurant.model');
-// const { User } = require('../models/user.model');
- //const bcrypt = require('bcrypt');
-// const Role = require('../lib/role');
-//const db = config.url;
 
-var db = 'mongodb://database_preprod:27017/mean-fatboar-db';
-//var mongoURI = 'mongodb://localhost:27017/my-db';
-//mongoose.set('useCreateIndex', true)
-mongoose.connect(db, {useNewUrlParser: true, useUnifiedTopology: true })
-.then(() => {
+// URL de connexion à la base de données
+const db = 'mongodb://database_preprod:27017/mean-fatboar-db';
+
+// Options de connexion améliorées
+const options = {
+  useNewUrlParser: true, 
+  useUnifiedTopology: true,
+  serverSelectionTimeoutMS: 5000,  // Timeout avant échec de connexion
+  socketTimeoutMS: 45000,         // Ferme les sockets après 45 secondes d'inactivité
+  keepAlive: true,                // Garde la connexion active
+  keepAliveInitialDelay: 300000,  // Ping tous les 5 minutes (300000 ms)
+  autoIndex: true,                // Construit les index automatiquement
+  retryWrites: true,              // Réessaie les opérations d'écriture échouées
+  // autoCreate: true,               // Crée automatiquement la collection si elle n'existe pas
+};
+
+// Fonction initiale de connexion
+mongoose.connect(db, options)
+  .then(() => {
     console.log("Successfully connected to the database.");
-}).catch(err => {
+    // Créer une collection par défaut pour s'assurer que la base reste existante
+    mongoose.connection.db.createCollection("app_status", function(err, res) {
+      if (err) {
+        console.log("Collection déjà existante, ignoré.");
+      } else {
+        console.log("Collection app_status créée pour maintenir la base de données active.");
+        // Insérer un document pour s'assurer que la collection ne soit pas vide
+        mongoose.connection.db.collection("app_status").updateOne(
+          { name: "system_status" },
+          { $set: { name: "system_status", lastChecked: new Date(), status: "active" } },
+          { upsert: true }
+        );
+      }
+    });
+  })
+  .catch(err => {
     console.log("Could not connect to the database.", err);
+  });
+
+// Gestion des erreurs et reconnexion automatique
+mongoose.connection.on('error', (err) => {
+  console.log('Mongoose connection error: ', err);
 });
 
+mongoose.connection.on('disconnected', () => {
+  console.log('Mongoose connection disconnected');
+  setTimeout(() => {
+    mongoose.connect(db, options).catch(err => {
+      console.log("Reconnection failed: ", err);
+    });
+  }, 5000); // Réessayer après 5 secondes
+});
+
+// Intercepter les signaux d'arrêt pour fermer proprement la connexion
+process.on('SIGINT', () => {
+  mongoose.connection.close(() => {
+    console.log('Mongoose connection closed due to app termination');
+    process.exit(0);
+  });
+});
 
 module.exports = mongoose.connection;