Zu Content springen
Shopware

Shopware Minden: Technischer Leitfaden für E-Commerce-Profis

von René Kremer

Shopware Minden: Technischer Leitfaden für E-Commerce-Profis
27:49

Du planst ein Shopware-6-Projekt oder optimierst einen bestehenden Shop? Dieser Artikel liefert dir technische Tiefe zu Hosting-Topologien, Caching-Strategien, Integrationsarchitekturen, Performance-Optimierung und Betriebsmodellen – mit konkreten Shopware-6-Spezifika, die über Standard-Best-Practices hinausgehen. Ziel ist, dir belastbare Entscheidungsleitplanken zu geben, damit du Architektur, Infrastruktur und Prozesse präzise planen kannst – bei Bedarf auch gemeinsam mit einer Shopware Agentur.

Für wen dieser Artikel gedacht ist

Du hast bereits E-Commerce-Erfahrung, kennst die Grundlagen von Shopware 6 und suchst jetzt nach technischen Details für Hosting-Setup, Caching-Invalidierung, Integrationsmuster, Plugin-Governance, Release-Strategien und Monitoring. Du brauchst keine Einführung in grundlegende E-Commerce-Konzepte, sondern konkrete Architektur-Entscheidungen, Performance-Messpunkte und Umsetzungsbeispiele.

Was du nach diesem Artikel weißt

  • Hosting-Topologien und deren Trade-offs (Single-Server, Load-Balanced, Kubernetes-basiert)
  • HTTP-Cache-Invalidierung und Caching-Layer in Shopware 6
  • Elasticsearch-/OpenSearch-Konfiguration für Performance und Relevanz
  • Plugin-Governance-Kriterien und Update-/Release-Strategien (Staging, Blue-Green, Canary)
  • Integrationsmuster mit konkreten Sync-Frequenzen, Daten-Mastering-Matrix und typischen Fehlerbildern
  • Monitoring-Stack und Performance-Messpunkte (Core Web Vitals, Backend-Metriken, Infrastruktur)
Serverraum mit Monitor für E-Commerce-Infrastruktur und KPI-Dashboard; im Vordergrund Laptop mit Code und Notizbuch mit Prozessskizze.

Hosting-Topologien: Architektur-Entscheidungen und Trade-offs

Die Wahl deiner Hosting-Topologie bestimmt Skalierbarkeit, Ausfallsicherheit und Performance. Hier die gängigen Setups mit ihren Vor- und Nachteilen.

Single-Server-Setup

Alle Komponenten (Web, Datenbank, Redis, Elasticsearch) laufen auf einem Server. Geeignet für kleine Shops (unter 10.000 Produkte, unter 500 Bestellungen pro Monat).

Vorteil Nachteil
Geringe Kosten (ca. 50–150 € pro Monat) Single Point of Failure
Einfache Administration Keine horizontale Skalierung
Schnelles Setup Performance-Bottleneck bei Lastspitzen

Infrastruktur-Komponenten:

  • Webserver: Nginx oder Apache mit PHP-FPM (PHP 8.1 oder höher, OpCache aktiviert)
  • Datenbank: MySQL 8.0 oder höher bzw. MariaDB 10.5 oder höher (InnoDB, innodb_buffer_pool_size mindestens 1 GB)
  • Cache: Redis 6 oder höher für Session-Storage und Object-Cache
  • Queue: Symfony Messenger mit Redis-Transport oder Doctrine-Transport
  • Elasticsearch: Optional lokal (nicht empfohlen unter 4 GB RAM)

Empfohlene Server-Specs (Minimum):

  • 4 vCPUs, 8 GB RAM, 80 GB SSD (NVMe bevorzugt)
  • PHP-FPM: pm.max_children=50, pm.start_servers=10, pm.min_spare_servers=5, pm.max_spare_servers=15
  • OpCache: opcache.memory_consumption=256, opcache.max_accelerated_files=20000, opcache.validate_timestamps=0 (Production)

Load-Balanced Multi-Server-Setup

Web-Layer horizontal skaliert (mehrere Application-Server hinter Load-Balancer), dedizierte Server für Datenbank, Redis, Elasticsearch. Geeignet für mittlere bis große Shops (ab 500 Bestellungen pro Monat, hoher Traffic).

