Magento Development Setup


23

Diese Frage zielt auf die Einrichtung der Entwicklungsumgebung ab. Ich habe einige spezifische Anforderungen:

  1. Ich möchte meine Lösung unter Linux, Windows und Mac OS verwenden können, da die Mitarbeiter unseres Teams alle diese Betriebssysteme verwenden (z. B. Front-End-Entwickler verwenden Windows / Mac, Back-End-Entwickler verwenden meistens Linux).
  2. Ich muss Modman benutzen
  3. Ich muss Komponist verwenden
  4. Ich muss Github sowie meine privaten Git-Repositorys verwenden
  5. Ich brauche eine richtige IDE wie Netbeans oder PHP Storm
  6. Ich möchte eine sehr gute Leistung

Mein aktuelles Setup ist ein virtualisiertes Ubuntu-Image in Virtualbox. Alle drei Betriebssysteme können Virtualbox ausführen, sodass die Punkte 1) - 5) alle erfüllt sind.

Allerdings bin ich derzeit mit 6) nicht ganz zufrieden. Dies gilt insbesondere dann, wenn die Lösung in Ubuntu 12.04 ausgeführt wird. Die Virtualbox scheint unter Windows 7 viel stabiler und reaktionsfähiger zu sein. Da jedoch viele Mitarbeiter unseres Teams Linux verwenden, möchte ich die Lösung verbessern.

Hat jemand ein vergleichbares Setup in VMWare oder vielleicht sogar docker.io und kann melden, ob es stabiler läuft? Oder hat jemand andere vergleichbare Lösungen / Ideen?


gute Frage! Wir haben auch an einem ähnlichen Setup gearbeitet, es aber noch nicht in unseren regulären Workflow übernommen. freue mich auf die antworten.
Anna Völkl

Nur eine kurze Idee: Wäre es nicht möglich, ohne die VM unter Linux zu arbeiten und alles, was in der VM läuft, direkt zu installieren? Oder verwenden Sie eine VM für ein Projekt?
Anna Völkl

Führen Sie die VM ohne Kopf oder mit einer grafischen Benutzeroberfläche aus? Und wie synchronisieren Sie das VM Image-Dateisystem mit dem Hostsystem? Geteilte Ordner? Samba? (Ich gehe davon aus, dass die IDE auf dem Host läuft, nicht auf der VM). Das kann einen großen Unterschied machen.
Vinai

@AnnaVölkl ja, es wäre möglich, aber es würde einige der Vorteile zerstören. Wenn Sie beispielsweise das Basisimage aktualisieren, müssen alle Linux-Benutzer die Änderungen manuell aktualisieren. Auch wenn Sie Ihre Box von einem Computer zu einem anderen bringen möchten (z. B. zu Hause oder anderswo), sind die Dinge viel schwieriger.
MPaepper

1
Wie Anna sagte: Wir arbeiten auch so etwas. Wir verwenden Vagrant, um die VM-Images zu erstellen, und das funktioniert ziemlich gut. Wie Sie sagen, ist die Leistung (in Bezug auf die Geschwindigkeit der Datei-E / A in freigegebenen Ordnern) die Hauptsache, an der wir arbeiten müssen, bevor wir wechseln. Für Linux-Hostsysteme können NFS-Freigaben hilfreich sein. Unser großes Problem ist, dass die meisten unserer Entwickler Windows-Hostsysteme verwenden und im Gegensatz zum Link die Windows-Leistung überhaupt nicht gut ist. Ich habe das jetzt von verschiedenen Leuten gehört, es sind nicht nur wir.
Matthias Zeis

Antworten:


8

Ich benutze Vagrant, Git und einige Build-Skripte für Phing. Die vagrant machine run Datenbank und der Webserver, git, die lokal verwendet werden, um Änderungen in meinen Erweiterungen zu verfolgen, und das Build-Skript, das zum Aktualisieren des /var/wwwVerzeichnisses auf meinem vagrant machine verwendet wird.

Phing

Der wahrscheinlich interessanteste Teil ist das Phing, das für mich wie Modman + Komponist funktioniert. Es sind nur wenige Ziele definiert, einschließlich Build, Setup und Installation.

Das Build- Ziel lädt eine bestimmte Version von Magento (in der Build-Konfiguration angegeben) vom internen Webserver herunter und extrahiert sie in das Build-Verzeichnis. Führen Sie dann andere Ziele aus, die Berechtigungen für Dateien einrichten und den Cache bereinigen. Anschließend werden Symlinks zu allen Dateien im Quellverzeichnis erstellt. Als Ergebnis bekomme ich alle Dateien in meinem Build-Verzeichnis zur Verfügung. Wenn sich die Magento-Kerndateien bereits im Build-Verzeichnis befinden, wird der Download übersprungen und es werden nur Symlinks aktualisiert. Daher verwende ich dieses Ziel, um die Umgebung jedes Mal neu zu erstellen, wenn Symlinks aktualisiert werden müssen. Für Vagrant-Computer befindet sich das Quellverzeichnis in /vagrant/src(freigegebener Ordner) und das Erstellungsverzeichnis in /var/www.

