Automatische Datenbank-Backups
Sichert die SQLite-Datenbank periodisch (Standard: alle 24h) nach server/data/backups und räumt alte Sicherungen auf (Standard: 14 behalten). Zusätzlich per POST /api/backup manuell auslösbar.
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
const path = require('path');
|
||||
const fs = require('fs');
|
||||
const db = require('./db');
|
||||
|
||||
const dataDir = path.join(__dirname, 'data');
|
||||
const backupDir = path.join(dataDir, 'backups');
|
||||
|
||||
const INTERVAL_HOURS = Number(process.env.BACKUP_INTERVAL_HOURS) || 24;
|
||||
const RETENTION_COUNT = Number(process.env.BACKUP_RETENTION_COUNT) || 14;
|
||||
|
||||
function timestamp() {
|
||||
return new Date().toISOString().replace(/[:.]/g, '-');
|
||||
}
|
||||
|
||||
async function runBackup() {
|
||||
if (!fs.existsSync(backupDir)) fs.mkdirSync(backupDir, { recursive: true });
|
||||
const target = path.join(backupDir, `data-${timestamp()}.db`);
|
||||
await db.backup(target);
|
||||
cleanupOldBackups();
|
||||
console.log(`Backup geschrieben: ${target}`);
|
||||
return target;
|
||||
}
|
||||
|
||||
function cleanupOldBackups() {
|
||||
const files = fs
|
||||
.readdirSync(backupDir)
|
||||
.filter((f) => f.startsWith('data-') && f.endsWith('.db'))
|
||||
.sort();
|
||||
const excess = files.length - RETENTION_COUNT;
|
||||
for (let i = 0; i < excess; i++) {
|
||||
fs.unlinkSync(path.join(backupDir, files[i]));
|
||||
}
|
||||
}
|
||||
|
||||
function startBackupScheduler() {
|
||||
runBackup().catch((err) => console.error('Backup fehlgeschlagen:', err));
|
||||
setInterval(() => {
|
||||
runBackup().catch((err) => console.error('Backup fehlgeschlagen:', err));
|
||||
}, INTERVAL_HOURS * 60 * 60 * 1000);
|
||||
}
|
||||
|
||||
module.exports = { startBackupScheduler, runBackup };
|
||||
Reference in New Issue
Block a user