Bezserwerowa aplikacja stosu MEAN w MongoDB Atlas i Cloud Run

1. Wprowadzenie

W tym poście pokażemy, jak Cloud Run i MongoDB łączą siły, aby umożliwić tworzenie aplikacji MEAN stack bez serwera. Dowiesz się, jak utworzyć bezserwerową aplikację MEAN za pomocą Cloud Run i MongoDB Atlas, czyli wielochmurowej platformy danych aplikacji od MongoDB.

Co to jest Cloud Run?

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

  • Pakowanie kodu w wiele bezstanowych kontenerów, które reagują na żądania i wywołują go za pomocą żądań HTTP.
  • Opłaty są naliczane tylko za wykorzystane zasoby
  • obsługiwać dowolny język programowania, dowolną bibliotekę systemu operacyjnego lub dowolny plik binarny;

Kliknij ten link, aby dowiedzieć się więcej o tych funkcjach.

Bezserwerowa baza danych z MongoDB Atlas

Aby rozwiązać ten problem, firma MongoDB wprowadziła instancje bezserwerowe, czyli nowe, w pełni zarządzane wdrożenie bazy danych bezserwerowej w Atlas. W przypadku instancji bezserwerowych nie musisz myśleć o infrastrukturze – wystarczy wdrożyć bazę danych, a ona będzie płynnie skalować się w górę i w dół w zależności od zapotrzebowania, bez konieczności ręcznego zarządzania. A co najważniejsze, opłaty są naliczane tylko za operacje, które wykonujesz. Aby nasza architektura była w pełni bezserwerowa, połączymy możliwości Cloud Run i MongoDB Atlas.

Stos MEAN

MEAN stack to stos technologii do tworzenia aplikacji internetowych full stack w całości za pomocą JavaScriptu i JSON-a. Technologia 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 po stronie klienta.
  • Node.js to środowisko wykonawcze JavaScript po stronie serwera. Serwer używa sterownika MongoDB Node.js do łączenia się z bazą danych oraz pobierania i przechowywania danych.

Co utworzysz

Utworzysz aplikację full stack do zarządzania rolami pracowników w MongoDB, Express JS, Angular JS i Node JS. Zawiera ona:

  • aplikacja serwera w Node JS i Express JS, konteneryzowana;
  • Aplikacja kliencka utworzona w AngularJS i skonteneryzowana.
  • Obie aplikacje są wdrażane w Cloud Run.
  • Aplikacja serwera łączy się z bezserwerową instancją MongoDB za pomocą sterownika MongoDB NodeJS
  • Server API przeprowadza interakcje odczytu i zapisu z bazą danych.
  • Aplikacja kliencka to interfejs użytkownika aplikacji Employee-Job Role

Czego się nauczysz

  • Tworzenie bezserwerowych instancji MongoDB
  • Jak skonfigurować projekt Cloud Run
  • Jak wdrażać aplikacje internetowe w Google Cloud Run
  • Tworzenie i wdrażanie aplikacji MEAN Stack

2. Wymagania

  • przeglądarka, np. Chrome lub Firefox;
  • Projekt Google Cloud Platform, który zawiera instancję Cloud Run i MongoDB Atlas.
  • W następnej sekcji znajdziesz listę kroków, które należy wykonać, aby utworzyć aplikację MEAN Stack.

3. Tworzenie instancji i bazy danych MongoDB Serverless

e5cc775a49f2fb0.png

  • Po zarejestrowaniu się kliknij przycisk „Build a Database” (Utwórz bazę danych), aby utworzyć nową instancję bezserwerową. Wybierz tę konfigurację:

fca10bf6f031af7a.png

  • Gdy instancja bezserwerowa zostanie udostępniona, powinna być już uruchomiona.

d13c4b8bdd9569fd.png

  • Kliknij przycisk „Połącz”, aby dodać adres IP połączenia i użytkownika bazy danych.
  • W tym ćwiczeniu użyjemy ustawienia „Zezwalaj na dostęp z dowolnego miejsca”. MongoDB Atlas ma zestaw funkcji zabezpieczeń i dostępu. Więcej informacji na ich temat znajdziesz w artykule dokumentacji dotyczącym funkcji zabezpieczeń.
  • Użyj wybranych przez siebie danych logowania w przypadku nazwy użytkownika i hasła bazy danych. Po wykonaniu tych czynności powinny się wyświetlić te informacje:

bffeef16de1d1cd2.png

  • Kliknij przycisk „Wybierz metodę połączenia”, a następnie wybierz „Połącz aplikację”.

75771e64427acd5e.png

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

4. Konfigurowanie projektu Cloud Run

  • Najpierw zaloguj się w konsoli Cloud, utwórz nowy projekt lub użyj istniejącego.
  • Zapamiętaj identyfikator utworzonego projektu.
  • Poniżej znajduje się obraz przedstawiający stronę nowego projektu, na której podczas tworzenia projektu możesz zobaczyć jego identyfikator.

f32dbd4eb2b7501e.png

  • Następnie włącz Cloud Run API w Cloud Shell:
  • Aktywuj Cloud Shell w konsoli Cloud. Wystarczy kliknąć Aktywuj Cloud Shell.
  • Po połączeniu z Cloud Shell zobaczysz, że uwierzytelnianie zostało już przeprowadzone, a projekt jest już ustawiony na Twój identyfikator projektu. Jeśli z jakiegoś powodu projekt nie jest ustawiony, po prostu wydaj to polecenie:
