콘텐츠로 이동
📣 인포그랩에서 OpenAI 기술 기반으로 자체 개발한 자동화 번역 프로그램을 통해 n8n 공식 문서의 한글판을 국내 최초로 제공합니다.

n8n을 Google Cloud에 호스팅하기#

이 호스팅 가이드는 Google Cloud(GCP)에서 n8n을 자체 호스팅하는 방법을 보여줍니다. 필요한 리소스 및 리버스 프록시를 관리하기 위해 Kubernetes를 사용하여 데이터베이스 백엔드로 Postgres와 함께 n8n을 사용합니다.

필수 조건#

자체 호스팅 사전 요구 사항

n8n을 자체 호스팅하려면 다음과 같은 기술적 지식이 필요합니다:

  • 서버 및 컨테이너 설정 및 구성
  • 애플리케이션 리소스 관리 및 확장
  • 서버 및 애플리케이션 보안 강화
  • n8n 구성

n8n은 전문가 수준의 사용자에게 자체 호스팅을 권장합니다. 실수로 인해 데이터 손실, 보안 문제, 서비스 중단이 발생할 수 있습니다. 서버 관리 경험이 부족한 경우, n8n은 n8n Cloud 사용을 추천합니다.

최신 및 차기 버전

n8n은 대부분의 주에 새로운 마이너 버전을 출시합니다. latest 버전은 프로덕션 환경에서 사용하도록 설계된 안정적인 버전입니다. next 버전은 가장 최근에 출시된 버전으로, 베타 버전으로 간주해야 하며 불안정할 수 있습니다. 문제를 발견하면 포럼에서 보고해 주세요.

현재 latest: 1.77.3
현재 next: 1.78.0

호스팅 옵션#

Google Cloud는 n8n을 호스팅하는 데 적합한 여러 옵션을 제공합니다. 여기에는 Cloud Run (컨테이너 실행에 최적화됨), Compute Engine (VMs) 및 Kubernetes Engine (Kubernetes에서 실행되는 컨테이너)가 포함됩니다.

이 가이드는 호스팅 옵션으로 Google Kubernetes Engine(GKE)을 사용합니다. Kubernetes를 사용하는 것은 추가적인 복잡성과 구성이 필요하지만, 수요 변화에 따라 n8n을 확장하는 데 가장 좋은 방법입니다.

이 가이드의 대부분 단계는 Google Cloud UI를 사용하지만, 모든 단계를 수행하기 위해 gcloud 명령줄 도구를 사용할 수도 있습니다.

프로젝트 생성#

GCP는 리소스와 구성을 논리적으로 조직하기 위해 프로젝트 생성이 권장됩니다. Google Cloud Console에서 n8n 배포를 위한 새 프로젝트를 생성하세요: 프로젝트 드롭다운 메뉴를 선택한 다음 NEW PROJECT 버튼을 클릭하세요. 그러고 나서 새로 생성된 프로젝트를 선택하세요. 이 가이드의 다른 단계를 따를 때, 올바른 프로젝트가 선택되었는지 확인하세요.

Kubernetes Engine API 활성화#

GKE는 기본적으로 활성화되어 있지 않습니다. 상단 검색창에서 "Kubernetes"를 검색하고 결과에서 "Kubernetes Engine"을 선택하세요.

ENABLE을 선택하여 이 프로젝트에 대한 Kubernetes Engine API를 활성화하세요.

클러스터 생성#

GKE 서비스 페이지에서 Clusters > CREATE를 선택하세요. "Standard" 클러스터 옵션을 선택해야 하며, n8n은 "Autopilot" 클러스터와 작동하지 않습니다. 변경할 특정 사항이 없다면 클러스터 구성을 기본값으로 두어도 됩니다.

Kubectl 컨텍스트 설정#

이 가이드의 나머지 단계는 GCP 인스턴스를 Kubectl 컨텍스트로 설정해야 합니다. 클러스터 인스턴스에 대한 연결 세부정보는 세부정보 페이지를 열고 CONNECT를 선택하면 찾을 수 있습니다. 표시된 코드 스니펫은 gcloud CLI 도구에 대한 연결 문자열을 보여줍니다. gcloud CLI에서 코드를 붙여넣고 실행하여 로컬 Kubernetes 설정을 새 gcloud 클러스터를 사용하도록 변경하세요.

구성 리포지토리 복제#

Kubernetes와 n8n은 일련의 구성 파일이 필요합니다. 로컬에서 이 리포지토리에서 이를 복제할 수 있습니다. 다음 단계에서는 파일 구성 및 정보 추가 방법을 설명합니다.

다음 명령어로 리포지토리를 복제하세요:

1
git clone https://github.com/n8n-io/n8n-kubernetes-hosting.git -b gcp

그리고 복제한 리포지토리 루트로 디렉토리를 변경하세요:

1
cd n8n-kubernetes-hosting

Postgres 구성#

대규모 n8n 배포를 위해 Postgres는 SQLite보다 더 강력한 데이터베이스 백엔드를 제공합니다.

지속적인 저장을 위한 볼륨 생성#

포드 재시작 간 데이터를 유지하려면 Postgres 배포에 지속적인 볼륨이 필요합니다. GCP에서 Postgres를 실행하려면 특정 Kubernetes 스토리지 클래스가 필요합니다. 세부사항은 이 가이드를 참조할 수 있지만, storage.yaml 매니페스트가 이를 생성합니다. allowedTopologies > matchedLabelExpressions > values 키 아래에서 스토리지 생성을 위한 지역을 변경할 수 있습니다. 기본적으로 us-central로 설정되어 있습니다.

