Shopware Testumgebung erstellen: Anleitung für Plesk

Shopware 6 von Rico Rothenburger 11 Minuten Lesezeit

Shopware Testumgebung erstellen: Liveshop und seine Kopie als Testumgebung unter ihr-shop.de/staging
Inhalt dieser Anleitung 14 Abschnitte · 11 Min.

Mit einer Testumgebung prüfen Sie ein Shopware-Update, ein neues Plugin oder ein überarbeitetes Theme an einer Kopie Ihres Shops, während im Liveshop weiter Bestellungen eingehen. Die Kopie erhält eine eigene Datenbank und eine eigene Adresse unterhalb Ihrer Shopdomain, zum Beispiel ihr-shop.de/staging-test, und bleibt für Ihre Kunden unsichtbar. Wir erklären hier Schritt für Schritt, wie Sie eine solche Testumgebung in Ihrem Plesk-Hosting per SSH von Hand anlegen. Mit unserem Staging-Tool enerStage erledigen Sie dasselbe mit einem einzigen Befehl.

Stand: 26. September 2026, nachgebaut mit Shopware 6.6.10 in einem Plesk-Hosting mit SSH-Zugang (Chroot-Shell).

Voraussetzungen

  • Ihr Shop liegt in Plesk im Verzeichnis httpdocs, und das Dokumentverzeichnis der Domain zeigt auf httpdocs/public.
  • Der SSH-Zugang ist in Plesk unter Websites & Domains › Webhosting-Zugang freigeschaltet. Die Einstellung mit Chroot genügt, alle Befehle dieser Anleitung funktionieren darin.
  • Sie kennen die Zugangsdaten Ihrer Livedatenbank. Sie stehen in der Zeile DATABASE_URL der Datei httpdocs/.env.local.
  • Die Domain arbeitet mit Apache, damit die .htaccess aus Schritt 9 wirkt. In den Apache- und nginx-Einstellungen der Domain ist dafür der „Proxymodus“ aktiv, und unter PHP-Einstellungen läuft PHP als eine der Anwendungen mit „(Apache)“, zum Beispiel „FPM-Anwendung (Apache)“. Beides ist nötig: Läuft PHP als Anwendung „(nginx)“, gibt nginx Adressen mit index.php direkt an PHP weiter, und Shop und Administration wären darüber trotz Passwortschutz erreichbar. Läuft Ihre Domain ausschließlich mit nginx, liest der Webserver keine .htaccess. Eine geschützte Testumgebung richten Sie in diesem Fall mit enerStage ein, weil es den Schutz unabhängig vom Webserver einbindet.
  • Ihr Webspace hat Platz für eine vollständige zweite Kopie Ihres Shops einschließlich aller Bilder.
  • Sie haben eine aktuelle Sicherung Ihres Shops, damit ein Tippfehler in der Kommandozeile keine Folgen hat.
Plesk PHP-Einstellungen: PHP-Version 8.5 und Ausführung als Dedizierte FPM-Anwendung (Apache)
In den PHP-Einstellungen der Domain: PHP-Version (1) und Ausführung über Apache (2)
Plesk Einstellungen für Apache und nginx mit aktiviertem Proxymodus
In den Einstellungen für Apache & nginx ist der Proxymodus aktiv (1), damit Apache die Anfragen bearbeitet

Schritt 1Datenbank für die Testumgebung anlegen

Legen Sie in Plesk unter Websites & Domains › Datenbanken eine neue Datenbank mit eigenem Benutzer an, zum Beispiel shop_staging. Die Testumgebung darf nie mit der Datenbank des Liveshops arbeiten, sonst landen Ihre Tests im echten Shop. Notieren Sie Datenbankname, Benutzer und Passwort, denn Sie brauchen die Angaben in Schritt 2 und Schritt 5.

Plesk Datenbank hinzufügen mit Datenbankname, Benutzer und Passwort für die Shopware Testumgebung
Neue Datenbank in Plesk: Name (1), eigener Benutzer (2), Passwort (3), dann „Datenbank erstellen“ (4)

Schritt 2Livedatenbank in die neue Datenbank kopieren