Das Installationsziel zum Herunterladen und Importieren eines Datenbank-Dumps für bestimmte Magento-Versionen. Führen Sie dann das Setup-Ziel aus.

Das Setup- Ziel erstellt einfach eine local.xml-Datei mit allen Einstellungen.

In meinem Unternehmen verwenden wir Unit-Testing- und CI-Tools. Auf diese Weise können wir eine Magento-Umgebung erstellen, um unsere Erweiterungen auf verschiedenen Versionen von Magento zu testen und sie mit und ohne Installation auszuführen.

Ich habe eine "Verknüpfung" auf Vagrant-Maschinen erstellt, die den Zugriff auf Builds vereinfacht. Zum Beispiel, um ein Projekt neu zu vagrant ssh -c magebuilderstellen , muss ich nur tippen und es wird automatisch phing im /vagrantVerzeichnis ausgeführt.

Dann habe ich diesen Befehl einer bestimmten Tastenkombination in meiner PHPStorm-IDE zugewiesen und jetzt kann ich das Projekt durch Drücken von Alt + B in meiner IDE neu erstellen. Aber da ich Symlinks benutze, ist es nicht sehr oft in Betrieb.

Landstreicher

Eine Box für Vagabunden ist meine eigene Box mit Ubuntu 12.04 an Bord, es ist eigentlich nur standardgenaues 12.04 mit vorinstallierter Software + Verknüpfung und einigen Einstellungen. In der Vagrant-Datei habe ich nur die Einstellungen für die Portweiterleitung und das private Netzwerk angegeben, um xDebug verwenden und eine Verknüpfung zu den Bestimmungen erstellen zu können.

GIT

In Git verfolge ich nur meine Erweiterungsdateien, build.xmlfür Phing und Vagrantfile. So kann jeder, der eine Umgebung erstellen möchte, einfach das Repository klonen und vagabundieren. Dann wird er die VM betriebsbereit machen. Der gesamte Vorgang dauert 1-2 Minuten. Wenn Sie ein Projekt lokal erstellen möchten (ohne VM zu verwenden), können Sie es ausführen phing build install.


2

Derzeit ist meine Entwicklungsumgebung Ubuntu v12.04 mit VMWare. Ich arbeite vollständig innerhalb der VM mit vollständiger GUI und verwende die Samba-Dateifreigabe in Ubuntu nur, wenn ich von meinem Host-Betriebssystem Windows 7 auf die Dateien zugreifen muss. Normalerweise greife ich über die interne IP der auf ein Netzwerklaufwerk zu und ordne es zu VM über NAT für die Vernetzung mit der VM. Die Verwendung anderer Lösungen erwies sich als viel langsamer als die Verwendung von freigegebenen Ordnern von VMWare. Ich habe dies in meinen VMWare-Image-Einstellungen deaktiviert. Ich installiere jedoch VMWare-Tools, um einfaches Kopieren / Pasta auf meinen Host-Computer und umgekehrt zu ermöglichen.

Wie Matthias Zeis betonte, sollten Sie bei der Auswahl der Netzwerk- / freigegebenen Ordner mit Ihrer VM vorsichtig sein, da sich einige als problematisch erweisen.

Ich war vorheriger Benutzer von VirtualBox, fand VMWare jedoch stabiler und performanter (zumindest für mich). Ich würde jedoch Ihre eigenen Tests durchführen, um Ihren Bedürfnissen und Anforderungen am besten zu entsprechen, d. H. Vagrant benutzt VirtualBox.

IDE: Ich habe Netbeans ziemlich häufig als IDE meiner Wahl verwendet, bin aber seitdem zu einer leichteren Lösung als Sublime Text 2 übergegangen . Ich werde Netbeans selten öffnen, da dies hauptsächlich für X-Debug-Zwecke und einfacheres Refactoring gedacht ist. Netbeans, PHPStorm, Eclipse usw. sind alle Java-basierte IDEs und können sehr ressourcenintensiv sein.

