Distribuzione di un'applicazione CakePHP su Elastic Beanstalk - AWS Elastic Beanstalk

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Distribuzione di un'applicazione CakePHP su Elastic Beanstalk

CakePHP è un framework open source, MVC per PHP. Questo tutorial ti guiderà attraverso il processo di creazione di un progetto CakePHP, la distribuzione in un ambiente Elastic Beanstalk e la configurazione per connetterlo a un'istanza database Amazon RDS.

Prerequisiti

Questo tutorial presuppone determinate conoscenze sulle operazioni di base di Elastic Beanstalk e della console Elastic Beanstalk. Se non lo hai già fatto, segui le istruzioni in Guida introduttiva a Elastic Beanstalk per avviare il tuo primo ambiente Elastic Beanstalk.

Per seguire le procedure in questa guida, devi usare un terminale a riga di comando o una shell per eseguire i comandi. I comandi vengono visualizzati in elenchi preceduti da un simbolo di prompt ($) e dal nome della directory corrente, se appropriato.

~/eb-project$ this is a command this is output

Su Linux e macOS usa la tua shell e il tuo programma di gestione dei pacchetti preferiti. Su Windows puoi installare il sottosistema Windows per Linux per ottenere una versione integrata con Windows di Ubuntu e Bash.

CakePHP 4 richiede PHP 7.2 o versioni successive. Richiede anche le estensioni PHP elencate nella documentazione ufficiale di installazione di CakePHP . Seguire le istruzioni riportate nell'argomento Configurazione dell'ambiente di PHP sviluppo per Elastic Beanstalk per installare PHP e Composer.

Avvio di un ambiente Elastic Beanstalk

Utilizza la console Elastic Beanstalk per creare un ambiente Elastic Beanstalk. Scegli la piattaforma PHP e accetta le impostazioni predefinite e il codice di esempio.

Per avviare un ambiente (console)
  1. Apri la console Elastic Beanstalk utilizzando questo link preconfigurato: console.aws.amazon.com/elasticbeanstalk/home#/ newApplication?applicationname=tutorials &EnvironmentType= LoadBalanced

  2. Per Platform (Piattaforma), selezionare il ramo della piattaforma e la piattaforma che corrispondono al linguaggio utilizzato dall'applicazione.

  3. In Application code (Codice applicazione), scegli Sample application (Applicazione di esempio).

  4. Selezionare Review and launch (Controlla e avvia).

  5. Verificare le opzioni disponibili. Scegliere l'opzione disponibile che si desidera utilizzare e, quando si è pronti, scegliere Create app (Crea app).