Verbinden Sie sich per SSH und exportieren Sie die Livedatenbank. Die Option --single-transaction sorgt dafür, dass der Liveshop während des Exports weiter Bestellungen annimmt. Danach spielen Sie den Export in die neue Datenbank ein und löschen die Datei wieder, weil sie Kundendaten enthält. Beide Befehle fragen nach dem Passwort des jeweiligen Datenbankbenutzers.

Livedatenbank kopieren
mysqldump --single-transaction -u LIVEUSER -p LIVEDB > /tmp/live.sql
mysql -u STAGINGUSER -p shop_staging < /tmp/live.sql
rm /tmp/live.sql
Platzhalter Bedeutung
LIVEUSER Benutzer der Livedatenbank aus DATABASE_URL in httpdocs/.env.local
LIVEDB Name der Livedatenbank, der letzte Teil von DATABASE_URL
STAGINGUSER Benutzer der neuen Datenbank aus Schritt 1

Endet der Import ohne Meldung, war er erfolgreich. Bei großen Shops dauert er einige Minuten.

Schritt 3Shopdateien kopieren

Legen Sie die Kopie im Verzeichnis httpdocs an, so wie es auch enerStage tut, und kopieren Sie den Shop mit rsync vollständig hinein, einschließlich aller Bilder. Die Testumgebung ist dadurch komplett unabhängig vom Liveshop, sodass Sie dort auch Bilder löschen oder ersetzen können. Nur Cache und kompiliertes Theme bleiben außen vor, weil Shopware beides in Schritt 8 neu erzeugt. Weil die Kopie im Shopverzeichnis liegt, schließt der Befehl sie selbst aus, sonst würde rsync sie in sich hineinkopieren.

Shopdateien kopieren
cd ~/httpdocs
mkdir staging-test
rsync -a --exclude=/staging-test --exclude=/public/staging-test --exclude=var/cache --exclude=public/theme ./ staging-test/
chmod 755 staging-test

Der Befehl chmod 755 ist wichtig. rsync überträgt die Rechte von httpdocs auf die Kopie, die Gruppe des Webservers aber nicht. Ohne diese Zeile darf der Webserver den Ordner nicht lesen, und unter der Adresse der Testumgebung erscheint eine Fehlerseite. Liegen in httpdocs weitere Testumgebungen, etwa von enerStage, schließen Sie diese mit je einem zusätzlichen --exclude=/name ebenfalls aus.

Schritt 4Testumgebung unter Ihrer Shopdomain erreichbar machen

Verknüpfen Sie nur das Verzeichnis public der Kopie mit dem Webroot des Liveshops. Dadurch sind ausschließlich die öffentlichen Dateien der Testumgebung von außen erreichbar, während .env.local, Protokolle und erzeugte Dokumente wie Rechnungen geschützt bleiben.

Testumgebung erreichbar machen
cd ~/httpdocs
ln -s ../staging-test/public public/staging-test

Die Testumgebung ist damit unter https://ihr-shop.de/staging-test erreichbar, sobald die folgenden Schritte erledigt sind. Wählen Sie einen Namen, den keine Seite Ihres Shops verwendet.

Schritt 5Zugangsdaten und Adresse in .env.local eintragen

Öffnen Sie die Datei .env.local der Kopie, zum Beispiel mit nano ~/httpdocs/staging-test/.env.local. Sie ist eine Kopie der Datei des Liveshops und zeigt deshalb noch auf die Livedatenbank. Ändern Sie die folgenden Zeilen oder ergänzen Sie sie, jeweils in einer eigenen Zeile:

.env.local der Testumgebung
DATABASE_URL=mysql://STAGINGUSER:PASSWORT@127.0.0.1:3306/shop_staging
APP_URL=https://ihr-shop.de/staging-test
MAILER_DSN=null://null
Platzhalter Bedeutung
STAGINGUSER, PASSWORT Benutzer und Passwort der neuen Datenbank aus Schritt 1
ihr-shop.de Ihre Shopdomain

Enthält das Passwort Sonderzeichen wie @, :, /, # oder %, muss es in DATABASE_URL URL-kodiert stehen, sonst kann Shopware die Adresse nicht lesen. Plesk erzeugt solche Passwörter häufig. Der folgende Befehl fragt das Passwort verdeckt ab, sodass es weder auf dem Bildschirm noch im Verlauf der Shell erscheint, und gibt die kodierte Fassung aus, die Sie anstelle von PASSWORT eintragen:

