Wdrażanie i uruchamianie n8n w Google Cloud Run

1. Wprowadzenie

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

Ten przewodnik opiera się na dokumentacji n8n, która wyjaśnia, jak hostować n8n w Google Cloud Run. Zainstalujemy i skonfigurujemy wersję n8n, która jest bardziej wytrzymałym wdrożeniem n8n w Cloud Run na potrzeby środowiska produkcyjnego. Obejmuje zasoby takie jak baza danych do przechowywania trwałych danych i menedżer obiektów tajnych do przechowywania danych wrażliwych.

Co musisz zrobić

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

Czego się nauczysz

  • Aprowizowanie i wypełnianie bazy danych Cloud SQL for PostgreSQL, która będzie działać jako trwała wersja instalacji n8n.
  • Udostępnij obraz kontenera n8n w Google Cloud Run.
  • Sprawdź instalację n8n w Google Cloud Run.

Czego potrzebujesz

  • przeglądarki 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 projektów wybierz lub utwórz projekt Google Cloud.
  2. Sprawdź, czy w projekcie Cloud 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 narzędziem bq. U góry konsoli Google Cloud kliknij Aktywuj Cloud Shell.

Obraz przycisku aktywacji Cloud Shell

  1. Po połączeniu z Cloud Shell sprawdź, czy jesteś już uwierzytelniony i czy projekt jest 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, aby go ustawić:
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 zachowaj 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 poniżej:

Operation "operations/..." finished successfully.

Jeśli pominiesz jakiś interfejs API, możesz go włączyć w trakcie wdrażania. 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 uruchamianych w kolejnych krokach. W terminalu Cloud Shell wykonaj te 2 polecenia (pamiętaj, aby zastąpić GCP_PROJECT_IDGCP_REGION odpowiednimi wartościami identyfikatora projektu i regionu, w którym chcesz przeprowadzić wdrożenie, np. us-central1): W przypadku wdrożenia użyjemy us-central1.

export PROJECT_ID=GCP_PROJECT_ID
export REGION=us-central1

3. Tworzenie instancji Cloud SQL

Będziemy używać instancji Google 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 zajmuje około 5 minut. Po pomyślnym wykonaniu polecenia powinny się wyświetlić dane wyjściowe wskazujące, że polecenie zostało wykonane, a także informacje o instancji Cloud SQL, takie jak NAME, DATABASE_VERSION, LOCATION itp.

Pamiętaj, że użyliśmy wartości root-password jako postgres. Jeśli zmienisz go na inny, zapisz go.

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

Gdy instancja Cloud SQL for PostgreSQL będzie gotowa, 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 instancji Cloud SQL (n8n-db). Wszystkie polecenia poniżej należy uruchamiać w terminalu Google Cloud Shell.

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

Po utworzeniu powinna pojawić się wiadomość podobna do tej:

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

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

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

Uwaga: jeśli chcesz użyć innego, silniejszego hasła (zalecanego 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 podano poniżej:

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

W tym momencie warto zapisać dane logowania do bazy danych użytkowników oraz klucz szyfrowania w usłudze Secret Manager Google Cloud, która 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 hasło (n8n)) i przekazuje je do polecenia gcloud secrets create. Nasz klucz obiektu tajnego to n8n-db-password.

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

Podobnie użyjemy kolejnego zestawu poleceń, aby wygenerować klucz szyfrowania, a następnie utworzyć tajną zmienną n8n-encryption-key, która będzie przechowywać 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 na potrzeby Google Cloud Run

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

Zgodnie z naszymi obecnymi wymaganiami utworzone przez nas konto usługi będzie potrzebować tych ról:

  • roles/cloudsql.client : jest to wymagane, aby konto usługi miało dostęp do naszej bazy danych Cloud SQL.
  • roles/secretAccessor : musimy przyznać tę rolę, aby uzyskać dostęp do kluczy Menedżera obiektów tajnych zarówno w przypadku n8n-db-password, jak i n8n-encryption-key.

Zaczynamy. Wszystkie polecenia poniżej muszą być wykonane w Google Cloud Shell. Pierwsza z nich tworzy konto usługi, a następnie przypisuje do niego wymagane role. Uruchom wszystkie polecenia po kolei. Jeśli w przypadku któregoś z poniższych poleceń 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"

Możemy teraz wdrożyć obraz kontenera n8n w Google Cloud Run.

6. Wdrażanie n8n w Google Cloud Run

Uruchom to polecenie w Google Cloud Shell:

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,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 powinno potrwać około minuty. Po pomyślnym wdrożeniu powinien wyświetlić się komunikat podobny do tego poniżej:

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

Zanotuj adres URL usługi z 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, na której n8n jest wymieniona jako jedna z usług.

Uwaga: jeśli pojawi się błąd Cannot GET / lub n8n is starting up, zwykle oznacza to, że n8n nadal się uruchamia. Odśwież stronę. Powinna się w końcu załadować.

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

5a3b1d60d02b13ec.png

Podaj wymagane informacje, zapisz hasło i dokończ konfigurację. Możesz pominąć niektóre kroki, w tym ten, w którym prosisz o przesłanie klucza licencyjnego.

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 modułem i go ukończysz.

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

  1. Kliknij Dane logowania, a następnie Dodaj pierwsze dane logowania.

14a1f3d2098a266c.png

  1. Skonfigurujemy dane logowania klucza interfejsu Gemini API. Wpisz „gemini”, aby wyświetlić opcję interfejsu Google Gemini (PaLM) API, a następnie kliknij 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 sprawdzi jego poprawność i dane logowania zostaną skonfigurowane.

3f31cbfc5072f113.png 5. Teraz otwórz opcję Przepływy pracy i kliknij Zacznij od zera lub Utwórz nowy przepływ pracy. Wyświetli się puste pole, w którym możesz utworzyć 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. Gotowy przepływ pracy powinien wyglądać tak:

8f394e456ae7d1a.png

  1. Możesz uruchomić ten proces w panelu czatu i jeśli wszystko pójdzie dobrze, otrzymasz odpowiedź na swoje prompty. Przykładowe ekrany wykonania są widoczne poniżej:

aec85c84f65d0da1.png

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

8. Czyszczenie

Jeśli ten przewodnik służy Ci do nauki instalowania i uruchamiania n8n w Google Cloud Run, a nie do celów produkcyjnych lub stałych, możesz uniknąć obciążania konta Google Cloud bieżącymi opłatami. W tym celu usuń zasoby utworzone podczas tych warsztatów.

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

Sprawdź, czy te zmienne środowiskowe są prawidłowo ustawione zgodnie z 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