App Hosting se diseñó para que sea fácil de usar y requiera poco mantenimiento, con parámetros de configuración predeterminados optimizados para la mayoría de los casos de uso. Al mismo tiempo, App Hosting te proporciona herramientas para administrar y configurar backends según tus necesidades específicas. En esta guía, se describen esas herramientas y procesos.
Cómo crear y editar apphosting.yaml
Para la configuración avanzada, como las variables de entorno o la configuración del tiempo de ejecución, como los límites de simultaneidad, CPU y 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 registrarlo en el control de código fuente.
Para crear apphosting.yaml
, ejecuta el siguiente comando:
firebase init apphosting
Esto crea un archivo apphosting.yaml
inicial básico con un ejemplo de configuración (comentado). Después de la edición, un archivo apphosting.yaml
típico podría verse de la siguiente manera, con la configuración del servicio Cloud Run del backend, algunas variables de entorno y algunas referencias a secretos administrados por Cloud Secret Manager:
# 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.firebasestorage.app
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 sobre estos parámetros de configuración de ejemplo.
Configura los parámetros del servicio Cloud Run
Con la configuración de apphosting.yaml
, puedes configurar cómo se aprovisiona tu servicio de Cloud Run. Los parámetros de configuración disponibles para el servicio Cloud Run se proporcionan en el objeto runConfig
:
cpu
: Es la cantidad de CPU que se usan para cada instancia de procesamiento (el valor predeterminado es 0).memoryMiB
: Cantidad de memoria asignada a cada instancia de procesamiento en MiB (el valor predeterminado es 512)maxInstances
: Es la cantidad máxima de contenedores que se pueden ejecutar a la vez (el valor predeterminado es 100 y se administra por cuota).minInstances
: Es la cantidad de contenedores que siempre deben estar activos (el valor predeterminado es 0).concurrency
: Es la cantidad máxima de solicitudes que puede recibir cada instancia de procesamiento (el valor predeterminado es 80).
Ten en cuenta la importante relación 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 requiere al menos 6 CPU
- Más de 24 GiB requiere al menos 8 CPU
Del mismo modo, el valor de cpu
afecta la configuración de simultaneidad. Si estableces un valor inferior a 1 CPU, debes establecer la simultaneidad en 1, y la CPU solo se asignará durante el procesamiento de solicitudes.
Configura el entorno
A veces, necesitarás una configuración adicional para tu proceso de compilación, como claves de API de terceros o una configuración ajustable. App Hosting ofrece configuración del entorno en apphosting.yaml
para almacenar y recuperar este tipo de datos para tu proyecto.
env:
- variable: STORAGE_BUCKET
value: mybucket.firebasestorage.app
En el caso de las apps de Next.js, los archivos .env que contienen variables de entorno también funcionarán con App Hosting. Te recomendamos que uses apphosting.yaml
para un 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 esté disponible solo en el entorno de compilación o solo en el entorno de ejecución. De forma predeterminada, está disponible para ambos.
env:
- variable: STORAGE_BUCKET
value: mybucket.firebasestorage.app
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 .env para que una variable sea accesible en el navegador.
env:
- variable: NEXT_PUBLIC_STORAGE_BUCKET
value: mybucket.firebasestorage.app
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
Cómo anular las secuencias de comandos de compilación y ejecución
App Hosting infiere el comando de compilación y de inicio de tu app según el framework detectado. Si deseas usar un comando de compilación o inicio personalizado, puedes anular los valores predeterminados de App Hosting en apphosting.yaml
.
scripts:
buildCommand: next build --no-lint
runCommand: node dist/index.js
La anulación del comando de compilación tiene prioridad sobre cualquier otro comando de compilación, inhabilita los adaptadores de framework de tu app y deshabilita cualquier optimización específica del framework que proporcione App Hosting. Es mejor usarlo cuando los adaptadores no admiten bien las funciones de tu app. Si deseas cambiar el comando de compilación, pero seguir usando los adaptadores que proporcionamos, configura tu secuencia de comandos de compilación en package.json
, como se describe en Adaptadores del framework de App Hosting.
Usa la anulación del comando de ejecución cuando haya un comando específico que quieras usar para iniciar tu app que sea diferente del comando inferido por App Hosting.
Cómo configurar los resultados de la compilación
De forma predeterminada, App Hosting optimiza las implementaciones de tu app borrando los archivos de salida sin usar, según lo indica el framework. Si deseas optimizar aún más el tamaño de implementación de tu app o ignorar las optimizaciones predeterminadas, puedes anular esta opción en apphosting.yaml
.
outputFiles:
serverApp:
include: [dist, server.js]
El parámetro include
admite una lista de directorios y archivos relativos al directorio raíz de la app que son necesarios para implementarla. Si quieres asegurarte de que se conserven todos los archivos, establece include en [.]
y se implementarán todos los archivos.
Almacena parámetros secretos y accede a ellos
La información sensible, como las claves de API, debe almacenarse como secrets. Puedes hacer referencia a secretos en apphosting.yaml
para evitar registrar información sensible en el control de origen.
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 verifican la existencia en Cloud Secret Manager y cargan los valores durante el lanzamiento.
- variable: API_KEY
secret: myApiKeySecret
Los secretos en Cloud Secret Manager pueden tener varias versiones. De forma predeterminada, el valor de un parámetro secreto disponible para tu backend activo se fija en la versión disponible más reciente del secreto en el momento en que se compiló el backend. Si tienes requisitos para el control de versiones y la administración del ciclo de vida de los parámetros, puedes fijar versiones específicas con Cloud Secret Manager. Por ejemplo, para fijar la versión 5, haz lo siguiente:
- variable: PINNED_API_KEY
secret: myApiKeySecret@5
Puedes crear secretos con el comando de la CLI firebase apphosting:secrets:set
, y se te pedirá que agregues los permisos necesarios. Este flujo te permite agregar automáticamente la referencia del secreto a apphosting.yaml
.
Para usar el conjunto completo de funciones de Cloud Secret Manager, puedes usar la consola de Cloud Secret Manager. Si lo haces, deberás otorgar permisos a tu backend de App Hosting con el comando de la CLI firebase
apphosting:secrets:grantaccess
.
Configura el acceso a la VPC
Tu backend de App Hosting puede conectarse a una red de nube privada virtual (VPC). Para obtener más información y un ejemplo, consulta Conecta Firebase App Hosting a una red de VPC.
Usa la asignación vpcAccess
en tu archivo apphosting.yaml
para configurar el acceso.
Usa un nombre de red completamente calificado o un ID. El uso de IDs permite la portabilidad entre entornos de etapa de pruebas y producción con diferentes conectores o redes.
runConfig:
vpcAccess:
egress: PRIVATE_RANGES_ONLY # Default value
networkInterfaces:
# Specify at least one of network and/or subnetwork
- network: my-network-id
subnetwork: my-subnetwork-id
Administra backends
En la CLI de Firebase y la consola de Firebase, se proporcionan comandos para la administración básica de los backends de App Hosting. En esta sección, se describen algunas de las tareas de administración más comunes, como la creación y el borrado 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.
Firebase console: En el menú Compilación, selecciona App Hosting 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 del proyecto local y proporciona tu projectID como argumento:
firebase apphosting:backends:create --project PROJECT_ID
Tanto para la consola como para la CLI, sigue las indicaciones para elegir una región, configurar una conexión de GitHub y establecer estos parámetros de configuración de implementación básicos:
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 en vivo
Esta es la rama de tu repositorio de GitHub que se implementa en tu URL activa. A menudo, es la rama en la que se fusionan las ramas de desarrollo o de funciones.
Aceptar o rechazar los lanzamientos automáticos
Los lanzamientos automáticos están habilitados de forma predeterminada. Cuando se complete la creación del backend, puedes elegir que tu app se implemente en App Hosting de inmediato.
Asigna un nombre a tu backend.
Borrar un backend
Para quitar por completo un backend, primero usa la CLI de Firebase o la consola de Firebase para borrarlo y, luego, quita manualmente los recursos relacionados. Ten especial cuidado de no borrar ningún recurso que puedan usar otros backends o aspectos de tu proyecto de Firebase.
Firebase console: En el menú Configuración, selecciona Borrar backend.
CLI: (versión 13.15.4 o posterior)
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 de Cloud Run asociado:
firebase apphosting:backends:delete BACKEND_ID --project PROJECT_ID
(Opcional) En la pestaña de la consola de Google Cloud para Artifact Registry, borra la imagen de tu backend en "firebaseapphosting-images".
En Cloud Secret Manager, borra los secretos que tengan "apphosting" en el nombre y asegúrate de que otros backends o aspectos de tu proyecto de Firebase no usen estos secretos.