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.
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.
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
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?
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.