No results
6
Architektur
Ralf Warmuth edited this page 2026-01-10 23:58:44 +01:00
Architektur-Übersicht
System-Architektur
Das System besteht aus drei Hauptkomponenten:
1. Frontend (Statische Website)
Technologie: HTML, CSS, JavaScript (Vanilla) Build-System: Node.js mit ESM-Modulen
Struktur
content/
├── globals.json # Site-Konfiguration (Navigation, Event-Daten, etc.)
├── pages.json # Seiten-Definitionen
├── *.md # Markdown-Inhalte
└── *.html # HTML-Inhalte (Impressum, Datenschutz)
static/
├── assets/ # CSS, JavaScript, Bilder
├── anmeldung/ # PHP: Formular anzeigen (GET)
├── registration/ # PHP: Formular verarbeiten (POST)
└── api/ # PHP: kleine JSON-Endpunkte (z.B. event-date)
Build-Prozess
Das Build-Script (scripts/build.mjs) führt folgende Schritte aus:
- Markdown → HTML: Konvertiert Markdown-Dateien zu HTML
- Layout-Generierung: Fügt Header, Navigation und Footer hinzu
- Asset-Kopierung: Kopiert statische Dateien nach
public/ - Backend-Kopierung: Kopiert Backend-Code nach
public/backend/ - Datenverzeichnis: Erstellt
public/data/für SQLite-Datenbank - PHP-Dateien kopieren: Kopiert PHP-Dateien aus
static/nachpublic/(z.B.static/anmeldung/index.php→public/anmeldung/index.php)
Content-Management
-
globals.json: Zentrale Konfiguration
- Site-Titel, Navigation
- Event-Daten (Datum, Ort, Zeit)
- Organisations-Informationen
- Social Media Links
-
pages.json: Seiten-Definitionen
- Slug (URL-Pfad)
- Titel
- Datei-Referenz
- Typ (markdown/html)
2. Backend (PHP)
Architektur: MVC-ähnlich mit Repository-Pattern Datenbank: SQLite
Verzeichnisstruktur
zgb-backend/
├── Model/ # Domain-Models
│ ├── Registration.php
│ └── Config.php
├── Repository/ # Datenzugriff
│ ├── RegistrationRepository.php
│ ├── ConfigRepository.php
│ ├── Repository.php (Basis-Klasse)
│ └── Schema/ # SQL-Dateien
│ ├── Config/
│ └── Registration/
├── Service/ # Business-Logik
│ ├── AuthService.php
│ ├── CSRFService.php
│ ├── MailService.php
│ ├── SessionService.php
│ ├── RateLimitService.php
│ ├── LogService.php
│ └── MailQueueWorker.php
└── web/ # Controller/Endpoints
├── admin.php
├── admin_login.php
└── ...
Architektur-Pattern
Repository-Pattern:
- Abstraktion der Datenzugriffsschicht
- SQL in separaten Dateien (
Schema/) - Automatische Schema-Initialisierung
Service-Layer:
AuthService: Authentifizierung und Rate-LimitingCSRFService: CSRF-Token-VerwaltungMailService: E-Mail-Versand mit TemplatesSessionService: Zentrales, sicheres Session-SetupRateLimitService: File-basiertes Rate-Limiting für spezifische AktionenLogService: Strukturiertes Logging für Fehler und EventsMailQueueWorker: Asynchroner E-Mail-Versand mit Queue-System
Model-Klassen:
- Immutable Value Objects (readonly properties)
- Type-safe mit PHP strict types
3. Datenbank (SQLite)
Datei: public/data/zwergenboerse.db
Tabellen
registrations:
- Anmeldedaten (Name, Adresse, Kontakt)
- Vergebene Nummern
- Zeitstempel
config:
- Anmeldezeitraum (startDate, endDate)
- Nummernbereich (startNumber, maxNumber)
- Event-Datum
- Organisator-E-Mail
Schema-Management
- SQL-Dateien in
Repository/Schema/ - Automatische Initialisierung beim ersten Zugriff
- Migrationen durch SQL-Dateien
Datenfluss
Anmelde-Prozess
-
Formular-Anzeige (
static/anmeldung/index.php→/anmeldung/)- Lädt Konfiguration
- Prüft Anmeldezeitraum
- Findet freie Nummer
- Zeigt Formular
-
Formular-Submission (
static/registration/index.php→/registration/)- Validierung
- Duplikat-Prüfung
- Speicherung in Datenbank
- Mail-Queue oder Direktversand (User + Organisator)
-
Admin-Verwaltung (
admin.php)- Konfiguration bearbeiten
- Anmeldungen exportieren
- Anmeldungen löschen (außerhalb Zeitraum)
Detail-Flow inkl. Build-/Laufzeit-Pfade: Projekt-Landkarte (Code-getrieben)
Sicherheits-Architektur
Authentifizierung
- Session-basiert
- Passwort-Hash in Datenbank
- Rate-Limiting (5 Fehlversuche → 10 Min. Block)
CSRF-Schutz
- Token-basiert
- Token-Rotation nach erfolgreichen Aktionen
- Prüfung bei allen POST-Requests
Input-Validierung
- Server-seitige Validierung
- HTML5-Validierung im Frontend
- Prepared Statements (SQL-Injection-Schutz)
HTTP-Security-Headers
- X-Frame-Options: SAMEORIGIN
- X-Content-Type-Options: nosniff
- Content-Security-Policy
- Referrer-Policy
Build & Deployment
Build-Prozess
npm run build
Führt aus:
- Content-Verarbeitung
- Asset-Kopierung
- Backend-Kopierung
- Datenverzeichnis-Vorbereitung
Deployment
public/wird auf Server deployed- PHP muss verfügbar sein
- SQLite-Verzeichnis muss beschreibbar sein
- sendmail/postfix für E-Mail-Versand
Erweiterbarkeit
Neue Seiten hinzufügen
- Content-Datei in
content/erstellen - Eintrag in
pages.jsonhinzufügen - Build ausführen
Backend-Funktionen erweitern
- Model in
zgb-backend/Model/erstellen - Repository in
zgb-backend/Repository/erstellen - SQL-Schema in
Repository/Schema/hinzufügen - Service in
zgb-backend/Service/(falls nötig) - Controller in
zgb-backend/web/erstellen
Einstieg
Architektur
- Architektur-Übersicht
- Frontend-Build
- Backend
- Datenbank
- Mail-Queue
- Performance & Optimierungen
- Entscheidungen & Historie
Betrieb
Projektarbeit
- Code:
ssh://forgejo@home.schumbi.de/ralf/zgb_www.git - Wiki:
ssh://forgejo@home.schumbi.de/ralf/zgb_www.wiki.git