Vorteil Nachteil
Horizontale Skalierung (Web-Layer) Höhere Komplexität
Ausfallsicherheit (Web-Server redundant) Höhere Kosten (ca. 500–2.000 € pro Monat)
Performance-Optimierung pro Layer möglich Session-Handling erfordert zentralen Redis

Infrastruktur-Komponenten:

  • Load-Balancer: HAProxy, Nginx, AWS ALB, Cloudflare Load Balancing
  • Application-Server: 2 oder mehr identische Web-Server (Auto-Scaling möglich)
  • Datenbank: Dedizierter MySQL-Server (Master-Slave-Replikation für Read-Skalierung)
  • Redis: Dedizierter Redis-Server (Sentinel für HA oder Redis Cluster ab 3 Nodes)
  • Elasticsearch: Dedizierter Node (mindestens 3-Node-Cluster für Production empfohlen)
  • Message-Queue-Worker: Dedizierte Worker-Server oder Container (Symfony Messenger Consumer)

Wichtig für Session-Handling: Shopware 6 nutzt standardmäßig PHP-Sessions. Bei Load-Balancing MUSS Redis als Session-Handler konfiguriert werden (framework.session.handler_id: Redis-SessionHandler in config/packages/framework.yaml). Alternativ: Sticky-Sessions auf Load-Balancer-Ebene (nicht empfohlen, da Single Point of Failure pro Session).

Kubernetes-basiertes Setup

Shopware 6 läuft in Container-Orchestrierung (Kubernetes, Docker Swarm). Geeignet für große Shops, Multi-Tenant-Setups, hohe Skalierungsanforderungen.

Vorteil Nachteil
Auto-Scaling (Pods skalieren bei Last) Hohe Komplexität (DevOps-Know-how nötig)
Rolling-Updates, Blue-Green-Deployments einfach umsetzbar Kosten (Managed Kubernetes: ab 300 € pro Monat, zzgl. Nodes)
Infrastruktur als Code (Helm, Terraform) Overhead für kleine Shops unverhältnismäßig

Infrastruktur-Komponenten:

  • Container-Images: Shopware-6-Docker-Images (offizielles shopware/development oder Custom-Builds)
  • Ingress-Controller: Nginx Ingress, Traefik (SSL-Terminierung, Routing)
  • Persistent-Volumes: Für Medien (empfohlen: S3-kompatibles Object-Storage statt PV)
  • ConfigMaps/Secrets: Für Umgebungsvariablen (DB-Credentials, Redis-Hosts, API-Keys)
  • StatefulSets: Für Datenbank, Redis, Elasticsearch (wenn selbst gehostet)
  • Deployments: Für Shopware-Web-Pods (Replicas: mindestens 2, HPA für Auto-Scaling)

Shopware-6-spezifische Container-Konfiguration:

  • APP_ENV=prod, APP_DEBUG=0 (niemals Debug-Mode in Production)
  • DATABASE_URL, REDIS_URL, ELASTICSEARCH_URL per Secret injizieren
  • Medien-Storage: S3-Plugin nutzen (shopware/s3) statt lokalem Dateisystem (PV-Probleme bei Pod-Restart)
  • HTTP-Cache: Varnish als Sidecar-Container oder dedizierter Service (empfohlen bei hohem Traffic)

Hosting-Entscheidungsmatrix

Kriterium Single-Server Load-Balanced Kubernetes
Traffic pro Monat Bis 50.000 Besucher 50.000–500.000 Besucher Ab 500.000 Besucher
Bestellungen pro Monat Bis 500 500–5.000 Ab 5.000
Produktkatalog Bis 10.000 Produkte 10.000–100.000 Produkte Ab 100.000 Produkte
Kosten pro Monat 50–150 € 500–2.000 € 1.500–10.000 €
Deployment-Komplexität Niedrig (FTP/SSH, Deployer) Mittel (CI/CD, Deployer, Capistrano) Hoch (Helm, Terraform, GitOps)
Ausfallsicherheit Niedrig (SPOF) Mittel (Web redundant, DB SPOF) Hoch (alles redundant möglich)

HTTP-Cache und Caching-Layer: Invalidierung und Performance

Shopware 6 bietet mehrere Caching-Layer. Deren Konfiguration entscheidet über Ladezeiten und Cache-Kohärenz.

Caching-Layer im Überblick

