Archiviazione e pubblicazione di file statici

Le applicazioni spesso devono pubblicare file statici come JavaScript, immagini e CSS, oltre a gestire le richieste dinamiche. 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 offre un livello gratuito.

File per la pubblicazione da Cloud Storage

Cloud Storage può ospitare asset statici per le app web dinamiche. I vantaggi di utilizzare Cloud Storage anziché pubblicare direttamente dall'app includono:

  • Cloud Storage funziona essenzialmente come rete CDN (Content Delivery Network). Ciò non richiede una configurazione speciale perché, per impostazione predefinita, qualsiasi oggetto leggibile viene memorizzato nella cache della rete Cloud Storage globale.
  • Il carico della tua app verrà ridotto riducendo il carico della pubblicazione degli asset statici in Cloud Storage. A seconda del numero di asset statici di cui disponi e della frequenza dell'accesso, ciò può ridurre notevolmente i costi di esecuzione dell'app.
  • I costi della larghezza di banda per l'accesso ai contenuti spesso possono essere inferiori con Cloud Storage.

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

La libreria client di Google Cloud fornisce un client idiomatico per Cloud Storage, per l'archiviazione e il recupero di dati con Cloud Storage in un'app App Engine.

Esempio di gestione da un bucket Cloud Storage

Questo semplice esempio crea un bucket Cloud Storage e carica asset statici utilizzando Google Cloud CLI:

  1. Creare un bucket. È comune, ma non obbligatorio, assegnare al bucket il nome corrispondente 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 del bucket.

    gsutil defacl set public-read gs://<your-bucket-name>
    
  3. Caricare elementi nel bucket. Il comando rsync è in genere 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 ai tuoi asset statici tramite https://storage.googleapis.com/<your-bucket-name>/static/....

Per maggiori dettagli su come utilizzare Cloud Storage per gestire asset statici, incluso come pubblicare asset da un nome di dominio personalizzato, consulta l'articolo su come ospitare un sito web statico.

File per la pubblicazione da altri servizi Google Cloud

Puoi anche utilizzare Cloud CDN o altri servizi di archiviazione di Google Cloud.

I file vengono pubblicati direttamente dall'app

Per pubblicare file statici 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à del file app.yaml. Le richieste a file statici o directory statiche vengono gestite direttamente dall'infrastruttura App Engine e non raggiungono il runtime del linguaggio dell'applicazione.

Configurare i gestori dei file statici

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

Di seguito viene illustrato come gestire i file statici della directory ./public di un'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 dell'esempio riportato sopra gestisce tre pattern URL:

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

  • Il gestore /static mappa le richieste di URL che iniziano con /static. Quando App Engine riceve una richiesta per un URL che inizia con /static, mappa la parte rimanente del percorso ai file nella directory ./public. Se nella directory viene trovato un file appropriato, i contenuti di quel file 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 i pattern dei file statici devono essere definiti prima del pattern /.*. Per ulteriori informazioni, consulta la documentazione di riferimento di app.yaml.

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

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

Per migliorare le prestazioni, utilizza una rete CDN di terze parti che supporta CDN Interconnect.