Hosting aplikacji i na czym polega jego działanie

App Hosting wykonuje złożone zadania w tle, aby uprościć wdrażanie aplikacji. Na tej stronie opisujemy najważniejsze etapy tego procesu i podajemy informacje o punktach, w których warto dostosować przepływ w zależności od potrzeb aplikacji.

Obsługa platformy

App Hosting zapewnia niewymagającą konfiguracji obsługę tworzenia i wdrażania aplikacji internetowych utworzonych na tych platformach:

  • Next.js w wersji 13 lub nowszej
  • Angular 17.2 lub nowszy

App Hosting określa, z której platformy korzystasz, sprawdzając plik package-lock.json lub inny plik blokady w Twoim repozytorium. Jeśli spróbujesz wdrożyć aplikację w Node.js, w której brakuje pliku blokady, App Hosting nie będzie skompilować i uruchomić Twojej aplikacji. Możesz utworzyć package-lock.json, uruchamiając npm install w katalogu głównym.

Adaptery platformy App Hosting mają 2 kluczowe role:

  1. Analizują one kod źródłowy i wszelkie pliki konfiguracyjne związane z platformą (np. next.config.js), by poznać skonfigurowane działanie aplikacji.
  2. Uruchomiono polecenie kompilacji aplikacji, aby wygenerować zasoby statyczne i utworzyć zoptymalizowaną wersję aplikacji pod kątem środowiska produkcyjnego.

Adaptery platformy tworzą aplikację w Node.js za pomocą interfejsu npm run build, który najlepiej działa z domyślnymi skryptami kompilacji dla każdej platformy: next build w przypadku Next.js i ng build w przypadku Angular. App Hosting będzie próbować wykonywać kompilacje przy użyciu niestandardowych poleceń kompilacji, ale nie może zagwarantować sukcesu.

Jak działa integracja repozytorium App Hosting

Ważne połączenie między repozytorium GitHub a backendem App Hosting jest obsługiwane przez Developer Connect – platformę łączności Google Cloud dla zewnętrznych narzędzi DevOps. Podczas tworzenia backendu App Hosting przepływ pracy w interfejsie Developer Connect przeprowadzi Cię przez proces instalowania aplikacji Firebase na GitHubie. Kluczowe kroki tego procesu:

  1. W tym celu należy przypisać dla Developer Connect rolę administratora usługi Secret Manager. Dzięki temu system będzie mógł bezpiecznie przechowywać dane logowania jako „obiekty tajne” w usłudze Cloud Secret Manager.
  2. Autoryzujesz aplikację Firebase GitHub do dostępu do repozytorium GitHub.
  3. Developer Connect przechowuje specjalny token autoryzacji GitHub w repozytorium menedżera obiektów tajnych Twojego projektu. Nie modyfikuj ani nie usuwaj tego tokena.

Dodatkowo App Hosting integruje się z interfejsem GitHub check API, aby umożliwić kontrolę wdrożeń. Dzięki temu możesz sprawdzić stan wdrożenia na GitHubie i debugować proces wdrażania w przypadku wystąpienia błędów.

Integracja z Firebase i innymi usługami Google

App Hosting konfiguruje zarówno środowisko kompilacji, jak i środowiska wykonawczego, więc możesz zainicjować pakiet SDK Firebase Admin za pomocą domyślnych danych logowania aplikacji Google. Dzięki temu Twój backend może komunikować się z innymi usługami Firebase zarówno podczas kompilacji, jak i wdrażania.

Konto usługi backendu App Hosting

Podczas kompilacji i w czasie działania backend App Hosting uwierzytelnia się w innych usługach Google za pomocą konta usługi. Domyślne konto usługi do tych celów jest tworzone, gdy po raz pierwszy włączasz App Hosting w projekcie Firebase:

firebase-app-hosting-compute@PROJECT ID.iam.gserviceaccount.com

To konto usługi domyślnie obowiązuje we wszystkich backendach i ma minimalny zestaw uprawnień umożliwiających kompilowanie, uruchamianie i monitorowanie aplikacji. Ma również uprawnienia do uwierzytelniania pakietu Admin SDK za pomocą domyślnych danych logowania aplikacji na potrzeby wykonywania operacji takich jak wczytywanie danych z Cloud Firestore. Zobacz role w Firebase App Hosting.

Jeśli aplikacja musi korzystać z usług dodatkowych Google w czasie kompilacji lub z działającego backendu, możesz dostosować domyślne konto usługi, dodając role. Jeśli na przykład Twoja aplikacja wymaga uprawnień do Vertex AI, konieczne może być dodanie roli roles/aiplatform.user lub innej powiązanej roli.

Najważniejsze terminy i ich definicje

  • Backend: zbiór zarządzanych zasobów tworzonych przez App Hosting do kompilowania i uruchamiania Twojej aplikacji internetowej.
  • Wdrożenie: konkretna wersja opublikowanej aplikacji powiązana z zatwierdzeniem Git.
  • Gałąź aktywny: gałąź repozytorium GitHub, która jest wdrażana pod adresem URL wersji aktywnej. Często jest to gałąź, z którą scalone są gałęzie cech lub gałęzi programowania.

Znane problemy i ograniczenia

Wersja testowa App Hosting ma kilka znanych ograniczeń:

  • Optymalizacja obrazów nie jest jeszcze dostępna.
  • W niektórych przypadkach backend App Hosting może zwracać wiadomości Intermittent connection error pod adresem URL Twojej aplikacji. Poprawka zostanie udostępniona w kolejnej wersji.
  • Nagłówki pamięci podręcznej są modyfikowane, by ograniczyć pamięci podręczne CDN do 60 sekund. W przyszłości, gdy App Hosting będzie mógł szybko wyczyścić pamięć podręczną podczas wdrażania, ten limit zostanie zniesiony.
  • Niebuforowane pliki statyczne są przesyłane poza Cloud Run. W późniejszych wersjach będą przechowywane i udostępniane z pierwotnego źródła App Hosting, aby zapewnić większą wydajność.
  • Subdomeny z symbolem wieloznacznym będą dostępne w nadchodzących wersjach.
  • Kody SKU App Hosting nie mogą być wyświetlane na stronie wykorzystania backendu w konsoli Firebase. Będą one dostępne w kolejnej wersji.
  • Podczas tworzenia backendu konsola Firebase może okresowo wyświetlać błąd „Nie znaleziono kompilacji i jest ona nieprawidłowa”.
  • Projekty z zagnieżdżonymi plikami package.json nie są obecnie obsługiwane niezależnie od tego, czy usługa root\_directory została skonfigurowana w konsoli Firebase czy za pomocą interfejsu wiersza poleceń. Poprawka zostanie udostępniona w kolejnej wersji.
  • Obecnie wszystkie backendy w tym samym projekcie korzystają z tej samej organizacji/konta GitHub. Można je połączyć z różnymi repozytoriami w tej organizacji lub tym koncie. Aby utworzyć backendy połączone z różnymi kontami GitHub, umieść je w osobnych projektach.
  • Obecnie obsługiwany jest tylko region us-central1.