Layer Funktion Invalidierung
HTTP-Cache (Symfony HttpCache oder Varnish) Cacht vollständige HTTP-Responses (HTML-Seiten) Tag-basiert (Shopware sendet Cache-Tags im Response-Header)
Object-Cache (Redis) Cacht Objekte (Entities, Konfigurationen, Übersetzungen) Automatisch bei Entity-Änderung (Doctrine-Events)
OpCache (PHP) Cacht kompilierten PHP-Code Nur bei PHP-FPM-Restart oder opcache_reset()
Browser-Cache Cacht statische Assets (CSS, JS, Bilder) im Browser Cache-Busting via Versionierung (Asset-Timestamps)

HTTP-Cache-Konfiguration

Shopware 6 nutzt standardmäßig Symfony HttpCache (Reverse-Proxy in PHP). Für Production empfohlen: Varnish (deutlich performanter) – Details zur passenden Setup-Variante findest du auch im Beitrag zu Shopware 6 mit Varnish.

Symfony HttpCache aktivieren:

  • In .env: SHOPWARE_HTTP_CACHE_ENABLED=1
  • Routing: Requests laufen durch public/index.php, HttpCache-Layer prüft Cache, bei Miss: Shopware generiert Response, speichert in Cache
  • Cache-Storage: Standardmäßig Dateisystem (var/cache/prod/http_cache), besser: Redis (shopware.http_cache.redis_url konfigurieren)

Varnish konfigurieren:

  • Varnish VCL für Shopware 6 nutzen (offizielle VCL: vendor/shopware/core/Framework/Resources/config/varnish.vcl)
  • Varnish vor Application-Server schalten (Port 80/443 zu Varnish, Port 8000 Application)
  • Cache-Invalidierung: Shopware sendet PURGE-Requests mit Cache-Tags an Varnish
  • Health-Check: Varnish prüft Backend-Verfügbarkeit (backend probe in VCL)

Cache-Tags und Invalidierung:

Shopware 6 sendet bei jeder Response HTTP-Header mit Cache-Tags (z. B. product-abc123, category-xyz). Wenn ein Produkt geändert wird, sendet Shopware PURGE-Request mit diesem Tag an HTTP-Cache, Cache invalidiert nur betroffene Seiten (nicht gesamten Cache).

Typische Cache-Tags:

  • product-{productId}
  • category-{categoryId}
  • navigation-{salesChannelId}
  • footer-{salesChannelId}
  • cms-{cmsPageId}

Invalidierungs-Trigger:

  • Produkt-Update (Preis, Name, Verfügbarkeit) invalidiert product-Tag
  • Kategorie-Update invalidiert category-Tag
  • CMS-Änderung invalidiert cms-Tag
  • Theme-Änderung invalidiert gesamten Cache (theme:compile triggert Cache-Clear)

Fehlerbilder und Lösungen:

  • Problem: Cache zeigt veraltete Preise nach ERP-Sync. Ursache: Preis-Update triggert keine Cache-Invalidierung (Bug oder Custom-Import umgeht Events). Lösung: Stelle sicher, dass Produkt-Updates über Shopware DAL laufen (ProductRepository update()), nicht direkt per SQL. Alternativ: Manuell Cache-Invalidierung triggern (CacheInvalidator-Service nutzen).
  • Problem: Cache-Invalidierung funktioniert nicht bei Varnish. Ursache: Varnish-Host falsch konfiguriert oder Firewall blockiert PURGE. Lösung: Prüfe SHOPWARE_HTTP_CACHE_INVALIDATION_HOSTS in .env. Teste PURGE manuell.

Object-Cache (Redis)

Redis cacht Doctrine-Entities, Konfigurationen, Übersetzungen. Konfiguration in config/packages/framework.yaml:

  • cache.adapter.redis: dsn: redis://localhost (oder Redis-Cluster-URL)
  • Shopware nutzt automatisch Redis für app.cache, system.cache

Redis-Tuning:

  • maxmemory-policy: allkeys-lru (Least Recently Used eviction)
  • maxmemory: 2gb (anpassen je nach Katalog-Größe)
  • Redis-Persistence: RDB-Snapshots für Wiederherstellung (save 900 1, save 300 10)

Typische Fehlerbilder:

  • Problem: Redis läuft voll (maxmemory erreicht), Cache-Writes schlagen fehl. Lösung: Erhöhe maxmemory oder prüfe, ob alte Keys nicht korrekt ablaufen (TTL setzen).
  • Problem: Nach Deployment zeigt Shop alte Daten. Lösung: Cache-Clear nach Deployment (bin/console cache:clear, triggert auch Redis-Flush) – je nach Setup helfen zusätzlich klare Prozesse rund um Shopware Cache leeren.
