Es común tener varios entornos implementados desde la misma base de código, cada uno con una configuración ligeramente diferente. Por ejemplo, es posible que desees asignar menos CPU y RAM a tu entorno de etapa de pruebas o asegurarte de que tu entorno de producción mantenga al menos 1 instancia activa y lista para atender solicitudes. También es posible que desees especificar diferentes variables de entorno y secretos según el entorno y los recursos que deseas usar.
En esta guía, se describe cómo implementar un entorno de producción y de etapa de pruebas, cada uno en un proyecto de Firebase independiente. Siguiendo los mismos principios, puedes realizar implementaciones en otros tipos de entornos. Para obtener más información sobre los entornos, consulta la Descripción general de los entornos y las Prácticas recomendadas generales para configurar proyectos de Firebase.
Requisitos previos
- El código de tu aplicación ya está almacenado en GitHub.
- Ya creaste un proyecto distinto para cada uno de tus entornos, por ejemplo,
my-production-firebase-projectymy-staging-firebase-project. Asegúrate de etiquetar tu proyecto de Firebase de producción con el "production" tipo de entorno. - En cada proyecto, creaste un backend de App Hosting, con la rama activa establecida en la rama de GitHub que deseas implementar (como
main). Consulta Comienza a usar App Hosting para obtener más información.
Paso 0: Crea una configuración predeterminada en apphosting.yaml
App Hosting admite un archivo de configuración llamado apphosting.yaml para administrar
la configuración del tiempo de ejecución (CPU, simultaneidad, límites de memoria, etcétera) y las variables de entorno
de tu app. También admite referencias a secretos administrados con
Cloud Secret Manager, lo que permite realizar el registro en el control de código fuente de forma segura. Para obtener más
información, consulta Configura un
backend.
Para comenzar, crea un archivo apphosting.yaml en el directorio raíz de tu app.
Este es el archivo de configuración de resguardo que se usa cuando no se encuentra un archivo de configuración específico del entorno. Los valores almacenados en apphosting.yaml deben ser valores predeterminados que sean seguros para usar en todos los entornos.
En las siguientes secciones, se explica cómo anular los valores predeterminados en apphosting.yaml para entornos específicos. Este flujo de ejemplo crea un entorno de etapa de pruebas.
Paso 1: Establece el nombre del entorno
Cada backend App Hosting tiene un parámetro de configuración de Nombre del entorno. Este campo se usa para asignar tu backend a un archivo de configuración específico del entorno y se puede cambiar en cualquier momento. Solo puedes establecer un nombre de entorno por backend.
Para establecer el nombre del entorno de tu backend, haz lo siguiente:
- En la consola Firebase, selecciona tu proyecto de etapa de pruebas (en este ejemplo,
my-staging-firebase-project). - Navega a Hosting y sin servidores > App Hosting.
- Haz clic en Ver panel en el backend elegido.
- En la pestaña Configuración, selecciona Entorno.
- En Nombre del entorno, ingresa el nombre de tu entorno. Puedes nombrar el entorno como desees. En este ejemplo, es staging.
- Haz clic en Guardar.
Cuando se activa un lanzamiento de App Hosting para tu backend (ya sea en git
push o de forma manual a través de la Firebase console), App Hosting buscará
un archivo apphosting.ENVIRONMENT_NAME.yaml antes
de volver a apphosting.yaml.
Paso 2: Crea tu archivo apphosting.yaml específico del entorno
Para la configuración específica del entorno, crea un archivo con el nombre
apphosting.ENVIRONMENT_NAME.yaml para
especificar anulaciones específicas del entorno. Este archivo tiene el mismo formato que el
predeterminado apphosting.yaml y debe ubicarse en
el directorio raíz de tu app junto con apphosting.yaml.
En el tiempo de compilación, App Hosting fusiona estos dos archivos, y se da prioridad a los valores del archivo YAML específico del entorno sobre el archivo apphosting.yaml base.
En este ejemplo, crearás un archivo llamado apphosting.staging.yaml en el directorio raíz de la app:
runConfig:
cpu: 1
memoryMiB: 512
concurrency: 5
env:
- variable: API_URL
value: api.staging.service.com
availability:
- BUILD
- variable: DATABASE_URL
secret: secretStagingDatabaseURL
Supongamos que ya tenías un archivo apphosting.yaml que se veía de la siguiente manera:
runConfig:
cpu: 3
memoryMiB: 1024
maxInstances: 4
minInstances: 0
concurrency: 100
env:
- variable: API_URL
value: api.service.com
availability:
- BUILD
- RUNTIME
- variable: STORAGE_BUCKET
value: mybucket.firebasestorage.app
availability:
- RUNTIME
- variable: API_KEY
secret: secretIDforAPI
El resultado final fusionado, que puedes inspeccionar en tus registros de Cloud Build, se vería de la siguiente manera:
runConfig:
cpu: 1
memoryMiB: 512
maxInstances: 4
minInstances: 0
concurrency: 5
env:
- variable: API_URL
value: api.staging.service.com
availability:
- BUILD
- variable: STORAGE_BUCKET
value: mybucket.firebasestorage.app
availability:
- RUNTIME
- variable: API_KEY
secret: secretIDforAPI
- variable: DATABASE_URL
secret: secretStagingDatabaseURL
Ten en cuenta que se anularon ciertos valores de runConfig, como la CPU, así como las variables de entorno superpuestas.
Paso 3: Implementa tu base de código
Una vez que termines de editar tu archivo apphosting.ENVIRONMENT_NAME.yaml específico del entorno, envía el archivo a GitHub:
$ git add apphosting.<ENVIRONMENT_NAME>.yaml
$ git commit -m "Added environment specific yaml file"
$ git push
Cualquier backend etiquetado con este nombre de entorno usará los valores de anulación específicos que especificaste en su archivo YAML correspondiente y volverá a apphosting.yaml cuando no se encuentre un valor. Para los backends sin un nombre de entorno asociado, puedes seguir usando apphosting.yaml.
Próximos pasos
- Profundiza: Realiza un codelab de Firebase que integre una app alojada con Firebase Authentication y funciones de la IA de Google: Next.js | Angular
- Conecta un dominio personalizado.
- Configura tu backend.
- Supervisa los lanzamientos, el uso del sitio y los registros.