Przed wdrożeniem aplikacji App Hosting możesz przeprowadzić testy lokalne za pomocą emulatora App Hosting, który jest częścią pakietu emulatorów lokalnych Firebase.
Zanim użyjesz emulatora App Hosting, zapoznaj się z ogólnym przepływem pracy w Local Emulator Suite, zainstaluj i skonfiguruj Local Emulator Suite oraz zapoznaj się z poleceniami wiersza poleceń.
W tym temacie zakładamy, że znasz już App Hosting. W razie potrzeby zapoznaj się z wprowadzeniem do App Hosting i innymi materiałami, aby zrozumieć, jak działa App Hosting.
Co mogę zrobić za pomocą emulatora App Hosting?
Emulator App Hosting umożliwia testowanie i doskonalenie aplikacji internetowych na komputerze lokalnym. Może to usprawnić proces tworzenia aplikacji i poprawić jakość aplikacji internetowych tworzonych za pomocą Firebase i wdrażanych w usłudze App Hosting.
Emulator App Hosting:
- Umożliwia uruchamianie aplikacji internetowej lokalnie przy użyciu zmiennych środowiskowych zdefiniowanych w plikach konfiguracyjnych
apphosting.yaml
. - Może eksportować sekrety zapisane w różnych środowiskach App Hosting, co umożliwia symulowanie aplikacji w różnych środowiskach.
- Można go używać razem z innymi emulatorami Firebase. Jeśli używasz Firehose, Auth lub innego emulatora, Local Emulator Suite powoduje, że te emulatory są uruchamiane przed emulatorem App Hosting.
Konfigurowanie emulatora
Na początek zainstaluj i inicjuj Local Emulator Suite zgodnie z instrukcjami podanymi w artykule Instalowanie, konfigurowanie i integrowanie lokalnego pakietu emulatorów. Oprócz innych emulatorów Firebase, które chcesz skonfigurować, wybierz App Hosting
Emulator
. CLI wyświetli prompt z zapytaniem o wartości emulatora App Hosting, w tym:
- Katalog główny aplikacji w relacji do projektu. Jest to ważne, jeśli używasz monorepo z App Hosting.
- Czy chcesz wyeksportować sekrety dla określonych środowisk.
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 (.)
? What configs would you like to export? (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ Secrets
? Which environment would you like to export secrets from Secret Manager for?:
◯ base (apphosting.yaml)
❯◯ staging (apphosting.yaml + apphosting.staging.yaml)
◯ preview (apphosting.yaml + apphosting.preview.yaml)
i Wrote Secrets as environment variables to apphosting.local.yaml.
i apphosting.local.yaml has been automatically added to your .gitignore.
Wartości podane w tym procesie konfiguracji są używane do aktualizowania konfiguracji emulatora App Hosting w firebase.json
. Możesz też skonfigurować emulator hostingu aplikacji, aktualizując bezpośrednio firebase.json
. Schemat emulatora hostowania aplikacji:
{
...
"emulators": {
"apphosting": {
"startCommandOverride": <command> [optional]
"rootDirectory": <path> [optional]
}
}
}
startCommandOverride
jest generowany automatycznie i ustawiany podczas inicjowania emulatora. Jeśli nie podasz go, emulator wykryje i uruchomi polecenie dewelopera menedżera pakietów.rootDirectory
służy do obsługi konfiguracji monorepo. Jeśli Twoja aplikacja internetowa znajduje się w podkatalogu, musisz podać ścieżkę do tego katalogu w stosunku do katalogu głównego (lokalizacjafirebase.json
).
Zarządzanie emulacją
Inicjowanie emulatora powoduje utworzenie pliku apphosting.local.yaml
w katalogu głównym aplikacji. Ten plik konfiguracji ma ten sam schemat co plik apphosting.yaml
używany w produkcji, ale jest przeznaczony wyłącznie do lokalnego tworzenia aplikacji. Domyślnie emulator odczytuje konfigurację z pliku apphosting.yaml
, ale jeśli plik apphosting.local.yaml
jest obecny, to konfiguracje w tym pliku mają wyższy priorytet.
Eksportowanie obiektów tajnych w celu symulowania różnych środowisk lokalnie
Jeśli pracujesz w wielu środowiskach i chcesz lokalnie symulować różne środowiska aplikacji, możesz potrzebować odpowiednich sekretów. Tajne dane dla konkretnego środowiska możesz wyeksportować za pomocą polecenia wiersza poleceńapphosting:config:export
(ewentualnie, jak pokazano w konfiguracji emulatora, możesz opcjonalnie zaimportować tajne dane podczas inicjalizacji emulatora).
To polecenie wymaga wybrania jednego z dostępnych środowisk App Hosting projektu. Konfiguracja App Hosting dla środowiska (np. „apphosting.staging.yaml”) i podstawowa konfiguracja App Hosting („apphosting.yaml”) są scalane, przy czym pierwszeństwo ma konfiguracja dla środowiska. Jeśli w obu konfiguracjach występują obiekty tajne o tym samym nazwie, używany jest obiekt tajny z konfiguracji dla danego środowiska.
Aby na przykład wyeksportować sekrety do emulatora ze środowiska pośredniego:
firebase apphosting:config:export --project <your firebase project Id>
? What configs would you like to export? (Press
<space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed)
❯◯ Secrets
? Which environment would you like to export secrets from Secret Manager for?:
◯ base (apphosting.yaml)
❯◯ staging (apphosting.yaml + apphosting.staging.yaml)
◯ preview (apphosting.yaml + apphosting.preview.yaml)
i Wrote Secrets as environment variables to apphosting.local.yaml.
i apphosting.local.yaml has been automatically added to your .gitignore.
Plik apphosting.local.yaml
zostanie zaktualizowany (lub utworzony, jeśli go nie ma) z wyeksportowanymi obiektami tajnymi jako zmiennymi środowiskowymi. Ponieważ plik zawiera teraz informacje poufne w postaci zwykłego tekstu, zostanie automatycznie dodany do pliku .gitignore
, aby zapobiec przypadkowemu zacommitowaniu go do repozytorium kodu źródłowego.
Uruchamianie emulatora
firebase emulators:start
Spowoduje to uruchomienie wszystkich emulatorów zdefiniowanych w pliku firebase.json
, w tym emulatora App Hosting.