1. Einführung
In diesem Beitrag sehen wir uns an, wie Cloud Run und MongoDB zusammenarbeiten, um eine vollständig serverlose MEAN-Stack-Anwendungsentwicklung zu ermöglichen. Wir erfahren, wie Sie mit Cloud Run und MongoDB Atlas, der Multi-Cloud-Anwendungsdatenplattform von MongoDB, eine serverlose MEAN-Anwendung erstellen.
Was ist Cloud Run?
Mit Cloud Run können Sie skalierbare Containeranwendungen in einer beliebigen Sprache (wie zum Beispiel Go, Python, Java, Node.js, .NET oder Ruby) auf einer vollständig verwalteten Plattform erstellen und bereitstellen. Cloud Run bietet folgende Vorteile:
- Code in mehreren zustandslosen Containern verpacken, die anfragenorientiert sind, und ihn über HTTP-Anfragen aufrufen
- Nur für die tatsächlich verwendeten Ressourcen bezahlen
- Beliebige Programmiersprachen, Betriebssystembibliotheken oder Binärdateien verwenden
Weitere Funktionen im vollständigen Kontext finden Sie unter diesem Link.
Serverlose Datenbank mit MongoDB Atlas
MongoDB hat serverlose Instanzen eingeführt, eine neue vollständig verwaltete, serverlose Datenbankbereitstellung in Atlas, um dieses Problem zu lösen. Mit serverlosen Instanzen müssen Sie sich nie Gedanken über die Infrastruktur machen. Stellen Sie einfach Ihre Datenbank bereit und sie wird je nach Bedarf nahtlos skaliert. Eine manuelle Verwaltung ist nicht erforderlich. Und das Beste daran: Sie zahlen nur für die ausgeführten Vorgänge. Um unsere Architektur wirklich serverlos zu machen, kombinieren wir die Funktionen von Cloud Run und MongoDB Atlas.
MEAN-Stack
Der MEAN-Stack ist ein Technologie-Stack zum Erstellen von Full-Stack-Webanwendungen ausschließlich mit JavaScript und JSON. Der MEAN-Stack besteht aus vier Hauptkomponenten: MongoDB, Express, Angular und Node.js.
- MongoDB ist für die Datenspeicherung zuständig.
- Express.js ist ein Node.js-Webanwendungsframework zum Erstellen von APIs.
- Angular ist eine clientseitige JavaScript-Plattform.
- Node.js ist eine serverseitige JavaScript-Laufzeitumgebung. Der Server verwendet den MongoDB Node.js-Treiber, um eine Verbindung zur Datenbank herzustellen und Daten abzurufen und zu speichern.
Aufgaben
Sie schreiben eine Full-Stack-Anwendung für Mitarbeiter-Jobrollen in MongoDB, Express JS, Angular JS und Node JS. Sie enthält:
- Eine Serveranwendung in Node JS und Express JS, containerisiert
- Eine Clientanwendung, die in AngularJS erstellt und containerisiert wurde
- Beide Anwendungen werden in Cloud Run bereitgestellt
- Die Serveranwendung stellt mit dem MongoDB NodeJS-Treiber eine Verbindung zur serverlosen MongoDB-Instanz her
- Die Server-API führt die Lese-/Schreibinteraktionen mit der Datenbank aus
- Die Clientanwendung ist die Benutzeroberfläche für die Anwendung für Mitarbeiter-Jobrollen
Lerninhalte
- Serverlose MongoDB-Instanzen erstellen
- Cloud Run-Projekt einrichten
- Webanwendungen in Google Cloud Run bereitstellen
- MEAN-Stack-Anwendung erstellen und bereitstellen
2. Voraussetzungen
3. Serverlose MongoDB-Instanz und -Datenbank erstellen
- Beginnen Sie mit MongoDB Atlas in Google Cloud

- Klicken Sie nach der Registrierung auf die Schaltfläche „Build a Database“ (Datenbank erstellen), um eine neue serverlose Instanz zu erstellen. Wählen Sie die folgende Konfiguration aus:

- Sobald Ihre serverlose Instanz bereitgestellt wurde, sollte sie ausgeführt werden

