Google Cloud Run에서 n8n 배포 및 실행

1. 소개

이 Codelab에서는 Google Cloud Run에 n8n을 설정합니다. n8n은 사용자가 다양한 애플리케이션과 서비스를 연결하여 반복적인 작업을 자동화할 수 있는 오픈소스 워크플로 자동화 도구입니다.

이 Codelab은 Google Cloud Run에서 n8n을 호스팅하는 방법을 설명하는 n8n 문서 가이드를 기반으로 합니다. Cloud Run에서 n8n의 더 안정적인 프로덕션 등급 배포인 n8n 버전을 설치하고 구성합니다. 여기에는 지속성을 위한 데이터베이스, 민감한 정보를 위한 Secret Manager와 같은 리소스가 포함됩니다.

실습할 내용

  • Google 인프라에서 스테이트리스 컨테이너를 실행하는 완전 관리형 서버리스 컴퓨팅 플랫폼인 Google Cloud Run에 n8n을 배포합니다.

학습할 내용

  • n8n 설치의 영구적이고 내구성이 있는 버전으로 작동할 PostgreSQL용 Cloud SQL 데이터베이스를 프로비저닝하고 채웁니다.
  • n8n 컨테이너 이미지를 Google Cloud Run에 프로비저닝합니다.
  • Google Cloud Run에 n8n 설치를 테스트합니다.

필요한 항목

  • Chrome 웹브라우저
  • Gmail 계정
  • 결제가 사용 설정된 Cloud 프로젝트

2. 시작하기 전에

프로젝트 만들기

  1. Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
  2. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요 .
  3. bq가 미리 로드되어 제공되는 Google Cloud에서 실행되는 명령줄 환경인 Cloud Shell을 사용합니다. Google Cloud 콘솔 상단에서 Cloud Shell 활성화를 클릭합니다.

Cloud Shell 활성화 버튼 이미지

  1. Cloud Shell에 연결되면 다음 명령어를 사용하여 인증이 완료되었고 프로젝트가 해당 프로젝트 ID로 설정되었는지 확인합니다.
gcloud auth list
  1. Cloud Shell에서 다음 명령어를 실행하여 gcloud 명령어가 프로젝트를 알고 있는지 확인합니다.
gcloud config list project
  1. 프로젝트가 설정되지 않은 경우 다음 명령어를 사용하여 설정합니다.
gcloud config set project <YOUR_PROJECT_ID>
  1. 아래에 표시된 명령어를 통해 필수 API를 사용 설정합니다. 몇 분 정도 걸릴 수 있으니 잠시 기다려 주세요.
gcloud services enable run.googleapis.com \
                       sqladmin.googleapis.com \
                       secretmanager.googleapis.com 

명령어가 성공적으로 실행되면 아래와 유사한 메시지가 표시됩니다.

Operation "operations/..." finished successfully.

API가 누락된 경우 구현 과정에서 언제든지 사용 설정할 수 있습니다. gcloud 명령어 및 사용법은 문서를 참조하세요.

마지막으로 다음 몇 단계에서 실행할 스크립트에 사용할 환경 변수를 몇 개 설정합니다. Cloud Shell 터미널에서 다음 두 명령어를 실행합니다. GCP_PROJECT_IDGCP_REGION은 프로젝트 ID 및 이 배포를 실행할 리전(예: us-central1)의 해당 값으로 바꿉니다. 배포에는 us-central1를 사용합니다.

export PROJECT_ID=GCP_PROJECT_ID
export REGION=us-central1

3. Cloud SQL 인스턴스 만들기

PostgreSQL용 Google Cloud SQL 인스턴스를 사용합니다. 이 인스턴스는 n8n 인스턴스와 실행 데이터를 저장하는 영속성 레이어가 됩니다. 이는 설정이 지속되도록 하기 위해 필요합니다.

PostgreSQL용 Cloud SQL은 Google Cloud Platform에서 PostgreSQL 관계형 데이터베이스를 설정, 유지, 관리할 수 있는 완전 관리형 데이터베이스 서비스입니다.

