8

Ich habe eine Anwendung mit Composer-Abhängigkeiten, die ich in einem Elastic Beanstalk-Container bereitstellen möchte. Meine composer.json-Datei befindet sich jedoch nicht im Stammordner des Projekts. Mein Projekt root hat die folgende Struktur:AWS Elastic Beanstalk und Composer

Und ich habe den Dokumentstamm auf/www in den Container-Konfigurationsoptionen festgelegt. Das Problem ist, dass ich Composer auf der Box installieren und das Composer-Installationsskript ausführen muss, um die Projektabhängigkeiten hinzuzufügen. Ich verstehe, dass EB während einer Bereitstellung prüfen wird, ob es eine composer.json-Datei im Projektstamm gibt und installiere Composer, aber in diesem Fall befindet sich meine composer.json-Datei in einem Unterverzeichnis.

Ich dachte, dass .EBEXTENSIONS verwenden könnte, um Befehle hinzuzufügen, um Composer und Abhängigkeiten zu installieren, nachdem die Anwendung bereitgestellt wurde. Ich habe eine Datei .ebextensions/01-composer.config mit den folgenden Container Befehle:

container_commands: 
    01-install-composer: 
    command: "curl -sS https://getcomposer.org/installer | php" 
    02-install-packages: 
    command: "php composer.phar install" 
    cwd: "/var/app/current/www/" 

Aber meine App wird nicht mit dieser Konfiguration bereitstellen. Ich würde mich über Hilfe freuen, um zu sehen, wo ich falsch liege.

Danke.

+4

Haben Sie versucht, composer.json in den Stamm Ihres Projekts zu verschieben und es zu implementieren? – tbjers

+0

Ein kurzer Test und das scheint zu funktionieren. Vielen Dank. Nicht sicher, warum ich nicht wirklich daran gedacht habe, scheint jetzt offensichtlich. –

+1

Ich hatte ein etwas ähnliches Problem. Es ist wichtig zu beachten, dass Sie den Ordner .exextensions erstellen müssen. Verwenden Sie nicht den vorhandenen Ordner .elasticbeanstalk. – Acyra

Antwort

14

Composer ist bereits standardmäßig in Beanstalks PHP AMI installiert.

Bedenken Sie auch, dass container_commands durch '/ var/app/ondeck' laufen und nicht auf der aktuellen. so etwas wie dies versucht:

container_commands: 
    01-install-packages: 
    command: "composer.phar install -d /var/app/ondeck/www" 
+0

Es gibt kein Verzeichnis/var/app/ondeck/www. Ist dies nur für Beanstalk sichtbar und nicht für einen Benutzer (root), der direkt in der EC2-Instanz angemeldet ist? –

+5

Das 'ondeck'-Verzeichnis wird während der container_commands-Phase erstellt. Hier ist eine leichte Zusammenfassung davon: * Download neue Version * Extrakt Code auf/var/app/OnDeck * laufen alle 'commands' * laufen alle' container_commands' mit Standard CWD =/var/app/OnDeck * wenn es ohne Fehler bestanden hat, wird es die aktuelle mit Ondeck ersetzen: Gründe bearbeiten: beschissene Enter-Taste als SAVE. –

+1

Danke, das ist wirklich nützlich zu wissen. Ich habe den Composer in das root-Verzeichnis des Projekts verschoben, wie es von @tbjers vorgeschlagen wurde, und alles verbunden, was nach einem kurzen Test anscheinend funktioniert hat.Das bedeutet, dass EB alles aus der Box behandelt und ich nicht daran herumbasteln muss. Aber ich werde das auch nur aus Neugierde versuchen. –

1

mit dem Vorschlag von @tbjes bereitgestellt Went und bewegte Komponisten verwandte Dateien außerhalb meines Dokuments Wurzel zu dem Projektstamm und nach einem kurzen Test alle erscheinen aus dem Kasten heraus zu arbeiten, ohne dass um den Compiler über die .ebxtenstions-Konfigurationsdateien auszuführen.

4

Nur ein Hinweis, die meisten der von AWS in Elastic Beanstalk verwendeten PHP-Container werden automatisch bereitgestellt, indem composer.phar jetzt installiert wird. Sie sollten diesen Schritt überspringen können, wenn Sie keinen Ordner "Vendors" haben. Wenn Sie es manuell ausführen möchten, sollten die oben genannten Methoden funktionieren, aber Sie sollten nur etwas wie @kewubeduben erwähnt haben.

Wenn Sie versuchen, auf ein privates Remote-Repository zugreifen, lesen Sie die Q und A hier: AWS Elastic Beanstalk using PHP with Private Composer Repositories, schamlose Stecker.