InfoGrab Docs

Amazon Web Services에서 n8n 호스팅

요약

이 호스팅 가이드는 Amazon Web Services(AWS)에서 n8n을 셀프 호스팅하는 방법을 안내합니다. AWS는 EC2(가상 머신), EKS(Kubernetes로 실행되는 컨테이너) 등 n8n 호스팅에 적합한 여러 방법을 제공합니다.

이 호스팅 가이드는 Amazon Web Services(AWS)에서 n8n을 셀프 호스팅하는 방법을 안내합니다. Kubernetes를 사용하여 필요한 리소스와 리버스 프록시를 관리하고, Postgres를 데이터베이스 백엔드로 사용합니다.

호스팅 옵션#

AWS는 EC2(가상 머신), EKS(Kubernetes로 실행되는 컨테이너) 등 n8n 호스팅에 적합한 여러 방법을 제공합니다.

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

사전 요구 사항#

이 가이드의 단계는 AWS UI와 EKS용 eksctl CLI 도구를 혼합하여 사용합니다.

eksctl 문서에는 명시되지 않았지만, AWS CLI 도구 설치도구 인증 설정도 필요합니다.

셀프 호스팅 사전 지식 요구사항

n8n 셀프 호스팅에는 다음을 포함한 기술적 지식이 필요합니다:

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

n8n은 전문 사용자에게 셀프 호스팅을 권장합니다. 실수하면 데이터 손실, 보안 문제, 다운타임이 발생할 수 있습니다. 서버 관리 경험이 없다면 n8n Cloud를 권장합니다.

안정(Stable) 및 베타(Beta) 버전

n8n은 매주 새로운 마이너 버전을 릴리스합니다. stable 버전은 프로덕션 사용을 위한 것입니다. beta는 가장 최근 릴리스입니다. beta 버전은 불안정할 수 있습니다. 문제를 보고하려면 포럼을 이용하세요.

현재 stable: 2.14.2 현재 beta: 2.15.0

클러스터 생성#

eksctl 도구를 사용하여 이름과 리전을 지정하여 클러스터를 생성합니다:

eksctl create cluster --name n8n --region <your-aws-region>

클러스터 생성에 다소 시간이 걸릴 수 있습니다.

클러스터가 생성되면 eksctl이 자동으로 kubectl 컨텍스트를 해당 클러스터로 설정합니다.

설정 리포지터리 클론#

Kubernetes와 n8n은 일련의 설정 파일이 필요합니다. 이 리포지터리에서 이 파일들을 클론할 수 있습니다. 다음 단계에서 각 파일의 역할과 변경해야 할 설정을 설명합니다.

다음 명령으로 리포지터리를 클론합니다:

git clone https://github.com/n8n-io/n8n-hosting.git

디렉터리를 변경합니다:

cd n8n-hosting/kubernetes

Postgres 구성#

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

영구 스토리지를 위한 볼륨 구성#

파드 재시작 간에 데이터를 유지하려면 Postgres 배포에 영구 볼륨이 필요합니다. AWS의 기본 스토리지 클래스인 gp3는 이 목적에 적합합니다. 이는 postgres-claim0-persistentvolumeclaim.yaml 매니페스트에 정의되어 있습니다.


spec:
  storageClassName: gp3
  accessModes:
    - ReadWriteOnce

Postgres 환경 변수#

Postgres는 컨테이너에서 실행 중인 애플리케이션에 전달할 몇 가지 환경 변수가 필요합니다.

예제 postgres-secret.yaml 파일에는 사용자 정보와 사용할 데이터베이스에 대한 고유 값으로 교체해야 하는 플레이스홀더가 포함되어 있습니다.

PostgreSQL은 설정 및 관리를 위해 루트 사용자(POSTGRES_USER)를 사용하지만, n8n에 대해서는 별도의 비루트 사용자(POSTGRES_NON_ROOT_USER)를 생성하는 것이 모범 사례입니다. 루트 사용자는 전체 제어권을 가지며, n8n은 실행하는 데 비루트 사용자 권한만 필요합니다. 두 사용자를 모두 구성하면 보안이 향상되고 데이터베이스 시스템에 대한 우발적인 변경을 방지하는 데 도움이 됩니다.

