00_UEBERBLICK.md 5.8 KB

Manage Client – Handbuch

Update- und Backup-Funktionalität für eigenständige PHP-Projekte: Dokumentation und vollständiger Quellcode auf einer Seite.

Diese Seite ist die veröffentlichte Fassung des Ordners client-package/ aus dem Manage-Repository. Sie enthält {{DOC_COUNT}} Dokumente und {{CODE_COUNT}} Quelldateien, jeweils vollständig und unverändert, dazu die OpenAPI-Spezifikation der Server-Schnittstelle. Alles wird bei jedem Aufruf frisch aus dem Repository gelesen; was hier steht, ist der aktuelle Stand.

Diese Seite <{{SELF_URL}}/>
Reiner Text für Agenten <{{SELF_URL}}/llms.txt>
API-Referenz (Swagger UI) <{{SELF_URL}}/api.php>
OpenAPI-Dokument <{{SELF_URL}}/openapi.php>
Manage-Server <{{BASE_URL}}/>

Hinweis für LLM-Agenten

Wenn Sie ein Agent sind und den Auftrag haben, Update- und Backup-Funktionalität in ein Projekt einzubauen: Diese Seite ist die vollständige Vorlage. Sie brauchen keine weitere Quelle.

Empfohlener Weg – das Paket übernehmen, nicht nachbauen. Der Client ist bewusst so geschnitten, dass er als Ordner in ein fremdes Projekt kopiert wird. Er hat keine Abhängigkeiten, keinen Build-Schritt und keine Annahmen über das Zielprojekt außer PHP. Nachbauen kostet Zeit und verliert Details, die hier bereits gelöst sind – Prüfsummen, geschützte Pfade, Sperrdateien, Wiederanlauf nach Teilfehlern.

Vorgehen:

  1. Legen Sie manage-client/ im Zielprojekt an und übernehmen Sie alle Dateien aus Teil 3 dieses Dokuments, die mit manage-client/ beginnen – Pfade und Inhalte unverändert.
  2. Kopieren Sie manage-client/config.sample.php nach manage-client/config.php und setzen Sie MANAGE_SERVER_URL, MANAGE_INSTANCE, MANAGE_TOKEN sowie MANAGE_BACKUP_SOURCES. Die Werte für die ersten drei kommen aus dem Manage-Server; fragen Sie danach, statt sie zu erfinden.
  3. Prüfen Sie MANAGE_APP_ROOT, MANAGE_VERSION_FILE und MANAGE_VERSION_CONSTANT gegen den tatsächlichen Aufbau des Zielprojekts. Das sind die einzigen Stellen, an denen der Client etwas über das Projekt wissen muss.
  4. Ergänzen Sie MANAGE_UPDATE_PROTECTED_PATHS um alles, was ein Update niemals überschreiben darf, und MANAGE_UPDATE_SANITY_PATHS um eine Datei, die in jedem gültigen Release vorkommt.
  5. Binden Sie einen der drei Einstiegspunkte ein: Kommandozeile für Cron, ui/panel.php für den Adminbereich, oder die Funktions-API für eigene Seiten. Siehe das Kapitel Integration.
  6. Prüfen Sie mit php manage-client/bin/manage-client.php status.

Wenn Sie stattdessen neu implementieren müssen – andere Sprache, anderes Framework – ist das Kapitel Protokoll zusammen mit Teil 2 die verbindliche Beschreibung der Schnittstelle. Halten Sie sich an drei Punkte, sonst ist die Implementierung unsicher: SHA-256 und Größe jedes Pakets gegen das Manifest prüfen und bei Abweichung abbrechen; beim Entpacken jeden Eintrag gegen Pfadausbruch prüfen; geschützte Pfade beim Ausrollen auslassen.

Was Sie nicht tun sollten: die Konfigurationsdatei mit einem erfundenen Token ausliefern, das Backup vor dem Update automatisch einbauen (das ist bewusst eine sichtbare Zeile im Projekt), oder eine Wiederherstellungsfunktion versprechen – es gibt keine, siehe unten.

Was der Client tut

Drei Vorgänge, alle über dieselben Funktionen, egal ob sie aus der Kommandozeile, aus der mitgelieferten Oberfläche oder direkt aus dem Projekt ausgelöst werden.

Update. manageUpdateCheck() holt das Manifest vom Server und vergleicht die Versionen. manageUpdateApply() lädt das Paket, prüft Größe und SHA-256, entpackt es in ein Arbeitsverzeichnis, prüft dabei jeden ZIP-Eintrag gegen Pfadausbruch, verlangt mindestens einen Sanity-Pfad im Archiv, kopiert dann Datei für Datei in das Projekt und legt jede überschriebene Datei vorher in einem Zeitstempel-Ordner ab. Geschützte Pfade werden übersprungen. Danach laufen die Migrationen aus dem Paket und ein optionaler Callback.

Backup. manageBackupCreate() sammelt die konfigurierten Quellen – Globs, Verzeichnisse, Einzeldateien, jeweils mit Zielpräfix im Archiv –, hängt optional einen MySQL-Dump an, schreibt ein ZIP, wendet die lokale Aufbewahrung an und lädt das Archiv zum Manage-Server sowie zu optionalen Zusatzzielen (S3, SFTP, eigener Endpunkt). Eine Sperrdatei verhindert gleichzeitige Läufe. Ein fehlgeschlagener Upload macht das lokale Archiv nicht ungültig.

Heartbeat. manageHeartbeatSend() meldet Version, PHP-Version, freien Speicher, offene Migrationen und den Zeitpunkt des letzten Backups. Die Antwort enthält nebenbei die Update-Information.

Grenzen

Diese Punkte fehlen bewusst. Wer sie erwartet, baut auf einer falschen Annahme auf.

  • Keine Wiederherstellung. Backups werden erstellt, übertragen und zum Download bereitgestellt, aber nie automatisch zurückgespielt. Ein Update sichert die überschriebenen Dateien, kann sie aber nicht zurückholen.
  • Keine automatischen Updates. Der Server bietet an, die Instanz entscheidet.
  • Keine Signatur der Pakete. Prüfsumme und Paket kommen vom selben Server; die Absicherung ist TLS plus Token.
  • Keine Wartungsseite. Das Ausrollen überschreibt Dateien im laufenden Betrieb.

Voraussetzungen

PHP 8.0 oder neuer, die Erweiterung zip für Updates, Schreibrechte auf dem Datenverzeichnis des Projekts. Kein Composer, kein Build-Schritt, keine externen Bibliotheken.

Aufbau dieses Dokuments

Teil 1 ist die Dokumentation des Pakets in Lesereihenfolge, beginnend mit dem README und dem Quickstart. Teil 2 beschreibt die HTTP-Schnittstelle zum Manage-Server und enthält die vollständige OpenAPI-Spezifikation. Teil 3 ist der gesamte Quellcode. Am Ende steht eine Dateiübersicht.

Querverweise zwischen den Kapiteln zeigen innerhalb dieser Seite auf den jeweiligen Abschnitt.