n8n in Google Cloud Run bereitstellen und ausführen

1. Einführung

In diesem Codelab richten Sie n8n in Google Cloud Run ein. n8n ist ein Open-Source-Tool zur Workflowautomatisierung, mit dem Nutzer verschiedene Anwendungen und Dienste verbinden können, um wiederkehrende Aufgaben zu automatisieren.

Das Codelab basiert auf der n8n-Dokumentation, in der erklärt wird, wie Sie n8n in Google Cloud Run hosten. Wir installieren und konfigurieren eine Version von n8n, die eine robustere Bereitstellung von n8n in Cloud Run für die Produktion ermöglicht. Sie umfasst Ressourcen wie eine Datenbank für die Persistenz und Secret Manager für vertrauliche Daten.

Aufgaben

  • n8n in Google Cloud Run bereitstellen. Cloud Run ist eine vollständig verwaltete,serverlose Computing-Plattform, auf der zustandslose Container in der Infrastruktur von Google ausgeführt werden.

Lerninhalte

  • Eine Cloud SQL for PostgreSQL-Datenbank bereitstellen und füllen, die als persistente und robuste Version für unsere n8n-Installation dient.
  • Das n8n-Container-Image in Google Cloud Run bereitstellen.
  • Die Installation von n8n in Google Cloud Run testen.

Voraussetzungen

  • Chrome-Webbrowser
  • Ein Gmail-Konto
  • Ein Cloud-Projekt mit aktivierter Abrechnung

2. Hinweis

Projekt erstellen

  1. Wählen Sie in der Google Cloud Console auf der Seite der Projektauswahl ein Google Cloud-Projekt aus oder erstellen Sie eines.
  2. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. Informationen zum Prüfen, ob die Abrechnung für ein Projekt aktiviert ist
  3. Sie verwenden Cloud Shell, eine Befehlszeilenumgebung, die in Google Cloud ausgeführt wird und in der bq vorinstalliert ist. Klicken Sie oben in der Google Cloud Console auf Cloud Shell aktivieren.

Bild der Schaltfläche „Cloud Shell aktivieren“

  1. Sobald die Verbindung mit der Cloud Shell hergestellt ist, prüfen Sie mit dem folgenden Befehl, ob Sie bereits authentifiziert sind und für das Projekt schon Ihre Projekt-ID eingestellt ist:
gcloud auth list
  1. Führen Sie in Cloud Shell den folgenden Befehl aus, um zu bestätigen, dass der gcloud-Befehl Ihr Projekt kennt.
gcloud config list project
  1. Wenn Ihr Projekt nicht festgelegt ist, verwenden Sie den folgenden Befehl, um es festzulegen:
gcloud config set project <YOUR_PROJECT_ID>
  1. Aktivieren Sie die erforderlichen APIs mit dem unten gezeigten Befehl. Das kann einige Minuten dauern.
gcloud services enable run.googleapis.com \
                       sqladmin.googleapis.com \
                       secretmanager.googleapis.com 

Nach erfolgreicher Ausführung des Befehls sollte eine Meldung ähnlich der folgenden angezeigt werden:

Operation "operations/..." finished successfully.

Wenn eine API fehlt, können Sie sie jederzeit während der Implementierung aktivieren. Weitere Informationen finden Sie in der Dokumentation zu gcloud-Befehlen und ihrer Verwendung.

Zum Schluss legen wir einige Umgebungsvariablen fest, die wir in den Skripts verwenden, die wir in den nächsten Schritten ausführen. Führen Sie in Ihrem Cloud Shell-Terminal die folgenden beiden Befehle aus. Ersetzen Sie dabei GCP_PROJECT_ID und GCP_REGION durch die entsprechenden Werte für Ihre Projekt-ID und die Region (z. B. us-central1), in der Sie diese Bereitstellung ausführen möchten. Wir verwenden us-central1 für die Bereitstellung.

export PROJECT_ID=GCP_PROJECT_ID
export REGION=us-central1

3. Cloud SQL-Instanz erstellen

Wir verwenden eine Google Cloud SQL for PostgreSQL-Instanz, die als Persistenzebene zum Speichern unserer n8n-Instanz und Ausführungsdaten dient. Das ist erforderlich, damit unsere Einrichtung dauerhaft ist.

