Ableger

Architektur

Technische Dokumentation. Wo liegen die Daten, wer schreibt worauf, was wann auf die Website kommt. Hintergründe und Begründungen sind hier zu finden:

Die Beispielnamen unten (git.example.org, ableger.example.org) stehen für die Werte, die bei einer eigenen Installation in install.env eingetragen werden (vgl. Getting Started).

Übersicht

flowchart LR
    Leser["Leser*in"]
    Autor["Autor*in"]
    Dev["Entwickler*in (lokal)"]

    subgraph Gitea["Gitea/Forgejo – git.example.org"]
        RepoWeb[("website<br/>Website + CMS-Code")]
        RepoContent[("methoden<br/>Methoden-Inhalte")]
        OAuth["OAuth-Login<br/>Teams read/write/Owners"]
    end

    subgraph Server["Hosting – ein oder zwei Server"]
        ProxyRead["oauth2-proxy<br/>optional, privater Modus"]
        ProxyWrite["oauth2-proxy<br/>optional, privater Modus"]
        Admin["/admin/<br/>Decap CMS"]
        Hook["post-receive Hook"]
        Cron["Cron<br/>alle 10 Min."]
        Sync["sync-methoden.sh"]
        Build["Hugo Build"]
        Website["Website"]
    end

    Leser -->|"prüft Login gegen<br/>(nur privater Modus)"| OAuth
    Autor -->|"prüft Login gegen"| OAuth
    Leser --> ProxyRead --> Website
    Autor --> ProxyWrite --> Admin
    Admin -->|"commit direkt<br/>publish_mode: simple"| RepoContent

    Dev -->|git push origin| RepoWeb
    Dev -->|git push origin| RepoContent
    Dev -.->|"git push deploy<br/>optional, löst sofort aus"| Hook
    Cron -->|ruft auf| Hook

    RepoWeb -->|klont/pullt| Hook
    RepoContent -->|klont/pullt| Sync
    Hook --> Sync
    Hook --> Build
    Sync --> Build
    Build -->|rsync| Website
    Build -->|rsync| Admin

Erläuterungen

Zwei Repos als Grundgerüst:

Der Zugriff auf methoden ist über Decap CMS vorgesehen, kann aber auch direkt über git erfolgen. Der Zugriff auf die Methoden ändert die Inhalte, die Website soll unabhängig davon laufen. Das website-Repo läuft daher unabhängig und kann mit anderen Zugriffsrechten versehen werden. Das website-Repo holt sich die Inhalte aus dem methoden-Repo. Grundsatz: „Der Methoden-Ordner ist die Quelle“.

Zwei oauth2-proxy-Instanzen vor der Website statt einer

Nur im privaten Modus, siehe unten: Website-Ansicht und Redaktion sind unterschiedlich streng zugriffsbeschränkt. Wer schreiben darf, soll auch lesen dürfen, aber nicht umgekehrt (vgl. Schnittstellen, Teil 2).

Der Deploy-Hook liest beide Repos direkt aus Gitea

Läuft der Hook auf demselben Server wie Gitea, geschieht das über einen lokalen Dateipfad. Laufen Gitea und der Deploy-Server getrennt, geschieht das über SSH (vgl. Getting Started, „Ein Server oder zwei“). Damit erreichen auch Commits, die nicht per git push entstanden sind (Giteas Web-Editor, gemergte Pull Requests), zuverlässig die Website.

Sofortiger Push ist Komfort, kein Muss:

Der Cron-Job baut ohnehin regelmäßig den aktuellen Stand neu. Ein optionaler zusätzlicher Git-Remote auf den Deploy-Server löst den Hook nur sofort aus, statt auf den nächsten Cron-Lauf zu warten – so eingerichtet in Getting Started, Schritt 8 (git remote add deploy / git push deploy main).

Der private Modus ist eine reine Infrastruktur-Entscheidung

Die optionalen Zugangsbeschränkungen erfordern keine Änderung an der Repo-Struktur oder Gewohnheit. Ohne die Beschränkung läuft die Website ganz normal öffentlich. Mit Zugangsbeschränkung laufen zwei zusätzliche Prozesse (ProxyRead, ProxyWrite) davor. Beide lassen sich unabhängig voneinander an- und abschalten.

Die vier Bausteine im Überblick

BausteinRolleWarum dieses Werkzeug
Gitea/ForgejoSpeichert beide Repos, verwaltet Zugriffsrechte, stellt OAuth2-Login bereitVolle Datenhoheit bei Selfhosting, native Fork-/PR-Funktionalität
Decap CMSStrukturierte Eingabeformulare für Methoden und VariantenKein Git-Wissen nötig für Beitragende; committet direkt in das Content-Repo
HugoBaut aus den Markdown-Dateien die durchsuchbare, filterbare WebsiteSchnell, ohne Datenbank/Serverlogik, bildet Zielgruppe/Kompetenzbereich/Kategorie nativ als Taxonomien ab
PagefindVolltextsuche über alle gebauten SeitenStatisches Binary, indiziert das fertige HTML nach dem Hugo-Build, keine eigene Serverkomponente notwendig

Ergänzend, optional:

BausteinRolleWarum dieses Werkzeug
oauth2-proxyErmöglicht privaten Modus für Read und/oder WriteLässt sich ohne Änderung der Strukturen aufschalten, ist eine simple Lösung ohne großen zusätzlichen Aufwand
Pandoc (WASM-Binary, clientseitig)Ermöglicht das Zusammenfassen von Methoden über LinklistenHilft Methoden-Sets zusammenzustellen und lässt sich damit gut in den Entwicklungsprozess von Veranstaltungen einbinden ( vgl. Methoden-Set-Werkzeug).

Fehlender Freigabemodus

Decap CMS bietet die Möglichkeit einen Redaktions-Workflow zu integrieren (Freigeben von Änderungen). Diese Funktionalität lässt sich momentan nicht mit Gitea/ Forgejo abbilden (wäre mit Gitlab vermutlich möglich). Wir haben konzeptionell entschieden, dass dieser Redaktionsworkflow zu viel Kontrolle in die Systematik bringt, zumal die Historie Änderungen transparent und reversibel macht. Außerdem sind wir davon ausgegangen, dass eine feste Community an einem Ableger arbeiten wird und dass ganz öffentliche Instanzen unwahrscheinlich sind. So bleibt das Beitrag einfacher und die Freigabe und Pflege wird zu nicht zu einem technischen Lösungspfad gemacht.