Las aplicaciones suelen tener que servir archivos estáticos, como JavaScript, imágenes y CSS, además de gestionar solicitudes dinámicas. Las aplicaciones del entorno flexible pueden publicar archivos estáticos desde una Google Cloud opción como Cloud Storage, publicarlos directamente o usar una red de distribución de contenido (CDN) de terceros.
Servir archivos desde Cloud Storage
Cloud Storage puede alojar recursos estáticos para aplicaciones web dinámicas. Las ventajas de usar Cloud Storage en lugar de servir contenido directamente desde tu aplicación son las siguientes:
- Cloud Storage funciona básicamente como una red de distribución de contenido. No requiere ninguna configuración especial, ya que, de forma predeterminada, cualquier objeto de lectura pública se almacena en caché en la red global de Cloud Storage.
- La carga de tu aplicación se reducirá al derivar el servicio de recursos estáticos a Cloud Storage. En función del número de recursos estáticos que tengas y de la frecuencia de acceso, esto puede reducir considerablemente el coste de ejecutar tu aplicación.
- Los cargos por ancho de banda para acceder al contenido suelen ser menores con Cloud Storage.
Puede subir sus recursos a Cloud Storage mediante la CLI de Google Cloud o la API de Cloud Storage.
La biblioteca de cliente de Google Cloud proporciona un cliente idiomático para Cloud Storage, con el que se pueden almacenar y recuperar datos con Cloud Storage en una aplicación de App Engine.
Ejemplo de servicio desde un segmento de Cloud Storage
En este ejemplo se crea un segmento de Cloud Storage y se suben recursos estáticos mediante la CLI de gcloud:
Permite crear un depósito. Es habitual, pero no obligatorio, que el nombre del segmento sea el mismo que el ID del proyecto. El nombre del segmento debe ser único de forma global.
gcloud storage buckets create gs://<var>your-bucket-name</var>
Define la política de gestión de identidades y accesos para conceder acceso público de lectura a los elementos del segmento.
gcloud storage buckets add-iam-policy-binding gs://<var>your-bucket-name</var> --member=allUsers --role=roles/storage.objectViewer
Sube elementos al segmento. El comando
rsync
suele ser la forma más rápida y sencilla de subir y actualizar recursos. También puedes usarcp
.gcloud storage rsync ./static gs://<var>your-bucket-name</var>/static --recursive
Ahora puedes acceder a tus recursos estáticos a través de https://storage.googleapis.com/<var>your-bucket-name</var>/static/...
.
Para obtener más información sobre cómo usar Cloud Storage para publicar recursos estáticos, incluido cómo hacerlo desde un nombre de dominio personalizado, consulta el artículo Cómo alojar un sitio web estático.
Publicar archivos de otros Google Cloud servicios
También puedes usar Cloud CDN u otros servicios de almacenamiento Google Cloud .
Publicar archivos directamente desde tu aplicación
Servir archivos desde tu aplicación suele ser sencillo, pero hay un par de inconvenientes que debes tener en cuenta:
- Las solicitudes de archivos estáticos pueden usar recursos que, de lo contrario, se utilizarían para solicitudes dinámicas.
- En función de tu configuración, servir archivos desde tu aplicación puede provocar latencia en la respuesta, lo que también puede afectar al momento en que se crean nuevas instancias para gestionar la carga.
Ejemplo de cómo servir archivos estáticos con tu aplicación
Go
En el siguiente ejemplo se muestra cómo servir archivos estáticos con tu aplicación. Puedes usar la aplicación de ejemplo de esta guía con cualquier versión compatible de Go especificando la versión del tiempo de ejecución y el sistema operativo en el archivo app.yaml
.
Puedes usar el estándar
http.FileServer
o http.ServeFile
para servir archivos directamente desde tu aplicación.
Java
En el siguiente ejemplo se muestra cómo servir archivos estáticos con tu aplicación. Puedes usar la aplicación de ejemplo de esta guía con cualquier versión compatible de Java. Para ello, especifica la versión del tiempo de ejecución y el sistema operativo en el archivo app.yaml
.
El contenedor de servlet del entorno de ejecución de Java usará el archivo descriptor de despliegue,
web.xml
de tu aplicación para asignar URLs a servlets, incluidos los recursos estáticos. Si no especificas un web.xml
, se usará un valor predeterminado que asigna todo al servlet predeterminado.
En este ejemplo, ./src/main/webapp/index.html
hace referencia a una hoja de estilo que se sirve desde /stylesheets/styles.css
.
El archivo styles.css
se encuentra en ./src/main/webapp/stylesheets/styles.css
.
Puedes configurar explícitamente cómo se gestionan los archivos estáticos en el archivo web.xml
.
Por ejemplo, si quieres asignar solicitudes de todos los archivos que tengan la extensión .jpg
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
Si usas un framework web, como Play, tendrás que consultar la documentación del framework sobre los recursos estáticos.
Node.js
En el siguiente ejemplo se muestra cómo servir archivos estáticos con tu aplicación. Puedes usar la aplicación de ejemplo de esta guía con cualquier versión compatible de Node.js. Para ello, especifica la versión del entorno de ejecución y el sistema operativo en el archivo app.yaml
.
La mayoría de los frameworks web incluyen compatibilidad para servir archivos estáticos. En este ejemplo, la aplicación usa el middleware express.static
para servir archivos del directorio ./public
a la URL /static
.
La vista hace referencia a /static/main.css
.
La propia hoja de estilo se encuentra en ./public/css
, que se sirve desde /static/main.css
.
Otros frameworks de Node.js, como Hapi, Koa y Sails, suelen admitir el servicio de archivos estáticos directamente desde la aplicación. Consulta su documentación para obtener información sobre cómo configurar y usar contenido estático.
PHP
El entorno de ejecución de PHP ejecuta nginx para servir tu aplicación, que está configurada para servir archivos estáticos en el directorio de tu proyecto. Debes declarar el directorio raíz del documento especificando document_root
en tu archivo app.yaml
. Puedes usar la aplicación de ejemplo de esta guía con cualquier versión compatible de PHP. Para ello, especifica la versión del entorno de ejecución y el sistema operativo en el archivo app.yaml
.
Python
En el siguiente ejemplo se muestra cómo servir archivos estáticos con tu aplicación. Puedes usar la aplicación de ejemplo de esta guía con cualquier versión compatible de Python especificando la versión del entorno de ejecución y el sistema operativo en el archivo app.yaml
.
La mayoría de los frameworks web incluyen compatibilidad para servir archivos estáticos. En este ejemplo, la aplicación usa la función integrada de Flask para servir archivos del directorio ./static
desde la URL /static
.
La aplicación incluye una vista que renderiza la plantilla. Flask sirve automáticamente todo lo que hay en el directorio ./static
sin necesidad de configuración adicional.
La plantilla renderizada por la vista 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 el servicio de archivos estáticos directamente desde la aplicación. Consulta su documentación para obtener información sobre cómo configurar y usar contenido estático.
Ruby
La mayoría de los frameworks web incluyen compatibilidad para servir archivos estáticos.
En el siguiente ejemplo se muestra cómo servir archivos estáticos con tu aplicación. Puedes usar la aplicación de ejemplo de esta guía con cualquier versión compatible de Ruby. Para ello, especifica la versión del tiempo de ejecución y el sistema operativo en el archivo app.yaml
.
Sinatra
El framework web Sinatra sirve archivos del directorio ./public
de forma predeterminada. Esta aplicación incluye una vista que hace referencia a /application.css
.
La hoja de estilo se encuentra en ./public/application.css
, que se sirve desde /application.css
.
Ruby on Rails
El framework web Ruby on Rails sirve archivos del directorio ./public
de forma predeterminada. Los archivos estáticos de JavaScript y CSS también se pueden generar con el pipeline de recursos de Rails.
Estas aplicaciones de ejemplo contienen una vista de diseño que incluye todas las hojas de estilo de la aplicación.
La propia hoja de estilo es un archivo .css
que se encuentra en ./public/application.css
.
De forma predeterminada, las aplicaciones Rails no generan ni sirven recursos estáticos cuando se ejecutan en producción.
El tiempo de ejecución de Ruby ejecuta rake assets:precompile
durante la implementación para generar recursos estáticos y define la variable de entorno RAILS_SERVE_STATIC_FILES
para habilitar el servicio de archivos estáticos en producción.
.NET
En el siguiente ejemplo se muestra cómo servir archivos estáticos con tu aplicación. Puedes usar la aplicación de ejemplo de esta guía con cualquier versión compatible de .NET. Para ello, especifica la versión del tiempo de ejecución y el sistema operativo en el archivo app.yaml
.
Para habilitar el servicio de archivos estáticos, añade lo siguiente:
Servir contenido desde una red de distribución de contenido de terceros
Puedes usar cualquier CDN externa de terceros para servir tus archivos estáticos y almacenar en caché las solicitudes dinámicas, pero es posible que tu aplicación experimente un aumento de la latencia y del coste.
Para mejorar el rendimiento, debes usar una CDN de terceros que admita CDN Interconnect.