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 /.msivorü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_serveraus (/var/www/pragma/site). - Automatisches SSL/TLS-Zertifikatsmanagement via Let's Encrypt.
- Leitet Backend-Anfragen (
/pragma/*) perreverse_proxyan 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.