Cloud SQL for PostgreSQL ist ein vollständig verwalteter Datenbankdienst, mit dem Sie relationale PostgreSQL-Datenbanken auf der Google Cloud Platform einrichten und verwalten können.

Führen Sie den folgenden Befehl in Cloud Shell aus, um die Instanz zu erstellen:

gcloud sql instances create n8n-db \
--database-version=POSTGRES_15 \
--tier db-g1-small \
--region=us-central1 \
--edition=ENTERPRISE \
--root-password=postgres

Die Ausführung dieses Befehls dauert etwa 5 Minuten. Nachdem der Befehl erfolgreich ausgeführt wurde, sollte eine Ausgabe angezeigt werden, die angibt, dass der Befehl abgeschlossen ist, zusammen mit den Informationen zur Cloud SQL-Instanz wie NAME, DATABASE_VERSION, LOCATION usw.

Beachten Sie, dass wir den Wert root-password als postgres verwendet haben. Wenn Sie ihn ändern, halten Sie ihn bereit.

4. n8n-Datenbank und Anmeldedaten für Datenbanknutzer einrichten

Nachdem unsere Cloud SQL for PostgreSQL-Instanz bereit ist, können wir darin unsere n8n-Datenbank erstellen und unser Datenbankpasswort und unseren Verschlüsselungsschlüssel in Google Cloud Secret Manager speichern.

Erstellen wir zuerst eine Datenbank mit dem Namen n8n in unserer Cloud SQL-Instanz (n8n-db), die wir erstellt haben. Alle folgenden Befehle müssen im Google Cloud Shell-Terminal ausgeführt werden.

gcloud sql databases create n8n --instance=n8n-db

Nach erfolgreicher Erstellung sollte eine Meldung wie die folgende angezeigt werden:

Creating Cloud SQL database...done.                                                                                                                                                                                                           
Created database [n8n].
instance: n8n-db
name: n8n
project: YOUR_GCP_PROJECT_ID

Nachdem die Datenbank erstellt wurde, erstellen wir ein Nutzerkonto für diese Datenbank. Wir verwenden die folgenden Anmeldedaten:

  • Nutzer-ID : n8n-user
  • Passwort : n8n

Hinweis: Wenn Sie ein anderes, stärkeres Passwort verwenden möchten (für die Produktion empfohlen), sollten Sie dieses anstelle des hier gewählten Passworts (n8n) verwenden. Achten Sie jedoch darauf, dass Sie es auch in den nächsten Befehlen einheitlich verwenden.

Der Befehl zum Erstellen des Datenbanknutzers ist unten angegeben:

gcloud sql users create n8n-user \
    --instance=n8n-db \
    --password="n8n"

An dieser Stelle ist es ratsam, die Anmeldedaten für das Datenbankpasswort und den Verschlüsselungsschlüssel in Google Cloud Secret Manager zu speichern. Secret Manager bietet eine sichere und bequeme Möglichkeit, API-Schlüssel, Passwörter, Zertifikate und andere vertrauliche Daten zu speichern.

Wir beginnen mit dem folgenden Befehl, der das von uns verwendete Passwort (n8n) verwendet und es an den Befehl gcloud secrets create weiterleitet. Unser geheimer Schlüssel ist n8n-db-password.

printf "n8n" | gcloud secrets create n8n-db-password --replication-policy="automatic" --data-file=-        

Ebenso verwenden wir die nächsten Befehle, um einen Verschlüsselungsschlüssel zu generieren und dann eine geheime Variable `n8n-encryption-key` zu erstellen, die den Wert enthält.

openssl rand -base64 -out my-encryption-key 42

gcloud secrets create n8n-encryption-key \
    --data-file=my-encryption-key \
    --replication-policy="automatic"        

5. Dienstkonto für Google Cloud Run erstellen

Im nächsten Schritt stellen wir n8n in Google Cloud Run bereit. Dazu erstellen wir ein Dienstkonto, das von Cloud Run zum Ausführen von n8n-Workflows verwendet wird. Wir möchten sicherstellen, dass das von uns erstellte Dienstkonto nur die minimal erforderlichen Rollen/Berechtigungen in Google Cloud hat.

