Appearance
MATEV 2026Projektdokumentation
Filament-Backend, Kirby-CMS + Nuxt-Frontend, B2B-Portal (Laravel + Inertia) — alles als Container hinter Caddy + FrankenPHP
Filament-Backend, Kirby-CMS + Nuxt-Frontend, B2B-Portal (Laravel + Inertia) — alles als Container hinter Caddy + FrankenPHP
Willkommen in der Projektdokumentation. MATEV 2026 ist eine Multi-Service-Architektur: Filament-PIM, Kirby-CMS, Nuxt-Frontend und B2B-Portal (Laravel + Inertia) laufen als eigenständige Container, alle hinter einem zentralen Caddy-Reverse-Proxy mit Auto-SSL. PHP-Workloads (Filament, Kirby, B2B-Portal) nutzen FrankenPHP im Worker-Mode.
Auf dem Server liegt jeder Stack als docker-compose.yml in home/bengel/stacks/<stack>/. Portainer dient ausschließlich als Cockpit (Logs, Restart, Shell) — die Source of Truth ist immer der Compose-File im Git.
Zwei klar getrennte Hierarchien:
/home/bengel/stacks/ ← Compose + .env + persistente Volumes
├── proxy/ → caddy
├── mgmt/ → portainer (off-domain), matomo (+db)
├── git/ → forgejo (+db), woodpecker (+agent)
└── apps/ → admin (Filament), cms (Kirby), b2b (Inertia),
staging (Nuxt), docs (Vitepress), storybook,
search-stack (meili+opensearch+ollama),
+ Sub-Compose für penpot/ und taiga/
/var/www/ ← Source-Code pro Service (bengel:www-data 2775)
└── admin/ cms/ b2b/ staging/ docs/ storybook/ ...Der Build-Context im apps/docker-compose.yml zeigt auf /var/www/<service>/ — die Dockerfiles liegen direkt im Webroot. Vorlagen in home/bengel/stacks/apps/dockerfiles-reference/.
Details: Stacks-Referenz.
| Bereich | Technologie | Version |
|---|---|---|
| Backend / PIM | Laravel 13 + Filament 5 | 13.x / 5.x |
| CMS | Kirby CMS (headless) + KQL | 5.x |
| Frontend (Marketing) | Nuxt 4 + Bun | 4.x / latest |
| B2B-Portal | Laravel + Inertia | 13.x |
| Design System | Storybook | 9.x |
| Dokumentation | VitePress (mit Bun) | 1.6 |
| Design Tool | Penpot | latest |
| Analytics | Matomo | latest |
| Projektmanagement | Taiga | latest |
| PHP-Runtime | FrankenPHP + Laravel Octane (Worker) | PHP 8.4 |
| Reverse Proxy | Caddy | 2.11.x |
| Containerisierung lokal | DDEV + Docker | v1.25+ |
| Containerisierung Server | Docker Compose (Git-based) | latest |
| Container-UI | Portainer CE | latest |
| CI / CD | Woodpecker CI + Forgejo | latest |
| Git-Hosting | Forgejo | 15.x |
| Package-Manager (JS) | Bun | latest |
| Service | Container | Domain | Stack |
|---|---|---|---|
| Filament-PIM | admin | https://admin.matev.eu | apps |
| Kirby-CMS (+ KQL) | cms | https://cms.matev.eu | apps |
| Nuxt-Staging-Frontend | staging | https://staging.matev.eu | apps |
| B2B-Händlerportal (Inertia) | b2b | https://b2b.matev.eu | apps |
| Storybook | storybook | https://storybook.matev.eu | apps |
| Docs (VitePress) | docs | https://docs.matev.eu | apps |
| Design (Penpot) | design | https://design.matev.eu | apps |
| Projekt (Taiga) | taiga-gateway | https://project.matev.eu | taiga |
| Analytics (Matomo) | matomo | https://analytics.matev.eu | mgmt |
| Git (Forgejo) | forgejo | https://git.matev.eu | git |
| CI (Woodpecker) | woodpecker | https://ci.matev.eu | git |
| Portainer | portainer | https://<server-ip>:9443 (off-domain) | mgmt |
Portainer läuft bewusst nicht über Caddy / *.matev.eu, sondern direkt auf der Server-IP via Self-Signed-TLS — abgesichert per UFW-Whitelist oder VPN/Tailscale. So bleibt staging.matev.eu für die Nuxt-Demo frei.
| Sie sind … | Lesen Sie |
|---|---|
| Redakteur oder Produktmanager im PIM | PIM-Handbuch |
| Redakteur der Website | CMS-Handbuch |
| Entwickler einer Anbindung | API-Referenz |
| Entwickler am Projekt | Entwicklung |
| Betrieb | Server-Setup, Deployment, Backup |
Im Repository stehen keine Benutzer und keine Passwörter. Lokale PIM-Konten kommen aus der git-ignorierten Datei admin/database/seeders/local-users.json (Vorlage: local-users.example.json), siehe Lokale Entwicklung. Kirby-Panel, Penpot und Matomo legen ihr erstes Konto beim ersten Aufruf an. Woodpecker meldet über Forgejo (OAuth2) an.
Auf dem Server legt ein Admin Konten im PIM an und lädt die Personen per Mail ein. Zugangsdaten gehören in den Passwortmanager, nie in diese Dokumentation.
git clone --recurse-submodules https://git.matev.eu/matev/infrastructure.git matev_2026
cd matev_2026
./setup.shManuell siehe Lokales Setup.
Mit Deployer (deploy.php): rsync des Codes nach /var/www/<service>/, dann docker compose build und up -d im Stack ~/stacks/apps, danach Migrationen und weitere Nachbefehle. Ausgelöst durch Woodpecker (Push auf main) oder von Hand, immer aus dem Haupt-Checkout. Details siehe Entwicklung → Deployment und Deployment.
Stack-Definitionen liegen in Git, Daten liegen in den *_data/-Verzeichnissen daneben. Backup-Strategie: tägliche Snapshots der Volumes + mysqldump/pg_dump aller DB-Container in einen Dump-Ordner, der mitgesichert wird. Details siehe Backup.