fix(backup): dynamic backup versioning and full Disaster Recovery pre-update backup (v1.6.2)
This commit is contained in:
1 parent
469112d6ee
commit
986e8e2e3c
4 files changed
+62
-22
No files matched your search
+36
-5
@@ -11,7 +11,22 @@ use InvalidArgumentException;
|
||||
class BackupManager
|
||||
{
|
||||
public const BACKUP_DIR = '/var/www/nexus-pbx/storage/system_backups';
|
||||
public const VERSION = '1.2.0';
|
||||
public const VERSION = '1.6.2';
|
||||
|
||||
/**
|
||||
* Retourne dynamiquement la version courante de NexusPBX lue depuis version.json
|
||||
*/
|
||||
public static function getAppVersion(): string
|
||||
{
|
||||
$vFile = dirname(__DIR__) . '/version.json';
|
||||
if (file_exists($vFile)) {
|
||||
$data = json_decode((string)file_get_contents($vFile), true);
|
||||
if (!empty($data['version'])) {
|
||||
return (string)$data['version'];
|
||||
}
|
||||
}
|
||||
return self::VERSION;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialise le répertoire des sauvegardes.
|
||||
@@ -182,7 +197,8 @@ class BackupManager
|
||||
}
|
||||
|
||||
$timestamp = date('Ymd_His');
|
||||
$filename = "nexus_backup_v" . self::VERSION . "_{$timestamp}.tar.gz";
|
||||
$currentVer = self::getAppVersion();
|
||||
$filename = "nexus_backup_v{$currentVer}_{$timestamp}.tar.gz";
|
||||
$localArchivePath = self::BACKUP_DIR . '/' . $filename;
|
||||
|
||||
// 2. Préparation du dossier de staging
|
||||
@@ -268,7 +284,7 @@ class BackupManager
|
||||
|
||||
// G. Création du Manifeste
|
||||
$manifest = [
|
||||
'nexus_version' => self::VERSION,
|
||||
'nexus_version' => $currentVer,
|
||||
'created_at' => date('c'),
|
||||
'timestamp' => time(),
|
||||
'filename' => $filename,
|
||||
@@ -360,6 +376,14 @@ class BackupManager
|
||||
// Tenter de lire le manifest depuis l'archive sans l'extraire entièrement
|
||||
$manifest = self::readManifestFromTar($file);
|
||||
|
||||
$archiveVer = $manifest['nexus_version'] ?? null;
|
||||
if (!$archiveVer && preg_match('/_v([0-9]+\.[0-9]+(?:\.[0-9]+)?)/', $name, $vm)) {
|
||||
$archiveVer = $vm[1];
|
||||
}
|
||||
if (!$archiveVer) {
|
||||
$archiveVer = self::getAppVersion();
|
||||
}
|
||||
|
||||
$backups[] = [
|
||||
'filename' => $name,
|
||||
'storage_type' => 'local',
|
||||
@@ -367,7 +391,7 @@ class BackupManager
|
||||
'size_formatted' => self::formatBytes($size),
|
||||
'timestamp' => $mtime,
|
||||
'date_formatted' => date('d/m/Y H:i:s', $mtime),
|
||||
'version' => $manifest['nexus_version'] ?? self::VERSION,
|
||||
'version' => $archiveVer,
|
||||
'source' => $manifest['source'] ?? 'local',
|
||||
'is_local' => true,
|
||||
];
|
||||
@@ -807,6 +831,13 @@ class BackupManager
|
||||
$name = basename($fullPath);
|
||||
|
||||
if (str_ends_with($name, '.tar.gz')) {
|
||||
$remoteVer = null;
|
||||
if (preg_match('/_v([0-9]+\.[0-9]+(?:\.[0-9]+)?)/', $name, $vm)) {
|
||||
$remoteVer = $vm[1];
|
||||
}
|
||||
if (!$remoteVer) {
|
||||
$remoteVer = self::getAppVersion();
|
||||
}
|
||||
$results[] = [
|
||||
'filename' => $name,
|
||||
'storage_type' => 'ssh',
|
||||
@@ -814,7 +845,7 @@ class BackupManager
|
||||
'size_formatted' => self::formatBytes($size),
|
||||
'timestamp' => $timestamp > 0 ? $timestamp : time(),
|
||||
'date_formatted' => date('d/m/Y H:i:s', $timestamp > 0 ? $timestamp : time()),
|
||||
'version' => self::VERSION,
|
||||
'version' => $remoteVer,
|
||||
'source' => 'distant (SSH)',
|
||||
'is_local' => false,
|
||||
];
|
||||
|
||||
Reference in new issue
Block a user