Wdrażanie i uruchamianie n8n w Google Cloud Run

1. Wprowadzenie

W tym ćwiczeniu skonfigurujesz n8n w Google Cloud Run. n8n to narzędzie do automatyzacji przepływu pracy typu open source, które umożliwia użytkownikom łączenie różnych aplikacji i usług w celu automatyzacji powtarzalnych zadań.

Ćwiczenie jest oparte na przewodniku po dokumentacji n8n, który wyjaśnia, jak hostować n8n w Google Cloud Run. Zainstalujemy i skonfigurujemy wersję n8n, która jest trwalszym wdrożeniem n8n w Cloud Run na potrzeby środowiska produkcyjnego. Obejmuje ona zasoby takie jak baza danych do przechowywania danych i Secret Manager do przechowywania danych wrażliwych.

Co zrobisz

  • Wdrożysz n8n w Google Cloud Run, czyli usłudze w pełni zarządzanej, bezserwerowej platformie obliczeniowej, która uruchamia kontenery bezstanowe w infrastrukturze Google.

Czego się nauczysz

  • Jak utworzyć i wypełnić bazę danych Cloud SQL for PostgreSQL, która będzie trwałą wersją naszej instalacji n8n.
  • Jak udostępnić obraz kontenera n8n w Google Cloud Run.
  • Jak przetestować instalację n8n w Google Cloud Run.

Czego potrzebujesz

  • Przeglądarka Chrome
  • Konto Gmail
  • Projekt Cloud z włączonymi płatnościami

2. Zanim zaczniesz

Utwórz projekt

  1. W konsoli Google Cloud na stronie selektora projektu wybierz lub utwórz projekt Google Cloud .
  2. Sprawdź, czy w projekcie w chmurze włączone są płatności. Dowiedz się, jak sprawdzić, czy w projekcie są włączone płatności .
  3. Będziesz używać Cloud Shell, czyli środowiska wiersza poleceń działającego w Google Cloud, które jest wstępnie załadowane za pomocą bq. Kliknij Aktywuj Cloud Shell na górze konsoli Google Cloud.

Obraz przycisku aktywowania Cloud Shell

  1. Po połączeniu z Cloud Shell możesz sprawdzić, czy uwierzytelnianie zostało już przeprowadzone, a projekt jest już ustawiony na Twój identyfikator projektu, używając tego polecenia:
gcloud auth list
  1. Aby potwierdzić, że polecenie gcloud zna Twój projekt, uruchom w Cloud Shell to polecenie:
gcloud config list project
  1. Jeśli projekt nie jest ustawiony, użyj tego polecenia:
gcloud config set project <YOUR_PROJECT_ID>
  1. Włącz wymagane interfejsy API za pomocą polecenia pokazanego poniżej. Może to potrwać kilka minut, więc uzbrój się w cierpliwość.
gcloud services enable run.googleapis.com \
                       sqladmin.googleapis.com \
                       secretmanager.googleapis.com 

Po pomyślnym wykonaniu polecenia powinien wyświetlić się komunikat podobny do tego:

Operation "operations/..." finished successfully.

Jeśli pominiesz jakiś interfejs API, zawsze możesz go włączyć podczas implementacji. Informacje o poleceniach gcloud i ich użyciu znajdziesz w dokumentacji.