- Klicken Sie auf die Schaltfläche „Connect“ (Verbinden), um eine Verbindungs-IP-Adresse und einen Datenbanknutzer hinzuzufügen
- In diesem Codelab verwenden wir die Einstellung „Allow Access from Anywhere“ (Zugriff von überall zulassen). MongoDB Atlas bietet eine Reihe von Sicherheits- und Zugriffsfunktionen. Weitere Informationen finden Sie im Artikel zu den Sicherheitsfunktionen.
- Verwenden Sie beliebige Anmeldedaten für den Datenbanknutzernamen und das Passwort. Nach Abschluss dieser Schritte sollte Folgendes angezeigt werden:

- Klicken Sie auf die Schaltfläche „Choose a connection method“ (Verbindungsmethode auswählen) und wählen Sie dann „Connect your application“ (Anwendung verbinden) aus.

- Kopieren Sie den angezeigten Verbindungsstring und ersetzen Sie das Passwort durch Ihr eigenes. Wir verwenden diesen String in den folgenden Abschnitten, um eine Verbindung zu unserer Datenbank herzustellen.
4. Cloud Run-Projekt einrichten
- Melden Sie sich zuerst in der Cloud Console an, erstellen Sie ein neues Projekt oder verwenden Sie ein vorhandenes.
- Merken Sie sich die Projekt-ID des von Ihnen erstellten Projekts.
- Unten sehen Sie ein Bild der neuen Projektseite, auf der Sie die Projekt-ID beim Erstellen sehen.

- Aktivieren Sie dann die Cloud Run API in Cloud Shell:
- Aktivieren Sie Cloud Shell in der Cloud Console. Klicken Sie einfach auf „Cloud Shell aktivieren“.
- Sobald die Verbindung mit Cloud Shell hergestellt ist, sehen Sie, dass Sie bereits authentifiziert sind und für das Projekt schon Ihre Projekt-ID eingestellt ist. Wenn das Projekt aus irgendeinem Grund nicht festgelegt ist, führen Sie einfach den folgenden Befehl aus:
gcloud config set project PROJECT_ID

- Verwenden Sie den folgenden Befehl:
gcloud services enable run.googleapis.com
- Wir verwenden Cloud Shell und den Cloud Shell-Editor für Codeverweise. Klicken Sie im Cloud Shell-Terminal auf „Editor öffnen“, um auf den Cloud Shell-Editor zuzugreifen:

5. MEAN-Stack-Projekt klonen
- Wir stellen eine Webanwendung zur Mitarbeiterverwaltung bereit. Die REST API wird mit Express und Node.js erstellt, die Weboberfläche mit Angular und die Daten werden in der zuvor erstellten MongoDB Atlas-Instanz gespeichert.
- Klonen Sie das Projekt-Repository, indem Sie den folgenden Befehl im Cloud Shell-Terminal ausführen:
git clone https://github.com/mongodb-developer/mean-stack-example.git
6. Express- und Node.js-REST API bereitstellen
Docker-Konfigurationsdatei
- Zuerst stellen wir einen Cloud Run-Dienst für die Express-REST API bereit. Die wichtigste Datei für unsere Bereitstellung ist die Docker-Konfigurationsdatei. Sehen wir sie uns an:
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"]
- Die Konfiguration richtet Node.js ein, kopiert und erstellt das Projekt. Wenn der Container gestartet wird, startet der folgende Befehl den Dienst:
node dist/server.js
- Klicken Sie in der linken Seitenleiste auf das Cloud Run-Symbol, um eine neue Cloud Run-Bereitstellung zu starten:

- Klicken Sie dann auf das Symbol „In Cloud Run bereitstellen“:

- Geben Sie die Dienstkonfiguration wie folgt ein:
- Dienstname: node-express-api
- Bereitstellungsplattform: Cloud Run (vollständig verwaltet)
- Region: Wählen Sie eine Region in der Nähe Ihrer Datenbankregion aus, um die Latenz zu verringern.
- Authentifizierung: Nicht authentifizierte Aufrufe zulassen
- Klicken Sie unter „Revisionseinstellungen“ auf „Erweiterte Einstellungen anzeigen“, um sie zu maximieren:
- Container port: 5200
- Umgebungsvariablen. Fügen Sie das folgende Schlüssel/Wert-Paar hinzu und achten Sie darauf, dass Sie den Verbindungsstring für Ihre eigene MongoDB Atlas-Bereitstellung hinzufügen:
ATLAS_URI:mongodb+srv:/<username>:<password>@sandbox.pv0l7.mongodb.net/meanStackExample?retryWrites=true&w=majority
- Wählen Sie für die Build-Umgebung „Cloud Build“ aus.
- Wählen Sie schließlich im Abschnitt „Build-Einstellungen“ Folgendes aus:
- Builder: Docker
- Docker: mean-stack-example/server/Dockerfile
- Klicken Sie auf die Schaltfläche „Bereitstellen“ und dann auf „Detaillierte Logs anzeigen“, um die Bereitstellung Ihres ersten Cloud Run-Dienstes zu verfolgen.
- Nach Abschluss des Builds sollte die URL des bereitgestellten Dienstes angezeigt werden:

- Öffnen Sie die URL und fügen Sie am Ende „/employees“ an.
- Sie sollten ein leeres Array sehen, da sich derzeit keine Dokumente in der Datenbank befinden.
Stellen wir die Benutzeroberfläche bereit, damit wir einige hinzufügen können.
7. Angular-Webanwendung bereitstellen
Unsere Angular-Anwendung befindet sich im Clientverzeichnis. Für die Bereitstellung verwenden wir den Nginx-Server und Docker. Sie können auch Firebase Hosting für die Bereitstellung Ihrer Angular-Anwendung verwenden, da Sie Ihre Inhalte direkt an ein CDN (Content Delivery Network) bereitstellen können.
Konfigurationsdateien
Sehen wir uns die Konfigurationsdateien an:
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;
}
}
}
- In der Nginx-Konfiguration geben wir den Standardport (8080) und die Startdatei (index.html) an.
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;"]
- In der Docker-Konfiguration installieren wir Node.js-Abhängigkeiten und erstellen das Projekt. Anschließend kopieren wir die erstellten Dateien in den Container, konfigurieren und starten den Nginx-Dienst.
- Schließlich müssen wir die URL für die REST API konfigurieren, damit unsere Clientanwendung Anfragen an sie senden kann. Da wir die URL nur in einer einzigen Datei im Projekt verwenden, codieren wir sie fest. Alternativ können Sie die Umgebungsvariable an das Fensterobjekt anhängen und von dort aus darauf zugreifen.
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';
...
- Wir sind bereit für die Bereitstellung in Cloud Run. Starten Sie eine neue Bereitstellung mit den folgenden Konfigurationseinstellungen:
- Service Settings: Create a service - Dienstname: angular-web-app
- Bereitstellungsplattform: Cloud Run (vollständig verwaltet)
- Authentifizierung: Nicht authentifizierte Aufrufe zulassen
- Wählen Sie für die Build-Umgebung „Cloud Build“ aus.
- Wählen Sie schließlich im Abschnitt „Build-Einstellungen“ Folgendes aus:
- Builder: Docker
- Docker: mean-stack-example/client/Dockerfile
- Klicken Sie noch einmal auf die Schaltfläche „Bereitstellen“ und sehen Sie sich die Logs an, während Ihre Anwendung in die Cloud übertragen wird. Nach Abschluss der Bereitstellung sollte die URL für die Clientanwendung angezeigt werden.

- Öffnen Sie die URL und testen Sie Ihre Anwendung.

8. Bereinigen
Mit den folgenden Schritten vermeiden Sie, dass Ihrem Google Cloud-Konto die in diesem Beitrag verwendeten Ressourcen in Rechnung gestellt werden.
MongoDB-Instanzen beenden
- Rufen Sie die MongoDB-Instanzcluster auf.
- Wählen Sie den von Ihnen erstellten Cluster und die Instanz aus.
- Klicken Sie neben dem Clusternamen auf die Auslassungspunkte und wählen Sie in der Liste „Beenden“ aus.
Cloud Run-Bereitstellungen löschen
- Rufen Sie die Cloud Run-Seite in der Google Cloud Console auf.
- Wählen Sie den Cloud Run-Dienst aus, den Sie löschen möchten.
- Klicken Sie oben in der Konsole auf das Papierkorbsymbol.
9. Glückwunsch
Glückwunsch, Sie haben erfolgreich eine MEAN-Stack-Webanwendung in Cloud Run erstellt.