Passwort URL-kodieren
read -rs PW; printf '%s' "$PW" | php -r 'echo rawurlencode(stream_get_contents(STDIN)), PHP_EOL;'; unset PW

Aus Pa/ss@wort wird dabei zum Beispiel Pa%2Fss%40wort.

Speichern Sie die Datei. Anschließend erhält die Kopie neue Werte für APP_SECRET und INSTANCE_ID, damit sie sich nicht als derselbe Shop ausgibt und keine Anmeldungen oder Schlüssel mit dem Liveshop teilt. Den APP_SECRET erzeugt Shopware selbst im richtigen Format, für die INSTANCE_ID genügt eine Zufallszahl. Die folgenden Befehle tragen beide Werte direkt in die .env.local der Kopie ein:

APP_SECRET und INSTANCE_ID neu erzeugen
cd ~/httpdocs/staging-test
APP=$(/opt/plesk/php/8.5/bin/php bin/console system:generate-app-secret)
ID=$(openssl rand -hex 16)
sed -i "s|^APP_SECRET=.*|APP_SECRET=$APP|" .env.local
sed -i "s|^INSTANCE_ID=.*|INSTANCE_ID=$ID|" .env.local
grep -E '^(APP_SECRET|INSTANCE_ID)=' .env.local

Die letzte Zeile zeigt die beiden neuen Werte. Erscheint dort nichts, fehlen die Zeilen in der Datei. Tragen Sie sie dann mit nano selbst ein und setzen Sie die Werte ein, die Sie mit echo $APP und echo $ID anzeigen. Die Versionsnummer im PHP-Pfad passen Sie an Ihre Domain an, wie in Schritt 7 beschrieben.

Die Zeile MAILER_DSN=null://null verhindert, dass die Testumgebung E-Mails verschickt, sodass eine Testbestellung keine Nachricht an einen echten Kunden auslöst. Nutzt Ihr Shop OpenSearch oder Elasticsearch, ergänzen Sie SHOPWARE_ES_ENABLED=0 und SHOPWARE_ADMIN_ES_ENABLED=0, weil die Kopie sonst den Suchindex des Liveshops überschreibt. Liegt in der Kopie eine Datei .env.local.php oder .env.prod.local, haben diese Vorrang vor der .env.local. Löschen Sie deshalb eine .env.local.php in der Kopie und tragen Sie die neuen Werte auch in eine vorhandene .env.prod.local ein.

Schritt 6Verkaufskanäle auf die neue Adresse umstellen

Die Domains der Verkaufskanäle stehen in der Datenbank und zeigen in der Kopie noch auf den Liveshop. Ersetzen Sie sie in der Datenbank der Testumgebung, entweder in Plesk über Websites & Domains › Datenbanken › phpMyAdmin oder per SSH mit mysql -u STAGINGUSER -p shop_staging. Die zweite Zeile erfasst Domains, die mit http:// eingetragen sind:

Verkaufskanäle umstellen
UPDATE sales_channel_domain SET url = REPLACE(url, 'https://ihr-shop.de', 'https://ihr-shop.de/staging-test');
UPDATE sales_channel_domain SET url = REPLACE(url, 'http://ihr-shop.de', 'http://ihr-shop.de/staging-test');

Prüfen Sie das Ergebnis mit SELECT url FROM sales_channel_domain;. Jede Adresse Ihres Shops muss jetzt auf /staging-test enden. Nutzt Ihr Shop weitere Domains, wiederholen Sie die beiden Befehle für jede davon.

Schritt 7Staging-Modus einschalten

Schalten Sie in der Kopie den Staging-Modus ein, den Shopware seit Version 6.6.1 mitbringt. Er schaltet den E-Mail-Versand ab, zeigt in Shop und Administration einen Hinweisbalken und entfernt die Shop-Kennung, damit die Kopie bei Shopware nicht als derselbe Shop gilt. Verwenden Sie dafür das PHP Ihrer Domain. In Plesk liegt es unter /opt/plesk/php/, gefolgt von der Versionsnummer, die Sie unter PHP-Einstellungen der Domain sehen.

