OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

222_self_backup.sql

3 KB
-- ============================================================
-- 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);