Dual-Monitor-Setup zeigt Admin-Oberfläche und Monitoring-Dashboard mit Verlaufskurven; auf dem Schreibtisch liegen Tastatur, Notizbuch, Kopfhörer und Kaffeetasse.

Elasticsearch/OpenSearch: Konfiguration für Performance und Relevanz

Für Shops mit mehr als 5.000 Produkten oder komplexer Filterlogik ist Elasticsearch/OpenSearch Pflicht. MySQL-Volltextsuche skaliert nicht und liefert schlechte Relevanz.

Elasticsearch vs. OpenSearch

Kriterium Elasticsearch OpenSearch
Lizenz Elastic License (nicht Open-Source ab 7.11) Apache 2.0 (Open-Source)
Performance Sehr gut Sehr gut (Fork von ES 7.10)
Shopware-Support Offiziell unterstützt (bis 8.x) Kompatibel (gleiche API wie ES 7.x)
Managed-Angebote Elastic Cloud (teuer) AWS OpenSearch Service (günstiger)

Empfehlung: OpenSearch für neue Projekte (Open-Source, günstiger bei AWS). Elasticsearch wenn bereits Infrastruktur vorhanden.

Elasticsearch-Setup für Shopware 6

Minimum-Konfiguration (Single-Node für Entwicklung/Test):

  • Elasticsearch 7.x oder 8.x (8.x erfordert Shopware 6.5 oder höher)
  • Heap-Size: Mindestens 1 GB (ES_JAVA_OPTS="-Xms1g -Xmx1g")
  • Index-Settings: 1 Shard, 0 Replicas (für Single-Node)

Production-Konfiguration (3-Node-Cluster):

  • 3 Master-fähige Nodes (quorum für Split-Brain-Vermeidung)
  • Heap-Size: 50 % des RAM, max. 32 GB (z. B. bei 64 GB RAM: -Xms31g -Xmx31g)
  • Index-Settings: 3 Shards, 1 Replica (für Ausfallsicherheit)
  • SSD-Storage (NVMe bevorzugt, I/O-kritisch)

Shopware-6-Konfiguration:

  • In .env: OPENSEARCH_URL=http://localhost:9200 (oder Cluster-Endpoint)
  • Index erstellen: bin/console es:index:create
  • Daten indexieren: bin/console es:index (initial), danach automatisch bei Entity-Updates
  • Index-Alias: Shopware nutzt Alias-Mechanismus (z. B. sw_product_de, sw_product_en) für Zero-Downtime-Reindexing

Performance-Tuning

Relevanz-Optimierung:

  • Boosting: Wichtige Felder höher gewichten (z. B. Produktname Boost 3, Beschreibung Boost 1). In Shopware 6: Custom Scoring per Plugin (ElasticsearchProductSearchBuilder erweitern).
  • Synonyme: Definiere Synonym-Filter (z. B. Laptop = Notebook). In Shopware: Custom Analyzer in Index-Settings (elasticsearch.index_settings in config).
  • Fuzzy-Search: Aktiviere Fuzziness für Tippfehler-Toleranz (Shopware Standard: Fuzziness AUTO).

Filter-Performance:

  • Aggregationen cachen: Elasticsearch cacht Aggregations-Results automatisch (Node Query Cache).
  • Häufige Filter zuerst: Filter-Reihenfolge beeinflusst Performance (z. B. Verfügbarkeit vor Farbe, wenn weniger Treffer).

Index-Tuning:

  • Refresh-Interval erhöhen: Standard 1s, für Bulk-Indexing auf 30s oder -1 setzen (nach Import: manuell refresh triggern).
  • Mapping optimieren: Nur Felder indexieren, die durchsucht/gefiltert werden. In Shopware: Custom-Fields nur indexieren wenn nötig (Definition in Entity-Extension).

