Quelltext des aktuellen Standes
-- ============================================================
-- Datensicherung: OpenNIT sichert sich selbst
-- ============================================================
-- Nicht zu verwechseln mit dem Modul „Backup": das überwacht fremde
-- Sicherungssysteme (Veeam, Proxmox Backup Server). Hier geht es um die
-- eigene Installation – Datenbank, Speicherverzeichnis und Konfiguration.
--
-- Eine Sicherung enthält alles, was die Installation ausmacht: den Inhalt der
-- Datenbank samt Tresor, die hochgeladenen Dateien und – auf Wunsch – die
-- Konfiguration mit dem Anwendungsschlüssel. Sie gehört deshalb außerhalb des
-- Webroots und in keine Hand, die nicht ohnehin Zugriff auf die Installation
-- hat. Der Ablageort wird beim Speichern darauf geprüft.
CREATE TABLE IF NOT EXISTS `self_backups` (
`id` BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
`filename` VARCHAR(255) NOT NULL,
`size_bytes` BIGINT UNSIGNED NOT NULL DEFAULT 0,
`checksum` CHAR(64) NULL COMMENT 'SHA-256 der Archivdatei',
`parts` VARCHAR(100) NOT NULL DEFAULT '' COMMENT 'Enthaltene Teile, kommagetrennt',
`status` ENUM('running','ok','failed') NOT NULL DEFAULT 'running',
`error` TEXT NULL,
`origin` ENUM('manual','schedule') NOT NULL DEFAULT 'manual' COMMENT 'Wodurch der Lauf angestossen wurde',
`started_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`finished_at` DATETIME NULL,
`verified_at` DATETIME NULL,
`verify_ok` TINYINT(1) NULL COMMENT 'NULL = noch nicht geprüft',
`verify_note` VARCHAR(500) NULL,
`created_by` BIGINT UNSIGNED NULL COMMENT 'NULL = automatisch (Zeitplan)',
UNIQUE KEY `uq_self_backup_file` (`filename`),
INDEX `idx_self_backup_zeit` (`started_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
-- Eigenes Recht: Wer Sicherungen anlegt und herunterlädt, hält damit den
-- gesamten Datenbestand in der Hand – das ist nicht dasselbe wie „darf die
-- Einstellungen sehen".
INSERT IGNORE INTO `capabilities` (`name`, `description`, `category`, `risk_level`) VALUES
('manage_selfbackup', 'Datensicherung der Installation einrichten, anlegen und herunterladen', 'system', 'high');
INSERT IGNORE INTO `role_capabilities` (`role_id`, `capability_id`)
SELECT r.id, c.id FROM `roles` r, `capabilities` c
WHERE c.name = 'manage_selfbackup' AND r.is_admin = 1;
-- Der Zeitplan läuft über den gemeinsamen Scheduler. Standardmäßig aus: Ohne
-- geprüften Ablageort liefe er ins Leere.
INSERT IGNORE INTO `cron_tasks`
(`name`, `label`, `description`, `handler_class`, `frequency_minutes`, `enabled`, `run_in_background`, `max_runtime_seconds`)
VALUES
('self_backup', 'Datensicherung der Installation',
'Legt eine Sicherung von Datenbank, Speicherverzeichnis und Konfiguration im eingestellten Ablageort an und räumt ältere nach der eingestellten Aufbewahrung ab. Einrichtung unter /admin/selfbackup.',
'OpenNIT\\Cron\\Handlers\\SelfBackupHandler', 1440, 0, 1, 3600);