App Hosting se diseñó para facilitar su uso y reducir el mantenimiento, con parámetros de configuración predeterminados optimizados para la mayoría de los casos de uso. Al mismo tiempo, App Hosting proporciona herramientas para que administres y configures backends para tus necesidades específicas. En esta guía, se describen esas herramientas y procesos.
Configurar un backend
Para la configuración avanzada, como las variables de entorno o la configuración del entorno de ejecución,
como la simultaneidad, la CPU y los límites de memoria, deberás crear y editar el
archivo apphosting.yaml
en el directorio raíz de tu app. Este archivo también
admite referencias a secretos administrados
con Cloud Secret Manager, lo que hace que sea seguro realizar el registro en el control de código fuente.
Para crear apphosting.yaml
, ejecuta el siguiente comando:
firebase init apphosting
Esto crea un archivo apphosting.yaml
de partida básico con una configuración de ejemplo (con comentarios). Después de editarlo, un archivo apphosting.yaml
típico podría verse así, con la configuración del servicio Cloud Run del backend, algunas variables de entorno y algunas referencias a secretos administrados por Secret Manager de Cloud:
# Settings for Cloud Run
runConfig:
minInstances: 2
maxInstances: 100
concurrency: 100
cpu: 2
memoryMiB: 1024
# Environment variables and secrets
env:
- variable: STORAGE_BUCKET
value: mybucket.appspot.com
availability:
- BUILD
- RUNTIME
- variable: API_KEY
secret: myApiKeySecret
# Same as API_KEY above but with a pinned version.
- variable: PINNED_API_KEY
secret: myApiKeySecret@5
# Same as API_KEY above but with the long form secret reference as defined by Cloud Secret Manager.
- variable: VERBOSE_API_KEY
secret: projects/test-project/secrets/secretID
# Same as API_KEY above but with the long form secret reference with pinned version.
- variable: PINNED_VERBOSE_API_KEY
secret: projects/test-project/secrets/secretID/versions/5
En el resto de esta guía, se proporciona más información y contexto para estos parámetros de configuración de ejemplo.
Configura la configuración del servicio Cloud Run
Con la configuración de apphosting.yaml
, puedes configurar cómo se aprovisiona tu servicio Cloud Run. La configuración disponible para el servicio Cloud Run se proporciona en el objeto runConfig
:
cpu
: Es la cantidad de CPUs que se usan para cada instancia de publicación (predeterminada: 0).memoryMiB
: Es la cantidad de memoria asignada para cada instancia de publicación en MiB (512 de forma predeterminada).maxInstances
: Cantidad máxima de contenedores que se ejecutarán a la vez (valor predeterminado de 100 y administrado por cuota)minInstances
: Es la cantidad de contenedores que se mantendrán activos siempre (el valor predeterminado es 0).concurrency
: La cantidad máxima de solicitudes que puede recibir cada instancia de entrega (el valor predeterminado es 80).
Ten en cuenta la relación importante entre cpu
y memoryMiB
. La memoria se puede establecer en cualquier valor entero entre 128 y 32768, pero aumentar el límite de memoria puede requerir aumentar los límites de la CPU:
- Más de 4 GiB requiere al menos 2 CPU
- Más de 8 GiB requiere al menos 4 CPUs
- Más de 16 GiB requieren al menos 6 CPUs
- Más de 24 GiB requieren al menos 8 CPUs
De manera similar, el valor de cpu
afecta la configuración de simultaneidad. Si configuras un valor
menor que 1 CPU, debes establecer la simultaneidad en 1, y la CPU solo se asignará
durante el procesamiento de la solicitud.
Configura el entorno de compilación
A veces, necesitarás una configuración adicional para el proceso de compilación, como claves de API de terceros o una configuración ajustable. App Hosting ofrece la configuración del
entorno en apphosting.yaml
para almacenar y recuperar este
tipo de datos para tu proyecto.
env:
- variable: STORAGE_BUCKET
value: mybucket.appspot.com
En el caso de las apps de Next.js, los archivos dotenv que contienen variables de entorno también funcionarán con App Hosting. Te recomendamos usar apphosting.yaml
para el control detallado de las variables de entorno con cualquier framework.
En apphosting.yaml
, puedes especificar qué procesos tienen acceso a tu variable de entorno con la propiedad availability
. Puedes restringir una variable de entorno para que solo esté disponible para el entorno de compilación o solo para el entorno de ejecución. De forma predeterminada, está disponible para ambos.
env:
- variable: STORAGE_BUCKET
value: mybucket.appspot.com
availability:
- BUILD
- RUNTIME
En el caso de las apps de Next.js, también puedes usar el prefijo NEXT_PUBLIC_
de la misma manera que lo harías en tu archivo dotenv para que se pueda acceder a una variable en el navegador.
env:
- variable: NEXT_PUBLIC_STORAGE_BUCKET
value: mybucket.appspot.com
availability:
- BUILD
- RUNTIME
Las claves de variables válidas se componen de caracteres de la A a la Z o guiones bajos. Algunas claves de variables de entorno están reservadas para uso interno. No uses ninguna de estas claves en tus archivos de configuración:
- Cualquier variable que comience con
X_FIREBASE_
PORT
K_SERVICE
K_REVISION
K_CONFIGURATION
Almacena parámetros de secretos y accede a ellos
La información sensible, como las claves de API, debe almacenarse como secretos. Puedes hacer referencia a secretos en apphosting.yaml
para evitar verificar información sensible en el control de código fuente.
Los parámetros de tipo secret
representan parámetros de cadena que tienen un valor
almacenado en Cloud Secret Manager.
En lugar de derivar el valor directamente, los parámetros secretos comprueban la existencia en Cloud Secret Manager y cargan los valores durante el lanzamiento.
- variable: API_KEY
secret: myApiKeySecret
Los secretos de Cloud Secret Manager pueden tener varias versiones. De forma predeterminada, el valor de un parámetro secreto disponible para tu backend activo se fija a la versión más reciente disponible del secreto en el momento en que se compiló el backend. Si tienes requisitos de control de versiones y administración del ciclo de vida de los parámetros, puedes fijar versiones específicas con Secret Manager de Cloud. Por ejemplo, para fijar la versión 5, haz lo siguiente:
- variable: PINNED_API_KEY
secret: myApiKeySecret@5
Puedes crear secretos con el comando firebase apphosting:secrets:set
de la CLI, y se te pedirá que agregues los permisos necesarios. Este flujo te brinda la
opción de agregar automáticamente la referencia secreta a apphosting.yaml
.
Para usar el paquete completo de funciones de Secret Manager de Cloud, puedes usar la consola de Secret Manager de Cloud. Si lo haces, deberás otorgar permisos a tu backend de App Hosting con el comando firebase
apphosting:secrets:grantaccess
de la CLI.
Sincroniza el estado de Firebase Auth
Las apps que usan Firebase Auth deberían considerar usar el SDK web de Firebase para ayudar a mantener
el estado de autenticación sincronizado entre el cliente y el servidor. Esto se puede facilitar implementando FirebaseServerApp
con un service worker. El flujo de tareas básico es el siguiente:
- Implementa un trabajador de servicio que agregue los encabezados correctos para tu app en las solicitudes al servidor.
- Obtén los encabezados de la solicitud en el servidor y conviértelos en un usuario de autenticación con
FirebaseServerApp
.
Administra backends
Los comandos para la administración básica de los backends de App Hosting se proporcionan en la CLI de Firebase. Algunas operaciones también están disponibles en la consola de Firebase. En esta sección, se describirán algunas de las tareas de administración más comunes, incluida la creación y eliminación de backends.
Crear un backend
Un backend de App Hosting es la colección de recursos administrados que App Hosting crea para compilar y ejecutar tu app web. Puedes crear backends de App Hosting y mostrarlos en una lista con la consola de Firebase o la CLI de Firebase.
Firebase console: En el menú Compilación, selecciona Hosting de apps y, luego, Comenzar.
CLI: (Versión 13.15.4 o posterior) Para crear un backend, ejecuta el siguiente comando desde la raíz del directorio de tu proyecto local y proporciona tu projectID y región preferida como argumentos:
firebase apphosting:backends:create --project PROJECT_ID --location us-central1
Tanto en la consola como en la CLI, sigue las instrucciones para asignarle un nombre a tu backend, configurar una conexión con GitHub y establecer esta configuración de implementación básica:
Establece el directorio raíz de tu app (el valor predeterminado es
/
).Por lo general, es donde se encuentra el archivo
package.json
.
Establece la rama publicada
Esta 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 atributos o de desarrollo.
Acepta o rechaza los lanzamientos automáticos
Los lanzamientos automáticos están habilitados de forma predeterminada. Cuando finalices la creación del backend, puedes elegir que tu app se implemente en App Hosting de inmediato.
Borrar un backend
Para quitar un backend por completo, primero usa la CLI de Firebase y, luego, quita manualmente los recursos relacionados, teniendo especial cuidado de no borrar ningún recurso que puedan usar otros backends o otros aspectos de tu proyecto de Firebase.
Ejecuta el siguiente comando para borrar el backend de App Hosting. Esta acción inhabilita todos los dominios de tu backend y borra el servicio Cloud Run asociado:
firebase apphosting:backends:delete BACKEND_ID --project PROJECT_ID --location us-central1
(Opcional) En la pestaña de la consola de Google Cloud de Artifact Registry, borra la imagen de tu backend en “firebaseapphosting-images”.
En Cloud Secret Manager, borra los secretos que tengan “apphosting” en su nombre. Ten especial cuidado de asegurarte de que otros backends no los usen otros backends ni otros aspectos de tu proyecto de Firebase.