Occorrono circa cinque minuti per creare l'ambiente e le seguenti risorse:

  • Istanza EC2: una macchina virtuale Amazon Elastic Compute Cloud (Amazon EC2) configurata per l'esecuzione di app Web sulla piattaforma scelta.

    Ogni piattaforma esegue un insieme specifico di software, file di configurazione e script per supportare una versione della lingua, un framework, un container Web specifici o una determinata combinazione di essi. La maggior parte delle piattaforme utilizza Apache o NGINX come proxy inverso su cui viene eseguita l'app Web, inoltra le richieste all'app, fornisce asset statici e genera log degli accessi e di errore.

  • Gruppo di sicurezza istanze: un gruppo di sicurezza di Amazon EC2 configurato per abilitare il traffico in entrata sulla porta 80. Questa risorsa consente al traffico TTP proveniente dal sistema di bilanciamento del carico di raggiungere l'istanza EC2 in esecuzione sull'app Web. Per impostazione predefinita, il traffico non è consentito su altre porte.

  • Sistema di bilanciamento del carico: un sistema di bilanciamento del carico Elastic Load Balancing configurato per distribuire richieste alle istanze in esecuzione sull'applicazione. Un sistema di bilanciamento del carico inoltre elimina la necessità di esporre le proprie istanze direttamente in Internet.

  • Gruppo di sicurezza del sistema di bilanciamento del carico: un gruppo di sicurezza di Amazon EC2 configurato per abilitare il traffico in entrata sulla porta 80. Questa risorsa HTTP consente al traffico proveniente da Internet di raggiungere il sistema di bilanciamento del carico. Per impostazione predefinita, il traffico non è consentito su altre porte.

  • Gruppo Auto Scaling: un gruppo Auto Scaling configurato per sostituire un'istanza se viene terminata o diventa non disponibile.

  • Bucket Amazon S3: posizione di storage per il codice sorgente, i log e altri artefatti creati quando si utilizza Elastic Beanstalk.

  • CloudWatch Allarmi Amazon: due CloudWatch allarmi che monitorano il carico sulle istanze nel tuo ambiente e che vengono attivati se il carico è troppo alto o troppo basso. Quando viene attivato un allarme, il gruppo Auto Scaling aumenta o diminuisce di conseguenza.

  • AWS CloudFormation stack: Elastic AWS CloudFormation Beanstalk utilizza per avviare le risorse nell'ambiente e propagare le modifiche alla configurazione. Le risorse sono definite in un modello, visualizzabile nella console AWS CloudFormation.

  • Nome dominio: un nome di dominio che esegue l'instradamento all'applicazione Web utilizzando il formato sottodominio.regione.elasticbeanstalk.com.

    Nota

    Per aumentare la sicurezza delle tue applicazioni Elastic Beanstalk, il dominio elasticbeanstalk.com è registrato nella Public Suffix List (PSL). Per una maggiore sicurezza, ti consigliamo di utilizzare i cookie con un prefisso __Host- se hai bisogno di impostare cookie sensibili nel nome di dominio predefinito per le tue applicazioni Elastic Beanstalk. Questa pratica ti aiuterà a difendere il tuo dominio dai tentativi CSRF (cross-site request forgery). Per ulteriori informazioni, consulta la pagina Impostazione cookie nella pagina Mozilla Developer Network.

Tutte queste risorse sono gestite da Elastic Beanstalk. Quando arresti l'ambiente, Elastic Beanstalk termina tutte le risorse che contiene.

Nota

Il bucket Amazon S3 creato da Elastic Beanstalk è condiviso tra gli ambienti e non viene eliminato quando l'ambiente viene terminato. Per ulteriori informazioni, consultare Utilizzo di Elastic Beanstalk con Amazon S3.

Installazione di CakePHP e creazione di un sito Web

Composer è in grado di installare CakePHP e di creare un progetto funzionante con un unico comando:

~$ composer create-project --prefer-dist cakephp/app eb-cake

Composer installa CakePHP e circa 20 dipendenze e genera un progetto predefinito.

In caso di problemi durante l'installazione di CakePHP, visita l'argomento relativo all'installazione nella documentazione ufficiale: http://book.cakephp.org/4.0/en/installation.html

Distribuzione dell'applicazione

Crea un bundle di origine che contiene i file creati da Composer. Il comando seguente crea un bundle di origine denominato cake-default.zip. Esclude i file nella cartella vendor, che occupano molto spazio e non sono necessari per la distribuzione dell'applicazione in Elastic Beanstalk.

eb-cake zip ../cake-default.zip -r * .[^.]* -x "vendor/*"

Carica il bundle di origine in Elastic Beanstalk per distribuire CakePHP nell'ambiente.

Per distribuire un bundle di origine
  1. Apri la console Elastic Beanstalk e, nell'elenco Regioni, seleziona la tua. Regione AWS

  2. Nel pannello di navigazione selezionare Environments (Ambienti), quindi selezionare il nome dell'ambiente dall'elenco.

    Nota

    Se si dispone di molti ambienti, utilizzare la barra di ricerca per filtrare l'elenco degli ambienti.

  3. Nella pagina della panoramica dell'ambiente scegliere Upload and deploy (Carica e distribuisci).

  4. Utilizzare la finestra di dialogo su schermo per caricare il bundle di origine.

  5. Selezionare Deploy (Distribuisci).

  6. Al termine della distribuzione, è possibile scegliere l'URL del sito per aprire il sito Web in una nuova scheda.

Nota