postgres-deployment.yaml 매니페스트는 이 매니페스트 파일의 값을 사용하여 애플리케이션 파드에 전달합니다.

n8n 구성#

파일 스토리지를 위한 볼륨 생성#

n8n 실행에 필수적이지는 않지만, 영구 볼륨을 사용하면 n8n 사용 중 업로드된 파일을 유지하는 데 도움이 됩니다. 또한 재시작 간에 수동 n8n 암호화 키를 유지하려는 경우에도 유용합니다. 이는 시작 시 키가 포함된 파일을 파일 스토리지에 저장합니다.

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


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

파드 리소스#

Kubernetes를 사용하면 애플리케이션 컨테이너에 필요한 최소 리소스와 실행 가능한 한도를 지정할 수 있습니다. 위에서 클론한 예제 YAML 파일은 n8n-deployment.yaml 파일의 resources 섹션에 다음 내용을 포함합니다:


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

이는 컨테이너당 최소 250MB, 최대 500MB를 정의하고 Kubernetes가 CPU를 처리하도록 합니다. 이 값은 필요에 따라 변경할 수 있습니다. 참고로 n8n 클라우드 제공 서비스의 리소스 값은 다음과 같습니다:

  • 스타터: RAM 320MB, CPU 10 millicore 버스트 가능
  • Pro (실행 1만 회): RAM 640MB, CPU 20 millicore 버스트 가능
  • Pro (실행 5만 회): RAM 1280MB, CPU 80 millicore 버스트 가능

선택 사항: 환경 변수#

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

n8n-secret.yaml 파일을 생성합니다. n8n 환경 변수에 대한 자세한 내용은 환경 변수를 참조하세요.

배포#

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

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

  • 각 애플리케이션 파드에 정의된 환경 변수 전달
  • 사용할 컨테이너 이미지 정의
  • 리소스 소비 한도 설정
  • 앞서 정의한 volumes와 컨테이너에서 볼륨을 마운트할 경로를 정의하는 volumeMounts
  • 스케일링 및 재시작 정책. 예제 매니페스트는 각 파드의 인스턴스 하나를 정의합니다. 필요에 맞게 변경해야 합니다.

서비스#

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

Kubernetes 클러스터로 전송#

n8n-kubernetes-hosting 디렉터리에서 다음 명령을 실행하여 모든 매니페스트를 클러스터에 전송합니다:

kubectl apply -f .
네임스페이스 오류

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

kubectl apply -f namespace.yaml

DNS 설정#

n8n은 일반적으로 서브도메인에서 작동합니다. DNS 제공업체에서 서브도메인에 대한 DNS 레코드를 생성하고 인스턴스의 정적 주소를 가리키도록 합니다.

인스턴스에서 실행 중인 n8n 서비스의 주소를 찾으려면:

  1. AWS 콘솔에서 Amazon Elastic Kubernetes Service 페이지의 Clusters 섹션을 엽니다.
  2. 클러스터 이름을 선택하여 구성 페이지를 엽니다.
  3. Resources 탭을 선택한 후 Service and networking > Services를 선택합니다.
  4. n8n 서비스를 선택하고 Load balancer URLs 값을 복사합니다. DNS에는 이 값에 n8n 서비스 포트(5678)를 접미사로 붙여서 사용합니다.
HTTP 사용

이 가이드는 정의하는 서비스에 HTTP 연결을 사용합니다(예: n8n-deployment.yaml). 그러나 Load balancer URLs 값을 클릭하면 EKS가 오류를 일으키는 "HTTPS" URL로 이동합니다. 이를 해결하려면 n8n 서브도메인을 열 때 반드시 HTTP를 사용하세요.

리소스 삭제#

설정을 삭제해야 하는 경우 다음 명령으로 매니페스트에 의해 생성된 리소스를 제거할 수 있습니다:

kubectl delete -f .

다음 단계#

