Shopware 6 - Professioneller Workflow für Development und Liveshop

Hallo,

ich habe jetzt eigentlich relativ lange lokal entwickelt und dann nur auf einen Testserver kopiert. Jetzt wo es langsam auf den offiziellen Go Live des Shops zugeht, möchte ich den gesamten Aufbau professionalisieren, damit ich sauber entwickeln kann, eine Live Testumgebung zum Zwischentesten habe und dann natürlich den Live Production shop.

Gibt es hierzu irgendeinen Leitfaden oder Hilfestellung für ein Best Practice? Ich habe bereits einen Github Account und nutze Dockware/Docker für meine lokale Entwicklung.

Wir nutzen einen Managed Server vom Hetzner.

Lg Alex

Ich habe auch alle Erweiterungen als Git-Repository. Im Live-System (oder in jedem anderen Test-System) habe ich die initial cloned.

Wenn ich dann eine Erweiterung ändere, committe & pushe ich die aus der Dev-Umgebung und kann sie dann im Live System einfach pullen.

1 „Gefällt mir“

Wie handhabst du das ganze mit den Plugins? Ich hätte gerne lokal eine relativ aktuelle Kopie meines Live Shops, damit ich auch CSS Anpassungen für externe Plugins machen kann oder eben deren Template Dateien oder Code erweitern kann. Dazu müsste ich die ja lokal installiert haben.

Ich hab jetzt den Workflow aktuell so:

Docker Container lokal mit Shopware Installation, in der ich mir regelmäßig die aktuelle Datenbank vom Live ziehe. Mit dem Container läuft auch mein Git Repo „Dev“ sowie SFTP, so dass ich beim Speichern der Datei gleich auf die Dev Instanz am Server mit hochlade.

Wenn ich mit einem Branch auf Basis von Dev fertig bin, pulle ich mir das und merge des mit dem Live Git Repo. Dort hängt eine Git Action dran, die mir meine Dateien vom Live Repo dann direkt auf das Production Verzeichnis am Server hochlade über SFTP.

Der einzige Nachteil hierbei: Er überspielt mit dieser Action alle Dateien aus dem Repo, was etwa 4-5 Minuten dauert. Idealerweise soll er nur die commiteten Dateien raufladen und überschreiben.

Wo ich noch hänge ist die Datenbank. Da ich natürlich auf der Dev Instanz auch Änderungen im Admin mache, Custom Fields anlege oder Einstellungen von Plugins bearbeite, müsste ich eigentlich den aktuellen Zustand der Datenbank mit raufspielen in die Production Instanz. Da wir am Production die Bestellungen usw. reinbekommen, wissen wir noch nicht, wie wir das am besten aufziehen, außer alle Änderungen händisch nachmachen und dann erst die Dateien raufpushen.

Das scheint mir viel zu verkompliziert. Hast du etwa das gesamte Shop-Verzeichnis als ein einziges Repo?

Schematischer Ablauf für einzelne Plugins:

DEV --push--> GIT --clone/pull--> PROD

Nachdem ich ein Plugin erfolgreich aktualisiert habe, muss ich fünf Befehle ausführen und dann ist alles erledigt (ggf. noch Plugin-Einstellungen im Admin Panel anpassen).

Im lokalen Plugin-Verzeichnis:

$ git add .
$ git commit -am "my next commit"
$ git push origin master

Im production Plugin-Verzeichnis:

$ git pull origin master

Im production Shopware Verzeichnis:

$ php bin/console plugin:install MyPlugin --reinstall --activate

Alle Datenbankänderungen (custom fields, extenstions etc.) werden über Migration-Files im Plugin gemacht, deshalb die Neuinstallation.

Nein, ich habe nur den custom/plugins Folder im git repo.

Das mit den Plugins verstehe ich, aber wie behandelst du Einstellungen im Admin? zB das anlegen neuer Custom Fields oder Anpassungen von Snippets. Packst du das dann automatisch immer in ein Plugin?

Lg

Besser jedes Plugin als eigenes Repo, so wie es sein sollte.

Ja, wird alles im Plugin gemacht. In der Install-Routine werden Custom-Fields angelegt und über die Migration-Files Änderungen in den Datenbanken (neue Tabellen, Felder hinzufügen/ändern/entfernen) gemacht. Textbausteine werden über die json-Snippets hinzugefügt. Wenn sich nur der Inhalt von Textbausteinen ändert, dann wird das manuell im Adminpanel gemacht (bei vielen über Db-Abfrage).

Auf diese Weg hast du systemunabhängige Plugins, die du im Stage, Live oder jedem anderen System einsetzen kannst.

1 „Gefällt mir“

Klingt auf jeden Fall sehr clean und nachvollziehbar. Dann werden wir es in Betracht ziehen, uns auch für jedes Plugin und Theme ein Repo anzulegen.