Typische Fehlerbilder und Lösungen

  • Problem: Suche liefert keine Ergebnisse nach Produktimport. Ursache: Index nicht aktualisiert. Lösung: bin/console es:index (oder prüfe, ob Message-Queue-Worker läuft – Indexierung läuft asynchron).
  • Problem: Suche sehr langsam (über 2 Sekunden). Ursache: Zu viele Shards, schlechte Query-Struktur oder zu wenig Heap. Lösung: Reduziere Shards (z. B. von 5 auf 3), erhöhe Heap, prüfe Query-Profiling (Elasticsearch Profiler nutzen).
  • Problem: Elasticsearch-Cluster gelb/rot. Ursache: Replicas können nicht zugewiesen werden (zu wenig Nodes) oder Disk-Space voll. Lösung: Füge Nodes hinzu oder setze Replicas auf 0 (nicht empfohlen für Production).

Plugin-Governance: Qualitätskriterien und Update-Strategie

Plugins erweitern Shopware, können aber auch Risiken bergen: Performance-Probleme, Security-Lücken, Update-Konflikte. Eine klare Plugin-Governance ist essentiell.

Plugin-Qualitätskriterien

Kriterium Check Warum wichtig
Aktive Wartung Letztes Update unter 6 Monate Abandoned Plugins erhalten keine Security-Fixes
Shopware-Version-Kompatibilität Unterstützt aktuelle Shopware-Version Inkompatible Plugins blockieren Shopware-Updates
Code-Qualität Code-Review (Clean Code, PSR-12, keine deprecated APIs) Schlechter Code führt zu Bugs und Performance-Problemen
Performance-Impact Profiling vor/nach Installation (Blackfire, Xdebug) Einige Plugins fügen hunderte DB-Queries hinzu
Security-Track-Record Keine bekannten Sicherheitslücken (CVE-Datenbank prüfen) Kompromittierte Plugins = kompromittierter Shop
Support-Qualität Reaktionszeit bei Issues, Dokumentation vorhanden Bei Problemen brauchst du schnelle Hilfe
Abhängigkeiten Keine Konflikte mit anderen Plugins Plugin A überschreibt Service von Plugin B führt zu Bugs

Plugin-Governance-Prozess

  • Vor Installation: Plugin gegen Kriterien prüfen, Testinstallation auf Staging, Performance-Profiling, Code-Review bei Custom-Plugins
  • Freigabe: Nur durch Tech-Lead oder definierten Approval-Prozess
  • Dokumentation: Welches Plugin, warum installiert, welche Konfiguration, wer verantwortlich (z. B. in Confluence oder README)
  • Update-Zyklus: Monatlich oder quartalsweise Plugin-Updates prüfen und einspielen (nie automatisch ohne Test)
  • Deprecation: Plugins regelmäßig auf Notwendigkeit prüfen – nicht genutzte Plugins deinstallieren

Typische Plugin-Fehlerbilder

  • Problem: Nach Plugin-Update ist Checkout kaputt. Ursache: Plugin überschreibt Core-Service oder Template inkorrekt. Lösung: Plugin deaktivieren, Rollback, Issue an Entwickler melden. Langfristig: Auf Alternativen prüfen oder Custom-Fix.
  • Problem: Shop sehr langsam nach Plugin-Installation. Ursache: Plugin fügt N+1-Queries hinzu oder lädt zu viele Daten. Lösung: Profiling (Symfony Profiler, Blackfire), Plugin-Code optimieren oder Alternative suchen.
  • Problem: Plugin-Konflikte (Plugin A und Plugin B überschreiben denselben Service). Lösung: Service-Decoration-Priorität anpassen (in services.xml: decoration_priority="100") oder eines der Plugins entfernen.

Release- und Update-Strategie: Staging, Blue-Green, Canary

Ein klarer Release-Prozess minimiert Ausfallzeiten und Rollback-Risiken. Hier gängige Strategien mit Shopware-6-Spezifika.

Staging-Umgebung (Minimum)

Jedes Shopware-6-Projekt braucht mindestens eine Staging-Umgebung (Klon der Production, identische Infrastruktur, anonymisierte Produktionsdaten).

  • Zweck: Testen von Updates, Plugins, Theme-Änderungen vor Production-Deployment
  • Deployment-Flow: Code-Change zu Staging-Deploy zu QA-Test zu Production-Deploy
  • Daten-Sync: Regelmäßig Production-DB-Dump nach Staging (anonymisiert: Kunden, Bestellungen)
  • Tooling: Deployer, Capistrano, Ansible oder CI/CD-Pipeline (GitLab CI, GitHub Actions, Bitbucket Pipelines)

Blue-Green-Deployment