Angesichts unserer aktuellen Anforderungen benötigen wir die folgenden Rollen für das von uns erstellte Dienstkonto:

  • roles/cloudsql.client : Diese Rolle ist erforderlich, damit das Dienstkonto auf unsere Cloud SQL-Datenbank zugreifen kann.
  • roles/secretAccessor : Wir müssen diese Rolle bereitstellen, um auf die Secret Manager-Schlüssel für n8n-db-password und n8n-encryption-key zuzugreifen.

Fangen wir an. Alle folgenden Befehle müssen in Google Cloud Shell ausgeführt werden. Mit dem ersten Befehl wird das Dienstkonto erstellt und dann werden die erforderlichen Rollen wie besprochen bereitgestellt. Führen Sie die Befehle nacheinander aus. Wenn Sie aufgefordert werden, eine Bedingung für einen der folgenden Befehle anzugeben, wählen Sie "None" aus.

gcloud iam service-accounts create n8n-service-account \
    --display-name="n8n Service Account"

export SA_NAME=n8n-service-account@$PROJECT_ID.iam.gserviceaccount.com

gcloud secrets add-iam-policy-binding n8n-db-password \
    --member="serviceAccount:$SA_NAME" \
    --role="roles/secretmanager.secretAccessor"

gcloud secrets add-iam-policy-binding n8n-encryption-key \
    --member="serviceAccount:$SA_NAME" \
    --role="roles/secretmanager.secretAccessor"

gcloud projects add-iam-policy-binding $PROJECT_ID \
    --member="serviceAccount:$SA_NAME" \
    --role="roles/cloudsql.client"

Wir können jetzt das n8n-Container-Image in Google Cloud Run bereitstellen.

6. n8n in Google Cloud Run bereitstellen

Führen Sie den folgenden Befehl in Google Cloud Shell aus:

gcloud run deploy n8n \
    --image=n8nio/n8n:latest \
    --command="/bin/sh" \
    --args="-c,sleep 5;n8n start" \
    --region=$REGION \
    --allow-unauthenticated \
    --port=5678 \
    --memory=2Gi \
    --no-cpu-throttling \--set-env-vars="N8N_PORT=5678,N8N_PROTOCOL=https,N8N_ENDPOINT_HEALTH=health,DB_TYPE=postgresdb,DB_POSTGRESDB_DATABASE=n8n,DB_POSTGRESDB_USER=n8n-user,DB_POSTGRESDB_HOST=/cloudsql/$PROJECT_ID:$REGION:n8n-db,DB_POSTGRESDB_PORT=5432,DB_POSTGRESDB_SCHEMA=public,GENERIC_TIMEZONE=UTC,QUEUE_HEALTH_CHECK_ACTIVE=true" \
    --set-secrets="DB_POSTGRESDB_PASSWORD=n8n-db-password:latest,N8N_ENCRYPTION_KEY=n8n-encryption-key:latest" \
    --add-cloudsql-instances=$PROJECT_ID:$REGION:n8n-db \
    --service-account=$SA_NAME

Die Bereitstellung dauert wahrscheinlich etwa eine Minute. Nach erfolgreicher Bereitstellung sollte eine Meldung ähnlich der folgenden angezeigt werden:

Deploying container to Cloud Run service [n8n] in project [YOUR_PROJECT_ID] region [us-central1]
Deploying new service...                                                                                                                                                                                                                      
  Setting IAM Policy...done                                                                                                                                                                                                                   
  Creating Revision...done                                                                                                                                                                                                                    
  Routing traffic...done                                                                                                                                                                                                                      
Done.                                                                                                                                                                                                                                         
Service [n8n] revision [n8n-00001-8nh] has been deployed and is serving 100 percent of traffic.
Service URL: https://n8n-<SOME_ID>.us-central1.run.app

Notieren Sie sich die Dienst-URL in der obigen Ausgabe, da Sie sie im nächsten Schritt zum Starten der n8n-Konsole verwenden.

7. n8n-Workflow ausführen

Starten Sie einen Browser und rufen Sie die Dienst-URL auf, die Sie im vorherigen Schritt erhalten haben. Sie können die Dienst-URL auch auf der Cloud Run-Startseite abrufen, wo n8n als einer der Dienste aufgeführt ist.