Amazon Web Services에서 n8n 호스팅

원문 보기
요약

이 호스팅 가이드는 Amazon Web Services(AWS)에서 n8n을 셀프 호스팅하는 방법을 안내합니다. AWS는 EC2(가상 머신), EKS(Kubernetes로 실행되는 컨테이너) 등 n8n 호스팅에 적합한 여러 방법을 제공합니다.

이 호스팅 가이드는 Amazon Web Services(AWS)에서 n8n을 셀프 호스팅하는 방법을 안내합니다. Kubernetes를 사용하여 필요한 리소스와 리버스 프록시를 관리하고, Postgres를 데이터베이스 백엔드로 사용합니다.

호스팅 옵션#

AWS는 EC2(가상 머신), EKS(Kubernetes로 실행되는 컨테이너) 등 n8n 호스팅에 적합한 여러 방법을 제공합니다.

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

사전 요구 사항#

이 가이드의 단계는 AWS UI와 EKS용 eksctl CLI 도구를 혼합하여 사용합니다.

eksctl 문서에는 명시되지 않았지만, AWS CLI 도구 설치도구 인증 설정도 필요합니다.

셀프 호스팅 사전 지식 요구사항

n8n 셀프 호스팅에는 다음을 포함한 기술적 지식이 필요합니다:

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

n8n은 전문 사용자에게 셀프 호스팅을 권장합니다. 실수하면 데이터 손실, 보안 문제, 다운타임이 발생할 수 있습니다. 서버 관리 경험이 없다면 n8n Cloud를 권장합니다.

안정(Stable) 및 베타(Beta) 버전

n8n은 매주 새로운 마이너 버전을 릴리스합니다. stable 버전은 프로덕션 사용을 위한 것입니다. beta는 가장 최근 릴리스입니다. beta 버전은 불안정할 수 있습니다. 문제를 보고하려면 포럼을 이용하세요.

현재 stable: 2.14.2 현재 beta: 2.15.0

클러스터 생성#

eksctl 도구를 사용하여 이름과 리전을 지정하여 클러스터를 생성합니다:

eksctl create cluster --name n8n --region <your-aws-region>

클러스터 생성에 다소 시간이 걸릴 수 있습니다.

클러스터가 생성되면 eksctl이 자동으로 kubectl 컨텍스트를 해당 클러스터로 설정합니다.

설정 리포지터리 클론#

Kubernetes와 n8n은 일련의 설정 파일이 필요합니다. 이 리포지터리에서 이 파일들을 클론할 수 있습니다. 다음 단계에서 각 파일의 역할과 변경해야 할 설정을 설명합니다.

다음 명령으로 리포지터리를 클론합니다:

git clone https://github.com/n8n-io/n8n-hosting.git

디렉터리를 변경합니다:

cd n8n-hosting/kubernetes

Postgres 구성#

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

영구 스토리지를 위한 볼륨 구성#

파드 재시작 간에 데이터를 유지하려면 Postgres 배포에 영구 볼륨이 필요합니다. AWS의 기본 스토리지 클래스인 gp3는 이 목적에 적합합니다. 이는 postgres-claim0-persistentvolumeclaim.yaml 매니페스트에 정의되어 있습니다.


spec:
  storageClassName: gp3
  accessModes:
    - ReadWriteOnce

Postgres 환경 변수#

Postgres는 컨테이너에서 실행 중인 애플리케이션에 전달할 몇 가지 환경 변수가 필요합니다.

예제 postgres-secret.yaml 파일에는 사용자 정보와 사용할 데이터베이스에 대한 고유 값으로 교체해야 하는 플레이스홀더가 포함되어 있습니다.

PostgreSQL은 설정 및 관리를 위해 루트 사용자(POSTGRES_USER)를 사용하지만, n8n에 대해서는 별도의 비루트 사용자(POSTGRES_NON_ROOT_USER)를 생성하는 것이 모범 사례입니다. 루트 사용자는 전체 제어권을 가지며, n8n은 실행하는 데 비루트 사용자 권한만 필요합니다. 두 사용자를 모두 구성하면 보안이 향상되고 데이터베이스 시스템에 대한 우발적인 변경을 방지하는 데 도움이 됩니다.

