Skip to content

MATEV 2026Projektdokumentation

Filament-Backend, Kirby-CMS + Nuxt-Frontend, B2B-Portal (Laravel + Inertia) — alles als Container hinter Caddy + FrankenPHP

MATEV 2026 ​

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.

Stack-Übersicht (Server) ​

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.

Tech-Stack ​

BereichTechnologieVersion
Backend / PIMLaravel 13 + Filament 513.x / 5.x
CMSKirby CMS (headless) + KQL5.x
Frontend (Marketing)Nuxt 4 + Bun4.x / latest
B2B-PortalLaravel + Inertia13.x
Design SystemStorybook9.x
DokumentationVitePress (mit Bun)1.6
Design ToolPenpotlatest
AnalyticsMatomolatest
ProjektmanagementTaigalatest
PHP-RuntimeFrankenPHP + Laravel Octane (Worker)PHP 8.4
Reverse ProxyCaddy2.11.x
Containerisierung lokalDDEV + Dockerv1.25+
Containerisierung ServerDocker Compose (Git-based)latest
Container-UIPortainer CElatest
CI / CDWoodpecker CI + Forgejolatest
Git-HostingForgejo15.x
Package-Manager (JS)Bunlatest

Services & Routen (Server) ​

ServiceContainerDomainStack
Filament-PIMadminhttps://admin.matev.euapps
Kirby-CMS (+ KQL)cmshttps://cms.matev.euapps
Nuxt-Staging-Frontendstaginghttps://staging.matev.euapps
B2B-Händlerportal (Inertia)b2bhttps://b2b.matev.euapps
Storybookstorybookhttps://storybook.matev.euapps
Docs (VitePress)docshttps://docs.matev.euapps
Design (Penpot)designhttps://design.matev.euapps
Projekt (Taiga)taiga-gatewayhttps://project.matev.eutaiga
Analytics (Matomo)matomohttps://analytics.matev.eumgmt
Git (Forgejo)forgejohttps://git.matev.eugit
CI (Woodpecker)woodpeckerhttps://ci.matev.eugit
Portainerportainerhttps://<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.

Dokumentation nach Rolle ​

Sie sind …Lesen Sie
Redakteur oder Produktmanager im PIMPIM-Handbuch
Redakteur der WebsiteCMS-Handbuch
Entwickler einer AnbindungAPI-Referenz
Entwickler am ProjektEntwicklung
BetriebServer-Setup, Deployment, Backup

Zugänge ​

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.

Schnellstart (lokal) ​

bash
git clone --recurse-submodules https://git.matev.eu/matev/infrastructure.git matev_2026
cd matev_2026
./setup.sh

Manuell siehe Lokales Setup.

Deployment (Server) ​

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.

Backup ​

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.