Zum Inhalt springen
Bartl

Ein Startpfad. Mehrere Zustände.

Installieren, wiederherstellen, aktualisieren: ein gemeinsamer Startpfad.

Bartl ist eine Betriebsphilosophie für praktisch ausübbare Resilienz und Souveränität. Sie verbindet Anwendung, Infrastruktur und Verantwortung für den vollständigen Service. Diese Seite erklärt einen technischen Baustein davon: den gemeinsamen Startpfad zustandsbehafteter Anwendungen.

Entscheidungslogik

Wie die Anwendung startet

Du installierst oder startest die Anwendung. Sie stellt selbst fest, was zu tun ist:

  • Sind ihre Daten bereits vorhanden, verwendet sie diese.
  • Andernfalls stellt sie die neueste Sicherung wieder her.
  • Ist kein Backup-Speicher konfiguriert oder gibt es noch keine Sicherung, startet sie mit den Ausgangsdaten der Anwendung.
  • Ist die Software neuer als die Daten, führt sie die notwendige Aktualisierung durch.

Du mußt diese internen Schritte weder auswählen noch von Hand ausführen.

Für regelmäßige Updates können wir die neuere Version als Ersatzinstallation aufbauen, statt die laufende Installation zu verändern. Der Ersatz stellt die Sicherung wieder her und aktualisiert die Daten mit demselben Verfahren. Jedes solche Update übt damit auch die Wiederherstellung.

Das ist eine Betriebsentscheidung, kein anderer Anwendungsmechanismus. Wir wählen die Version und den Ort, an dem sie laufen soll; die Anwendung bestimmt die Schritte.

Die Ersatzinstallation ändert das Ziel und erfordert die Umschaltung des Dienstes darauf, aber keine weitere Schnittstelle für Initialisierung oder Wiederherstellung.

Wähle unter dem Pseudocode einen beobachteten Fall. Die Darstellung folgt dem Anwendungsvertrag in README.md. Fehler bei der Beobachtung oder Integritätsprüfung stoppen den Start, statt einen leeren Zustand anzunehmen.

Interaktiver Pseudocode für die Bartl-Startentscheidung
until serving():
    local = observe_local_state()
    if local.exists:
        engine version vs local.version:
            equal:    serving()
            engine >: migrate(local)
            engine <: abort("downgrade")
    else:
        backup = observe_backup()
        if backup.valid: restore(backup)
        else:            init()

Wähle einen beobachteten Zustand, um den daraus folgenden Zweig hervorzuheben.

Technischer Vertrag

Release, Zustand und Konfiguration trennen. Sicherung optional nutzen.

Der gemeinsame Startpfad braucht weder Moduswahl noch eine Initialisierungsfreigabe. Ein Sicherungsstand wird nur ohne lokalen Zustand abgefragt.

  1. Versioniertes Release

    Ein unveränderliches Anwendungsartefakt mit bekannter Engine-Version und der produktspezifischen Migrationslogik, die zu diesem Release gehört.

  2. Vollständig deklarierter Zustand

    Alle veränderlichen Daten und Metadaten einschließlich einer zuverlässig ermittelbaren Zustandsversion. Nicht deklarierter Zustand kann nicht belastbar gesichert oder wiederhergestellt werden.

  3. Optionaler Sicherungsstand

    Der neueste vollständig veröffentlichte und geprüfte Stand für Kunde und Anwendung. Kein konfigurierter Backup-Store oder ein Store ohne Sicherung bedeutet Abwesenheit. Abfrage- und Integritätsfehler stoppen den Start.

  4. Zielkonfiguration

    Vom Ziel gelieferte Endpunkte und Zugangsdaten. Sie werden beim Start gebunden und gehören weder in das Release noch in den gesicherten Zustand.

Ausführbare Referenz

WordPress, MySQL und Docker Compose als prüfbares Beispiel.

bartl-wordpress illustriert den Mechanismus für eine festgeschriebene WordPress-Konfiguration. Ihre konkreten Voraussetzungen definieren nicht den allgemeinen Startvertrag. Datenbank und Uploads bilden den Zustand. WordPress-Core, Plugins und Themes bleiben unveränderlicher Image-Inhalt.

Zustand
MySQL-Datenbank und wp-content/uploads
Release
WordPress-Core, Plugins und Themes im Image
Backup
Prüfsummen für alle Bestandteile und .sha256 als Commit-Marker
Restore
Nur auf einem leeren, kompatiblen Ziel mit vollständigen Eingaben
Fehlerfall
Abbruch bei fehlenden, unvollständigen oder widersprüchlichen Eingaben

Quickstart

Voraussetzung ist ein Linux-Host mit Docker und Docker Compose. Ohne WORDPRESS_PUBLIC_URL läuft die lokale Referenz unter http://localhost:8080.

git clone https://codeberg.org/bartlapp/bartl-wordpress.git
cd bartl-wordpress
mkdir -p backup-store
docker compose up -d

Nach der WordPress-Initialisierung einen Sicherungsstand veröffentlichen:

docker compose exec bartl-init /backup.sh

Repository und Runbook auf Codeberg

Nachweisgrenze

Die Referenz belegt den Mechanismus nur für diese WordPress-Konfiguration. Sie belegt weder andere Anwendungen noch die Qualität einer Zielumgebung oder eine bestimmte Wiederanlaufzeit.

Klare Grenze

Was der Startmechanismus leistet und was der vollständige Service braucht.

Der Startmechanismus leistet

  • zuerst lokalen Zustand und Versionen beobachten, nur ohne lokalen Zustand eine Sicherung abfragen
  • den Startpfad aus diesen Beobachtungen wählen
  • Backups vor ihrer Verwendung prüfen
  • produktspezifische Migration aufrufen
  • bei Downgrade, Inkonsistenz oder fehlenden Voraussetzungen abbrechen
  • denselben Pfad bei Normalstart und Restore verwenden

Nicht durch den Startmechanismus abgedeckt

  • Zielinfrastruktur bereitstellen
  • Netzwerk, DNS, TLS oder Identity einrichten
  • externen Backup-Speicher betreiben
  • Backups oder Migrationen für beliebige Produkte erzeugen
  • Verfügbarkeit oder Wiederanlaufzeiten garantieren
  • Traffic oder Schreibautorität koordinieren
  • einen vollständigen Betriebs- oder Recovery-Prozeß ersetzen

Eignung

Das Muster braucht eine saubere Zustandsgrenze.

Geeignet, wenn

  • der veränderliche Zustand vollständig benannt und versioniert werden kann
  • Release, Zustand und Zielkonfiguration sauber getrennt sind
  • Backup-Integrität und Restore automatisiert geprüft werden können
  • produktspezifische Migrationen deterministisch aufgerufen werden können

Nicht geeignet, wenn

  • kritischer Zustand unbekannt oder über unkontrollierte Orte verteilt bleibt
  • ein leerer, gültiger und beschädigter Zustand nicht unterscheidbar sind
  • Release und Laufzeitzustand nicht voneinander getrennt werden können
  • der Startmechanismus externe Betriebsaufgaben vollständig übernehmen soll

Den Mechanismus am laufenden Beispiel prüfen.

Die Referenz ausführen, einen Sicherungsstand erzeugen und den Start auf einem leeren kompatiblen Ziel beobachten. Die Spec beschreibt den engen Vertrag dahinter.