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
3. Tworzenie instancji i bazy danych MongoDB Serverless
- Aby rozpocząć, zapoznaj się z MongoDB Atlas w Google Cloud

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

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

- 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:

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

- 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.

- 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

- 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:

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:

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

- 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:

- 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.

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

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
- Otwórz klastry instancji MongoDB.
- Wybierz utworzony klaster lub instancję.
- Kliknij wielokropek obok nazwy klastra i z listy wybierz Zakończ.
Usuwanie wdrożeń Cloud Run
- Otwórz stronę Cloud Run w konsoli Google Cloud.
- Wybierz usługę Cloud Run, którą chcesz usunąć.
- U góry konsoli kliknij ikonę usuwania.
9. Gratulacje
Gratulacje, udało Ci się utworzyć aplikację internetową wykorzystującą stos MEAN w Cloud Run.