Zwei identische Production-Umgebungen (Blue = aktiv, Green = Standby). Deployment auf Green, Test, dann Traffic-Switch.

  • Vorteil: Zero-Downtime, sofortiger Rollback möglich (Traffic zurück auf Blue)
  • Nachteil: Doppelte Infrastruktur-Kosten, DB-Migration-Probleme bei Breaking-Changes
  • Umsetzung: Load-Balancer oder DNS-Switch (Blue/Green jeweils eigene URL, Load-Balancer routet Traffic)

Shopware-6-Spezifika:

  • DB-Migrationen auf Green laufen lassen (bin/console database:migrate), danach Anwendung deployen
  • Falls Migration Breaking-Change: Maintenance-Mode aktivieren (bin/console sales-channel:maintenance:enable) – praxisnahe Hinweise dazu liefert auch der Beitrag zum Shopware Maintenance Mode.
  • Nach Traffic-Switch: Blue-Umgebung als Standby behalten (für Rollback)

Canary-Deployment

Neues Release wird nur für einen kleinen Prozentsatz der User ausgerollt (z. B. 5 %), Rest bekommt alte Version. Monitoring: Fehlerrate, Performance. Bei OK: schrittweise auf 100 %.

  • Vorteil: Risikominimierung, echte User-Tests in Production
  • Nachteil: Komplexere Infrastruktur (Feature-Flags oder Traffic-Routing nötig)
  • Umsetzung: Feature-Flags (LaunchDarkly, Unleash) oder Load-Balancer-Routing (z. B. 95 % auf Old-Pods, 5 % auf New-Pods)

Update-Strategie für Shopware 6

Shopware-Updates (Minor/Patch) sollten regelmäßig eingespielt werden (Security, Performance, Bugfixes).

  • Patch-Updates (6.5.1 zu 6.5.2): Monatlich, geringe Breaking-Changes, schnell einspielen
  • Minor-Updates (6.5 zu 6.6): Quartalsweise, können Breaking-Changes enthalten, ausführlicher Test nötig
  • Major-Updates (6.x zu 7.x): Selten, große Breaking-Changes, Projekt-Level-Aufwand (Wochen bis Monate)

Update-Prozess:

  • Changelog lesen
  • Lokale Test-Umgebung: composer update shopware/core shopware/storefront shopware/administration (mit Version-Constraint)
  • Migrations laufen lassen: bin/console database:migrate --all
  • Plugins-Kompatibilität prüfen (manche Plugins sind nicht sofort kompatibel)
  • Regressions-Tests (automatisiert: PHPUnit, Cypress; manuell: Checkout, Produktsuche, Admin)
  • Staging-Deployment, QA-Tests
  • Production-Deployment (Wartungsfenster oder Blue-Green)

Typische Update-Fehlerbilder

  • Problem: Nach Shopware-Update ist Admin-Login kaputt. Ursache: Cache nicht geleert oder Assets nicht neu kompiliert. Lösung: bin/console cache:clear, bin/console assets:install, bin/console theme:compile.
  • Problem: Plugin funktioniert nach Shopware-Update nicht mehr. Ursache: Plugin nutzt deprecated API oder ist nicht kompatibel. Lösung: Plugin-Update einspielen oder deaktivieren, Issue an Entwickler melden.
  • Problem: Migration schlägt fehl. Ursache: DB-Inkonsistenz oder Custom-Code-Konflikt. Lösung: Migration-Log prüfen (var/log/), DB-State manuell korrigieren oder Migration skippen (nicht empfohlen, nur als Last-Resort).

Integrationen: Sync-Frequenzen, Daten-Mastering und Fehlerhandling

Integrationen sind kritisch für Datenkonsistenz und Prozess-Automation. Hier konkrete Umsetzungsmuster.

Daten-Mastering-Matrix

Datentyp Master-System Sync-Richtung Frequenz
Artikel (SKU, EAN) ERP/Wawi ERP zu Shopware 1x täglich (nachts, Batch)
Preise ERP/Wawi ERP zu Shopware Echtzeit oder stündlich
Bestände ERP/Wawi ERP zu Shopware Echtzeit (bei Änderung)
Produkttexte, Bilder PIM oder Shopware PIM zu Shopware oder direkt in Shopware Bei Änderung (Event-basiert)
Bestellungen Shopware Shopware zu ERP Echtzeit (nach Bestellung)
Kunden (B2B) ERP oder CRM ERP bidirektional Shopware Täglich oder bei Änderung
Tracking-Nummern ERP/Versanddienstleister ERP zu Shopware Bei Versand (Event)

