Déployer plusieurs environnements à partir d'un codebase

Il est courant d'avoir plusieurs environnements déployés à partir du même codebase, chacun avec une configuration légèrement différente. Par exemple, vous pouvez attribuer moins de processeur et de RAM à votre environnement de préproduction, ou vous assurer que votre environnement de production conserve au moins une instance active et prête à traiter les requêtes. Vous pouvez également spécifier différentes variables d'environnement et différents secrets en fonction de l'environnement et des ressources que vous souhaitez utiliser.

Ce guide explique comment déployer un environnement de production et un environnement de préproduction, chacun dans un projet Firebase distinct. En suivant les mêmes principes, vous pouvez effectuer un déploiement dans d'autres types d'environnements. Pour en savoir plus sur les environnements, consultez la présentation des environnements et les bonnes pratiques générales pour configurer des projets Firebase.

Prérequis

  • Le code de votre application est déjà stocké dans GitHub.
  • Vous avez déjà créé un projet distinct pour chacun de vos environnements, par exemple my-production-firebase-project et my-staging-firebase-project. Veillez à taguer votre projet Firebase de production avec le "production" type d'environnement.
  • Dans chaque projet, vous avez créé un App Hosting backend, avec la branche active définie sur la branche GitHub que vous souhaitez déployer (par exemple, main). Pour en savoir plus, consultez Premiers pas avec App Hosting.

Étape 0 : Créer une configuration par défaut dans apphosting.yaml

App Hosting est compatible avec un fichier de configuration appelé apphosting.yaml pour gérer les paramètres d'exécution (processeur, simultanéité, limites de mémoire, etc.) et les variables d'environnement de votre application. Il est également compatible avec les références aux secrets gérés avec Cloud Secret Manager, ce qui permet de les archiver en toute sécurité dans le contrôle des sources. Pour en savoir plus, consultez Configurer un backend.

Pour commencer, créez un fichier apphosting.yaml dans le répertoire racine de votre application. Il s'agit du fichier de configuration de secours utilisé lorsqu'aucun fichier de configuration spécifique à l'environnement n'est trouvé. Les valeurs stockées dans apphosting.yaml doivent être des valeurs par défaut qui peuvent être utilisées en toute sécurité pour tous les environnements.

Les sections suivantes expliquent comment remplacer les valeurs par défaut dans apphosting.yaml pour des environnements spécifiques. Cet exemple de flux crée un environnement de préproduction.

Étape 1 : Définir le nom de l'environnement

Chaque App Hosting backend comporte un paramètre Nom de l'environnement. Ce champ permet de mapper votre backend à un fichier de configuration spécifique à l'environnement et peut être modifié à tout moment. Vous ne pouvez définir qu'un seul nom d'environnement par backend.

Pour définir le nom de l'environnement de votre backend :

  1. Dans la console Firebase, sélectionnez votre projet de préproduction (dans cet exemple, my-staging-firebase-project).
  2. Sélectionnez App Hosting dans le menu de navigation de gauche.
  3. Cliquez sur Afficher le tableau de bord sur le backend de votre choix.
  4. Dans l'onglet Paramètres, sélectionnez Environnement.
  5. Sous Nom de l'environnement,saisissez le nom de votre environnement. Vous pouvez nommer l'environnement comme vous le souhaitez. Dans cet exemple, il s'agit de préproduction.
  6. Cliquez sur Enregistrer.

Lorsqu'un App Hosting déploiement est déclenché pour votre backend (soit sur git push, soit manuellement via la console), App Hosting recherche un apphosting.ENVIRONMENT_NAME.yaml fichier avant de revenir à apphosting.yaml.

Étape 2 : Créer votre fichier apphosting.yaml spécifique à l'environnement

Pour votre configuration spécifique à l'environnement, créez un fichier nommé apphosting.ENVIRONMENT_NAME.yaml afin de spécifier des remplacements spécifiques à l'environnement. Ce fichier a le même format que le fichier apphosting.yaml par défaut et doit se trouver dans le répertoire racine de votre application, à côté de apphosting.yaml.

Au moment de la compilation, App Hosting fusionne ces deux fichiers, en donnant la priorité aux valeurs du fichier YAML spécifique à l'environnement par rapport au fichier apphosting.yaml de base.

Dans cet exemple, vous allez créer un fichier nommé apphosting.staging.yaml dans le répertoire racine de l'application :


runConfig:
  cpu: 1
  memoryMiB: 512
  concurrency: 5

env:
-   variable: API_URL
    value: api.staging.service.com
    availability:
      -   BUILD

-   variable: DATABASE_URL
    secret: secretStagingDatabaseURL

Supposons que vous ayez déjà un fichier apphosting.yaml qui ressemble à ceci :

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

Le résultat final fusionné, que vous pouvez inspecter dans vos journaux Cloud Build, se présente comme suit :

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

Notez que certaines valeurs runConfig, telles que le processeur, ont été remplacées, ainsi que toutes les variables d'environnement qui se chevauchent.

Étape 3 : Déployer votre codebase

Une fois que vous avez terminé de modifier votre fichier apphosting.ENVIRONMENT_NAME.yaml spécifique à l'environnement, envoyez-le vers GitHub :

$ git add apphosting.<ENVIRONMENT_NAME>.yaml
$ git commit -m "Added environment specific yaml file"
$ git push

Tous les backends tagués avec ce nom d'environnement utiliseront les valeurs de remplacement spécifiques que vous avez spécifiées dans le fichier YAML correspondant et reviendront à apphosting.yaml lorsqu'aucune valeur n'est trouvée. Pour les backends sans nom d'environnement associé, vous pouvez continuer à utiliser apphosting.yaml.

Étapes suivantes