Comprende el hosting de apps y cómo funciona

App Hosting controla una serie compleja de tareas en segundo plano para simplificar la implementación de tu app. En esta página, se describen las partes clave de ese flujo de tareas y se proporciona información sobre los puntos en los que podrías querer personalizar el flujo según las necesidades de tu app.

Integración de frameworks

App Hosting proporciona compatibilidad preconfigurada de compilación e implementación para apps web desarrolladas en estos frameworks:

  • Next.js 13 o versiones posteriores
  • Angular 17.2 y versiones posteriores

App Hosting identifica qué framework estás usando mediante la inspección del archivo package-lock.json o cualquier otro archivo de bloqueo en tu repositorio. Si intentas implementar una app de Node.js a la que le falta un archivo de bloqueo, App Hosting no podrá compilar ni ejecutar tu app. Para crear package-lock.json, ejecuta npm install en tu directorio raíz.

Adaptadores de framework

Los adaptadores de framework de App Hosting tienen dos roles clave:

  1. Analizan tu código fuente y cualquier archivo de configuración específico del framework (como next.config.js) y generan un paquete de salida que puede procesar el resto de la infraestructura de App Hosting.
  2. Ejecutan el comando de compilación de tu app para generar recursos estáticos y crear una versión optimizada de tu app para producción.

Los adaptadores de framework compilan tu app de Node.js con npm run build, que funciona mejor con las secuencias de comandos de compilación predeterminadas de cada framework: next build para Next.js y ng build para Angular. App Hosting intentará compilar con comandos de compilación personalizados, pero no puede garantizar el éxito de forma confiable.

La fuente de los adaptadores de Next.js y Angular está disponible en firebase-framework-tools.

Otros frameworks

Además de Next.js y Angular, App Hosting también admite cualquier framework web que pueda proporcionar un resultado de compilación que coincida con nuestra especificación de paquete de salida. Los autores de frameworks pueden aprovechar la especificación del paquete de salida para asegurarse de que su framework sea compatible con App Hosting.

Si deseas que se admitan frameworks adicionales, puedes crear un adaptador o comunicarte con los encargados del mantenimiento del framework para convertir los resultados de la compilación en el formato de App Hosting. Los adaptadores de Next.js y Angular son buenos ejemplos de referencia para cualquier persona que cree un adaptador.

Puedes encontrar los frameworks admitidos en Código abierto de Firebase.

Cómo funciona la integración del repositorio App Hosting

Developer Connect, la plataforma de conectividad de Google Cloud para herramientas de DevOps externas, controla la conexión importante entre tu repositorio de GitHub y el backend de App Hosting. Durante la creación de un backend de App Hosting, el flujo de trabajo de la IU de Developer Connect te guía por la instalación de la app de GitHub de Firebase. Los pasos clave de este proceso son los siguientes:

  1. Le otorgas a Developer Connect el rol de Administrador de Secret Manager. Esto permite que el sistema almacene credenciales de forma segura como "secretos" en Secret Manager de Cloud.
  2. Autorizas a la app de GitHub de Firebase a acceder a tu repositorio de GitHub.
  3. Developer Connect almacena un token de autorización de GitHub dedicado en el repositorio de Secret Manager de tu proyecto. No modifiques ni borres este token.

Además, App Hosting se integra a la API de GitHub Checks para proporcionar una verificación de lanzamientos. Esta verificación te permite ver el estado de tu lanzamiento en GitHub y depurar el proceso de implementación en caso de que haya errores.

Integración con Firebase y otros servicios de Google

App Hosting configura los entornos de compilación y tiempo de ejecución para que puedas inicializar el SDK de Firebase Admin con las credenciales predeterminadas de la aplicación de Google. De esta manera, tu backend puede comunicarse con otros productos de Firebase durante la compilación y la implementación.

App Hosting ubicaciones

La implementación de App Hosting crea tus recursos de backend en una ubicación específica. Esta flexibilidad en la ubicación de tu app web tiene las siguientes ventajas clave:

  • Mejora el rendimiento y reduce la latencia acercando los datos geográficamente a tus usuarios.
  • Una falla catastrófica de App Hosting en una región no afectaría las apps web implementadas en otras regiones.

Puedes elegir cualquiera de estas regiones cuando creas un backend de App Hosting desde la consola o la CLI de Firebase:

  • us-central1 (Iowa)
  • asia-east1 (Taiwán)
  • europe-west4 (Países Bajos)

La cuenta de servicio de backend de App Hosting

Durante la compilación y el tiempo de ejecución, tu backend de App Hosting se autentica con otros servicios de Google con una cuenta de servicio. Se crea una cuenta de servicio predeterminada para estos fines la primera vez que habilitas App Hosting en un proyecto de Firebase:

firebase-app-hosting-compute@PROJECT ID.iam.gserviceaccount.com

Esta cuenta de servicio se aplica a todos los backends de forma predeterminada y tiene un conjunto mínimo de permisos para permitirte compilar, ejecutar y supervisar tu app. También tiene permiso para autenticar el SDK de Admin con credenciales predeterminadas de la aplicación para realizar operaciones como cargar datos desde Cloud Firestore. Consulta Roles de App Hosting de Firebase.

Si tu app necesita interactuar con servicios adicionales de Google, ya sea en el momento de la compilación o desde un backend en ejecución, puedes personalizar la cuenta de servicio predeterminada agregando roles. Por ejemplo, si tu app requiere permisos para Vertex AI, es posible que necesites agregar roles/aiplatform.user o algún rol relacionado.

Términos y definiciones clave

  • Backend: Es la colección de recursos administrados que App Hosting crea para compilar y ejecutar tu app web.
  • Lanzamiento: Es una versión específica de tu app publicada, vinculada a una confirmación de Git.
  • Rama publicada: Es la rama de tu repositorio de GitHub que se implementa en tu URL publicada. A menudo, es la rama en la que se combinan las ramas de funciones o de desarrollo.

Problemas conocidos y limitaciones

La vista previa de App Hosting tiene algunas limitaciones conocidas:

  • En algunos casos, un backend de App Hosting puede mostrar mensajes Intermittent connection error en la URL de tu app. La corrección estará disponible en una versión posterior.
  • Los encabezados Cache-Control se modifican para limitar las cachés de CDN a 60 segundos. En el futuro, cuando App Hosting tenga la capacidad de purgar rápidamente la caché en la implementación, se eliminará este límite.
  • La optimización de imágenes se realiza en Cloud Run de forma predeterminada, y las imágenes optimizadas no se conservan. Te recomendamos que inhabilites la optimización de imágenes o que especifiques manualmente un cargador hasta que haya una solución mejor disponible.
  • Los archivos estáticos sin almacenar en caché se entregan desde Cloud Run. En una versión posterior, se almacenarán y entregarán desde el origen App Hosting para mejorar el rendimiento.
  • Es posible que los SKUs de App Hosting no se muestren en la página de uso del backend en la consola de Firebase. Estarán disponibles en una versión posterior.
  • Es posible que la consola Firebase muestre de forma intermitente un error que indica que no se encontró la compilación y que no es válida durante la creación del backend.
  • Actualmente, todos los backends del mismo proyecto comparten una organización o cuenta de GitHub. Se pueden conectar a diferentes repositorios de esa organización o cuenta. Para crear backends que estén conectados a diferentes cuentas de GitHub, colócalos en proyectos separados.
  • El middleware, las reescrituras y los redireccionamientos de Next.js se ejecutan en Cloud Run, detrás de la CDN. Como no protegerán las respuestas almacenadas en caché, asegúrate de establecer las directivas de control adecuadas para el contenido que renderizas.