Inhaltsverzeichnis
CI/CD & Infrastruktur
GitHub Actions Workflows
1. PHP-Analyse (php.yml)
Läuft bei Push/PR auf master:
- PHP 8.3 Syntax-Check aller
.php-Dateien - PHPStan Level 6 Analyse (512 MB Memory-Limit)
- Composer Audit (AC-3 Vulnerability Scanning)
- Gitleaks Secret Scanning
2. Tests (tests.yml)
Läuft bei Push auf master/dev und PRs auf master:
- MySQL 8.0 Service-Container mit Health Checks
- Test-Config wird inline generiert
- Schema-Import aus
admin/create_sql.sql - Unit- und Integration-Tests mit PHPUnit (5 Min Timeout)
3. Docker Smoke Tests (docker-smoke.yml)
Umfassende Integrationstests:
- Docker-Image bauen mit Cache
- HTTP-Smoke-Tests: 200er-Status auf 12+ Seiten (/, /downloads, /events, /kontakt, /mitglied, …)
- Content-Checks: OG-Tags, Preload-Hints, CSRF-Meta-Tags auf Formularen
- Social-Redirect-Validierung: 8 Plattformen → 302 + Location-Header
- API-Struktur-Checks: 13 JSON-Endpunkte
- Admin-Asset-Prüfung und 404-Handling
Apache .htaccess Security Headers
Content-Security-Policy: default-src 'self'; script-src 'self' (Admin)
Strict-Transport-Security: max-age=31536000
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
Session-Hardening
- HttpOnly, SameSite=Lax, Secure
gc_maxlifetime: 3600s
Caching
- Statische Assets: 30 Tage (Bilder, Fonts, WOFF2), 7 Tage (CSS/JS)
- GZIP Deflate aktiviert
Docker-Setup
Drei Container:
| Container | Basis | Port |
|---|---|---|
| web | PHP 8.3 + Apache | 15080 |
| mcp | PHP 8.3 Built-in Server | 8888 |
| db | MySQL 8.0 | 13306 |
Datenbank-Schema
13 Tabellen (InnoDB, utf8mb4):
| Tabelle | Beschreibung |
|---|---|
admin |
Admin-Benutzer (inkl. Brute-Force-Felder: failed_attempts, locked_until) |
permissions + admin_permissions |
11 granulare Berechtigungen |
events |
Events (inkl. Pretix: pretix_event_slug, pretix_quota_id) |
charaktere |
Bilingual (title_de/en, text_de/en), positionsbasierte Sortierung |
faq |
Konsolidiert mit Type-Spalte (allgemein, rhoen_dance, fursuits) |
fursuits + fursuit_types + fursuit_parts + fursuit_part_map |
Verleihsystem mit Preisstufen und Maßbeschränkungen |
downloads |
Download-Zähler + tägliche Statistiken |
event_photo_links |
Fotografen-Attribution + Quellen-Tracking |
social_links |
8 Plattformen |
rhoen_dance |
Plätze/Kapazität |
mail_config |
SMTP-Konfiguration |
contact_form + contact_request_log |
Kontaktanfragen mit IP-Hashing für Spam-Tracking |
Pretix-Integration
PretixAPI-Klasse mit 5-Minuten-Cache (SHA256-gehashte JSON-Dateien incache/pretix/)- Endpoints: Quota-Verfügbarkeit und Event-Liste
- API-Server:
https://pretix.eu/api/v1 - Token-basierte Authentifizierung