App-Bereitstellung lokal testen

Sie können Ihre App vor der App Hosting-Bereitstellung mit dem App Hosting-Emulator testen, der Teil der Firebase Local Emulator Suite ist.

Bevor Sie den App Hosting-Emulator verwenden, sollten Sie sich mit dem allgemeinen Firebase-Local Emulator Suite-Workflow vertraut machen, die Local Emulator Suite installieren und konfigurieren und die CLI-Befehle der Local Emulator Suite durchgehen.

In diesem Thema wird davon ausgegangen, dass Sie bereits mit App Hosting vertraut sind. Sehen Sie sich bei Bedarf die App Hosting-Einführung und andere Materialien an, um die Funktionsweise von App Hosting besser zu verstehen.

Was kann ich mit dem App Hosting-Emulator tun?

Mit dem App Hosting-Emulator können Sie Ihre Webanwendungen lokal testen und optimieren. So können Sie Ihren Entwicklungsprozess optimieren und die Qualität von Web-Apps verbessern, die mit Firebase erstellt und auf App Hosting bereitgestellt werden.

Der App Hosting-Emulator:

  1. Ermöglicht die lokale Ausführung Ihrer Webanwendung mit Umgebungsvariablen und Secrets, die in apphosting.yaml-Konfigurationsdateien definiert sind.
  2. Sie können Umgebungsvariablen und Secrets für die Verwendung im Emulator mit der Datei apphosting.emulator.yaml überschreiben.
  3. Kann zusammen mit anderen Firebase-Emulatoren verwendet werden. Wenn Sie Firestore, Auth oder einen anderen Emulator verwenden, sorgt Local Emulator Suite dafür, dass diese Emulatoren vor dem App Hosting-Emulator gestartet werden.

Emulator konfigurieren

Installieren und initialisieren Sie zuerst das Local Emulator Suite, wie unter Local Emulator Suite installieren, konfigurieren und einbinden beschrieben. Wählen Sie neben allen anderen Firebase-Emulatoren, die Sie einrichten möchten, auch App Hosting Emulator aus. In der CLI werden Sie aufgefordert, einige App Hosting-Emulatorwerte einzugeben, darunter:

  • Das Stammverzeichnis Ihrer App relativ zum Projekt. Das ist wichtig, wenn Sie Monorepos mit App Hosting verwenden.
  • Ob Sie Werte für die lokale Entwicklung überschreiben möchten.
  • Ob Sie Teammitgliedern Zugriff auf Secrets für die lokale Entwicklung gewähren möchten.