gcloud config set project PROJECT_ID

3da173210a016316.png

  • Użyj tego polecenia:
gcloud services enable run.googleapis.com
  • W przypadku odwołań do kodu będziemy używać Cloud Shell i edytora Cloud Shell. Aby otworzyć edytor Cloud Shell, kliknij Otwórz edytor w terminalu Cloud Shell:

83793a577f08e4d4.png

5. Klonowanie projektu MEAN Stack

  • Wdrożymy aplikację internetową do zarządzania pracownikami. API REST jest zbudowany przy użyciu Express i Node.js, interfejs internetowy – przy użyciu Angular, a dane będą przechowywane w utworzonej wcześniej instancji MongoDB Atlas.
  • Sklonuj repozytorium projektu, wykonując to polecenie w terminalu Cloud Shell:
git clone https://github.com/mongodb-developer/mean-stack-example.git

6. Wdrażanie interfejsu REST API Express i Node.js

Plik konfiguracyjny Dockera

  • Najpierw wdrożymy usługę Cloud Run dla interfejsu API REST Express. Najważniejszym plikiem w naszym wdrożeniu jest plik konfiguracji Dockera. Przyjrzyjmy się temu:

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"]
  • Konfiguracja ustawia Node.js, a następnie kopiuje i kompiluje projekt. Gdy kontener zostanie uruchomiony, 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

  • Skonfiguruj usługę w ten sposób:
  • Nazwa usługi: node-express-api
  • Platforma wdrożenia: Cloud Run (usługa w pełni zarządzana)
  • Region: wybierz region blisko regionu bazy danych, aby skrócić czas oczekiwania.
  • Uwierzytelnianie: zezwalaj na nieuwierzytelnione wywołania
  • W sekcji Ustawienia wersji kliknij Pokaż ustawienia zaawansowane, aby je rozwinąć:
  • Port kontenera: 5200
  • Zmienne środowiskowe. Dodaj tę parę klucz-wartość i upewnij się, że dodajesz ciąg znaków połączenia dla własnego wdrożenia MongoDB Atlas:
ATLAS_URI:mongodb+srv:/<username>:<password>@sandbox.pv0l7.mongodb.net/meanStackExample?retryWrites=true&w=majority
  • W przypadku środowiska kompilacji wybierz Cloud Build.
  • Na koniec w sekcji Ustawienia kompilacji wybierz:
  • Kreator: Docker
  • Docker: mean-stack-example/server/Dockerfile
  • Kliknij przycisk Wdróż, a następnie Pokaż szczegółowe logi, aby śledzić wdrażanie pierwszej usługi Cloud Run.
  • Po zakończeniu kompilacji powinien pojawić się adres URL wdrożonej usługi:

759c69ba52a85b10.png

  • Otwórz adres URL i dodaj na końcu „/employees”.
  • Powinna wyświetlić się pusta tablica, ponieważ w bazie danych nie ma obecnie żadnych dokumentów.

Wdróżmy interfejs, abyśmy mogli dodać kilka elementów.

7. Wdrażanie aplikacji internetowej Angular

Nasza aplikacja Angular znajduje się w katalogu klienta. Do wdrożenia użyjemy serwera Nginx i Dockera. Możesz też użyć Hostingu Firebase do wdrożenia aplikacji Angular, ponieważ możesz bezpośrednio dostarczać treści do 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 domyślny port – 8080 i 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 tworzymy projekt. Następnie kopiujemy skompilowane pliki do kontenera, konfigurujemy i uruchamiamy usługę Nginx.
  • Na koniec musimy skonfigurować adres URL interfejsu API REST, aby aplikacja kliencka mogła wysyłać do niego żądania. Ponieważ używamy adresu URL tylko w jednym pliku w projekcie, zakodujemy go na stałe. Możesz też dołączyć zmienną środowiskową do obiektu okna i uzyskać do niej dostęp w ten sposób.

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 już wdrożyć aplikację w Cloud Run. Rozpocznij nowe wdrożenie z tymi ustawieniami konfiguracji:
      - Service Settings: Create a service
    
  • Nazwa usługi: angular-web-app
  • Platforma wdrożenia: Cloud Run (usługa w pełni zarządzana)
  • Uwierzytelnianie: zezwalaj na nieuwierzytelnione wywołania
  • W przypadku środowiska kompilacji wybierz Cloud Build.
  • Na koniec w sekcji Ustawienia kompilacji wybierz:
  • Kreator: Docker
  • Docker: mean-stack-example/client/Dockerfile
  • Ponownie kliknij przycisk Wdróż i obserwuj logi podczas przesyłania aplikacji do chmury. Po zakończeniu wdrażania powinien się wyświetlić adres URL aplikacji klienckiej.

5da1d7defc1082fc.png

  • Otwórz adres URL i zacznij korzystać z aplikacji.

db154f1cd57e38f0.png

8. Czyszczenie danych

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

Zatrzymywanie instancji MongoDB

  1. Otwórz klastry instancji MongoDB.
  2. Wybierz utworzony klaster lub instancję.
  3. Kliknij wielokropek obok nazwy klastra i z listy wybierz 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. U góry konsoli kliknij ikonę usuwania.

9. Gratulacje

Gratulacje, udało Ci się utworzyć aplikację internetową wykorzystującą stos MEAN w Cloud Run.