Archiviazione e pubblicazione di file statici

Oltre a gestire le richieste dinamiche, le applicazioni spesso devono pubblicare file statici come JavaScript, immagini e CSS. Le app nell'ambiente standard possono pubblicare file statici da un'opzione di Google Cloud come Cloud Storage, pubblicarli direttamente o utilizzare una rete CDN (Content Delivery Network) di terze parti.

L'hosting del tuo sito statico su Google Cloud può costare meno rispetto all'utilizzo di un provider host tradizionale, in quanto Google Cloud fornisce un
livello gratuito.

Gestione dei file da Cloud Storage

Cloud Storage può ospitare asset statici per app web dinamiche. I vantaggi dell'utilizzo di Cloud Storage invece della gestione diretta dall'app includono:

  • Cloud Storage funziona essenzialmente come rete di distribuzione dei contenuti. Questa operazione non richiede alcuna configurazione speciale perché, per impostazione predefinita, qualsiasi oggetto leggibile pubblicamente viene memorizzato nella cache nella rete globale di Cloud Storage.
  • Il carico della tua app verrà ridotto trasferendo gli asset statici a Cloud Storage. A seconda del numero di asset statici disponibili e della frequenza di accesso, questo può ridurre notevolmente il costo di esecuzione della tua app.
  • Spesso l'accesso a contenuti a larghezza di banda può essere inferiore con Cloud Storage.

Puoi caricare i tuoi asset in Cloud Storage utilizzando lo strumento a riga di comando gsutil o l'API Cloud Storage.

La libreria client Google Cloud fornisce un client PHP 7+ specifico per Cloud Storage, per l'archiviazione e il recupero dei dati con Cloud Storage in un'app App Engine.

Il client PHP 7+ fornisce anche un wrapper per flussi basato su API, che può essere utilizzato per interagire con Cloud Storage come file system specializzato.

Esempio di gestione da un bucket Cloud Storage

Questo semplice esempio crea un bucket Cloud Storage e carica asset statici utilizzando l'interfaccia a riga di comando di Google Cloud:

  1. Crea un bucket. È comune, ma non obbligatorio, assegnare un nome al bucket in base all'ID progetto. Il nome del bucket deve essere univoco a livello globale.

    gsutil mb gs://<your-bucket-name>
    
  2. Imposta l'ACL per concedere l'accesso in lettura agli elementi nel bucket.

    gsutil defacl set public-read gs://<your-bucket-name>
    
  3. Carica gli elementi nel bucket. Il comando rsync è generalmente il modo più rapido e semplice per caricare e aggiornare gli asset. Puoi anche utilizzare cp.

    gsutil -m rsync -r ./static gs://<your-bucket-name>/static
    

Ora puoi accedere alle tue risorse statiche tramite https://storage.googleapis.com/<your-bucket-name>/static/....

Per maggiori dettagli su come utilizzare Cloud Storage per pubblicare asset statici, inclusa la pubblicazione di un nome di dominio personalizzato, consulta la sezione Come ospitare un sito web statico.

Gestione dei file da altri servizi Google Cloud

Hai anche la possibilità di utilizzare Cloud CDN o altri servizi di archiviazione di Google Cloud.

Pubblicare file direttamente dall'app

Per pubblicare i file statici per PHP 7 o versioni successive nell'ambiente standard, definisci i gestori nel file app.yaml utilizzando gli elementi static_dir o static_files.

I contenuti dei file statici o delle directory statiche non sono interessati dalle impostazioni di scalabilità nel file app.yaml. Le richieste ai file statici o alle directory statiche vengono gestite direttamente dall'infrastruttura App Engine e non raggiungono il runtime del linguaggio dell'applicazione.

Configurazione dei gestori di file statici

Per configurare la tua app in modo che pubblichi la directory ./public dall'URL /static, devi definire un gestore nel file app.yaml.

Quanto segue illustra come pubblicare i file statici di una directory ./public dell'app di esempio. Il modello per la pagina index.html di questa app indica al browser di caricare il file main.css, ad esempio:

<link type="text/css" rel="stylesheet" href="/static/css/main.css">

La directory ./public è definita nell'elemento static_dir del file app.yaml del progetto:

handlers:
  - url: /favicon\.ico
    static_files: favicon.ico
    upload: favicon\.ico

  - url: /static
    static_dir: public

  - url: /.*
    secure: always
    redirect_http_response_code: 301
    script: auto

La sezione handlers nell'esempio sopra gestisce tre pattern URL:

  • Il gestore /favicon.ico mappa una richiesta specifica per /favicon.ico a un file denominato favicon.ico nella directory principale dell'app.

  • Il gestore /static mappa le richieste per gli URL che iniziano con /static. Quando App Engine riceve una richiesta di un URL che inizia con /static, viene mappata la parte rimanente del percorso ai file nella directory ./public. Se nella directory viene trovato un file appropriato, i relativi contenuti vengono restituiti al client.

  • Il gestore /.* corrisponde a tutti gli altri URL e li indirizza alla tua app.

I pattern dei percorsi degli URL vengono testati nell'ordine in cui appaiono in app.yaml, pertanto il pattern per i tuoi file statici deve essere definito prima del pattern /.*. Per ulteriori informazioni, consulta il riferimento app.yaml.

Pubblicazione di file per lo sviluppo locale

Utilizza il server web integrato di PHP per pubblicare file statici localmente:

  1. Vai alla directory del progetto.
  2. Avvia il tuo server web locale con il seguente comando:

    php -S localhost:8080
    
  3. Scegli come target l'applicazione PHP in esecuzione in locale con una richiesta di file statici utilizzando l'utilità di richiesta HTTP curl:

    curl -O http://localhost:8080/static/file/path/image.png
    

    La richiesta recupera il file ./static/file/path/image.png.

Molti framework web includono il supporto per la pubblicazione di file statici, che puoi utilizzare per pubblicare file in locale durante lo sviluppo anziché su un server web locale. Ad esempio, consulta la documentazione del framework per i file per la pubblicazione di Symfony o le risposte di file di Laravel.

Pubblicazione da una rete CDN (Content Delivery Network) di terze parti

Puoi utilizzare qualsiasi CDN esterna di terze parti per pubblicare i tuoi file statici e memorizzare richieste dinamiche nella cache, ma la tua app potrebbe riscontrare una maggiore latenza e costi.

Per migliorare le prestazioni, devi utilizzare una rete CDN di terze parti che supporti CDN Interconnect.