Cloud Shell에서 다음 명령어를 실행하여 인스턴스를 만듭니다.

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

이 명령어를 실행하는 데 약 5분이 걸립니다. 명령어가 성공적으로 실행되면 명령어 완료를 나타내는 출력과 함께 이름, DATABASE_VERSION, 위치 등 Cloud SQL 인스턴스 정보가 표시됩니다.

root-password 값을 postgres으로 사용했습니다. 다른 것으로 변경한 경우 해당 정보를 보관해 두세요.

4. n8n 데이터베이스 및 데이터베이스 사용자 인증 정보 설정

이제 PostgreSQL용 Cloud SQL 인스턴스가 준비되었으므로 Google Cloud Secret Manager에 데이터베이스 비밀번호와 암호화 키를 저장하는 것과 함께 해당 인스턴스에 n8n 데이터베이스를 만들 수 있습니다.

먼저 생성한 Cloud SQL 인스턴스 (n8n-db)에 n8n라는 데이터베이스를 만들어 보겠습니다. 아래의 모든 명령어는 Google Cloud Shell 터미널에서 실행해야 합니다.

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

생성이 완료되면 다음과 같은 메시지가 표시됩니다.

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

이제 데이터베이스가 생성되었으므로 해당 데이터베이스의 사용자 계정을 만들어 보겠습니다. 다음 사용자 인증 정보를 사용합니다.

  • 사용자 ID : n8n-user
  • 비밀번호 : n8n

참고: 더 강력한 다른 비밀번호를 사용하려면(프로덕션에 권장) 여기에서 선택한 비밀번호(n8n) 대신 해당 비밀번호를 사용해야 합니다. 다음 몇 가지 명령어에서도 일관되게 사용해야 합니다.

데이터베이스 사용자를 만드는 명령어는 아래와 같습니다.

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

이 시점에서 사용자 데이터베이스 비밀번호와 암호화 키의 사용자 인증 정보를 Google Cloud Secret Manager에 저장하는 것이 좋습니다. Google Cloud Secret Manager는 API 키, 비밀번호, 인증서, 기타 민감한 데이터를 위한 안전하고 편리한 스토리지 시스템입니다.

사용했던 비밀번호 (n8n))를 가져와 gcloud secrets create 명령어로 파이프하는 다음 명령어로 시작합니다. 보안 비밀 키는 n8n-db-password입니다.

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

마찬가지로 다음 명령어를 사용하여 암호화 키를 생성한 다음 값을 보유할 보안 비밀 변수 n8n-encryption-key를 만듭니다.

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

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

5. Google Cloud Run의 서비스 계정 만들기

다음 단계에서는 Google Cloud Run에 n8n을 배포합니다. 이를 위해 Cloud Run이 n8n 워크플로를 실행하는 데 사용할 서비스 계정을 만듭니다. 이를 위해 생성하는 서비스 계정에 Google Cloud의 최소 요구사항 역할/권한만 있어야 합니다.

현재 요구사항에 따라 생성하는 서비스 계정에 다음 역할이 필요합니다.

  • roles/cloudsql.client : 서비스 계정이 Cloud SQL 데이터베이스에 액세스하는 데 필요합니다.
  • roles/secretAccessor : n8n-db-passwordn8n-encryption-key의 Secret Manager 키에 액세스하려면 이 역할을 제공해야 합니다.

시작하겠습니다 아래의 모든 명령어는 Google Cloud Shell에서 실행해야 합니다. 첫 번째는 서비스 계정을 만들고 필요한 역할을 제공합니다. 각 명령어를 차례로 실행합니다. 아래 명령어의 조건을 지정하라는 메시지가 표시되면 "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"

이제 n8n 컨테이너 이미지를 Google Cloud Run에 배포할 수 있습니다.

6. n8n을 Google Cloud Run에 배포

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

배포하는 데 약 1분 정도 걸립니다. 배포가 성공하면 아래와 유사한 메시지가 표시됩니다.

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

