Zum Inhalt

Systemarchitektur & Technologie

Pragma ist als moderne Multi-Tier-Anwendung konzipiert, die hohe Performance auf dem Desktop mit Skalierbarkeit und Sicherheit auf dem Server vereint.


🏗️ Gesamtarchitektur

graph TD
    subgraph Client ["Client (Windows Desktop)"]
        UI["JavaFX UI (OpenJFX 21+)"]
        CDI["CDI Container (Weld SE)"]
        REST_C["REST Client (java.net.http)"]
        UI --> CDI
        CDI --> REST_C
    end

    subgraph Edge ["Edge & Webserver"]
        Proxy["Caddy Webserver & Reverse Proxy (:80, :443 TLS)\npragma.r-uu.com"]
        StaticSite["Statische Dateien (/var/www/pragma/site)\nMkDocs Homepage & Dokumentation"]
    end

    subgraph ServerStack ["Hetzner Produktions-Stack (Docker Compose)"]
        subgraph Liberty ["Container: pragma (Open Liberty / Java 25)"]
            REST_S["Jakarta REST Services (/pragma)\nrest-0.0.1.war"]
        end

        DB[("Container: pragma-postgres\nPostgreSQL 17")]
        Auth["Container: pragma-keycloak\nKeycloak 26 (OAuth2 / OIDC)"]
    end

    Proxy -- "file_server (/)" --> StaticSite
    Proxy -- "Reverse Proxy /pragma/* (:9080)" --> Liberty
    REST_C -- "HTTPS /pragma/api/*" --> Proxy
    REST_C -. "OAuth2 Login / Token" .-> Auth
    REST_S -- "JPA / JDBC" --> DB
    REST_S -- "JWT Public Key Verify" --> Auth
    Auth -- "Persistence" --> DB

💻 Frontend: Desktop First mit JavaFX

  • Java Module System (JPMS): Vollständige Modularisierung für minimale Paketgrößen und klare Schnittstellengrenzen.
  • Weld SE (CDI): Dependency Injection und lose Kopplung aller UI-Controller und Geschäftslogik-Komponenten.
  • Distribution via jpackage: Eigenständige Windows-Distribution (Portable-ZIP / .msi vorübergehend pausiert) ohne Notwendigkeit einer systemweiten Java-Vorinstallation.

🖥️ Backend & Webpräsenz (Caddy & Open Liberty auf Hetzner)

  • Caddy Webserver & Reverse Proxy:
  • Liefert die statische MkDocs-Homepage und Dokumentation direkt und performant per file_server aus (/var/www/pragma/site).
  • Automatisches SSL/TLS-Zertifikatsmanagement via Let's Encrypt.
  • Leitet Backend-Anfragen (/pragma/*) per reverse_proxy an den Open-Liberty-Container auf Port 9080 weiter.
  • Open Liberty (Jakarta EE 10 / MicroProfile 7):
  • Beantwortet alle Backend-Anfragen unter /pragma/* (reines REST-Backend, frei von statischen Web-Ressourcen).
  • Verbindet sich über das interne Docker-Netzwerk mit PostgreSQL.
  • Schützt alle REST-Endpunkte über MicroProfile JWT (MP-JWT) und validiert Tokens gegen Keycloak.
  • Zentrales Deployment (dist-hetzner): Vollautomatisierter Maven-Build zur Erstellung und Aktualisierung des Docker-Stacks und der statischen Web-Assets auf dem Server.