A menudo las aplicaciones necesitan entregar archivos estáticos, como JavaScript, imágenes y CSS, además de controlar solicitudes dinámicas. Las apps en el entorno estándar pueden entregar archivos estáticos desde una opción de Google Cloud, como Cloud Storage, entregarlos directamente o usar una red de distribución de contenidos (CDN) de terceros.
Alojar tu sitio estático en Google Cloud puede costar menos que usar un proveedor de hosting tradicional, ya que Google Cloud proporciona un nivel gratuito.Entrega archivos desde Cloud Storage
Cloud Storage puede alojar elementos estáticos para aplicaciones web dinámicas. Estos son algunos de los beneficios de entregarlos desde Cloud Storage en lugar de hacerlo desde tu aplicación:
- Cloud Storage funciona básicamente como una red de distribución de contenidos. No requiere configuraciones especiales gracias a que, según la configuración predeterminada, cualquier objeto público de lectura se almacena en caché en la red global de Cloud Storage.
- La carga de tu aplicación se aligerará porque Cloud Storage se encargará de la entrega de elementos estáticos. Según la cantidad de elementos estáticos que tengas y la frecuencia de acceso, esto puede reducir en gran medida el costo por ejecutar tu app.
- Los cargos de ancho de banda por acceder a contenido a menudo pueden ser menores con Cloud Storage.
Puedes subir tus elementos a Cloud Storage mediante Google Cloud CLI o la API de Cloud Storage.
La biblioteca cliente de Google Cloud proporciona un cliente idiomático a Cloud Storage para almacenar y recuperar datos con Cloud Storage en una app de App Engine.
Ejemplo de entrega desde un bucket de Cloud Storage
En este ejemplo, se crea un bucket de Cloud Storage y se suben elementos estáticos mediante gcloud CLI:
Crea un bucket. Es común, pero no obligatorio, nombrar al bucket según el ID del proyecto. Debe tener un nombre único a nivel global.
gcloud storage buckets create gs://<var>your-bucket-name</var>
Configura la política de IAM para otorgar acceso público de lectura a los elementos del bucket.
gcloud storage buckets add-iam-policy-binding gs://<var>your-bucket-name</var> --member=allUsers --role=roles/storage.objectViewer
Sube elementos al bucket. El comando
rsync
suele ser la forma más rápida y fácil de subir y actualizar elementos. También puedes usarcp
.gcloud storage rsync ./static gs://<var>your-bucket-name</var>/static --recursive
Ahora puedes acceder a los elementos estáticos a través de https://storage.googleapis.com/<var>your-bucket-name</var>/static/...
.
Para obtener más detalles sobre cómo entregar elementos estáticos, incluso cómo entregarlos desde un nombre de dominio personalizado con Cloud Storage, consulta Cómo alojar un sitio web estático.
Entrega archivos desde otros servicios de Google Cloud
También tienes la opción de usar Cloud CDN o algún otro servicio de almacenamiento de Google Cloud.
Entrega archivos directamente desde la app
Para entregar archivos estáticos en el entorno estándar, debes definir los controladores en tu archivo app.yaml
mediante static_dir
o static_files
.
El contenido de los archivos estáticos o los directorios estáticos no se ven afectados por la configuración de escalamiento del archivo app.yaml
. La infraestructura de App Engine maneja las solicitudes a archivos estáticos o directorios estáticos y no llegan al entorno de ejecución del lenguaje de la aplicación.
Configura los controladores de archivos estáticos
Si quieres configurar la app para que entregue el directorio ./public
desde la URL /static
, define un controlador en el archivo app.yaml
.
A continuación, se muestra cómo entregar los archivos estáticos del directorio ./public
de una app de muestra. En la plantilla de la página index.html
de esta app, se indica al navegador que cargue el archivo main.css
, por ejemplo:
<link type="text/css" rel="stylesheet" href="/static/css/main.css">
El directorio ./public
se define en el elemento static_dir
del archivo app.yaml
del proyecto:
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 sección handlers
del ejemplo anterior controla tres patrones de URL:
El controlador /favicon.ico mapea una solicitud específica para
/favicon.ico
a un archivo llamadofavicon.ico
en el directorio raíz de la app.El controlador /static mapea solicitudes para las URL que comienzan con
/static
. Cuando App Engine recibe una solicitud para una URL que comienza con/static
, mapea el resto de la ruta de acceso a los archivos en el directorio./public
. Si se encuentra un archivo apropiado en el directorio, su contenido se muestra al cliente.El controlador /.* coincide con todas las demás URL y las dirige a la app.
Los patrones de ruta de URL se prueban en el orden en el que aparecen en app.yaml
; por lo tanto, el patrón de los archivos estáticos debe definirse antes del patrón /.*
.
Para obtener más información, consulta la referencia app.yaml
.
Ten en cuenta que para usar controladores estáticos, debes especificar el elemento entrypoint
en app.yaml
o especificar un controlador con script
establecido en auto
.
Entrega archivos desde una red de distribución de contenidos de terceros
Puedes utilizar cualquier CDN externa de terceros para entregar tus archivos estáticos y almacenar las solicitudes dinámicas en caché, aunque tu app podría experimentar un aumento de latencia y costo.
Para un mejor rendimiento, usa una CDN de terceros compatible con CDN Interconnect.