다음 단계에서 n8n 콘솔을 실행하는 데 사용되므로 위의 출력에서 서비스 URL을 기록해 둡니다.

7. n8n 워크플로 실행

브라우저를 실행하고 이전 단계에서 확인한 서비스 URL로 이동합니다. Cloud Run 홈페이지에서 서비스 URL을 가져올 수도 있습니다. 여기에는 n8n이 서비스 중 하나로 표시됩니다.

참고: Cannot GET / 화면 또는 n8n is starting up 오류가 표시되면 일반적으로 n8n이 아직 시작 중임을 나타냅니다. 페이지를 새로고침하면 결국 로드됩니다.

결국 아래와 같이 소유자 계정을 설정할 수 있는 화면이 표시됩니다.

5a3b1d60d02b13ec.png

필수 세부정보를 입력하고 비밀번호를 기록한 후 설정을 완료합니다. 라이선스 키 전송을 요청하는 단계를 비롯한 일부 단계를 건너뛸 수 있습니다.

모두 잘 진행되면 아래와 같이 n8n 홈페이지가 표시됩니다.

3e072e9189ff9464.png

n8n에 익숙하다면 이 실습을 진행하고 완료할 수 있습니다.

n8n을 간단히 테스트해 보려면 다음 워크플로를 사용해 보세요.

  1. 사용자 인증 정보를 클릭한 다음 첫 번째 사용자 인증 정보 추가를 클릭합니다.

14a1f3d2098a266c.png

  1. Gemini API 키 사용자 인증 정보를 설정합니다. 'gemini'를 입력하여 Google Gemini (PaLM) API 옵션을 표시한 다음 계속을 클릭합니다.

7f48bfe35e5d9e98.png

  1. https://aistudio.google.com/app/api-keys에서 Gemini API 키를 가져올 수 있습니다.
  2. 키를 얻으면 붙여넣습니다. n8n에서 키를 검증하고 이제 사용자 인증 정보가 설정됩니다.

3f31cbfc5072f113.png 5. 이제 워크플로 옵션으로 이동하여 처음부터 시작하거나 새 워크플로를 만듭니다. 그러면 빈 캔버스가 표시됩니다. 여기에서 다음 두 노드를 빌드할 수 있습니다. 하나는 트리거 (Simple Chat)이고 다른 하나는 에이전트입니다. 에이전트 모델이 Google Gemini가 되도록 만든 사용자 인증 정보를 설정합니다. 최종적으로 다음과 같은 워크플로가 표시됩니다.

8f394e456ae7d1a.png

  1. 채팅 창을 통해 이 워크플로를 실행하고 모든 것이 제대로 진행되면 프롬프트에 대한 응답을 받을 수 있습니다. 샘플 실행 화면은 아래와 같습니다.

aec85c84f65d0da1.png

이로써 Google Cloud Run에서 n8n 배포의 유효성 검사가 완료됩니다.

8. 삭제

이 Codelab을 사용하여 Google Cloud Run에 n8n을 설치하고 실행하는 방법을 배우고 프로덕션 / 영구 요구사항이 아닌 경우 Google Cloud 계정에 지속적으로 요금이 청구되지 않도록 이 워크숍 중에 만든 리소스를 삭제하는 것이 중요합니다.

Cloud SQL 인스턴스를 삭제하고 배포한 Cloud Run 서비스를 삭제합니다.

프로젝트 및 리전에 따라 다음 환경 변수가 올바르게 설정되어 있는지 확인합니다.

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

다음 두 명령어는 배포한 Cloud Run 서비스를 삭제합니다.

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

다음 명령어는 Cloud SQL 인스턴스를 삭제합니다.

gcloud sql instances delete n8n-db

다음 두 명령어는 생성한 Secret Manager 키를 삭제합니다.

gcloud secrets delete n8n-db-password

gcloud secrets delete n8n-encryption-key

9. 축하합니다

축하합니다. Google Cloud Run에 n8n을 성공적으로 배포하고 샘플 워크플로로 설정을 검증했습니다.

참조 문서