Na koniec ustawimy kilka zmiennych środowiskowych, których będziemy używać w skryptach, które uruchomimy w kolejnych krokach. W terminalu Cloud Shell wykonaj te 2 polecenia (pamiętaj, aby zastąpić GCP_PROJECT_ID i GCP_REGION odpowiednimi wartościami identyfikatora projektu i regionu (np. us-central1), w którym chcesz przeprowadzić to wdrożenie. Na potrzeby wdrożenia użyjemy regionu us-central1.

export PROJECT_ID=GCP_PROJECT_ID
export REGION=us-central1

3. Tworzenie instancji Cloud SQL

Będziemy używać instancji Cloud SQL for PostgreSQL, która będzie naszą warstwą trwałości do przechowywania instancji n8n i danych wykonania. Jest to konieczne, aby nasza konfiguracja była trwała.

Cloud SQL for PostgreSQL to w pełni zarządzana usługa bazy danych, która pomaga w konfiguracji i utrzymaniu relacyjnych baz danych PostgreSQL w Google Cloud Platform, a także w zarządzaniu i administrowaniu takimi bazami.

Aby utworzyć instancję, uruchom w Cloud Shell to polecenie:

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

Wykonanie tego polecenia trwa około 5 minut. Po pomyślnym wykonaniu polecenia powinien wyświetlić się komunikat informujący o zakończeniu polecenia oraz informacje o instancji Cloud SQL, takie jak NAZWA, WERSJA_BAZY_DANYCH, LOKALIZACJA itp.

Pamiętaj, że jako wartość root-password użyliśmy postgres. Jeśli zmienisz ją na inną, zapisz ją.

4. Konfigurowanie bazy danych n8n i danych logowania użytkownika bazy danych

Teraz, gdy mamy już gotową instancję Cloud SQL for PostgreSQL, możemy utworzyć w niej bazę danych n8n, a także zapisać hasło do bazy danych i klucz szyfrowania w Google Cloud Secrets Manager.

Najpierw utwórzmy bazę danych o nazwie n8n w utworzonej przez nas instancji Cloud SQL (n8n-db). Wszystkie polecenia poniżej należy uruchomić w terminalu Google Cloud Shell.

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

Po pomyślnym utworzeniu powinien wyświetlić się komunikat podobny do tego:

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

Teraz, gdy baza danych jest utworzona, utwórzmy dla niej konto użytkownika. Użyjemy tych danych logowania:

  • Identyfikator użytkownika : n8n-user
  • Hasło : n8n

Uwaga: jeśli chcesz użyć innego, silniejszego hasła (zalecane w przypadku środowiska produkcyjnego), użyj go zamiast hasła, które wybraliśmy tutaj, czyli n8n. Pamiętaj jednak, aby używać go konsekwentnie w kolejnych poleceniach.

Polecenie tworzenia użytkownika bazy danych podajemy poniżej:

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

W tym momencie warto zapisać dane logowania do hasła użytkownika bazy danych i klucza szyfrowania w Google Cloud Secret Manager, który jest bezpiecznym i wygodnym systemem przechowywania kluczy interfejsu API, haseł, certyfikatów i innych danych wrażliwych.

Zaczynamy od tego polecenia, które pobiera użyte przez nas hasło (n8n) i przekazuje je do polecenia gcloud secrets create. Nasz klucz obiektu tajnego będzie mieć nazwę n8n-db-password.

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

Podobnie użyjemy następnego zestawu poleceń, aby wygenerować klucz szyfrowania, a następnie utworzyć zmienną tajną n8n-encryption-key, która będzie przechowywać tę wartość.

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

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

5. Tworzenie konta usługi dla Google Cloud Run

W następnym kroku wdrożymy n8n w Google Cloud Run. Aby się do tego przygotować, utworzymy konto usługi, które Cloud Run będzie używać do wykonywania przepływów pracy n8n. W tym celu chcemy się upewnić, że utworzone przez nas konto usługi ma tylko minimalne wymagane role i uprawnienia w Google Cloud.

Biorąc pod uwagę nasze obecne wymagania, będziemy potrzebować tych ról dla tworzonego konta usługi:

  • roles/cloudsql.client : jest to wymagane, aby konto usługi mogło uzyskać dostęp do naszej bazy danych Cloud SQL.
  • roles/secretAccessor : musimy przypisać tę rolę, aby uzyskać dostęp do kluczy Secret Manager zarówno dla n8n-db-password, jak i n8n-encryption-key.

Zaczynamy. Wszystkie polecenia poniżej należy wykonać w Google Cloud Shell. Pierwsze polecenie tworzy konto usługi, a następnie przypisujemy wymagane role. Uruchom każde polecenie po kolei. Jeśli w przypadku któregoś z poleceń poniżej pojawi się prośba o określenie warunku, wybierz "None".

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"

Teraz możemy wdrożyć obraz kontenera n8n w Google Cloud Run.

6. Wdrażanie n8n w Google Cloud Run

Uruchom w Google Cloud Shell to polecenie:

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

Wdrożenie potrwa prawdopodobnie około minuty. Po pomyślnym wdrożeniu powinien wyświetlić się komunikat podobny do tego:

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

Zapisz adres URL usługi w powyższych danych wyjściowych, ponieważ użyjesz go w następnym kroku do uruchomienia konsoli n8n.

7. Uruchamianie przepływu pracy n8n

Uruchom przeglądarkę i otwórz adres URL usługi uzyskany w poprzednim kroku. Adres URL usługi możesz też uzyskać na stronie głównej Cloud Run, gdzie n8n będzie widoczny jako jedna z usług.

Uwaga: jeśli pojawi się błąd „Cannot GET /” lub komunikat „n8n is starting up”, zwykle oznacza to, że n8n nadal się uruchamia.Cannot GET /n8n is starting up Możesz odświeżyć stronę, która powinna się w końcu wczytać.

W końcu zobaczysz ekran podobny do tego poniżej, na którym możesz skonfigurować konto właściciela:

5a3b1d60d02b13ec.png

Wypełnij wymagane informacje, zapisz hasło i dokończ konfigurację. Możesz pominąć niektóre kroki, w tym krok, w którym trzeba wysłać klucz licencyjny.

Jeśli wszystko pójdzie dobrze, powinna się wyświetlić strona główna n8n, jak pokazano poniżej:

3e072e9189ff9464.png

Jeśli znasz n8n, poradzisz sobie z tym i ukończysz ćwiczenie.

Jeśli chcesz przetestować n8n, możesz wypróbować ten przepływ pracy:

  1. Kliknij Credentials (Dane logowania), a następnie Add first credential (Dodaj pierwsze dane logowania).

14a1f3d2098a266c.png

  1. Skonfigurujemy dane logowania klucza interfejsu Gemini API. Wpisz gemini, aby wyświetlić opcję Google Gemini (PaLM) API, a następnie kliknij Continue (Dalej).

7f48bfe35e5d9e98.png

  1. Klucz interfejsu Gemini API możesz uzyskać na stronie https://aistudio.google.com/app/api-keys.
  2. Gdy uzyskasz klucz, wklej go. n8n zweryfikuje klucz i dane logowania zostaną skonfigurowane.

3f31cbfc5072f113.png 5. Teraz otwórz opcję Workflows (Przepływy pracy) i kliknij Start from scratch (Zacznij od zera) lub utwórz nowy przepływ pracy. Spowoduje to wyświetlenie pustego obszaru roboczego, w którym możesz utworzyć te 2 węzły: jeden to wyzwalacz (Simple Chat), a drugi to agent, w którym skonfigurujemy utworzone przez nas dane logowania, aby model agenta był Google Gemini. Na koniec powinien powstać przepływ pracy, który wygląda tak:

8f394e456ae7d1a.png

  1. Możesz uruchomić ten przepływ pracy za pomocą okienka czatu i, jeśli wszystko pójdzie dobrze, uzyskać odpowiedź na swoje pytania. Przykładowe ekrany wykonania pokazujemy poniżej:

aec85c84f65d0da1.png

To już koniec sprawdzania wdrożenia n8n w Google Cloud Run.

8. Czyszczenie

Jeśli używasz tego ćwiczenia, aby dowiedzieć się, jak zainstalować i uruchomić n8n w Google Cloud Run, a nie na potrzeby środowiska produkcyjnego lub stałych wymagań, możesz uniknąć ciągłych opłat na koncie Google Cloud. W tym celu musisz usunąć zasoby utworzone podczas tych warsztatów.

Usuniemy instancję Cloud SQL i wdrożoną przez nas usługę Cloud Run.

Upewnij się, że te zmienne środowiskowe są prawidłowo ustawione zgodnie z Twoim projektem i regionem:

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

Te 2 polecenia usuwają wdrożone przez nas usługi Cloud Run:

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

To polecenie usuwa instancję Cloud SQL:

gcloud sql instances delete n8n-db

Te 2 polecenia usuwają utworzone przez nas klucze Secret Manager:

gcloud secrets delete n8n-db-password

gcloud secrets delete n8n-encryption-key

9. Gratulacje

Gratulacje! Udało Ci się wdrożyć n8n w Google Cloud Run i sprawdzić konfigurację za pomocą przykładowego przepływu pracy.

Dokumentacja