Staging-Modus einschalten
cd ~/httpdocs/staging-test
/opt/plesk/php/8.5/bin/php bin/console system:setup:staging --no-interaction --force

Der Befehl meldet „Disabled mail delivery“. Arbeitet Ihr Shop noch mit einer älteren Version als 6.6.1, entfernen Sie die Shop-Kennung stattdessen per SQL mit DELETE FROM system_config WHERE configuration_key LIKE 'core.app.shopId%';.

Die Zugangsdaten Ihrer Zahlungsarten übernimmt die Kopie unverändert aus dem Liveshop. Stellen Sie PayPal, Mollie und andere Zahlungsarten in der Administration der Testumgebung auf den Testbetrieb um, bevor Sie dort bestellen, damit keine echte Zahlung ausgelöst wird.

Schritt 8Theme erzeugen und Cache leeren

Erzeugen Sie das Theme der Kopie und leeren Sie den Cache, damit die neue Adresse überall greift:

Theme erzeugen und Cache leeren
/opt/plesk/php/8.5/bin/php bin/console theme:compile
/opt/plesk/php/8.5/bin/php bin/console cache:clear

Schritt 9Testumgebung mit Passwort schützen und für Suchmaschinen sperren

Legen Sie eine Passwortdatei außerhalb des Webroots an, damit nur Sie und Ihre Agentur die Testumgebung sehen. Der Befehl fragt nach einem Passwort für den angegebenen Benutzer:

Passwortdatei anlegen
htpasswd -c ~/.htpasswd-staging BENUTZER

Für BENUTZER wählen Sie einen beliebigen Namen. Weitere Zugänge, etwa für Ihre Agentur, fügen Sie mit demselben Befehl ohne -c hinzu, weil -c die Datei neu anlegt und vorhandene Zugänge löscht.

Tragen Sie anschließend ganz oben in die Datei ~/httpdocs/staging-test/public/.htaccess diesen Block ein, also oberhalb der Zeile # BEGIN Shopware. Den Teil darunter erzeugt Shopware bei Updates neu, Ihr Block bleibt dagegen erhalten.

Anfang der .htaccess der Testumgebung
<IfModule mod_headers.c>
    Header always set X-Robots-Tag "noindex, nofollow"
</IfModule>

AuthType Basic
AuthName "Testumgebung"
AuthUserFile /var/www/vhosts/ihr-shop.de/.htpasswd-staging
SetEnvIf Request_URI "^/staging-test/api/" noauth=1
<RequireAny>
    Require env noauth
    Require env REDIRECT_noauth
    Require valid-user
</RequireAny>
Zeile Wirkung
X-Robots-Tag Suchmaschinen nehmen die Testumgebung nicht in ihre Ergebnisse auf.
AuthUserFile Nennt den vollständigen Pfad zur Passwortdatei. Tragen Sie ihn auch dann vollständig ein, wenn Sie in der Chroot-Shell arbeiten, weil der Webserver außerhalb der Chroot läuft.
SetEnvIf … /api/ Die Schnittstelle unter /staging-test/api/ bleibt ohne Passwort erreichbar, weil sich die Administration dort mit einem eigenen Zugang anmeldet.

Ohne diese Ausnahme ließe sich die Administration nicht mehr anmelden. Deshalb eignet sich auch der Passwortschutz über Passwortgeschützte Verzeichnisse in Plesk nicht, denn er sperrt die Schnittstelle mit. Der Block wirkt nur, wenn Apache die Anfragen bearbeitet. Bei einer Domain, die ausschließlich nginx nutzt, bleibt die Testumgebung trotz dieser Zeilen offen, und nur enerStage kann sie dort schützen.

Ergebnis

Unter https://ihr-shop.de/staging-test fragt Ihr Browser nach Benutzer und Passwort aus Schritt 9, danach sehen Sie Ihren Shop mit dem Hinweisbalken „Staging-Modus“. Die Administration erreichen Sie unter https://ihr-shop.de/staging-test/admin mit denselben Zugangsdaten wie im Liveshop. Ob die Sperre für Suchmaschinen wirkt, prüfen Sie mit curl -sI https://ihr-shop.de/staging-test/api/_info/health-check | grep -i x-robots. Die Ausgabe muss X-Robots-Tag: noindex, nofollow enthalten.