Sync-Frequenz-Empfehlungen

  • Echtzeit: Bestände (kritisch für Kaufentscheidung), Bestellungen (schnelle Auftragsabwicklung), Tracking-Updates
  • Stündlich: Preise (wenn häufig geändert), Verfügbarkeits-Status
  • Täglich (nachts): Produktdaten (Texte, Attribute, neue Artikel), Kundendaten (B2B-Stammdaten)
  • Wöchentlich: Kategoriestrukturen, Mediendaten (Bulk-Updates)

Shopware-6-Integrationsmuster

Pattern 1: Event-basiert (Echtzeit)

  • ERP sendet Webhook bei Änderung (z. B. Bestand geändert), Shopware empfängt via Custom-Controller, aktualisiert Entity
  • Shopware-Implementierung: Custom-Route (src/Controller/WebhookController.php), nutzt ProductRepository update()
  • Fehlerhandling: Bei Fehler HTTP 500 zurückgeben, ERP retry (Webhook-Provider sollte Retry-Logic haben)

Pattern 2: Batch-Import (täglich/stündlich)

  • ERP generiert Export-Datei (CSV, XML, JSON), legt auf SFTP/S3 ab, Shopware holt Datei, importiert per Symfony Command
  • Shopware-Implementierung: Symfony Command (src/Command/ImportProductsCommand.php), nutzt Message-Queue für asynchrone Verarbeitung
  • Fehlerhandling: Bei Fehler Zeile loggen, überspringen, Report am Ende (welche Zeilen fehlgeschlagen)

Pattern 3: API-Polling (bei fehlender Webhook-Unterstützung)

  • Shopware fragt regelmäßig ERP-API ab (z. B. alle 5 Min.), holt geänderte Datensätze (Last-Modified-Timestamp nutzen)
  • Shopware-Implementierung: Scheduled Task (src/ScheduledTask/SyncProductsTask.php), läuft alle X Minuten
  • Fehlerhandling: Bei API-Fehler Retry mit Exponential-Backoff, Alerting bei dauerhaftem Fehler

Fehlerhandling-Best-Practices

  • Retry-Logic: Bei transienten Fehlern (z. B. API-Timeout) automatisch wiederholen (max. 3x, Exponential-Backoff: 1s, 4s, 16s)
  • Dead-Letter-Queue: Fehlgeschlagene Messages in separate Queue verschieben (manuelles Re-Processing möglich)
  • Logging: Jede Integration loggen (Monolog nutzen, Log-Level: INFO für Success, ERROR für Fehler)
  • Alerting: Bei kritischen Fehlern Alert senden (Slack, E-Mail, PagerDuty) – z. B. Bestandssync seit 2h fehlgeschlagen
  • Monitoring: Dashboards für Sync-Jobs (Anzahl erfolgreiche/fehlgeschlagene Imports, Latenz, Queue-Länge)

Typische Integrations-Fehlerbilder

  • Problem: Bestände im Shop stimmen nie. Ursache: Race-Condition (Shop aktualisiert Bestand, gleichzeitig ERP-Sync überschreibt). Lösung: Locking-Mechanismus (Pessimistic-Lock in Doctrine oder Redis-basiertes Lock).
  • Problem: ERP-Sync dauert Stunden. Ursache: Sync läuft synchron, blockiert bei 100.000 Artikeln. Lösung: Message-Queue nutzen (Symfony Messenger), Artikel einzeln oder in Batches (100 Stück) asynchron verarbeiten.
  • Problem: Bestellungen kommen nicht im ERP an. Ursache: Webhook fehlgeschlagen, kein Retry. Lösung: Shopware-Side: Webhook-Fehler loggen, Retry-Mechanismus (z. B. Cronjob prüft unübertragene Bestellungen).

Monitoring und Performance-Messpunkte

Ohne Monitoring fliegst du blind. Hier ein vollständiger Monitoring-Stack für Shopware 6.

Monitoring-Ebenen

