Bezserwerowe rozwiązanie Firebase — łatwe aplikacje mobilne i internetowe
Opublikowany: 2022-03-11Aplikacje mobilne i internetowe zwykle wymagają serwera zaplecza. Aplikacje internetowe wymagają serwera WWW do dostarczania treści. Aplikacje muszą również przechowywać profile użytkowników i multimedia, takie jak obrazy i filmy. Komunikacja między aplikacją a serwerem często odbywa się za pomocą API, którym zwykle jest REST.
Aplikacje są kodowane w wielu językach. Aplikacja na iOS jest napisana w języku Swift lub Objective-C. Aplikacje na Androida są napisane w Javie lub Kotlinie. Aplikacje internetowe są pisane w HTML, CSS, JavaScript i często skomplikowanych frameworkach, takich jak Angular czy React. Deweloperzy front-endu muszą znać odpowiednie języki i powiązane z nimi narzędzia programistyczne.
Serwery zaplecza są napisane w wielu językach, w tym Go, Java, PHP i Python. Każdy z tych języków ma swój własny zestaw bibliotek ułatwiających pisanie złożonych aplikacji.
Większość programistów uważa się za programistów front-end lub back-end. Programiści full-stack, którzy są biegli w obu rolach, są stosunkowo rzadkością.
Prowadzenie i utrzymywanie serwera zaplecza wiąże się z własnymi wyzwaniami. Serwery należy budować, aktualizować i tworzyć kopie zapasowe. Serwery muszą być również zabezpieczone, aby zapobiec przypadkowej lub złośliwej utracie danych lub dostępowi do danych wrażliwych. Ponadto serwery muszą mieć przypisane nazwy hostów i adresy IP, aby można było się z nimi połączyć.
Co to jest Firebase?
Firebase zaczynało jako architektura komunikacji mobilnej, która została przejęta przez Google. Od tego czasu ewoluował i stał się zestawem ponad 25 komponentów współpracujących z platformą Google Cloud.
Firebase składa się z zestawów programistycznych (SDK), które umożliwiają programistom mobilnym i internetowym dostęp do funkcji chmury w prosty, bezpieczny i niezawodny sposób. Automatycznie kompensują słabą łączność sieciową. Dostępna jest konsola internetowa Firebase do włączania, administrowania i zabezpieczania komponentów. Istnieją również narzędzia wiersza poleceń i interfejsy API REST do bardziej szczegółowego wykorzystania.
Niektóre komponenty Firebase są lepiej znane niż inne. Istnieje kilka zależności między komponentami, co pozwala na stopniowe przyjmowanie funkcjonalności. Uwierzytelnianie i analityka Firebase są najczęściej używane.
Firebase ewoluowało, by stać się platformą, która umożliwia deweloperom front-endu mobilnego i internetowego tworzenie kompletnych aplikacji bez potrzeby korzystania z serwerów zaplecza. Ostatnie ulepszenia znacznie ułatwiły rozwiązania bezserwerowe, które stanowią realną, skalowalną i ekonomiczną alternatywę dla rozwiązań serwerowych Cloud Virtual Machine.
Ceny i plany rozliczeniowe Firebase
Podstawowy abonament Firebase o nazwie Spark jest bezpłatny. Istnieją ograniczenia dotyczące wykorzystania zasobów w chmurze, ale są one dość hojne. Możliwe jest uruchomienie aplikacji o rozsądnej wielkości bez ponoszenia jakichkolwiek opłat.
W ramach planu Spark może być hostowana strona internetowa z zawartością do 1 GB i transferami mniejszymi niż 10 GB miesięcznie. Firestore umożliwia do 1 GB danych i ruch sieciowy do 10 GB/miesiąc. Limity przechowywania w chmurze wynoszą do 5 GB danych, a pobieranie do 1 GB dziennie.
Jeśli aplikacja potrzebuje więcej zasobów, wymagany jest płatny plan rozliczeniowy, taki jak płatność na bieżąco. Bezpłatne limity planu Spark nadal obowiązują. Opłaty podlegające rozliczeniu są dość niskie. Cennik można znaleźć na stronie cennika Firebase.
Maszyny wirtualne działające w chmurze są obciążane opłatami, gdy są uruchomione, nawet jeśli nie są używane. Bezserwerowe rozwiązania Firebase są skalowane do zera. Oznacza to, że zasoby działają efektywnie tylko wtedy, gdy są używane i nie są naliczane opłaty, gdy nie są używane. Jest to idealne rozwiązanie dla zastosowań sezonowych, takich jak wynajem wakacyjny lub imprezy okresowe, takie jak koncerty. Będzie dużo aktywności, po której nastąpią miesiące bezczynności.
Jak skonfigurować Firebase
Do uwierzytelnienia wymagane jest konto e-mail. Preferowane jest konto pocztowe Google. Można je utworzyć pod adresem https://mail.google.com.
Wymagane jest również konto Google Cloud Platform (GCP). Bezpłatny okres próbny jest dostępny tutaj. Daje to 300 USD kredytu, który jest dostępny przez rok. Karta kredytowa jest wymagana jako dowód tożsamości. Google może pobrać 1 USD, a następnie go zwrócić. Karta kredytowa będzie obciążana co miesiąc, jeśli płatności są włączone i używane są płatne zasoby. Istnieją również firmy świadczące usługi Google, które działają jako pośrednicy w rozliczeniach. Płacisz dostawcy za korzystanie z chmury, a on płaci Google. Mają własne plany rozliczeniowe i mogą oferować bezpłatny okres próbny.
Ważne jest, aby często monitorować sekcję rozliczeń konsoli w chmurze, aby monitorować użycie. Łatwo jest utrzymać aktywne zasoby, takie jak pamięć masowa, gdy nie są potrzebne, co z czasem może wiązać się ze znacznymi kosztami.
Projekty Firebase to także projekty GCP. Możesz utworzyć projekt GCP i zaimportować go do Firebase lub utworzyć projekt Firebase, co spowoduje również utworzenie projektu GCP. Konsola Firebase jest tutaj.
Dla różnych typów aplikacji wymagana jest inna konfiguracja. Główne z nich to aplikacje na Androida, iOS i webowe. Instrukcje konfiguracji można znaleźć w oficjalnych przewodnikach Firebase.
W przypadku niektórych operacji wymagane są narzędzia interfejsu wiersza poleceń Firebase (CLI). Wymagają one zainstalowania Node.js
i narzędzia npm
. Jeśli działa w systemie macOS lub Linux, polecenie npm
należy uruchomić z sudo
.
sudo npm install -g firebase-tools
Uwierzytelnianie i autoryzacja
Uwierzytelnianie Firebase jest prawdopodobnie najczęściej używanym składnikiem Firebase. Użytkownicy mogą wybrać jeden lub więcej mechanizmów uwierzytelniania. Są to adres e-mail i hasło, numery telefonów i dostawcy tożsamości sfederowanych Google, Facebook, Twitter i GitHub. Można włączyć dowolną liczbę mechanizmów uwierzytelniania.
Interfejs użytkownika Firebase monituje użytkownika o użycie mechanizmu:
Firebase udostępnia interfejsy użytkownika do uwierzytelniania, które można wywołać z kilku wierszy kodu po stronie klienta. Istnieją również interfejsy API do ręcznego uwierzytelniania. Po pomyślnym uwierzytelnieniu generowany jest token tożsamości, którego można użyć do weryfikacji zaplecza.
Interfejsy API umożliwiają użytkownikom administracyjnym programowe zarządzanie użytkownikami. Operacje obejmują:
- Tworzenie, aktualizowanie i usuwanie użytkowników
- Wyszukaj użytkowników według kryteriów wyszukiwania, takich jak adres e-mail lub numer telefonu
- Dostęp do informacji, takich jak data utworzenia konta oraz data i godzina ostatniego logowania
- Weryfikuj adresy e-mail i numery telefonów bez konieczności korzystania z istniejących przepływów pracy
Większość aplikacji mobilnych i internetowych wymaga, aby duża liczba użytkowników logowała się do ich aplikacji. Na przykład każdy, kto ma konto Google Mail, może uwierzytelnić się w dowolnej aplikacji, która umożliwia uwierzytelnianie Google. Forma autoryzacji jest wymagana do ograniczenia dostępu do aplikacji do określonych użytkowników. Można to łatwo zrobić, przechowując powiązania między adresami e-mail i rolami dostępu w przechowywaniu danych. Po pomyślnym uwierzytelnieniu adres e-mail jest wyszukiwany w magazynie danych. Jeśli użytkownik istnieje z poprawnymi rolami, dostęp jest przyznawany; w przeciwnym razie użytkownik zostanie wylogowany.
Hosting Firebase
Hosting Firebase umożliwia hostowanie w chmurze statycznej zawartości internetowej, w tym JavaScript, bez konieczności korzystania z serwera WWW. Zawartość jest buforowana na obrzeżach globalnej sieci dostarczania treści (CDN). Pozwala to na szybki dostęp do treści z dowolnego miejsca na świecie.
Co najmniej jedną witrynę można hostować, dodając ją do sekcji Hosting projektu Firebase w konsoli Firebase. Treść jest dostarczana przez SSL i otrzymuje dwa adresy URL formularza, [https://nazwa-witryny.web.app] i https://nazwa-witryny.firebaseapp.com, gdzie site-name
projektu lub nazwa witryny określona przez użytkownika.
Hostowanie witryny z własnej nazwy domeny jest bardzo łatwe, pod warunkiem, że możesz zmienić rekordy DNS dla domeny. Dodajesz nazwę domeny do witryny w konsoli Firebase. Otrzymasz wtedy rekord DNS TXT, który musisz dodać do DNS swojej domeny, aby udowodnić Google, że jesteś właścicielem domeny. Gdy rekord TXT jest widoczny, możesz uzyskać rekordy DNS A dla witryny. Certyfikat SSL jest automatycznie udostępniany dla witryny. Po udostępnieniu certyfikatu witryna jest dostępna na całym świecie. Zasadniczo aktualizacja DNS i udostępnienie certyfikatów może zająć kilka godzin. W praktyce proces można zakończyć w 20 minut.
Aby dodać zawartość do hostingu, najpierw utwórz katalog dla witryny i cd
go z wiersza poleceń. Następnie zaloguj się do Firebase i zainicjuj katalog projektu.
firebase login firebase init
Zostaniesz poproszony o wybranie projektu i wymaganych usług klienta. Usługi można zawsze dodać później i nie trzeba ich wybierać na tym etapie.
Utwórz plik o nazwie firebase.json
, który definiuje katalog główny witryny i pliki do wykluczenia. Będziesz także potrzebował pliku .gitignore
, aby wykluczyć pliki z kontroli wersji.
{ "hosting": { "public": "public", "ignore": [ "firebase.json", "**/.*", "**/node_modules/**" ] } }
Następnie skopiuj zawartość statyczną do katalogu publicznego. Na koniec wdróż witrynę w chmurze.
firebase deploy
Aby zmienić treść WWW, po prostu zmień pliki treści i wydaj komendę deploy. Każde wdrożenie jest wyświetlane jako wersja w konsoli Firebase. Możesz cofnąć się do poprzedniej wersji jednym kliknięciem.
Hosting Firebase może też przepisywać identyfikatory URI w plikach, Cloud Functions i Cloud Run. To znacznie upraszcza sprawę, ponieważ nie jest konieczne przypisywanie domeny do tych usług. Przepisy są definiowane przez dodanie sekcji przepisywania do sekcji hostingu pliku firebase.json. Wdrożenie hostingu zakończy się niepowodzeniem, jeśli usługa nie istnieje.

{ "hosting": { "public": "public", "rewrites": [ { "source": "/xxx", "destination": "/profile.html" }, { "source": "/yyy", "function": "profile" }, { "source": "/api{,/**}", "run": { "serviceId": "cloud-api", "region": "europe-west1" } } ] } }
Przechowywanie danych
Firebase udostępnia klienckie interfejsy API umożliwiające dostęp do przechowywania danych w chmurze. Istnieją trzy rodzaje przechowywania:
- Baza danych czasu rzeczywistego
- Cloud Firestore
- Magazyn w chmurze
Umożliwia to klientom mobilnym i internetowym przechowywanie i pobieranie danych bez potrzeby korzystania z serwera.
Baza danych czasu rzeczywistego
Baza danych czasu rzeczywistego to hostowana w chmurze baza danych NoSQL. Dane w Bazie Danych Czasu Rzeczywistego są automatycznie synchronizowane w czasie rzeczywistym ze wszystkimi podłączonymi urządzeniami. Działa na wielu platformach na Androida, iOS i sieć. Dane są przechowywane w strukturze drzewa JSON. Można ustawić reguły bezpieczeństwa, aby kontrolować dostęp do odczytu i zapisu danych.
Każde urządzenie przechowuje lokalną kopię bazy danych. Oznacza to, że dane są dostępne, gdy nie są podłączone do sieci. Po ponownym połączeniu lokalne i chmurowe kopie danych są synchronizowane.
Dane są odczytywane przez aplikacje korzystające z odbiornika. Odbiornik nasłuchuje w węźle w drzewie JSON. Za każdym razem, gdy dane są zmieniane na konsoli lub przez innego użytkownika, wywołanie zwrotne odbiornika jest wywoływane z nową wartością danych. Baza danych czasu rzeczywistego obsługuje również zapytania. Każde zapytanie zwraca węzeł i wszystkie jego węzły podrzędne.
Reguły bezpieczeństwa domyślnie nie zezwalają na dostęp do danych. Reguły można dodawać globalnie lub do poszczególnych węzłów obiektu JSON. Reguły bezpieczeństwa kontrolują dostęp do odczytu i zapisu danych oraz mogą przeprowadzać weryfikację.
Baza danych czasu rzeczywistego najlepiej nadaje się do małych porcji danych, które nie wymagają głęboko zagnieżdżonej struktury danych. Bezpłatny limit to 1 GB danych.
Cloud Firestore
Cloud Firestore jest postrzegany jako zamiennik Bazy danych czasu rzeczywistego. Rozszerza funkcjonalność Bazy Danych Czasu Rzeczywistego. Dane nie znajdują się w drzewie JSON, ale w hierarchicznej kolekcji dokumentów. Każdy dokument składa się z zestawu par klucz-wartość i opcjonalnych dokumentów podrzędnych. Zapytania umożliwiają bardziej złożone filtrowanie i sortowanie i zwracają tylko kompletne dokumenty. Zapytania nie zwracają dokumentów podrzędnych.
Cloud Firestore wkrótce zastąpi Cloud Datastore. Można go uruchomić w trybie Datastore lub w trybie natywnym. Wszystkie aplikacje Datastore zostaną automatycznie przeniesione do Cloud Firestore.
Cloud Firestore najlepiej nadaje się do stosunkowo niewielkich porcji danych. Może mieć głęboko zagnieżdżoną strukturę danych. Bezpłatny limit to 1 GB danych.
Magazyn w chmurze
Cloud Storage służy do przechowywania plików, takich jak obrazy i klipy wideo. Klienci mobilni i internetowi mogą używać Firebase do przesyłania i pobierania plików bezpośrednio do iz chmury bez potrzeby korzystania z serwera zaplecza. Bezpłatny limit to 5 GB danych.
Funkcje chmury
Cloud Functions to ważna technologia do tworzenia aplikacji bezserwerowych. Funkcję chmury można napisać w języku JavaScript, TypeScript, Python lub Go, który jest wdrażany bezpośrednio w chmurze Google. Funkcja jest wyzwalana przez żądanie HTTP lub zdarzenie w chmurze, takie jak zapis do Cloud Storage.
Funkcja chmury może obsłużyć tylko jedno żądanie na raz, ale chmura automatycznie skaluje funkcję, replikując ją. Funkcja Cloud Functions napisana w Pythonie wykorzystuje bibliotekę Flask do obsługi żądań HTTP. Funkcja przyjmuje obiekt żądania jako parametr i zwraca treść odpowiedzi.
Prosta funkcja chmury w języku Python wymaga katalogu roboczego, a punkt wejścia znajduje się w pliku main.py
.
def simple_cloud_function(request): return "It worked"
Zależnościami zarządza pip i trafiają do pliku o nazwie requirements.txt
.
Flask==1.0.2
Funkcja jest wdrażana za pomocą narzędzia wiersza poleceń gcloud
. Określa nazwę funkcji, język i wyzwalacz.
gcloud functions deploy simple_cloud_function --runtime python37 \ --trigger-http
Adres URL funkcji jest wyświetlany podczas wdrażania i można go znaleźć, uruchamiając polecenie opisu.
gcloud functions describe simple_cloud_function Url: https://europe-west1-project-id.cloudfunctions.net/simplecloud_function
Cloud Functions może wywoływać interfejsy API Google Cloud i Firebase, aby zapewnić funkcje zaplecza. Zapewniają one rejestrowanie informacji o uruchomieniu wykonania i czasie wykonania. Można łatwo dodać dodatkowe rejestrowanie. Dzienniki można przeglądać w interfejsie Stackdriver Logging i za pomocą narzędzia wiersza poleceń gcloud
.
gcloud functions logs read simple_cloud_function
Funkcje można przeglądać i usuwać w konsoli Google Cloud.
Cloud Functions najlepiej nadaje się do operacji, które występują stosunkowo rzadko. Przykładowym zastosowaniem jest utworzenie miniatury, gdy obraz jest przesyłany do Cloud Storage. Bezpłatny limit to 125 000 wywołań miesięcznie.
Uruchom w chmurze
Cloud Run to niedawno dodana funkcja, która znacznie ułatwia aplikacje bezserwerowe. Umożliwia uruchamianie kontenerów Docker w chmurze bez konieczności przeprowadzania skomplikowanej konfiguracji infrastruktury. Może działać w trybie zarządzanym, który wykorzystuje środowisko wykonawcze Knative, które jest oparte na Kubernetes. Może również działać na Anthos, który jest również zbudowany na Kubernetes, ale umożliwia uruchamianie kontenerów w chmurach, a nawet we własnym centrum danych. Nie ma potrzeby konfigurowania i zarządzania klastrem Kubernetes, ponieważ wszystko odbywa się automatycznie.
Dowolna aplikacja, którą można wbudować w obrazy platformy Docker, może być zarządzana przez Cloud Run. Automatycznie skaluje liczbę kontenerów na podstawie zapotrzebowania. Skaluje się również do zera, gdy usługa nie jest używana. Niewykorzystane usługi nie podlegają opłatom.
Kontenery platformy Docker muszą uruchamiać serwer sieciowy, jeśli mają odpowiadać na żądania HTTP. Usługa Pythona będzie korzystać z Flask. Punktem wejścia będzie app.py
.
from flask import Flask, request app = Flask(__name__) @app.route('/api/profile') def profile(): page = ''' Page content ''' return page
Aplikacja potrzebuje pliku Dockerfile
do utworzenia obrazu.
FROM python ENV APP_HOME /app WORKDIR $APP_HOME COPY . . ENV PORT 8080 RUN pip install Flask gunicorn firebase-admin CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 app:app
Kontenery Cloud Run są wdrażane bezpośrednio w chmurze.
gcloud run deploy --image=image_name --platform=managed \ --region=europe-west1 --allow-unauthenticated
Jeśli nazwa usługi, platforma, region lub czy zezwalać na nieuwierzytelnianie nie są zdefiniowane w konfiguracji projektu ani podane w wierszu polecenia, zostaną wyświetlone monity. Po zakończeniu wdrażania zostanie wyświetlony adres URL usługi. Adres URL można również uzyskać za pomocą polecenia gcloud.
gcloud run services list SERVICE REGION URL LAST DEPLOYED BY LAST DEPLOYED AT cloud-api europe-west1 https://cloud-api-h42ifbxkyq-ew.a.run.app [email protected] 2020-02-05T10:53:30.006Z
Adres URL zawiera losową liczbę, którą trudno zarządzać. W tym miejscu najbardziej przydatne stają się reguły przepisywania Hostingu Firebase.
Usługi można przeglądać i usuwać w Google Cloud Console.
Cloud Run idealnie nadaje się do hostowania interfejsu API REST. Miesięczne bezpłatne limity to 180 000 sekund pracy procesora, 360 000 sekund pamięci GB, 2 miliony żądań i 1 GB ruchu wychodzącego z sieci. Limit bezpłatnego ruchu wychodzącego z sieci ma zastosowanie tylko wtedy, gdy usługa jest wdrożona w regionie Ameryki Północnej.
Uwierzytelnianie
Domyślnie kontenery Cloud Functions i Cloud Run są publiczne i każdy w internecie może uzyskać do nich dostęp. Korzystając z reguł uprawnień w Cloud Console, usługi można ograniczyć do członków projektu, Grup dyskusyjnych Google i poszczególnych adresów e-mail.
Jeżeli obowiązują ograniczenia, nieautoryzowany dostęp jest zabroniony. Aby umożliwić dostęp, do nagłówków żądań należy dodać token tożsamości. Token tożsamości można uzyskać za pomocą polecenia gcloud lub podczas procesu uwierzytelniania Firebase.
gcloud auth print-identity-token
Wymagany jest nagłówek autoryzacji.
Authorization: Bearer id-token
Streszczenie
Google Cloud Platform i Firebase oferują szereg produktów, które znacznie ułatwiają tworzenie aplikacji mobilnych i internetowych. Potrzebę serwera zaplecza można całkowicie wyeliminować, umożliwiając klientom bezpośredni dostęp do funkcji chmury lub wdrażając kod zaplecza w chmurze za pomocą Cloud Functions lub Cloud Run.
Istniejące aplikacje można stopniowo migrować do wersji bezserwerowej. W rzeczywistości sposób rozwoju technologii może oznaczać, że tradycyjne rozwiązania serwerowe oparte na maszynach wirtualnych nie będą już potrzebne.