1
2
3
4
5
6
7

allowedTopologies:
  - matchLabelExpressions:
      - key: failure-domain.beta.kubernetes.io/zone
        values:
          - us-central1-b
          - us-central1-c

Postgres 환경 변수#

Postgres는 컨테이너에서 실행되는 애플리케이션에 전달하기 위해 설정해야 하는 몇 가지 환경 변수가 필요합니다.

예제 postgres-secret.yaml 파일에는 각자의 값으로 교체해야 할 자리 표시자가 포함되어 있습니다. Postgres는 데이터베이스를 생성할 때 이 세부정보를 사용할 것입니다.

그런 다음 postgres-deployment.yaml 매니페스트는 이 매니페스트 파일의 값을 애플리케이션 포드에 전송하는 데 사용합니다.

n8n 구성#

파일 저장을 위한 볼륨 생성#

n8n 실행에 필수는 아니지만, 다음과 같은 경우에는 지속적인 볼륨 사용이 필요합니다:

  • 이진 데이터 노드와 같은 파일과 상호 작용하는 노드를 사용하는 경우.
  • 재시작 간 수동 n8n 암호화 키를 유지하려는 경우. 이는 시작 시 파일 저장소에 키가 포함된 파일을 저장합니다.

n8n-claim0-persistentvolumeclaim.yaml 매니페스트가 이를 생성하며, n8n 배포는 n8n-deployment.yaml 매니페스트의 volumes 섹션에서 해당 클레임을 마운트합니다.

1
2
3
4
5
6

volumes:
  - name: n8n-claim0
    persistentVolumeClaim:
      claimName: n8n-claim0

포드 리소스#

Kubernetes는 당신이 애플리케이션 컨테이너가 필요한 최소 리소스와 실행할 수 있는 한계를 선택적으로 지정할 수 있도록 합니다. 위에서 복제한 예제 YAML 파일에는 n8n-deployment.yamlpostgres-deployment.yaml 파일의 resources 섹션에 다음과 같은 내용이 포함되어 있습니다:

1
2
3
4
5
6
7

resources:
  requests:
    memory: "250Mi"
  limits:
    memory: "500Mi"
    

이는 각 컨테이너에 대해 최소 250mb, 최대 500mb를 정의하며, Kubernetes가 CPU를 처리하도록 합니다. 이러한 값을 자신의 필요에 맞게 변경할 수 있습니다. 가이드로서, n8n 클라우드 제공을 위한 리소스 값은 다음과 같습니다:

  • Start: 320mb RAM, 10 millicore CPU burstable
  • Pro (10k executions): 640mb RAM, 20 millicore CPU burstable
  • Pro (50k executions): 1280mb RAM, 80 millicore CPU burstable

선택 사항: 환경 변수#

환경 변수를 사용하여 n8n 설정 및 동작을 구성할 수 있습니다.

n8n-secret.yaml 파일을 생성하세요. n8n 환경 변수 세부정보는 환경 변수를 참조하세요.

배포#

두 개의 배포 매니페스트(n8n-deployment.yamlpostgres-deployment.yaml)는 Kubernetes에 n8n 및 Postgres 애플리케이션을 정의합니다.

매니페스트는 다음을 정의합니다:

  • 각 애플리케이션 포드에 정의된 환경 변수를 전송
  • 사용할 컨테이너 이미지를 정의
  • resources 객체로 리소스 소비 한도 설정
  • 이전에 정의된 volumesvolumeMounts로 컨테이너에서 볼륨을 마운트할 경로 정의
  • 확장 및 재시작 정책. 예제 매니페스트는 각 포드의 인스턴스를 하나로 정의합니다. 필요에 따라 이를 변경해야 합니다.

서비스#

두 개의 서비스 매니페스트(postgres-service.yamln8n-service.yaml)는 각각 포트 5432와 5678을 사용하여 Kubernetes 로드 밸런서를 통해 서비스를 외부에 노출합니다.

Kubernetes 클러스터로 전송#

다음 명령어로 모든 매니페스트를 클러스터로 전송하세요:

1
kubectl apply -f .

네임스페이스 오류

"n8n" 네임스페이스를 찾을 수 없다는 오류 메시지가 표시될 수 있습니다. 이는 리소스가 아직 준비되지 않았기 때문입니다. 같은 명령어를 다시 실행하거나, 다음 명령어로 네임스페이스 매니페스트를 먼저 적용할 수 있습니다:

1
kubectl apply -f namespace.yaml

DNS 설정#

n8n은 일반적으로 서브도메인에서 작동합니다. 제공업체와 함께 서브도메인에 대한 DNS 레코드를 생성하고 이를 n8n 서비스의 IP 주소로 지정하십시오. 서비스 및 인그레스 메뉴 항목의 엔드포인트 열에서 사용하려는 클러스터의 n8n 서비스의 IP 주소를 찾습니다.

GKE 및 IP 주소

이 GKE 가이드를 읽어보세요 GKE 및 Kubernetes 리소스와 함께 예약된 IP 주소가 작동하는 방법에 대한 더 많은 세부정보를 확인할 수 있습니다.

리소스 삭제#

다음 명령어로 매니페스트에 의해 생성된 리소스를 제거하세요:

1
kubectl delete -f .

다음 단계#

인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!