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 flexible pueden entregar archivos estáticos desde una Google Cloud opción como Cloud Storage, entregarlos directamente o usar una red de distribución de contenidos (CDN) de terceros.
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 muestra cómo crear un bucket de Cloud Storage y subir 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.objectViewerSube elementos al bucket. El comando
rsyncsuele 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 con Cloud Storage, incluso cómo entregarlos desde un nombre de dominio personalizado, consulta Cómo alojar un sitio web estático.
Entrega archivos desde otros Google Cloud servicios
También tienes la opción de usar Cloud CDN o algún otro Google Cloud servicio de almacenamiento.
Entrega archivos directamente desde la app
Generalmente, la entrega de archivos desde tu aplicación resulta simple. Sin embargo, existen algunas desventajas, por lo que debes tener en cuenta lo siguiente:
- Para las solicitudes de archivos estáticos, se usan recursos que deberían usarse con solicitudes dinámicas.
- En función de tu configuración, puede que la entrega de archivos desde tu aplicación ocasione una latencia de respuesta y genere problemas cuando se creen instancias nuevas de control de cargas.
Ejemplo de entrega de archivos estáticos con tu app
Go
En el siguiente ejemplo, se muestra cómo entregar archivos estáticos con tu app.
Puedes usar la aplicación de muestra en esta guía para cualquier versióncompatible de Go especificando la versión del entorno de ejecución
y el sistema operativo en tu app.yaml
archivo.
Puedes usar
http.FileServer
o http.ServeFile
estándar para entregar archivos directamente desde tu app.
Java
En el siguiente ejemplo, se muestra cómo entregar archivos estáticos con tu app.
Puedes usar la aplicación de muestra en esta guía para cualquier versión compatible de Java especificando la
versión del entorno de ejecución y el sistema operativo en tu archivo app.yaml.
El contenedor de servlet del entorno de ejecución de Java usará el descriptor
de
web.xml implementación, el archivo, para mapear las URLs a los servlets, incluidos los elementos estáticos. Si no especificas un archivo web.xml, se usa uno predeterminado que mapea todo al servlet predeterminado.
En este ejemplo, ./src/main/webapp/index.html hace referencia a una hoja de estilo entregada desde /stylesheets/styles.css.
El archivo styles.css se encuentra en ./src/main/webapp/stylesheets/styles.css.
Puedes configurar de manera explícita cómo se controlan los archivos estáticos en el archivo web.xml.
Por ejemplo, si deseas mapear solicitudes a todos los archivos que tengan la extensión .jpg, haz lo siguiente:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
Si usas un framework web como Play, deberás consultar la documentación del framework sobre los elementos estáticos.
Node.js
En el siguiente ejemplo, se muestra cómo entregar archivos estáticos con tu app.
Puedes usar la aplicación de muestra en esta guía para cualquier versión compatible de Node.js especificando
la versión del entorno de ejecución y el sistema operativo en tu archivo app.yaml.
La mayoría de los frameworks web incluyen asistencia para entregar archivos estáticos. En este ejemplo,
la aplicación usa el
express.static
middleware para entregar archivos del directorio ./public a la URL /static.
La vista se refiere a /static/main.css.
La hoja de estilo se encuentra en ./public/css, que se entrega desde /static/main.css.
Por lo general, otros marcos de trabajo de Node.js, como Hapi, Koa y Sails, admiten la entrega de archivos estáticos directamente desde la aplicación. Consulta su documentación para obtener detalles sobre cómo configurar y usar contenido estático.
PHP
El entorno de ejecución de PHP activa nginx
para entregar tu app, que está configurada con el fin de entregar archivos estáticos en
el directorio del proyecto. Para declarar la raíz del documento, especifica document_root en el archivo app.yaml. Puedes usar la aplicación de muestra
en esta guía para cualquier versión compatible de PHP especificando
la versión del entorno de ejecución y el sistema operativo en tu archivo de app.yaml.
Python
En el siguiente ejemplo, se muestra cómo entregar archivos estáticos con tu app.
Puedes usar la aplicación de muestra en esta guía para cualquier
versión
compatible de Python especificando la versión del entorno de ejecución y el sistema operativo en
tu app.yaml archivo.
La mayoría de los frameworks web incluyen asistencia para entregar archivos estáticos. En este ejemplo,
la app usa la función incorporada de Flask
para entregar archivos en el directorio ./static desde la URL /static.
La aplicación incluye una vista que procesa la plantilla. De forma automática, Flask entrega todo en el directorio ./static sin configuración adicional.
La plantilla que la vista procesa incluye una hoja de estilo ubicada en /static/main.css.
La hoja de estilo se encuentra en ./static/main.css.
Otros frameworks de Python, como Django, Pyramid, y Bottle suelen admitir la entrega de archivos estáticos directamente desde la app. Consulta su documentación para obtener detalles sobre cómo configurar y usar el contenido estático.
Ruby
La mayoría de los frameworks web incluyen asistencia para entregar archivos estáticos.
En el siguiente ejemplo, se muestra cómo entregar archivos estáticos con tu app.
Puedes usar la aplicación de muestra en esta guía para cualquier versión compatible de Ruby especificando la
versión del entorno de ejecución y el sistema operativo en tu archivo app.yaml.
Sinatra
El framework web de Sinatra entrega archivos del directorio ./public de forma predeterminada. Esta app incluye una vista que hace referencia a /application.css.
La hoja de estilo se encuentra en ./public/application.css, que se entrega
desde /application.css.
Ruby on Rails
El framework web de
Ruby on Rails entrega archivos del directorio ./public de forma predeterminada. Los archivos estáticos de
JavaScript y CSS también se pueden generar mediante la canalización de elementos
de Rails.
Estas aplicaciones de ejemplo contienen una vista de diseño que incluye todas las hojas de estilo de la aplicación.
La hoja de estilo es un .css archivo que se encuentra en ./public/application.css.
De forma predeterminada, las apps de Rails no generan ni entregan elementos estáticos cuando se ejecutan en producción.
El entorno de ejecución de Ruby ejecuta rake assets:precompile durante la implementación
para generar recursos estáticos y establece la variable deRAILS_SERVE_STATIC_FILES entorno
para habilitar la entrega de archivos estáticos en producción.
.NET
En el siguiente ejemplo, se muestra cómo entregar archivos estáticos con tu app.
Puedes usar la aplicación de muestra en esta guía para cualquier
versión compatible de
.NET especificando la versión del entorno de ejecución
y el sistema operativo en tu app.yaml
archivo.
Para habilitar la entrega de archivos estáticos, agrega lo siguiente:
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.