Shopware

Shopware-Testumgebung einrichten: was eine Kopie des Shops nicht mitnehmen darf

Eine Kopie des Live-Shops ist schnell gemacht. Gefährlich ist, was sie mitnimmt: Mailversand, Zahlungsanbindungen und die Shop-ID, unter der sich der Shop bei Apps anmeldet. Was Shopware dafür mitbringt und was Sie selbst abschalten müssen.

Pixup MediaVeröffentlicht am 8 Min. Lesezeit
Gegenüberstellung: Links, was der Befehl system:setup:staging erledigt – Apps mit eigenem Server und Shop-ID entfernen, Mailversand aus, Domains umschreiben. Rechts, was offen bleibt – Zahlarten und Zugangsdaten, Feeds und Webhooks ohne App, geplante Aufgaben.
Was der Staging-Befehl des Kerns erledigt und was auf Ihrer eigenen Liste bleibt.
Grafik in voller Größe öffnen

Eine Testumgebung ist eine Kopie des Live-Shops: gleicher Code, gleiche Daten, eigene Adresse. Genau darin liegt das Risiko. Die Kopie weiß nicht, dass sie eine Kopie ist. Sie verschickt Mails an echte Kunden, spricht mit echten Zahlungsanbietern und meldet sich bei Apps unter der Kennung des Live-Shops an — bis jemand das abstellt.

Dieser Ratgeber beschreibt, was beim Einrichten abgeschaltet werden muss, was Shopware dafür selbst mitbringt und wo der Befehl des Kerns aufhört.

Der Fall: zwei Shops, eine Kennung

Jede Shopware-Installation hat eine Shop-ID. Sie steht in der Tabelle system_config unter core.app.shopId, in 6.7.2.2 zusätzlich unter core.app.shopIdV2. Unter dieser Kennung registrieren sich Apps mit eigenem Server beim Dienst ihres Anbieters.

Wer die Datenbank des Live-Shops kopiert, kopiert diese Kennung mit. Ab dann gibt es zwei Shops mit derselben ID und unterschiedlicher Adresse.

Das Risiko entsteht an einer bestimmten Stelle. Shopware bemerkt nach dem Kopieren, dass die Adresse in APP_URL nicht mehr zur gespeicherten passt, und fragt in der Administration nach. Wird dieser Dialog auf der Testumgebung mit „Shop dauerhaft umziehen“ beantwortet, registriert Shopware die Apps neu — mit der Adresse und den Zugangsdaten der Testumgebung. Die Dienste dieser Apps sprechen danach nicht mehr mit dem Live-Shop, sondern mit der Kopie. Am Live-Shop selbst ist nichts falsch eingestellt. Die falsche Adresse steht beim Dienst.

Der Fehler fällt spät auf, weil im Live-Shop alles normal aussieht.

Der Quelltext beschreibt die drei Antworten des Dialogs so:

StrategieWirkung laut Shopware
move-shop-permanentlyApps sprechen künftig mit dieser Adresse; die alte Installation verliert die Verbindung
reinstall-appsApps werden für die neue Adresse neu installiert; die alte Installation arbeitet weiter, App-Daten fehlen in der neuen
uninstall-appsApps werden auf dieser Adresse deinstalliert; die alte Installation arbeitet weiter

Auf einer Testumgebung ist „dauerhaft umziehen“ fast nie die richtige Antwort.

Was Shopware mitbringt: system:setup:staging

Seit Shopware 6.6.1.0 gibt es einen eigenen Befehl für Testumgebungen:

bin/console system:setup:staging

Er fragt nach einer Bestätigung und lässt sich mit --force ohne Rückfrage ausführen. Im Quelltext von 6.6.10.6 und 6.7.2.2 löst er ein Ereignis aus, auf das im Kern vier Stellen reagieren:

BereichWas passiert
AppsApps mit eigenem Server werden samt Integration gelöscht, die Shop-ID wird entfernt
Mailscore.mailerSettings.disableDelivery wird gesetzt, Shopware verschickt keine Mails mehr
DomainsAdressen der Verkaufskanäle werden nach der Konfiguration domain_rewrite umgeschrieben
SucheShopware prüft, dass keine Elasticsearch- bzw. OpenSearch-Indizes vorhanden sind

In 6.7.15.1 kommen zwei Möglichkeiten hinzu, die in 6.7.2.2 und 6.6.10.30 fehlen: Der Befehl kann Erweiterungen deaktivieren, die unter shopware.staging.extensions.disable aufgeführt sind, und Systemeinstellungen überschreiben, die unter shopware.staging.system_config stehen. Damit lassen sich zum Beispiel Plugins für Zahlung oder Versand gezielt abschalten. Ausprobiert haben wir beides nicht.

Danach setzt der Befehl den Schalter core.staging. Administration und Storefront zeigen dann standardmäßig einen Hinweis, dass es sich um eine Testumgebung handelt. Shopware 6.7 gibt laut Ratgeber robots.txt in Shopware in diesem Modus nur Disallow: / aus.

Die Umschreibung der Domains wird in config/packages/staging.yaml festgelegt, mit den Typen equal, prefix und regex:

shopware:
  staging:
    mailing:
      disable_delivery: true
    sales_channel:
      domain_rewrite:
        - type: prefix
          match: 'https://www.ihr-shop.de'
          replace: 'https://test.ihr-shop.de'

Die Apps, die der Befehl entfernt, werden in der Testumgebung bei Bedarf neu installiert. Sie bekommen dann eine eigene Kennung.

Was der Befehl nicht anfasst

Der Befehl ändert nur das, was in der Tabelle oben steht. Alles andere bleibt, wie es im Live-Shop war:

Kurz geprüft

  • Zahlarten: Zugangsdaten von Zahlungsanbietern auf Testmodus stellen oder die Zahlart deaktivieren. Plugins können auf das Staging-Ereignis reagieren — ob Ihres das tut, steht in seiner Dokumentation. Ab 6.7.15.1 hilft die Liste extensions.disable.
  • Produktexporte und Feeds: Die Exporte sind in der Kopie weiter eingerichtet. Ruft ein Dienst einen Feed der Testumgebung ab, landen Testdaten und Testadressen beim Empfänger.
  • Webhooks ohne App: zeigen weiter auf die Ziele des Live-Shops. Prüfen, abschalten oder umstellen. Wie Webhooks im Kern geregelt sind, steht in Webhooks in Shopware 6.
  • Geplante Aufgaben und Hintergrundprozesse: laufen in der Kopie wie im Live-Shop, mit allen Anbindungen.
  • Plugins mit eigenen Zugangsdaten: ERP, Versanddienstleister, Marktplätze, Newsletter-Dienste.
  • Mails anderer Wege: Plugins, die am Mailversand von Shopware vorbei senden, stoppt der Schalter nicht.

Welche Mails Shopware selbst verschickt, listet der Ratgeber Welche Mails Shopware selbst verschickt. Statt den Versand nur abzuschalten, kann ein Mailfänger sinnvoll sein. Dann lassen sich Bestellmails in der Testumgebung prüfen, ohne dass sie jemanden erreichen.

Die Reihenfolge beim Einrichten

  1. 1
    Code aus dem Repository deployen, nicht vom Live-Server kopieren.
  2. 2
    Eigene Datenbank, eigener Cache, eigener Suchindex. Laut Shopware dürfen Datenbank, Redis und Suchindex nicht mit dem Live-Shop geteilt werden.
  3. 3
    Datenbank kopieren, nach Absprache mit dem Datenschutzverantwortlichen anonymisiert. Das Werkzeug shopware-cli project dump hat dafür die Option --anonymize.
  4. 4
    APP_URL in der .env der Testumgebung auf deren Adresse setzen.
  5. 5
    Zugriffsschutz vor die Adresse: Passwort, IP-Freigabe oder vorgeschalteter Anmeldedienst.
  6. 6
    bin/console system:setup:staging ausführen — bevor sich jemand in der Administration anmeldet.
  7. 7
    Liste „Was der Befehl nicht anfasst“ abarbeiten.
  8. 8
    Testbestellung mit Testzahlung, um zu sehen, dass nichts nach außen geht.

