Creazione di un'app con PHP

ID regione

Il REGION_ID è un codice abbreviato che Google assegna in base alla regione selezionata durante la creazione dell'app. Il codice non corrisponde a un paese o a una provincia, anche se alcuni ID regione possono sembrare simili ai codici di paesi e province di uso comune. Per le app create dopo febbraio 2020, REGION_ID.r è incluso negli URL App Engine. Per le app esistenti create prima di questa data, l'ID regione è facoltativo nell'URL.

Scopri di più sugli ID regione.

Scopri come creare un'app in App Engine utilizzando PHP versione 7.4 o 8.1. L'app di esempio consente agli utenti di pubblicare i titoli, gli autori, le descrizioni, la data di pubblicazione e le immagini dei loro libri preferiti su una pagina web. L'app archivia i dati di testo in un database Cloud SQL e le immagini in un bucket Cloud Storage.

Struttura della guida

  1. Crea un Google Cloud progetto utilizzando Google Cloud CLI

  2. Scarica l'app di esempio

  3. Specifica le dipendenze con composer.json

  4. Inizializzare l'app e definire i controller frontali

  5. Esegui l'integrazione con i servizi Google Cloud

  6. Configurare l'app per App Engine

  7. Eseguire il deployment dell'app

Prima di iniziare

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Build API.

    Enable the API

  5. Install the Google Cloud CLI.

  6. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  7. To initialize the gcloud CLI, run the following command:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Make sure that billing is enabled for your Google Cloud project.

  10. Enable the Cloud Build API.

    Enable the API

  11. Install the Google Cloud CLI.

  12. If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

  13. To initialize the gcloud CLI, run the following command:

    gcloud init
  14. Installa Composer, lo strumento di gestione delle dipendenze PHP. Devi installare Composer a livello globale sui sistemi Linux e Mac OS X.
  15. A causa delle modifiche al comportamento predefinito per il modo in cui Cloud Build utilizza i service account nei nuovi progetti e delle modifiche ai criteri dell'organizzazione sicuri per impostazione predefinita, potresti dover concedere ruoli aggiuntivi al account di servizio di deployment. Per saperne di più sulla concessione di ruoli specifici, consulta la guida alla risoluzione dei problemi.
  16. Scarica l'app di esempio

    1. Esplora il codice su GitHub

    2. Scarica o clona l'app.

      git clone https://github.com/GoogleCloudPlatform/php-docs-samples.git

      In alternativa, scarica il campione come file ZIP ed estrailo.

    3. Vai alla directory getting-started.

      cd php-docs-samples/appengine/standard/getting-started

    Specificare le dipendenze con composer.json

    L'app utilizza un controller frontale per instradare le richieste. Il codice campione in questa guida utilizza Slim Framework, ma puoi utilizzare il framework web che preferisci.

    1. Apri il file composer.json per esaminare tutte le dipendenze dirette:

      {
        "require": {
          "google/cloud-storage": "^1.6",
          "slim/slim": "^4.0",
          "slim/psr7": "^1.0",
          "slim/twig-view": "^3.0",
          "php-di/slim-bridge": "^3.1",
          "symfony/yaml": "^5.2"
        },
        "autoload": {
           "psr-4": {
             "Google\\Cloud\\Samples\\AppEngine\\GettingStarted\\": "src"
           }
        }
      }
      
    2. Per installare le dipendenze e produrre un file composer.lock, esegui questo comando:

      composer install
      

      Il file composer.lock aiuta l'app a recuperare le stesse versioni dei pacchetti che utilizzi in più build e ambienti.

    Inizializzare l'app e definire i controller frontali

    Il file index.php inizializza l'app e inoltra tutte le richieste ai controller definiti nel file ./src/controllers.php.

    
    // Use the composer autoloader to load dependencies.
    require_once __DIR__ . '/vendor/autoload.php';
    
    //  Load the application code.
    /** @var Slim\App $app */
    $app = require __DIR__ . '/src/app.php';
    require __DIR__ . '/src/controllers.php';
    
    // Bootstrap the slim framework to handle the request.
    $app->run();
    

    Per saperne di più sulla gestione delle richieste, leggi informazioni sull'avvio dell'applicazione e sulla gestione delle richieste.

    Integrazione con i servizi Google Cloud

    App Engine richiede che le app si integrino con sistemi esterni per l'archiviazione dei dati. L'app di esempio archivia i dati di testo su Cloud SQL e le immagini su Cloud Storage.

    Consulta la pagina Scelta di un'opzione di archiviazione per tutte le opzioni di archiviazione Google Cloud .

    Utilizzo di Cloud SQL

    Nell'app di esempio, gli utenti pubblicano libri su una pagina web. L'app utilizza un database Cloud SQL per archiviare i titoli, gli autori, la data di pubblicazione e le descrizioni dei libri.

    Devi creare un'istanza Cloud SQL prima di aggiungere contenuti al database dell'app.

    Creazione di un'istanza Cloud SQL

    Utilizza gcloud CLI per creare un'istanza Cloud SQL:

    gcloud sql instances create INSTANCE_NAME --tier=MACHINE_TYPE --region=REGION

    Ad esempio, se vuoi chiamare la tua istanza bookshelf e utilizzare il tipo di macchina db-n1-standard-2 nella regione centrale degli Stati Uniti:

    gcloud sql instances create bookshelf --tier=db-n1-standard-2 --region=us-central1

    Configurazione dell'utente root di MySQL

    Puoi utilizzare gcloud CLI per impostare la password dell'utente root dell'istanza Cloud SQL:

    gcloud sql users set-password USER --host=HOST --instance=INSTANCE_NAME --password=PASSWORD

    Ad esempio, se vuoi impostare la password dell'utente root per l'istanza Cloud SQL bookshelf su passw0rd!:

    gcloud sql users set-password root --host=% --instance=bookshelf --password=passw0rd!

    Configurare un database sull'istanza Cloud SQL

    Per archiviare gli autori, i titoli, la data di pubblicazione e le descrizioni dei libri, crea un database MySQL:

    gcloud sql databases create DATABASE_NAME --instance=INSTANCE_NAME

    Ad esempio, se vuoi creare un database denominato book-data nell'istanza Cloud SQL bookshelf:

    gcloud sql databases create book-data --instance=bookshelf

    Connessione al database Cloud SQL

    L'app di esempio utilizza PDO di PHP per interagire con il database MySQL.

    // Fill the variables below to match your Cloud SQL configuration.
    // $dbConn = 'YOUR_CLOUDSQL_CONNECTION_NAME';
    // $dbName = 'YOUR_CLOUDSQL_DATABASE_NAME';
    // $dbUser = 'YOUR_CLOUDSQL_USER';
    // $dbPass = 'YOUR_CLOUDSQL_PASSWORD';
    $dsn = "mysql:unix_socket=/cloudsql/{$dbConn};dbname={$dbName}";
    $pdo = new PDO($dsn, $dbUser, $dbPass);

    Per questo tutorial, questi parametri sono specificati come variabili di ambiente di seguito in Configurazione dell'app.

    Esecuzione di query su una singola riga

    Quando l'utente fa clic su un libro, l'app esegue una query sul database e restituisce una singola riga che include il titolo, l'autore, la data di pubblicazione e la descrizione del libro.

    $statement = $pdo->prepare('SELECT * FROM books WHERE id = :id');
    $statement->bindValue('id', $id, PDO::PARAM_INT);
    $statement->execute();
    $result = $statement->fetch(PDO::FETCH_ASSOC);

    Utilizzo di Cloud Storage

    L'app di esempio utilizza Cloud Storage per archiviare le immagini, che sono file binari, caricate dagli utenti.

    Creazione di un bucket Cloud Storage

    Cloud Storage utilizza i bucket per organizzare e controllare l'accesso ai tuoi dati.

    Utilizza gcloud CLI per creare un bucket Cloud Storage:

    gcloud storage buckets create gs://BUCKET_NAME/ --location=BUCKET_REGION

    Ad esempio, se vuoi creare un bucket denominato picture-storage nella regione us-central1:

    gcloud storage buckets create gs://picture-storage/ --location=us-central1
    • Se l'operazione ha esito positivo, viene visualizzato il seguente output:

      Creating gs://BUCKET_NAME/
    • Se l'operazione non va a buon fine, potresti visualizzare il seguente output:

      ServiceException: 409 Bucket BUCKET_NAME already exists

      Riprova utilizzando un altro nome per il bucket.

    Collegare un progetto a un bucket Cloud Storage

    Per utilizzare Cloud Storage, devi specificare la libreria Cloud Storage.

    use Google\Cloud\Storage\StorageClient;
    

    Archiviazione delle immagini

    Ora che hai creato un bucket Cloud Storage e configurato una connessione, puoi archiviare le immagini. Le immagini possono essere caricate con elenchi di controllo dell'accesso (ACL) predefiniti per controllare l'accesso alle immagini.

    In questa app di esempio, le immagini caricate avranno l'ACL predefinito public-read. È possibile accedere all'URL pubblico tramite la proprietà mediaLink dell'oggetto Cloud Storage. Puoi utilizzare questo URL in un tag immagine HTML.

    // Set your own image file path and content type below to upload an
    // image to Cloud Storage.
    // $imageStream = fopen('/path/to/your_image.jpg', 'r');
    // $imageContentType = 'image/jpg';
    $object = $bucket->upload($imageStream, [
        'metadata' => ['contentType' => $imageContentType],
        'predefinedAcl' => 'publicRead',
    ]);
    $imageUrl = $object->info()['mediaLink'];

    Per istruzioni su come leggere un oggetto Cloud Storage privato, consulta la pagina Download di oggetti.

    Eliminazione delle immagini

    Quando un utente elimina un libro dall'app, questo codice rimuove l'immagine dal bucket Cloud Storage.

    $object = $bucket->object($objectName);
    $object->delete();

    Configurazione dell'applicazione

    Configura le applicazioni da eseguire su App Engine utilizzando un file app.yaml, che specifica il runtime, le variabili di ambiente e altre impostazioni dell'applicazione.

    Per un'app con requisiti di configurazione minimi, il file app.yaml può essere una singola riga:

    PHP 8.1

    runtime: php81
    

    PHP 7.4

    runtime: php74
    

    Puoi aggiungere ulteriori opzioni di configurazione e variabili di ambiente specifiche dell'applicazione nel file di configurazione app.yaml.

    Aggiunta di variabili di ambiente

    Il file app.yaml è il punto in cui viene fornita la configurazione dell'ambiente all'app. L'esempio di libreria utilizzato in questa guida richiede che la configurazione venga fornita come variabili di ambiente per sapere come connettersi all'istanza Cloud SQL e al bucket Cloud Storage corretti.

    Per eseguire il deployment dell'app, devi modificare il file di configurazione app.yaml:

    # See https://cloud.google.com/appengine/docs/standard/php/config/appref for a
    # complete list of `app.yaml` directives.
    
    runtime: php84
    
    env_variables:
        GOOGLE_STORAGE_BUCKET: ""
        # populate these to use the "mysql" or "postres" backends
        CLOUDSQL_CONNECTION_NAME: ""
        CLOUDSQL_USER: ""
        CLOUDSQL_PASSWORD: ""
        ## Uncomment to give your database a name other than "bookshelf"
        # CLOUDSQL_DATABASE_NAME: ""
    
    1. Imposta la variabile GOOGLE_STORAGE_BUCKET sul nome del tuo bucket Cloud Storage.

    2. Imposta la variabile CLOUDSQL_CONNECTION_NAME su app-name:region:instance-name Puoi recuperare i dettagli necessari utilizzando il seguente comando gcloud:

      gcloud sql instances describe INSTANCE

      Per un'istanza Cloud SQL di seconda generazione, CLOUDSQL_CONNECTION_NAME avrà il seguente formato: your_project_name:your_region:your_instance

    3. Decommenta e imposta la variabile CLOUD_SQL_DATABASE_NAME se il database che hai creato ha un nome diverso da bookshelf. In questo esempio, il database è stato creato con il nome book-data.

    4. Controlla il file app.yaml, che dovrebbe avere il seguente aspetto:

    PHP 8.1

    runtime: php81
    
    env_variables:
      GOOGLE_STORAGE_BUCKET: picture-storage
      CLOUDSQL_CONNECTION_NAME: sample-application:us-central1:bookshelf
      CLOUDSQL_USER: root
      CLOUDSQL_PASSWORD: passw0rd!
      CLOUDSQL_DATABASE_NAME: book-data
    

    PHP 7.4

    runtime: php74
    
    env_variables:
      GOOGLE_STORAGE_BUCKET: picture-storage
      CLOUDSQL_CONNECTION_NAME: sample-application:us-central1:bookshelf
      CLOUDSQL_USER: root
      CLOUDSQL_PASSWORD: passw0rd!
      CLOUDSQL_DATABASE_NAME: book-data
    

    Implementazione dell'applicazione

    1. Per eseguire il deployment dell'applicazione, vai alla directory getting-started ed esegui questo comando:

      gcloud app deploy
    2. Quando viene visualizzato il prompt della posizione, scegli una posizione vicina agli utenti dell'app. App Engine è regionale, pertanto l'infrastruttura che esegue la tua app si trova in un'area geografica specifica. Ad esempio, questo tutorial ha utilizzato la regione us-central1 per il deployment delle risorse di archiviazione. Esegui il deployment dell'app nella stessa regione per ridurre la latenza e migliorare le prestazioni.

      In generale, scegliere una località vicina ai tuoi utenti è una buona idea, ma in alcuni casi è consigliabile eseguire il deployment dell'applicazione vicino alla posizione delle sue risorse. Scopri di più sulle località di App Engine e sulle località delle risorse disponibili.

    3. Visualizza l'applicazione:

      gcloud app browse

    Pulizia

    Elimina il progetto Google Cloud per interrompere la fatturazione delle risorse utilizzate al suo interno.

    Per eliminare il progetto utilizzando il seguente comando:

    gcloud projects delete PROJECT_ID

    Per verificare che il progetto sia stato eliminato, elenca i tuoi progetti:

    gcloud projects list

    Passaggi successivi