1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /**
- * Script de sauvegarde automatique de la base de données SQLite
- */
- const fs = require('fs');
- const path = require('path');
- const { exec } = require('child_process');
- // Configuration
- const DB_PATH = process.env.DB_PATH || './data/framed.db';
- const BACKUP_DIR = process.env.BACKUP_DIR || './backups';
- const RETENTION_DAYS = process.env.RETENTION_DAYS || 7;
- // S'assurer que le répertoire de sauvegarde existe
- if (!fs.existsSync(BACKUP_DIR)) {
- fs.mkdirSync(BACKUP_DIR, { recursive: true });
- console.log(`Répertoire de sauvegarde créé: ${BACKUP_DIR}`);
- }
- // Générer un nom de fichier avec la date
- const now = new Date();
- const timestamp = now.toISOString()
- .replace(/[T:]/g, '-')
- .replace(/\..+/, '');
- const backupFile = path.join(BACKUP_DIR, `framed-${timestamp}.db`);
- // Vérifier que la base de données source existe
- if (!fs.existsSync(DB_PATH)) {
- console.error(`Erreur: La base de données source n'existe pas: ${DB_PATH}`);
- process.exit(1);
- }
- // Réaliser la sauvegarde
- console.log(`Sauvegarde de ${DB_PATH} vers ${backupFile}`);
- // Utiliser sqlite3 pour créer une sauvegarde via commande shell
- // Cette méthode garantit l'intégrité des données même si la DB est en cours d'utilisation
- const command = `sqlite3 "${DB_PATH}" ".backup '${backupFile}'"`;
- exec(command, (error, stdout, stderr) => {
- if (error) {
- console.error(`Erreur lors de la sauvegarde: ${error.message}`);
- return;
- }
- if (stderr) {
- console.error(`Avertissement: ${stderr}`);
- return;
- }
-
- console.log(`Sauvegarde réussie: ${backupFile}`);
-
- // Nettoyage des vieilles sauvegardes
- cleanOldBackups();
- });
- // Fonction pour supprimer les sauvegardes plus anciennes que RETENTION_DAYS
- function cleanOldBackups() {
- const files = fs.readdirSync(BACKUP_DIR);
-
- const cutoffDate = new Date();
- cutoffDate.setDate(cutoffDate.getDate() - RETENTION_DAYS);
-
- console.log(`Suppression des sauvegardes antérieures à ${cutoffDate.toISOString()}`);
-
- files.forEach(file => {
- if (!file.endsWith('.db')) return;
-
- const filePath = path.join(BACKUP_DIR, file);
- const stats = fs.statSync(filePath);
-
- if (stats.mtime < cutoffDate) {
- fs.unlinkSync(filePath);
- console.log(`Supprimé: ${file}`);
- }
- });
-
- console.log('Nettoyage terminé');
- }
|