postgres-deployment.yaml 매니페스트는 이 매니페스트 파일의 값을 사용하여 애플리케이션 파드에 전달합니다.

n8n 구성#

파일 스토리지를 위한 볼륨 생성#

n8n 실행에 필수적이지는 않지만, 영구 볼륨을 사용하면 n8n 사용 중 업로드된 파일을 유지하는 데 도움이 됩니다. 또한 재시작 간에 수동 n8n 암호화 키를 유지하려는 경우에도 유용합니다. 이는 시작 시 키가 포함된 파일을 파일 스토리지에 저장합니다.

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


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

파드 리소스#

Kubernetes를 사용하면 애플리케이션 컨테이너에 필요한 최소 리소스와 실행 가능한 한도를 지정할 수 있습니다. 위에서 클론한 예제 YAML 파일은 n8n-deployment.yaml 파일의 resources 섹션에 다음 내용을 포함합니다:


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

이는 컨테이너당 최소 250MB, 최대 500MB를 정의하고 Kubernetes가 CPU를 처리하도록 합니다. 이 값은 필요에 따라 변경할 수 있습니다. 참고로 n8n 클라우드 제공 서비스의 리소스 값은 다음과 같습니다:

  • 스타터: RAM 320MB, CPU 10 millicore 버스트 가능
  • Pro (실행 1만 회): RAM 640MB, CPU 20 millicore 버스트 가능
  • Pro (실행 5만 회): RAM 1280MB, CPU 80 millicore 버스트 가능

선택 사항: 환경 변수#

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

n8n-secret.yaml 파일을 생성합니다. n8n 환경 변수에 대한 자세한 내용은 환경 변수를 참조하세요.

배포#

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

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

  • 각 애플리케이션 파드에 정의된 환경 변수 전달
  • 사용할 컨테이너 이미지 정의
  • 리소스 소비 한도 설정
  • 앞서 정의한 volumes와 컨테이너에서 볼륨을 마운트할 경로를 정의하는 volumeMounts
  • 스케일링 및 재시작 정책. 예제 매니페스트는 각 파드의 인스턴스 하나를 정의합니다. 필요에 맞게 변경해야 합니다.

서비스#

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

Kubernetes 클러스터로 전송#

n8n-kubernetes-hosting 디렉터리에서 다음 명령을 실행하여 모든 매니페스트를 클러스터에 전송합니다:

kubectl apply -f .
네임스페이스 오류

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

kubectl apply -f namespace.yaml

DNS 설정#

n8n은 일반적으로 서브도메인에서 작동합니다. DNS 제공업체에서 서브도메인에 대한 DNS 레코드를 생성하고 인스턴스의 정적 주소를 가리키도록 합니다.

인스턴스에서 실행 중인 n8n 서비스의 주소를 찾으려면:

  1. AWS 콘솔에서 Amazon Elastic Kubernetes Service 페이지의 Clusters 섹션을 엽니다.
  2. 클러스터 이름을 선택하여 구성 페이지를 엽니다.
  3. Resources 탭을 선택한 후 Service and networking > Services를 선택합니다.
  4. n8n 서비스를 선택하고 Load balancer URLs 값을 복사합니다. DNS에는 이 값에 n8n 서비스 포트(5678)를 접미사로 붙여서 사용합니다.
HTTP 사용

이 가이드는 정의하는 서비스에 HTTP 연결을 사용합니다(예: n8n-deployment.yaml). 그러나 Load balancer URLs 값을 클릭하면 EKS가 오류를 일으키는 "HTTPS" URL로 이동합니다. 이를 해결하려면 n8n 서브도메인을 열 때 반드시 HTTP를 사용하세요.

리소스 삭제#

설정을 삭제해야 하는 경우 다음 명령으로 매니페스트에 의해 생성된 리소스를 제거할 수 있습니다:

kubectl delete -f .

다음 단계#