Ebene Was messen Tools
Frontend (RUM) Core Web Vitals (LCP, FID, CLS), Ladezeiten Google Analytics 4, Sentry Performance, New Relic Browser
Backend (APM) Request-Latenz, DB-Queries, Cache-Hit-Rate, Queue-Länge Blackfire, Tideways, New Relic APM, Datadog
Infrastruktur CPU, RAM, Disk-I/O, Network, Uptime Prometheus mit Grafana, Netdata, AWS CloudWatch
Logs Errors, Warnings, Business-Events (Bestellungen, Logins) ELK-Stack (Elasticsearch, Logstash, Kibana), Graylog, Datadog Logs
Business-KPIs Conversion-Rate, AOV, Cart-Abandonment, Uptime Google Analytics 4, Custom-Dashboards (Grafana, Metabase)

Core-Web-Vitals-Messpunkte

  • LCP (Largest Contentful Paint): Ziel unter 2,5s. Misst, wann größtes sichtbares Element lädt (oft Hero-Image oder Produktbild).
  • FID (First Input Delay): Ziel unter 100ms. Misst Reaktionszeit auf ersten User-Input (z. B. Button-Klick).
  • CLS (Cumulative Layout Shift): Ziel unter 0,1. Misst visuelle Stabilität (keine plötzlichen Layout-Verschiebungen).

Optimierung:

  • LCP: Bilder komprimieren (WebP), Lazy-Loading, CDN nutzen, Server-Response-Time verbessern (unter 200ms TTFB)
  • FID: JavaScript minimieren, Code-Splitting, nicht-kritisches JS asynchron laden
  • CLS: Bild-Dimensionen angeben (width/height), keine dynamischen Inhalte ohne Platzhalter

Backend-Messpunkte (APM)

  • Request-Latenz: P50, P95, P99 (z. B. P95 unter 500ms bedeutet: 95 % der Requests schneller als 500ms)
  • DB-Queries: Anzahl Queries pro Request (Ziel: unter 50 für Produktliste, unter 20 für PDP), Slow-Query-Log aktivieren (MySQL: long_query_time=1)
  • Cache-Hit-Rate: Redis Object-Cache (Ziel: über 90 %), HTTP-Cache (Ziel: über 70 %)
  • Queue-Länge: Message-Queue (Ziel: unter 1000 Messages, sonst Worker-Kapazität erhöhen)

Infrastruktur-Messpunkte

  • CPU: Average Load unter 70 % (Peaks bis 90 % OK, dauerhaft über 80 % skalieren)
  • RAM: Unter 80 % genutzt (inkl. Cache), Swap sollte nicht genutzt werden
  • Disk-I/O: I/O-Wait unter 10 %, SSD bevorzugt (NVMe für DB/Elasticsearch)
  • Network: Bandwidth-Auslastung unter 70 %, Latenz zu externen APIs unter 100ms

Alerting-Regeln

  • Critical (P1): Shop down (HTTP 500/503), DB down, Elasticsearch down, sofort Alert (PagerDuty, SMS)
  • High (P2): Conversion-Rate -30 % (vs. Vortag), Error-Rate über 5 %, Queue-Länge über 5000, Alert innerhalb 15 Min.
  • Medium (P3): LCP über 4s, Slow-Queries über 100 pro h, Alert innerhalb 1h

Zusammenfassung und nächste Schritte

Du hast jetzt technische Tiefe zu Hosting-Topologien, Caching-Strategien, Elasticsearch-Konfiguration, Plugin-Governance, Release-Strategien, Integrations-Mustern und Monitoring-Stack. Diese Entscheidungsleitplanken helfen dir, Shopware-6-Projekte fundiert zu planen und zu betreiben.

Checkliste für dein nächstes Projekt

  • Hosting-Topologie wählen (Single-Server, Load-Balanced, Kubernetes) basierend auf Traffic und Skalierungsanforderungen
  • HTTP-Cache konfigurieren (Varnish für Production, Tag-basierte Invalidierung sicherstellen)
  • Elasticsearch/OpenSearch aufsetzen (3-Node-Cluster für Production, Index-Tuning, Relevanz-Optimierung) – als Ergänzung lohnt sich der Deep-Dive zu Elasticsearch in Shopware 6.
  • Plugin-Governance definieren (Qualitätskriterien, Approval-Prozess, Update-Zyklus)
  • Release-Strategie festlegen (Staging, Blue-Green oder Canary, Rollback-Plan)
  • Integrationen planen (Daten-Mastering-Matrix, Sync-Frequenzen, Fehlerhandling, Monitoring)
  • Monitoring-Stack aufbauen (RUM, APM, Infrastruktur, Logs, Business-KPIs, Alerting)

Diesen Beitrag teilen