HARDWARE: Um mehr hinzuzufügen, wird Hardware (offensichtlich) immer eine Schlüsselrolle bei der Leistung spielen. Wenn Ihre Entwickler immer noch Plattenteller-Festplatten verwenden, würde ich versuchen, für sie in SSD zu investieren. Da Magento eine sehr große Anzahl von Dateien / Ordnern enthält, wird die Leistung der Entwickler erheblich gesteigert. Während der Entwicklung: Bei deaktiviertem Caching und beim einfachen Durchlaufen des Ordnerbaums in SVN / GIT oder Ihrer IDE. Genauso wichtig ist es, Ihrer VM genügend Arbeitsspeicher zur Verfügung zu stellen.

Mein Hostcomputer: Samsung SSD 512 GB Speicherplatz, Win7 (64 Bit), 8 GB RAM, i7 2,4 GHz (8 Kerne)

Meine VM-Maschine: Samsung SSD, 30 GB Festplattenspeicher, Ubuntu 12.04 (32 Bit), 3 GB RAM, i7 (4 zugewiesene Kerne).

FRAGEN: Die größte Frage ist, ein Developer VM-Image zu erstellen, das kompakt und über mehrere Projekte hinweg wiederverwendbar ist, oder ein Image pro Projekt zu erstellen. Früher habe ich versucht, kleinere VMs pro Projekt zu erstellen. Die ständige Neukonfiguration für meinen Entwicklungsworkflow war jedoch zu aufwändig. Verwenden Sie jetzt eine größere VM und versuchen Sie, jedes Projekt so isoliert wie möglich zu halten.

Das Verwalten von Betriebssystem, IDE, LAMP-Stack, Updates / Konfigurationen usw. kann zu einer Aufgabe werden, wenn mehrere VMs pro Projekt als Route ausgewählt werden. Dies führt letztendlich zu einer längeren Entwicklungszeit (und noch schlimmer zu einer nicht abrechenbaren Zeit für die Einrichtung der lokalen Umgebung).

Dies hat sich auch als hilfreich erwiesen, da ich schnell auf andere Projektdateien zugreifen konnte, ohne eine neue VM öffnen und meine Host-Hardware noch weiter ausbauen zu müssen. Der Nachteil ist, dass ich im Idealfall möchte, dass jedes Projekt von anderen Projekten getrennt wird, um unvorhergesehene Probleme mit der Umgebung (z. B. php.ini, my.cnf, httpd.conf usw.) zu vermeiden. Bisher erwies sich der Kompromiss, alle Projekte leicht zugänglich zu haben, als einfallsreicher.

Auch dies hängt von Ihren Anforderungen und Bedürfnissen ab. Bewerten Sie diese daher vorab.

FEEDBACK: Was zu Feedback führt. Holen Sie sich so viel Input wie möglich von Ihren Entwicklern. Letztendlich müssen ihre Anforderungen erfüllt und ihre Probleme verstanden werden, bevor eine angemessene Lösung gefunden und umgesetzt werden kann. Jeder hat unterschiedliche Workflows, und nicht jeder ist mit dem Betriebssystem, das Sie für die Entwicklung auswählen, zufrieden. Als Faustregel gilt, dass der Entwickler das Betriebssystem und die IDE auswählen kann, in denen er sich am wohlsten fühlt und mit denen er die beste Leistung erzielt. Selbst eine schlanke Linux-VM ohne Kopf kann sich für ihre Anforderungen als nützlich erweisen, kann jedoch offensichtlich dazu führen, dass die Ordner über das lokale Netzwerk zwischen dem Host und der VM gemeinsam genutzt werden.

PORTABILITÄT: Ich habe auch mit der Idee gespielt, mein VM-Image auf so etwas wie Dropbox zu belassen, damit ich jederzeit problemlos darauf zugreifen kann. Da Dienste wie Dropbox Stück für Stück vergleichen, was gespeichert ist, schien es logisch, dass nur die Bits, die ich geändert habe, synchronisiert würden. Dies erwies sich jedoch als nicht der Fall, da ich glaube, dass dies mit der internen Speicherung der Image-Datei zusammenhängt, und ich würde den ganzen Tag / die ganze Nacht darauf warten, dass meine VM synchronisiert wird.

HINWEISE: Je größer der der VM zugewiesene Speicherplatz ist, desto größer wird das Image. Beachten Sie dies, wenn Sie das Image an Ihre Entwickler verteilen. Das Laden Ihrer Projektdateien von vorne pro Projekt ist möglicherweise zu viel und ich überlasse es jedem Entwickler, diese einzurichten, nachdem sie das erstellte Image haben.

Ashley Schroder hat einen etwas älteren verwandten Artikel, der gut zu lesen ist, sowie einige der Kommentare von Fooman und Colin

Hoffentlich hilft dies bei der Einsicht in das aufgeführte Problem, Nr. 6.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.