Shopware Testumgebung mit dem Hinweisbalken Der Shop befindet sich im Staging-Modus
Die Testumgebung zeigt im Shop den Hinweisbalken des Staging-Modus
Administration der Shopware Testumgebung mit Hinweis auf den Staging-Modus
Auch in der Administration der Testumgebung weist ein Balken auf den Staging-Modus hin

Testumgebung aktualisieren

Wenn sich der Liveshop weiterentwickelt hat und Sie wieder auf einem aktuellen Stand testen möchten, kopieren Sie zuerst die Datenbank erneut wie in Schritt 2. Danach gleichen Sie die Dateien mit diesem Befehl ab:

Dateien abgleichen
cd ~/httpdocs
rsync -a --delete --exclude=/staging-test --exclude=/public/staging-test --exclude=/.env.local --exclude=/public/.htaccess --exclude=var/cache --exclude=public/theme ./ staging-test/
chmod 755 staging-test

Gegenüber Schritt 3 kommen drei Angaben hinzu. --delete entfernt Dateien, die es im Liveshop nicht mehr gibt, etwa nachdem Sie in der Testumgebung ein Update getestet haben, damit kein Mischstand aus zwei Versionen entsteht. --exclude=/.env.local und --exclude=/public/.htaccess schützen die Zugangsdaten und den Passwortschutz der Kopie, sonst würde sie plötzlich mit der Livedatenbank arbeiten und wäre für jeden sichtbar. Danach wiederholen Sie die Schritte 6 bis 8, weil die Einstellungen aus der Datenbank überschrieben wurden. Mit enerStage genügt für die Aktualisierung ein Befehl, der Adresse und Passwortschutz beibehält und sich auch jede Nacht automatisch ausführen lässt. Wie das geht, beschreibt die Anleitung Testumgebung mit enerStage aktualisieren.

Testumgebung entfernen

Wenn Sie die Testumgebung nicht mehr brauchen, löschen Sie zuerst die Verknüpfung und dann die Kopie. Die Datenbank entfernen Sie anschließend in Plesk unter Websites & Domains › Datenbanken.

Testumgebung entfernen
cd ~/httpdocs
rm public/staging-test
rm -r staging-test
rm ~/.htpasswd-staging

Nächste Schritte

Die neun Schritte wiederholen sich bei jeder Aktualisierung, und jeder davon bietet Raum für Fehler: eine vergessene Domain im Verkaufskanal, ein Suchindex, der den Liveshop überschreibt, oder eine Testbestellung, die eine echte Zahlung auslöst. Deshalb gibt es in jedem Paket von enerSpace unser Werkzeug enerStage. Es legt die Testumgebung mit einem Befehl an, prüft vorher die Datenbankzugänge, stellt Zahlungsarten auf den Testbetrieb um, schützt die Kopie auf Wunsch mit einem Passwort, das die Administration nicht behindert, und anonymisiert Kundendaten, wenn Dritte daran arbeiten.

Wie Sie mit enerStage Ihre erste Testumgebung anlegen, erklären wir Schritt für Schritt in der Anleitung Shopware Staging per SSH anlegen. Einen Überblick über alle Funktionen gibt die Dokumentation zu enerStage. Einen Überblick über Funktionen und Verfügbarkeit finden Sie auf der Seite Shopware Testumgebung mit enerStage.

Über den Autor

Rico Rothenburger

Geschäftsführer der enerSpace GmbH

Rico Rothenburger leitet die enerSpace GmbH und betreut mit seinem Team Shopware-Shops auf eigenen Servern in Deutschland. Weil enerSpace seit 2016 Shopware Hosting-Partner ist, kennt er die Fragen von Shopbetreibern aus dem Alltag, vom sicheren Update bis zum Umzug auf Shopware 6. In diesem Blog teilt er, was sich in der Praxis bewährt hat, damit Sie Ihren Shop mit weniger Aufwand zuverlässig betreiben können.