Hinweis: Wenn Sie eine Fehlermeldung sehen, dass die Seite Cannot GET / nicht aufgerufen werden kann oder dass n8n is starting up angezeigt wird, bedeutet das in der Regel, dass n8n noch gestartet wird. Sie können die Seite aktualisieren und sie sollte schließlich geladen werden.

Schließlich wird ein Bildschirm wie der unten gezeigte angezeigt, auf dem Sie das Inhaberkonto einrichten können:

5a3b1d60d02b13ec.png

Geben Sie die erforderlichen Details ein, notieren Sie sich das Passwort und schließen Sie die Einrichtung ab. Sie können einige der Schritte überspringen, einschließlich des Schritts, in dem Sie aufgefordert werden, einen Lizenzschlüssel zu senden.

Wenn alles wie geplant ausgeführt wird, sehen Sie die Startseite für n8n wie unten dargestellt:

3e072e9189ff9464.png

Wenn Sie mit n8n vertraut sind, können Sie sich durcharbeiten und das Codelab abschließen.

Wenn Sie n8n kurz testen möchten, können Sie den folgenden Workflow ausprobieren:

  1. Klicken Sie auf „Credentials“ (Anmeldedaten) und dann auf Add first credential (Erste Anmeldedaten hinzufügen).

14a1f3d2098a266c.png

  1. Wir richten Anmeldedaten für einen Gemini API-Schlüssel ein. Geben Sie „gemini“ ein, um die Option „Google Gemini (PaLM) Api“ aufzurufen, und klicken Sie dann auf Continue (Weiter).

7f48bfe35e5d9e98.png

  1. Sie erhalten den Gemini API-Schlüssel unter https://aistudio.google.com/app/api-keys.
  2. Fügen Sie den Schlüssel ein. n8n validiert den Schlüssel und die Anmeldedaten sind jetzt eingerichtet.

3f31cbfc5072f113.png 5. Rufen Sie jetzt die Option „Workflows“ (Workflows) auf und klicken Sie auf „Start from scratch“ (Von Grund auf neu beginnen) oder erstellen Sie einen neuen Workflow. Daraufhin wird eine leere Arbeitsfläche angezeigt, auf der Sie die folgenden beiden Knoten erstellen können: einen Trigger (Simple Chat) und einen Agent. Für den Agent richten wir die von uns erstellten Anmeldedaten ein, sodass das Agent-Modell Google Gemini ist. Schließlich sollte ein Workflow wie dieser angezeigt werden:

8f394e456ae7d1a.png

  1. Sie können diesen Workflow über den Chatbereich ausführen und erhalten dann Antworten auf Ihre Prompts. Beispielhafte Ausführungsbildschirme sind unten dargestellt:

aec85c84f65d0da1.png

Damit ist die Validierung unserer n8n-Bereitstellung in Google Cloud Run abgeschlossen.

8. Bereinigen

Wenn Sie dieses Codelab verwendet haben, um zu erfahren, wie Sie n8n in Google Cloud Run installieren und ausführen, und es nicht für die Produktion oder für dauerhafte Anforderungen verwenden möchten, können Sie laufende Gebühren für Ihr Google Cloud-Konto vermeiden. Dazu müssen Sie die Ressourcen löschen, die wir während dieses Workshops erstellt haben.

Wir löschen die Cloud SQL-Instanz und den von uns bereitgestellten Cloud Run-Dienst.

Prüfen Sie, ob die folgenden Umgebungsvariablen gemäß Ihrem Projekt und Ihrer Region richtig festgelegt sind:

export PROJECT_ID="YOUR_PROJECT_ID"
export REGION="YOUR_REGION"

Mit den folgenden beiden Befehlen werden die von uns bereitgestellten Cloud Run-Dienste gelöscht:

gcloud run services delete n8n --platform=managed --region=${REGION} --project=${PROJECT_ID} --quiet

Mit dem folgenden Befehl wird die Cloud SQL-Instanz gelöscht:

gcloud sql instances delete n8n-db

Mit den folgenden beiden Befehlen werden die von uns erstellten Secret Manager-Schlüssel gelöscht:

gcloud secrets delete n8n-db-password

gcloud secrets delete n8n-encryption-key

9. Glückwunsch

Glückwunsch! Sie haben n8n erfolgreich in Google Cloud Run bereitgestellt und die Einrichtung mit einem Beispielworkflow validiert.

Referenzdokumente