Bezserwerowa aplikacja stosu MEAN w MongoDB Atlas i Cloud Run

1. Wprowadzenie

W tym poście dowiemy się,jak Cloud Run i MongoDB umożliwiają całkowicie bezserwerowe tworzenie aplikacji w stosie MEAN. Dowiesz się, jak utworzyć bezserwerową aplikację MEAN przy użyciu Cloud Run i MongoDB Atlas – platformy danych aplikacji wielochmurowych w MongoDB.

Co to jest Cloud Run?

Cloud Run umożliwia tworzenie i wdrażanie skalowalnych aplikacji skonteneryzowanych w dowolnym języku (w tym Go, Python, Java, Node.js, .NET i Ruby) na platformie w pełni zarządzanej. Cloud Run wyróżnia się na tle ligi, zapewniając:

  • Kod pakietu w wielu bezstanowych kontenerach, które rozpoznają żądania i wywołują go za pomocą żądań HTTP
  • Opłaty będą naliczane tylko za konkretne zasoby, z których korzystasz
  • Obsługa dowolnego języka programowania, biblioteki systemu operacyjnego i dowolnej biblioteki

Kliknij ten link, aby zobaczyć więcej funkcji w pełnym kontekście.

Bezserwerowa baza danych z MongoDB Atlas

W celu rozwiązania tego problemu firma MongoDB wprowadziła instancje bezserwerowe, czyli nowe, w pełni zarządzane, bezserwerowe wdrożenie bazy danych w środowisku Atlas. Dzięki instancjom bezserwerowym nie musisz już zastanawiać się nad infrastrukturą. Wystarczy, że wdrożysz bazę danych, a będzie ona płynnie skalowana odpowiednio do zapotrzebowania, co nie wymaga bezpośredniego zarządzania. A najlepsze jest to, że płacisz tylko za prowadzone działania. Aby nasza architektura była naprawdę bezserwerowa, połączymy możliwości Cloud Run i MongoDB Atlas.

Stos MEAN

Stos MEAN to stos technologiczny służący wyłącznie do tworzenia pełnoekranowych aplikacji internetowych w językach JavaScript i JSON. Stos MEAN składa się z 4 głównych komponentów – MongoDB, Express, Angular i Node.js.

  • Za przechowywanie danych odpowiada MongoDB.
  • Express.js to platforma aplikacji internetowych Node.js do tworzenia interfejsów API.
  • Angular to platforma JavaScript działająca po stronie klienta.
  • Node.js to środowisko wykonawcze JavaScriptu po stronie serwera. Serwer używa sterownika MongoDB Node.js do łączenia się z bazą danych oraz pobierania i przechowywania danych.

Co utworzysz

Nauczysz się tworzyć pełny stos aplikacji w roli pracownika w ramach zadań w MongoDB, Express JS, Angular JS i Node JS. Zawiera ona:

  • Aplikacja serwerowa w Node.js i Express JS, skonteneryzowana
  • Aplikacja kliencka kompilacja w AngularJS, skonteneryzowana
  • Obie aplikacje są wdrożone w Cloud Run
  • Aplikacja serwera łączy się z bezserwerową instancją MongoDB za pomocą sterownika MongoDB NodeJS
  • Interfejs API serwera wykonuje interakcje odczytu i zapisu z bazą danych
  • Aplikacja kliencka to interfejs użytkownika aplikacji Employee-Job Role

Czego się nauczysz

  • Jak utworzyć bezserwerowe instancje MongoDB
  • Jak skonfigurować projekt Cloud Run
  • Jak wdrażać aplikacje internetowe w Google Cloud Run
  • Jak utworzyć i wdrożyć aplikację wykorzystującą stos MEAN

2. Wymagania

  • przeglądarki, na przykład Chrome lub Firefox;
  • Projekt Google Cloud Platform zawierający instancję Cloud Run i MongoDB Atlas
  • W następnej sekcji znajdziesz listę czynności, które należy wykonać, aby utworzyć aplikację stosu MEAN

3. Tworzenie bezserwerowej instancji i bazy danych MongoDB

e5cc775a49f2fb0.png

  • Po rejestracji kliknij „Utwórz bazę danych”. przycisk tworzenia nowej instancji bezserwerowej. Wybierz tę konfigurację:

fca10bf6f031af7a.png

  • Po udostępnieniu instancji bezserwerowej powinna ona zacząć działać