Per ottimizzare ulteriormente il bundle di origine, inizializza un repository Git e utilizza il comando git archive per creare il bundle di origine. Il progetto predefinito di Symfony include un file .gitignore che indica a Git di escludere la cartella vendor e gli altri file non necessari per la distribuzione.

Una volta completato il processo, fai clic sull'URL per aprire la tua applicazione CakePHP nel browser.

Fino qui, tutto bene. Nella fase successiva potrai aggiungere un database all'ambiente e configurare CakePHP in modo che si connetta a esso.

Aggiunta di un database all'ambiente

Avvia un'istanza database Amazon RDS nel tuo ambiente Elastic Beanstalk. Puoi utilizzare i database MySQL, SQLServer o PostgreSQL con CakePHP su Elastic Beanstalk. Per questo esempio, utilizziamo PostgreSQL.

Per aggiungere un'istanza database Amazon RDS al tuo ambiente Elastic Beanstalk
  1. Apri la console Elastic Beanstalk e, nell'elenco Regioni, seleziona la tua. Regione AWS

  2. Nel pannello di navigazione selezionare Environments (Ambienti), quindi selezionare il nome dell'ambiente dall'elenco.

    Nota

    Se si dispone di molti ambienti, utilizzare la barra di ricerca per filtrare l'elenco degli ambienti.

  3. Nel riquadro di navigazione, seleziona Configuration (Configurazione).

  4. In Database, scegliere Edit (Modifica).

  5. In DB engine (Motore DB), scegliere postgres.

  6. Digitare username (Nome utente) e password (Password) principali. Elastic Beanstalk fornirà questi valori alla tua applicazione utilizzando le proprietà dell'ambiente.

  7. Per salvare le modifiche scegli Apply (Applica) nella parte inferiore della pagina.

La creazione di un'istanza di database richiede circa 10 minuti. Nel frattempo, è possibile aggiornare il codice sorgente per leggere le informazioni di connessione dall'ambiente. Elastic Beanstalk fornisce i dettagli di connessione tramite variabili di ambiente, ad esempio RDS_HOSTNAME, a cui puoi accedere dalla tua applicazione.

La configurazione del database CakePHP è memorizzata in un file denominato app.php nella cartella config del tuo codice di progetto. Apri il file e aggiungi un codice che legga le variabili di ambiente da $_SERVER e le assegna a variabili locali. Inserisci le righe evidenziate nell'esempio qui di seguito, dopo la prima linea (<?php):

