Derzeit legen wir composer.lock
das Repository fest und führen es dann composer install --no-dev
auf dem Produktionsserver aus. Ich denke nicht, dass dies der beste Weg ist, da es einige Minuten dauert, bis der Komponist alle Dateien generiert, und es ist riskant.
Ich frage mich, ob es besser ist, alle Dateien, die für die Ausführung im Produktionsmodus benötigt werden, auf das Repo zu übertragen.
Wie verwalten andere den Bereitstellungsprozess mit Magento 2?
magento2
composer
deployment
Claudiu Creanga
quelle
quelle
composer install
in der Produktion auszuführen? letcodejavascript.com/v3/blog/2014/03/the_npm_debaclecomposer install
. Haben Sie sich einen Git-Hook angesehen, um den Prozess zu automatisieren?Antworten:
Stimmen Sie zu 100% mit claudiu-creanga überein, dass Sie den Anbieter nicht verpflichten und vermeiden, dass die Composer-Installation in der Produktion ausgeführt wird.
Wir haben damit umgegangen, indem wir einen Live-Ordner und einen Release-Candidate-Ordner haben. Im Release-Candidate-Ordner führen wir Git-Pull-Befehle und die Composer-Installation --no-dev aus. Unser Prozess kann folgendermaßen zusammengefasst werden:
Im Release-Candidate-Ordner:
Synchronisieren Sie Dateien mit dem Live-Site-Ordner
Ich habe einen längeren Blog-Artikel geschrieben, in dem die tatsächlichen Befehle und Gründe dafür aufgeführt sind: https://www.c3media.co.uk/blog/c3-news/deploying-magento-2-production-environment/
UPDATE: Wir kopieren jetzt die Live-Datenbank in eine Staging-Datenbank und verwenden diese, um Setup-Skripte auszuführen, statische Dateien bereitzustellen und DI alle offline zu kompilieren. Dies kann dann live bereitgestellt werden, einschließlich pub / static-Dateien und var. Wir nehmen die Site immer noch kurz herunter, wenn Setup-Skripte ausgeführt werden, aber ansonsten bleibt die Site offen. Weitere Informationen finden Sie unter https://www.c3media.co.uk/blog/c3-news/magento-2-deployment-without-downtime/
UPDATE: Ich habe meine Meinung über das Festschreiben des Herstellerordners geändert. Durch das Festschreiben des Ordners können Sie den Verlauf der Änderung dieser Dateien verfolgen, feststellen, ob Sie versehentlich etwas geändert haben, und vor allem vermeiden Sie, Composer ausführen zu müssen zur Bereitstellungszeit. Letzteres ist jetzt von entscheidender Bedeutung, da wir uns auf externe Lieferanten von Repositories verlassen. Was ist, wenn einer von ihnen nicht verfügbar ist? Plötzlich können Sie nicht mehr bereitstellen. Die Nachteile sind ein größeres Repository, das Risiko, Core-Hacks zu begehen, und die Knie-Ruck-Distanz von Entwicklern wie mir :)
quelle
Bisher haben wir auch den Vendor-Ordner festgeschrieben, der natürlich eine ganze Reihe von Dateien zu Ihrem Repo hinzufügt. (Entfernen Sie unbedingt alle .git-Ordner in den Hersteller-Composer-Dateien, da sonst der Ordnerinhalt nicht festgeschrieben wird, z. B. firegento.) Das Verknüpfen des Vendor-Ordners funktioniert jedoch nicht. Das Bearbeiten des Pfads in der Datei vendor_path.php funktioniert ebenfalls nicht und wir hatten bisher keine Zeit, nach einer besseren Lösung zu suchen.
Wir haben keinen Build-Server und führen keinen Composer auf dem Server aus. Wir führen alle Updates lokal aus, testen sie und schreiben sie fest. Dies löst wiederum unser Bereitstellungsskript aus.
Unser Bereitstellungsskript ersetzt die Datei env.php, führt einige benutzerdefinierte Aktionen aus und löst dann auch
setup:upgrade
undsetup:static-content:deploy
vor dem Umschalten des Live-Links in den neuen Ordner aus.Der einzige Ordner, den wir mit einem Symlink versehen, ist Pub / Media.
quelle
Schließlich haben wir uns für einen Dienst wie
deploybot
( http://deploybot.com/ ) entschieden. Sie können verwenden,capistrano
die kostenlos ist. Deploybot erstellt einen Docker-Container, während die Composer-Installation ausgeführt wird. Wenn der Befehl erfolgreich ist, wird der Code bereitgestellt. Andernfalls wird nichts bereitgestellt, sodass Ihre Produktionsumgebung sicher ist.Ich halte dies für den besten Ansatz, weil:
1) Den Vendor-Ordner in Ihrem Git-Repo zu haben, wird von den Komponisten aus guten Gründen nicht empfohlen:
Weitere Informationen: https://getcomposer.org/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md
2) Das Ausführen
composer install in production
ohne Sicherheitsnetze ist riskant , Pakete können ausfallen (siehe npm), Sie können auf Speicherprobleme stoßen oder auf einen Fehler, der beim Generieren von Dateien durch den Composer auftreten kann, und Sie müssen mit einer kaputten Produktionsumgebung umgehen.quelle
Ich beschäftige mich auch damit. Der Ansatz, den ich bisher gewählt habe, ist:
Bootstrapping des Servers:
composer --create-project ... --no-dev
in einemsrc
Ordner ein (obwohl ich immer noch viel Dev Cruft sehe)Das gibt mir einen Lagerbestand, der aus meinem src-Verzeichnis läuft (aber meine Webroot zeigt nicht dorthin)
Dann mein Bereitstellungsprozess:
Dies ermöglicht es mir, den Magento-Kerncode von meinem eigenen zu trennen, Composer zu verwenden, um ihn auf dem neuesten Stand zu halten. Und ich muss keine 39.102 versenden !!! Dateien bei jeder Bereitstellung oder führen Sie Composer-Befehle zur Bereitstellungszeit aus.
... Ich bin gespannt auf andere Ansätze oder auf bewährte Methoden, und ich würde auch gerne wissen, welche Dateien tatsächlich für die Produktion benötigt werden und welche Entwickler sind, damit ich meine Webroot sauber halten kann.
Sobald ich fertig bin, habe ich ein ansibles Playbook und einige Fabric-Befehle, um die Konfiguration und Bereitstellung zu koordinieren, die ich gerne teile.
Ich hoffe, das hilft
quelle