Updates und Backups laufen über den Manage-Client in manage-client/. Der
Client holt Releases von einem zentralen Manage-Server, rollt sie über die
Installation aus und lädt Backups der Betriebsdaten dorthin hoch.
Der Client ist ein fertiges Paket und wird pro Projekt gepflegt. Seine
vollständige Dokumentation liegt unter https://manage.med0.de/client-docs/
(maschinenlesbar: llms.php); dieses Dokument beschreibt nur, wie er in diesem
Projekt eingebunden ist.
Er ersetzt die früheren Komponenten includes/backup.php, admin/updater.php,
backup-server/ und update-server/, die vollständig entfernt wurden.
| Pfad | Zweck |
|---|---|
manage-client/lib/ |
die Bibliothek; lib/client.php ist der einzige Einstiegspunkt |
manage-client/bin/manage-client.php |
Kommandozeile für Cron und Shell |
manage-client/ui/panel.php |
die Oberfläche, eingebunden von admin/manage.php |
manage-client/config.php |
Serveradresse, Instanz, Token, Backup-Quellen — nicht im Repository, nicht im Release-Paket |
manage-client/config.sample.php |
Vorlage dafür |
admin/manage.php |
Adminseite „Update & Backup“ (prüft den Login, bindet dann das Panel ein) |
includes/after-update.php |
Post-Update-Hook (psaAfterUpdate) |
migrations/ |
einmalige Migrationsskripte, die mit einem Release ausgeliefert werden |
scripts/create-release-zip.sh |
baut das Release-ZIP |
Laufzeitdaten liegen unter data/manage/ (backups/, updates/, work/,
migrations.json, manage-client.log) und sind über die .htaccess im
Projektwurzelverzeichnis nicht über das Web erreichbar.
manage-client/config.php)Die drei Verbindungswerte stammen aus dem Manage-Server; der Token wird beim Anlegen der Instanz einmalig angezeigt:
define("MANAGE_SERVER_URL", "https://manage.med0.de");
define("MANAGE_INSTANCE", "psa-...");
define("MANAGE_TOKEN", "...");
Projektspezifisch gesetzt sind außerdem:
| Konstante | Wert in diesem Projekt |
|---|---|
MANAGE_VERSION_FILE / MANAGE_VERSION_CONSTANT |
includes/version.php mit APP_VERSION |
MANAGE_UPDATE_PROTECTED_PATHS |
config.php, data/, .git/, manage-client/config.php |
MANAGE_UPDATE_SANITY_PATHS |
index.php, includes/functions.php |
MANAGE_UPDATE_POST_HOOK |
includes/after-update.php → psaAfterUpdate() |
MANAGE_BACKUP_SOURCES |
data/*.json, data/uploads/**, data/manage/migrations.json |
MANAGE_BACKUP_DATABASE |
null — reines Flat-File-Projekt |
MANAGE_BACKUP_LOCAL_RETENTION |
4 lokale Archive |
MANAGE_BACKUP_AUTO_INTERVAL_SECONDS |
604800 (wöchentlich) |
MANAGE_HTTP_TIMEOUT |
5 Sekunden — die Einstellungsseite ruft das Manifest beim Rendern ab |
config.php der Anwendung enthält keine Update- oder Backup-Konstanten
mehr.
admin/manage.php) bietet: Backup erstellen, Update
ausrollen, Migrationen nachholen, Status melden, lokale Backups herunterladen.admin/index.php) ruft manageBackupCreateAutomaticIfDue()
auf: ist seit dem letzten automatischen Backup das Intervall vergangen, wird
eines erstellt, sonst passiert nichts. Das ist der Ersatz für Cron auf
Hostings ohne Cron.Empfohlen, sobald Cron verfügbar ist:
20 3 * * * /usr/bin/php /pfad/zum/projekt/manage-client/bin/manage-client.php backup --trigger=cron --quiet
7 * * * * /usr/bin/php /pfad/zum/projekt/manage-client/bin/manage-client.php heartbeat --quiet
0 8 * * 1-5 /usr/bin/php /pfad/zum/projekt/manage-client/bin/manage-client.php check --quiet
Exitcodes: 0 Erfolg, 1 Fehler, 2 Update verfügbar (nur check). Updates
werden bewusst nicht automatisch installiert.
./scripts/create-release-zip.sh v1.3.15
Das Skript schreibt die Version nach includes/version.php, packt alle von Git
verwalteten Dateien abzüglich der Ausschlussliste (config.php,
manage-client/config.php, data/, build/, scripts/)
nach build/releases/psa-orderform-vX.Y.Z.zip und gibt SHA-256 und Größe aus.
Das ZIP wird im Manage-Server unter Releases hochgeladen; Prüfsumme und
Größe berechnet der Server selbst.
Die Wurzel des ZIP ist das Anwendungsverzeichnis — kein zusätzlicher Oberordner.
Migrationen liegen in migrations/ und werden mit dem Release ausgeliefert. Sie
laufen in Dateinamenreihenfolge, jeweils genau einmal; der Stand steht in
data/manage/migrations.json.
<?php
return function (array $context): void {
$file = $context["app_root"] . "/data/products.json";
// ... idempotent umbauen ...
};
Der Kontext enthält app_root, instance, from_version, to_version,
backup_dir, run_id und migration_id. Migrationen müssen idempotent sein:
eine mittendrin abgebrochene Migration gilt nicht als angewendet und läuft beim
nächsten Lauf von vorn.
Nach einem Fehler:
php manage-client/bin/manage-client.php migrate --dry-run
php manage-client/bin/manage-client.php migrate
data/manage/updates/, ausschließlich für manuelle Wiederherstellung.data/orders.json. Für den
Manage-Server gelten dieselben Anforderungen wie für diese Anwendung.
Zugangsdaten gehören nicht ins Backup — config.php ist deshalb keine
Backup-Quelle.