Ohne den Staging-Befehl, etwa in einer Version vor 6.6.1.0, nennt Shopware in seiner Dokumentation zwei Schritte als Mindestmaß: Mailversand abschalten und core.app.shopId aus system_config löschen.

Indexierung: Sperre ist nicht Entfernung

Eine Testumgebung gehört nicht in den Google-Index. Disallow: / in der robots.txt verhindert das Crawlen, entfernt aber keine Seite, die schon im Index steht. Dafür gibt es zwei Wege, die Google ausdrücklich nennt: noindex — als Meta-Angabe oder als HTTP-Header X-Robots-Tag: noindex — oder einen Zugriffsschutz. Beide wirken erst, wenn Google die Adresse erneut abruft. Ein noindex funktioniert dabei nur, wenn Google die Seite abrufen darf: Blockiert die robots.txt das Crawling, kann Google die Angabe nicht lesen. Ein Disallow: / zusammen mit noindex hilft deshalb nicht beim Entfernen. Ein Schutz, der mit Status 401 oder 403 antwortet, führt laut Google zum Entfernen bereits indexierter Adressen; eine Anmeldeseite mit Status 200 nicht.

Für eine private Testumgebung bleibt ein echter Zugriffsschutz die bevorzugte Lösung, für eine neue vom ersten Tag an. Dann kommt gar nichts erst in den Index. Mehr dazu im Ratgeber robots.txt in Shopware.

Eine Kopie des Shops ist erst eine Testumgebung, wenn sie keine Mails verschickt, keine echten Zahlungen auslöst, eine eigene Shop-ID hat und für Crawler unerreichbar ist.

Wie wir Shopware-Shops im laufenden Betrieb betreuen, beschreibt die Seite Shopware Support.

Häufige Fragen

Brauche ich für Updates wirklich eine Testumgebung?
Für jeden Shop mit Umsatz: ja. Nur eine Kopie mit echten Daten zeigt, ob Migrationen, Plugins und Theme nach einem Update funktionieren, bevor Kunden es merken.
Was macht system:setup:staging genau?
Laut Quelltext 6.6.10.6 und 6.7.2.2: Apps mit eigenem App-Server samt Integration löschen, die Shop-ID für Apps löschen, den Mailversand abschalten, Domains nach Ihrer Konfiguration umschreiben, prüfen, dass kein Suchindex der Live-Umgebung mitgenutzt wird, und Banner einblenden. Er kopiert nichts und ändert nichts am Live-Shop.
Warum muss die Shop-ID weg?
Unter dieser Kennung melden sich Apps beim Dienst des Anbieters an. Tragen Live-Shop und Kopie dieselbe Kennung, kann ein Dienst nach einer Neuregistrierung mit der Kopie statt mit dem Live-Shop sprechen.
Darf ich echte Kundendaten in die Testumgebung kopieren?
Das ist eine Datenschutzfrage, die Sie mit Ihrem Datenschutzverantwortlichen klären sollten. Technisch bietet Shopware im Werkzeug shopware-cli beim Datenbankabzug die Option --anonymize.
Reicht ein Passwortschutz?
Für eine neue Testumgebung ja: Er hält Besucher und Crawler fern. Antwortet der Schutz mit Status 401 oder 403, entfernt Google laut eigener Dokumentation auch bereits indexierte Adressen beim nächsten Abruf. Eine Anmeldeseite mit Status 200 leistet das nicht.
WeiterführendShopware Support