8

Ho un'applicazione con dipendenze di Composer che voglio distribuire in un contenitore di Beanstalk Elastic. Tuttavia il mio file composer.json non si trova nella cartella principale del progetto. La mia radice del progetto ha la seguente struttura:AWS Elastic Beanstalk and Composer

- .ebextensions 
- scripts 
- www (Webroot) 
    - composer.json 

E ho impostato la radice del documento a/www nelle opzioni di configurazione del contenitore. Il problema è che ho bisogno di installare compositore sulla scatola ed eseguire lo script di installazione del compositore per aggiungere le dipendenze del progetto. Capisco che durante una deploy EB controllerà se c'è un file composer.json nella root del progetto e installer Composer ma in questo caso il mio file composer.json si trova in una sottodirectory.

Ho pensato che potrebbe usare .ebextenstions per aggiungere comandi per installare Composer e dipendenze dopo che l'applicazione è stata distribuita. Ho creato un file di .ebextensions/01-composer.config con i seguenti comandi container:

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/" 

Ma la mia applicazione non distribuire con questa configurazione. Gradirei qualche aiuto per vedere dove sto andando male.

Grazie.

+4

Hai provato a spostare composer.json nella radice del progetto e distribuirlo? – tbjers

+0

Un test rapido e questo sembra aver funzionato. Grazie. Non sono sicuro del motivo per cui non ci ho pensato, sembra ovvio ora. –

+1

Ho avuto un problema in qualche modo correlato. È importante notare che è necessario creare la cartella .ebextensions-- non utilizzare la cartella .elasticbeanstalk esistente. – Acyra

risposta

14

Il compositore è già installato predefinito in PHP AMI di Beanstalk.

Considerare inoltre che i comandi del contenitore vengono eseguiti tramite '/ var/app/ondeck' e non sulla corrente. Provare qualcosa di simile:

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

Non esiste alcuna directory/var/app/ondeck/www. Questo qualcosa è visibile solo a Beanstalk e non a un utente (root) registrato direttamente sull'istanza EC2? –

+5

La directory 'ondeck' viene creata durante la fase container_commands. Ecco una piccola sintesi di esso: * scaricare la nuova versione * codice estratto in/var/app/OnDeck * eseguire tutti 'commands' * eseguire tutti' container_commands' con predefinito CWD =/var/app/OnDeck * se è passato senza errori, sostituirà la corrente con ondeck : motivi di modifica: crappy pulsante di invio che agisce come SALVA. –

+1

Grazie, questo è davvero utile sapere. Ho spostato il compositore nella directory root del progetto come suggerito da @tbjers e ho collegato tutto da lì che dopo un rapido test sembra aver funzionato.Ciò significa che EB si occupa di tutto questo fuori dagli schemi e non devo armeggiare con esso. Ma ci proverò anche solo per curiosità. –

1

andato con il suggerimento fornito da @tbjes e si è trasferito i file relativi compositore al di fuori del mio documento radice alla radice del progetto e dopo un rapido test tutto sembra funzionare fuori dalla scatola, senza dover per eseguire compositore tramite file di configurazione .ebxtenstions.

4

Solo una nota, la maggior parte dei contenitori PHP che AWS sta utilizzando in Elastic Beanstalk è la distribuzione automatica eseguendo ora l'installazione di composer.phar. Dovresti essere in grado di saltare questo passaggio se non hai una cartella "venditori" presente. Se vuoi eseguirlo manualmente, i metodi sopra dovrebbero funzionare, ma dovresti aver bisogno solo di qualcosa come @kewubenduben menzionato.

Se si sta tentando di accedere a un repository remoto privato, controllare la Q e A qui: AWS Elastic Beanstalk using PHP with Private Composer Repositories, plug vergognoso.

Problemi correlati