Esempio ~/Eb-cake/config/app.php
<?php if (!defined('RDS_HOSTNAME')) { define('RDS_HOSTNAME', $_SERVER['RDS_HOSTNAME']); define('RDS_USERNAME', $_SERVER['RDS_USERNAME']); define('RDS_PASSWORD', $_SERVER['RDS_PASSWORD']); define('RDS_DB_NAME', $_SERVER['RDS_DB_NAME']); } return [ ...

La connessione al database viene configurata ulteriormente nel file app.php. Trova la sezione seguente e modifica la configurazione di origine dati predefinita con il nome del driver corrispondente al motore di database (Mysql, Sqlserver o Postgres) e imposta le variabili host, username, password e database per leggere i valori corrispondenti da Elastic Beanstalk:

Esempio ~/Eb-cake/config/app.php
... /** * Connection information used by the ORM to connect * to your application's datastores. * Drivers include Mysql Postgres Sqlite Sqlserver * See vendor\cakephp\cakephp\src\Database\Driver for complete list */ 'Datasources' => [ 'default' => [ 'className' => 'Cake\Database\Connection', 'driver' => 'Cake\Database\Driver\Postgres', 'persistent' => false, 'host' => RDS_HOSTNAME, /* * CakePHP will use the default DB port based on the driver selected * MySQL on MAMP uses port 8889, MAMP users will want to uncomment * the following line and set the port accordingly */ //'port' => 'non_standard_port_number', 'username' => RDS_USERNAME, 'password' => RDS_PASSWORD, 'database' => RDS_DB_NAME, /* * You do not need to set this flag to use full utf-8 encoding (internal default since CakePHP 3.6). */ //'encoding' => 'utf8mb4', 'timezone' => 'UTC', 'flags' => [], 'cacheMetadata' => true, 'log' => false, ...

Quando l'istanza database ha terminato l'avvio, raggruppa e distribuisci l'applicazione aggiornata nel tuo ambiente:

Per aggiornare l'ambiente Elastic Beanstalk
  1. Creare un nuovo bundle di origine:

    ~/eb-cake$ zip ../cake-v2-rds.zip -r * .[^.]* -x "vendor/*"
  2. Apri la console Elastic Beanstalk e, nell'elenco Regioni, seleziona la tua. Regione AWS

  3. Nel pannello di navigazione selezionare Environments (Ambienti), quindi selezionare il nome dell'ambiente dall'elenco.

    Nota

    Se si dispone di molti ambienti, utilizzare la barra di ricerca per filtrare l'elenco degli ambienti.

  4. Selezionare Upload and Deploy (Carica e distribuisci).

  5. Selezionare Browse (Sfoglia) e carica cake-v2-rds.zip.

  6. Selezionare Deploy (Distribuisci).

La distribuzione di una nuova versione dell'applicazione richiede meno di un minuto. Al termine della distribuzione, aggiorna la pagina Web di nuovo per verificare che la connessione al database sia riuscita:

Green checkmark icon indicating successful database connection for CakePHP.

Pulizia

Dopo aver usato Elastic Beanstalk, puoi terminare l'ambiente. Elastic Beanstalk AWS interrompe tutte le risorse associate all'ambiente, come istanze Amazon EC2, istanze di database, sistemi di bilanciamentodel carico, gruppi di sicurezza e allarmi.

Per terminare l'ambiente Elastic Beanstalk dalla console
  1. Apri la console Elastic Beanstalk e, nell'elenco Regioni, seleziona la tua. Regione AWS

  2. Nel pannello di navigazione selezionare Environments (Ambienti), quindi selezionare il nome dell'ambiente dall'elenco.

    Nota

    Se si dispone di molti ambienti, utilizzare la barra di ricerca per filtrare l'elenco degli ambienti.

  3. Seleziona Actions (Operazioni), quindi Terminate environment (Termina ambiente).

  4. Utilizza la finestra di dialogo su schermo per confermare la terminazione dell'ambiente.

Con Elastic Beanstalk puoi creare facilmente un nuovo ambiente per l'applicazione in qualsiasi momento.

Inoltre, puoi terminare le risorse di database create al di fuori dell'ambiente Elastic Beanstalk. Quando termini un'istanza database Amazon RDS, puoi acquisire uno snapshot e successivamente ripristinare i dati in un'altra istanza.

Per terminare l'istanza database RDS
  1. Apri la console Amazon RDS.

  2. Scegli Databases (Database).

  3. Scegli l'istanza database.

  4. Scegli Actions (Operazioni), quindi Delete (Elimina).

  5. Scegliere se creare una snapshot, quindi selezionare Delete (Elimina).

Passaggi successivi

Per ulteriori informazioni su CakePHP, leggi il manuale all'indirizzo book.cakephp.org.

Mentre continui a sviluppare l'applicazione, potrebbe essere necessario un metodo per gestire gli ambienti e distribuire l'applicazione senza creare manualmente un file .zip e caricarlo sulla console Elastic Beanstalk. L'Elastic Beanstalk Command Line Interface (EB CLI easy-to-use ) fornisce comandi per creare, configurare e distribuire applicazioni in ambienti Elastic Beanstalk dalla riga di comando.

L'esecuzione di un'istanza database Amazon RDS nell'ambiente Elastic Beanstalk è perfetta per le attività di sviluppo e test, ma vincola il ciclo di vita del database al tuo ambiente. Per istruzioni sulla connessione a un database in esecuzione al di fuori del tuo ambiente, consulta Aggiungere un'istanza Amazon RDS DB al tuo ambiente PHP Elastic Beanstalk.

Infine, se prevedi di usare l'applicazione in un ambiente di produzione, devi configurare un nome di dominio personalizzato per l'ambiente e abilitare HTTPS per le connessioni sicure.