firebase init emulators
=== Emulators Setup
? Which Firebase emulators do you want to set up? Press Space to select emulators, then Enter to confirm your choices. (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ App Hosting Emulator
 ◯ Firestore Emulator
 ◯ Database Emulator
 ◯ Hosting Emulator
 ◯ Pub/Sub Emulator
 ◯ Storage Emulator
 ◯ Eventarc Emulator
(Move up and down to reveal more choices)

? Specify your app's root directory relative to your project (./)

? The App Hosting emulator uses a file called apphosting.emulator.yaml to
override values in apphosting.yaml for local testing. This codebase does not
have one, would you like to create it? (Y/n)

? Which environment variables would you like to override? (Press <space> to
select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ MEMCACHE_ADDR
 ◯ API_KEY

? What new value would you like for plaintext MEMCACHE_ADDR?

? What would you like to name the secret reference for API_KEY? (test-api-key)

? What new value would you like for secret TESTKEY [input is hidden]? [input is hidden]

? Your config has secret values. Please provide a comma-separated list of users
or groups who should have access to secrets for local development:

✔  Successfully set IAM bindings on secret test-api-key.

Alle Werte, die Sie in diesem Einrichtungsablauf angeben, werden verwendet, um die App Hosting-Emulatorkonfiguration in firebase.json zu aktualisieren. Sie können den App Hosting-Emulator auch konfigurieren, indem Sie firebase.json direkt aktualisieren. Das Schema für den App Hosting-Emulator lautet:

{
  ...
  "emulators": {
    "apphosting": {
      "startCommand": <command> [optional]
      "rootDirectory": <path> [optional]
      }
    }
  }
  • startCommand wird automatisch generiert und festgelegt, wenn der Emulator initialisiert wird. Wenn nicht angegeben, erkennt der Emulator den Dev-Befehl Ihres Paketmanagers und führt ihn aus.
  • rootDirectory wird zur Unterstützung von Monorepo-Projekteinrichtungen verwendet. Wenn sich Ihre Web-App in einem Unterverzeichnis befindet, müssen Sie den Pfad dieses Verzeichnisses relativ zum Stammverzeichnis (dem Speicherort von firebase.json) angeben.

Emulation verwalten

Bei der Initialisierung des Emulators wird eine apphosting.emulator.yaml-Datei im Stammverzeichnis Ihrer App erstellt. Diese Konfigurationsdatei hat dasselbe Schema wie die Datei apphosting.yaml, die in der Produktion verwendet wird, ist aber ausschließlich für die lokale Entwicklung vorgesehen. Standardmäßig liest der Emulator die Konfiguration aus der Datei apphosting.yaml. Wenn jedoch eine Datei apphosting.emulator.yaml vorhanden ist, werden die Konfigurationen in dieser Datei priorisiert und haben Vorrang.

Die Datei apphosting.emulator.yaml ist so konzipiert, dass sie sicher committet und mit Kollegen geteilt werden kann. Damit Sie nicht versehentlich vertrauliche Daten in Quell-Repositories übertragen, muss jede Umgebungsvariable, die in apphosting.yaml ein Secret ist, auch in apphosting.emulator.yaml ein Secret sein. Wenn ein Secret zwischen Produktion und lokaler Entwicklung nicht geändert werden muss (z. B. ein Gemini API-Schlüssel), muss es nicht zu apphosting.emulator.yaml hinzugefügt werden. Gewähren Sie Ihrem Team stattdessen Zugriff auf das Secret.

Wenn Ihre Anwendung viele Secrets verwendet (z. B. API-Schlüssel für drei verschiedene Dienste mit unterschiedlichen Werten für Produktion, Staging und lokale Entwicklung), überschreiten Sie möglicherweise das kostenlose Kontingent von Cloud Secret Manager und zahlen 0,06 $pro zusätzlichem Secret pro Monat. Wenn Sie die lokale Konfiguration lieber außerhalb der Quellcodeverwaltung verwalten möchten, um diese Gebühr zu vermeiden, können Sie die alte apphosting.local.yaml-Datei verwenden. Im Gegensatz zu apphosting.emulator.yaml dürfen in dieser Datei Klartextwerte für Umgebungsvariablen angegeben werden, die in apphosting.yaml geheime Werte sind.

Nutzern oder Gruppen Zugriff auf Secrets gewähren

In apphosting.emulator.yaml gespeicherte Secrets werden beim Start des Emulators gelesen. Das bedeutet, dass Ihr Entwicklungsteam Zugriff auf das Secret benötigt. Mit dem Befehl apphosting:secrets:grantaccess können Sie einem Nutzer oder einer Gruppe per E-Mail Zugriff auf ein Secret gewähren.

firebase apphosting:secrets:grantaccess test-api-key --emails my-team@my-company.com

Verwenden Sie gegebenenfalls nur Testschlüssel in apphosting.emulator.yaml, die keinen Zugriff auf Produktionsdaten haben, keine globalen Nebeneffekte haben können (z. B. E-Mails senden, Kreditkarten belasten) und/oder niedrigere Kontingente haben. So wird sichergestellt, dass nicht überprüfter Code weniger Auswirkungen auf die reale Welt hat.

Verwenden Sie Google Groups, um den Zugriff auf Secrets zu verwalten, anstatt einzelnen Nutzern Zugriff zu gewähren. Das Onboarding neuer Mitglieder Ihres Entwicklerteams wird dadurch vereinfacht, da sie durch das Hinzufügen zur Gruppe Zugriff auf alle benötigten Secrets erhalten. Möglicherweise haben Sie bereits eine geeignete Gruppe, in der Entwickler miteinander kommunizieren. Durch die Steuerung des Zugriffs über Google Groups können Sie auch dafür sorgen, dass Entwickler, die Ihr Team verlassen, den Zugriff auf alle Secrets verlieren, wenn sie aus der E-Mail-Gruppe entfernt werden. Wenn das Secret Zugriff auf Produktionsdaten oder reale Nebeneffekte hat, kann es dennoch sinnvoll sein, den Schlüssel zu rotieren und ihm mit firebase apphosting:secrets:set einen neuen Wert zu geben.

Emulator starten

firebase emulators:start

Dadurch werden alle in Ihrer Datei firebase.json definierten Emulatoren gestartet, einschließlich des App Hosting-Emulators.