Häufig werden mehrere Umgebungen aus derselben Codebasis bereitgestellt, die sich in der Konfiguration leicht unterscheiden. Beispielsweise können Sie Ihrer Staging-Umgebung weniger CPU und RAM zuweisen oder dafür sorgen, dass in Ihrer Produktionsumgebung mindestens eine Instanz aktiv ist und Anfragen verarbeiten kann. Je nach Umgebung und den zu verwendenden Ressourcen können Sie auch unterschiedliche Umgebungsvariablen und Secrets angeben.
In dieser Anleitung wird beschrieben, wie Sie eine Produktions- und eine Staging-Umgebung in jeweils einem separaten Firebase-Projekt bereitstellen. Nach denselben Prinzipien können Sie auch in anderen Arten von Umgebungen bereitstellen. Weitere Informationen zu Umgebungen finden Sie in der Übersicht zu Umgebungen und in den allgemeinen Best Practices für die Einrichtung von Firebase-Projekten.
Vorbereitung
- Der Code Ihrer Anwendung ist bereits in GitHub gespeichert.
- Sie haben bereits ein separates Projekt für jede Ihrer Umgebungen erstellt, z. B.
my-production-firebase-projectundmy-staging-firebase-project. Taggen Sie Ihr Firebase-Produktionsprojekt mit dem "production" Umgebungstyp. - In jedem Projekt haben Sie ein App Hosting Backend erstellt, wobei der Live
Branch auf den GitHub-Branch festgelegt ist, den Sie bereitstellen möchten (z. B.
main). Weitere Informationen finden Sie unter Erste Schritte mit App Hosting.
Schritt 0: Standardkonfiguration in „apphosting.yaml“ erstellen
App Hosting unterstützt eine Konfigurationsdatei namens apphosting.yaml, mit der
Laufzeiteinstellungen (CPU, Parallelität, Arbeitsspeicherlimits usw.) und Umgebungsvariablen
für Ihre App verwaltet werden können. Sie unterstützt auch Verweise auf Secrets, die mit
Cloud Secret Manager verwaltet werden, sodass sie sicher in die Quellcodeverwaltung eingecheckt werden können. Weitere Informationen finden Sie unter Backend konfigurieren.
Erstellen Sie zuerst eine apphosting.yaml-Datei im Stammverzeichnis Ihrer App.
Dies ist die Fallback-Konfigurationsdatei, die verwendet wird, wenn keine umgebungsspezifische Konfigurationsdatei gefunden wird. Die in apphosting.yaml gespeicherten Werte sollten Standardwerte sein, die für alle Umgebungen sicher verwendet werden können.
In den nächsten Abschnitten wird erläutert, wie Sie die Standardwerte in apphosting.yaml für bestimmte Umgebungen überschreiben. In diesem Beispiel wird eine Staging-Umgebung erstellt.
Schritt 1: Umgebungsname festlegen
Jedes App Hosting Backend hat eine Einstellung für den Umgebungsnamen. Mit diesem Feld wird Ihr Backend einer umgebungsspezifischen Konfigurationsdatei zugeordnet. Es kann jederzeit geändert werden. Sie können nur einen Umgebungsnamen pro Backend festlegen.
So legen Sie den Umgebungsnamen Ihres Backends fest:
- Wählen Sie in der Firebase Console Ihr Staging-Projekt aus (in diesem Beispiel
my-staging-firebase-project). - Gehen Sie zu Hosting & Serverless > App Hosting.
- Klicken Sie für das gewünschte Backend auf Dashboard ansehen.
- Wählen Sie auf dem Tab Einstellungen die Option Umgebung aus.
- Geben Sie unter Umgebungsname den Namen Ihrer Umgebung ein. Sie können der Umgebung einen beliebigen Namen geben. In diesem Beispiel ist es staging.
- Klicken Sie auf Speichern.
Wenn für Ihr Backend ein App Hosting Roll-out ausgelöst wird (entweder durch git
push oder manuell über die Firebase Console), sucht App Hosting zuerst
nach einer apphosting.ENVIRONMENT_NAME.yaml Datei, bevor
es auf apphosting.yaml zurückgreift.
Schritt 2: Umgebungsspezifische apphosting.yaml-Datei erstellen
Erstellen Sie für Ihre umgebungsspezifische Konfiguration eine Datei mit dem Namen
apphosting.ENVIRONMENT_NAME.yaml, um
umgebungsspezifische Überschreibungen anzugeben. Diese Datei hat dasselbe Format wie die
Standarddatei apphosting.yaml und muss sich im
Stammverzeichnis Ihrer App neben apphosting.yaml befinden.
Zur Build-Zeit führt App Hosting diese beiden Dateien zusammen, wobei die Werte in der umgebungsspezifischen YAML-Datei Vorrang vor den Werten in der Basisdatei apphosting.yaml
haben.
In diesem Beispiel erstellen Sie im Stammverzeichnis der App eine Datei mit dem Namen apphosting.staging.yaml:
runConfig:
cpu: 1
memoryMiB: 512
concurrency: 5
env:
- variable: API_URL
value: api.staging.service.com
availability:
- BUILD
- variable: DATABASE_URL
secret: secretStagingDatabaseURL
Angenommen, Sie haben bereits eine apphosting.yaml-Datei, die so aussieht:
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
Die endgültige zusammengeführte Ausgabe, die Sie in Ihren Cloud Build-Logs sehen können, sieht so aus:
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
Bestimmte runConfig-Werte wie die CPU wurden überschrieben, ebenso alle sich überschneidenden Umgebungsvariablen.
Schritt 3: Codebasis bereitstellen
Wenn Sie die Bearbeitung der umgebungsspezifischen apphosting.ENVIRONMENT_NAME.yaml-Datei abgeschlossen haben, übertragen Sie die Datei per Push an GitHub:
$ git add apphosting.<ENVIRONMENT_NAME>.yaml
$ git commit -m "Added environment specific yaml file"
$ git push
Alle Backends, die mit diesem Umgebungsnamen getaggt sind, verwenden die spezifischen Überschreibungswerte, die Sie in der entsprechenden YAML-Datei angegeben haben. Wenn ein Wert nicht gefunden wird, wird auf apphosting.yaml zurückgegriffen. Für Backends ohne zugeordneten Umgebungsnamen können Sie weiterhin `apphosting.yaml` verwenden.
Nächste Schritte
- Weitere Informationen: Firebase-Codelab, in dem eine gehostete App in Firebase Authentication und Google AI-Funktionen eingebunden wird: Next.js | Angular
- Benutzerdefinierte Domain verbinden.
- Backend konfigurieren.
- Roll-outs, Websitenutzung und Logs überwachen.