d13c4b8bdd9569fd.png

  • Kliknij „Połącz”. przycisk dodawania adresu IP połączenia i użytkownika bazy danych
  • W tym ćwiczeniu w Codelabs użyjemy ustawienia „Zezwalaj na dostęp z dowolnego miejsca” . MongoDB Atlas oferuje zestaw funkcji zabezpieczeń i dostępu. Więcej informacji na ten temat znajdziesz w artykule dokumentacji funkcji zabezpieczeń
  • Użyj wybranych danych logowania dla nazwy użytkownika i hasła bazy danych. Po wykonaniu tych czynności powinien wyświetlić się komunikat:

bffeef16de1d1cd2.png

  • Kliknij „Wybierz metodę połączenia”. i wybierz „Połącz aplikację”.

75771e64427acd5e.png

  • Skopiuj wyświetlany ciąg połączenia i zastąp hasło własnym. Użyjemy tego ciągu znaków do łączenia się z naszą bazą danych w kolejnych sekcjach

4. Konfigurowanie projektu Cloud Run

  • Najpierw zaloguj się w konsoli Google Cloud, utwórz nowy projekt lub wykorzystaj już istniejący.
  • Zapamiętaj identyfikator utworzonego projektu
  • Poniżej znajduje się obraz przedstawiający stronę nowego projektu, na której jest widoczny identyfikator projektu podczas jego tworzenia

f32dbd4eb2b7501e.png

  • Następnie włącz Cloud Run API w Cloud Shell:
  • Aktywuj Cloud Shell z poziomu konsoli Cloud. Po prostu kliknij Aktywuj Cloud Shell
  • Po nawiązaniu połączenia z Cloud Shell powinno pojawić się potwierdzenie, że użytkownik jest już uwierzytelniony, a projekt jest już ustawiony na Twój IDENTYFIKATOR PROJEKTU. Jeśli z jakiegoś powodu projekt nie jest skonfigurowany, uruchom po prostu to polecenie:
gcloud config set project PROJECT_ID

3da173210a016316.png

  • Użyj tego polecenia:
gcloud services enable run.googleapis.com
  • Jako odwołania do kodu użyjemy Cloud Shell i edytora Cloud Shell. Aby uzyskać dostęp do edytora Cloud Shell, kliknij Otwórz edytor w terminalu Cloud Shell:

83793a577f08e4d4.png

5. Klonowanie projektu stosu MEAN

  • Wdrożymy aplikację internetową do zarządzania pracownikami. Interfejs API REST korzysta z środowisk Express i Node.js; interfejsu internetowego za pomocą Angular; a dane będą przechowywane w utworzonej wcześniej instancji MongoDB Atlas
  • Sklonuj repozytorium projektu, wykonując w terminalu Cloud Shell to polecenie:
git clone https://github.com/mongodb-developer/mean-stack-example.git

6. Wdrażanie interfejsów API typu REST Express i Node.js

Plik konfiguracji Dockera

  • Najpierw wdrożymy usługę Cloud Run dla interfejsu Express API typu REST. Najważniejszym plikiem dla naszego wdrożenia jest plik konfiguracji Dockera. Spójrzmy na to:

mean-stack-example/server/Dockerfile

# Use the official lightweight Node.js 12 image.
# https://hub.docker.com/_/node
FROM node:17-slim
 
WORKDIR /usr/app
COPY ./ /usr/app
 
# Install dependencies and build the project.
RUN npm install
RUN npm run build
 
# Run the web service on container startup.
CMD ["node", "dist/server.js"]
  • W ramach konfiguracji zostanie utworzony Node.js oraz zostanie skopiowany i skompilowany projekt. Po uruchomieniu kontenera poniższe polecenie uruchomi usługę
node dist/server.js
  • Aby rozpocząć nowe wdrożenie Cloud Run, kliknij ikonę Cloud Run na pasku bocznym po lewej stronie:

48c73bda3aa4ea02.png

  • Następnie kliknij ikonę Wdróż w Cloud Run:

cde124ba8ec23b34.png

  • Wpisz konfigurację usługi w ten sposób:
  • Nazwa usługi: node-express-api
  • Platforma wdrożenia: Cloud Run (w pełni zarządzana)
  • Region: wybierz region blisko regionu bazy danych, aby zmniejszyć czas oczekiwania
  • Uwierzytelnianie: zezwalaj na nieuwierzytelnione wywołania
  • W sekcji Ustawienia wersji kliknij opcję Pokaż ustawienia zaawansowane, aby je rozwinąć:
  • Port kontenera: 5200
  • Zmienne środowiskowe. Dodaj tę parę klucz-wartość i pamiętaj, by dodać ciąg połączenia na potrzeby własnego wdrożenia MongoDB Atlas:
ATLAS_URI:mongodb+srv:/<username>:<password>@sandbox.pv0l7.mongodb.net/meanStackExample?retryWrites=true&w=majority
  • Jako środowisko kompilacji wybierz Cloud Build
  • Na koniec w sekcji Ustawienia kompilacji wybierz:
  • Kreator: Docker
  • Docker: średni-stos-przykład/serwer/plik Dockerfile
  • Kliknij przycisk Wdróż, a następnie Pokaż szczegółowe logi, aby śledzić wdrożenie swojej pierwszej usługi Cloud Run.
  • Po zakończeniu kompilacji powinien pojawić się adres URL wdrożonej usługi:

759c69ba52a85b10.png

  • Otwórz URL i dołącz „/Employees”. do końca
  • Powinna być widoczna pusta tablica, ponieważ obecnie w bazie danych nie ma żadnych dokumentów.

Wdróżmy interfejs użytkownika, aby coś do niego dodać.

7. Wdrażanie aplikacji internetowej Angular

Nasza aplikacja Angular znajduje się w katalogu klienta. Aby ją wdrożyć, użyjemy serwera Nginx i Dockera. Możesz też skorzystać z Hostingu Firebase do wdrożenia aplikacji Angular, ponieważ umożliwia to wyświetlanie treści bezpośrednio w sieci CDN (sieci dostarczania treści).

Pliki konfiguracji

Przyjrzyjmy się plikom konfiguracji:

mean-stack-example/client/nginx.conf

events{}
 
http {
   include /etc/nginx/mime.types;
   server {
       listen 8080;
       server_name 0.0.0.0;
       root /usr/share/nginx/html;
       index index.html;
 
       location / {
           try_files $uri $uri/ /index.html;
       }
   }
}
  • W konfiguracji Nginx określamy port domyślny – 8080, a plik początkowy – index.html.

mean-stack-example/client/Dockerfile

FROM node:17-slim AS build
 
WORKDIR /usr/src/app
COPY package.json package-lock.json ./
 
# Install dependencies and copy them to the container
RUN npm install
COPY . .
 
# Build the Angular application for production
RUN npm run build --prod
 
# Configure the nginx web server
FROM nginx:1.17.1-alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY --from=build /usr/src/app/dist/client /usr/share/nginx/html
 
# Run the web service on container startup.
CMD ["nginx", "-g", "daemon off;"]
  • W konfiguracji Dockera instalujemy zależności Node.js i budujemy projekt. Następnie skopiujemy skompilowane pliki do kontenera, konfigurujemy i uruchamiamy usługę Nginx.
  • Na koniec musimy skonfigurować adres URL interfejsu API REST, aby nasza aplikacja kliencka mogła wysyłać do niego żądania. Ponieważ korzystamy z adresu URL tylko w jednym pliku w projekcie, zakodujemy go na stałe. Możesz też dołączyć zmienną środowiskową do obiektu window i stamtąd uzyskać do niego dostęp.

mean-stack-example/client/src/app/employee.service.ts

...
@Injectable({
 providedIn: 'root'
})
export class EmployeeService {
 // Replace with the URL of your REST API
 private url = 'https://node-express-api-vsktparjta-uc.a.run.app'; 
...
  • Możemy wdrożyć Cię w Cloud Run. Uruchom nowe wdrożenie z tymi ustawieniami konfiguracji:
      - Service Settings: Create a service
    
  • Nazwa usługi: angular-web-app
  • Platforma wdrożenia: Cloud Run (w pełni zarządzana)
  • Uwierzytelnianie: zezwalaj na nieuwierzytelnione wywołania
  • Jako środowisko kompilacji wybierz Cloud Build
  • Na koniec w sekcji Ustawienia kompilacji wybierz:
  • Kreator: Docker
  • Docker: średni-stos-przykład/klient/plik Dockerfile
  • Jeszcze raz kliknij przycisk Wdróż i obserwuj logi, gdy aplikacja zostanie przesłana do chmury. Po zakończeniu wdrażania powinien pojawić się adres URL aplikacji klienckiej.

5da1d7defc1082fc.png

  • Otwórz adres URL i wypróbuj swoją aplikację.

db154f1cd57e38f0.png

8. Czyszczenie danych

Wykonaj te czynności, aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym poście.

Zatrzymywanie instancji MongoDB

  1. Otwórz klastry instancji MongoDB.
  2. Wybierz klaster, utworzoną instancję
  3. Kliknij wielokropek obok nazwy klastra i wybierz z listy opcję Zakończ

Usuwanie wdrożeń Cloud Run

  1. Otwórz stronę Cloud Run w konsoli Google Cloud.
  2. Wybierz usługę Cloud Run, którą chcesz usunąć
  3. Kliknij ikonę usuwania u góry konsoli.

9. Gratulacje

Gratulujemy. Udało Ci się utworzyć aplikację internetową stosu MEAN w Cloud Run.