n8n을 Amazon Web Services에 호스팅하기#
이 호스팅 가이드는 Amazon Web Services(AWS)를 사용하여 n8n을 자체 호스팅하는 방법을 보여줍니다. Kubernetes를 사용하여 필요한 리소스와 리버스 프록시를 관리하며, n8n과 Postgres를 데이터베이스 백엔드로 사용합니다.
호스팅 옵션#
AWS는 EC2(가상 머신), EKS(쿠버네티스로 실행되는 컨테이너) 등 n8n 호스팅에 적합한 여러 방법을 제공합니다.
이 가이드는 호스팅 옵션으로 EKS를 사용합니다. Kubernetes를 사용하려면 추가적인 복잡성과 구성이 필요하지만, 수요 변화에 따라 n8n을 확장하는 데 가장 좋은 방법입니다.
사전 준비 사항#
이 가이드의 단계는 AWS UI와 EKS를 위한 eksctl CLI 도구 를 혼합하여 사용합니다.
eksctl 문서에는 언급되어 있지 않지만, AWS CLI 도구를 설치하고, 도구의 인증을 구성해야 합니다.
자체 호스팅 사전 요구 사항
n8n을 자체 호스팅하려면 다음과 같은 기술적 지식이 필요합니다:
- 서버 및 컨테이너 설정 및 구성
- 애플리케이션 리소스 관리 및 확장
- 서버 및 애플리케이션 보안 강화
- n8n 구성
n8n은 전문가 수준의 사용자에게 자체 호스팅을 권장합니다. 실수로 인해 데이터 손실, 보안 문제, 서비스 중단이 발생할 수 있습니다. 서버 관리 경험이 부족한 경우, n8n은 n8n Cloud 사용을 추천합니다.
최신 및 차기 버전
n8n은 대부분의 주에 새로운 마이너 버전을 출시합니다. latest
버전은 프로덕션 환경에서 사용하도록 설계된 안정적인 버전입니다. next
버전은 가장 최근에 출시된 버전으로, 베타 버전으로 간주해야 하며 불안정할 수 있습니다. 문제를 발견하면 포럼에서 보고해 주세요.
현재 latest
: 1.77.3
현재 next
: 1.78.0
클러스터 만들기#
다음 명령어를 사용하여 클러스터 이름과 지역을 지정하여 eksctl 도구로 클러스터를 만듭니다:
1 |
|
클러스터 생성에는 시간이 걸릴 수 있습니다.
클러스터가 생성되면 eksctl이 자동으로 클러스터에 대한 kubectl 컨텍스트를 설정합니다.
구성 저장소 복제하기#
Kubernetes와 n8n은 일련의 구성 파일이 필요합니다. 이 파일들은 이 저장소에서 복제할 수 있습니다. 다음 단계에서는 각 파일이 무엇을 하는지, 어떤 설정을 변경해야 하는지 설명합니다.
다음 명령어를 사용하여 저장소를 복제합니다:
1 |
|
복제한 저장소의 루트 디렉터리로 변경합니다:
1 |
|
Postgres 구성하기#
규모가 큰 n8n 배포를 위해 Postgres는 SQLite보다 더 강력한 데이터베이스 백엔드를 제공합니다.
지속적인 저장을 위한 볼륨 구성하기#
포드 재시작 간에 데이터를 유지하기 위해 Postgres 배포에는 지속적인 볼륨이 필요합니다. 기본 AWS 스토리지 클래스인 gp2가 이 목적에 적합합니다. 이는 postgres-claim0-persistentvolumeclaim.yaml
매니페스트에 정의됩니다.
1 2 3 4 5 6 |
|
Postgres 환경 변수#
Postgres는 컨테이너에서 실행 중인 애플리케이션에 전달할 환경 변수를 설정해야 합니다.
예제 postgres-secret.yaml
파일에는 사용자 세부정보와 사용할 데이터베이스의 값으로 교체해야 할 자리 표시자가 포함되어 있습니다.
그 후 postgres-deployment.yaml
매니페스트는 이 매니페스트 파일의 값을 애플리케이션 포드로 전송하는 데 사용합니다.
n8n 구성하기#
파일 저장을 위한 볼륨 생성#
n8n을 실행하는 데 필수는 아니지만, 영구 볼륨을 사용하면 n8n 사용 중 업로드한 파일을 유지하는 데 도움이 되며, 재시작 간에 수동 n8n 암호화 키를 지속하려는 경우 startup 중에 키를 포함하는 파일을 파일 저장소에 저장합니다.
n8n-claim0-persistentvolumeclaim.yaml
매니페스트가 이를 생성하며, n8n 배포는 n8n-deployment.yaml
매니페스트의 volumes
섹션에서 해당 청구를 마운트합니다.
1 2 3 4 5 6 |
|
Pod 리소스#
Kubernetes는 애플리케이션 컨테이너가 필요로 하는 최소 리소스와 실행 가능한 제한을 지정할 수 있게 해줍니다. 위에 복제된 예제 YAML 파일에는 n8n-deployment.yaml
파일의 resources
섹션에 다음과 같은 내용이 포함되어 있습니다:
1 2 3 4 5 6 7 |
|
이는 컨테이너 당 최소 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 환경 변수에 대한 자세한 내용은 Environment variables를 참조하세요.
배포#
두 개의 배포 매니페스트(n8n-deployment.yaml
및 postgres-deployment.yaml
)는 n8n 및 Postgres 애플리케이션을 Kubernetes에 정의합니다.
매니페스트는 다음을 정의합니다:
- 각 애플리케이션 파드에 정의된 환경 변수를 전송
- 사용할 컨테이너 이미지를 정의
- 리소스 소비 한계 설정
- 이전에 정의된
volumes
와 볼륨을 마운트할 경로를 정의하기 위한volumeMounts
- 스케일링 및 재시작 정책. 예제 매니페스트는 각 파드의 인스턴스를 하나로 정의합니다. 필요에 따라 이를 변경해야 합니다.
서비스#
두 개의 서비스 매니페스트(postgres-service.yaml
및 n8n-service.yaml
)는 각각 기본적으로 포트 5432와 5678을 사용하여 외부 세계에 서비스를 노출합니다.
Kubernetes 클러스터에 전송#
n8n-kubernetes-hosting
디렉토리에서 다음 명령을 실행하여 모든 매니페스트를 클러스터로 전송합니다:
1 |
|
네임스페이스 오류
"n8n" 네임스페이스를 찾을 수 없다는 오류 메시지가 표시될 수 있습니다. 이는 리소스가 아직 준비되지 않았기 때문입니다. 동일한 명령을 다시 실행하거나, 먼저 다음 명령으로 네임스페이스 매니페스트를 적용할 수 있습니다:
1 |
|
DNS 설정#
n8n은 일반적으로 서브 도메인에서 운영됩니다. 공급자와 함께 서브 도메인에 대한 DNS 레코드를 생성하고 이를 인스턴스의 정적 주소로 지정합니다.
인스턴스에서 실행 중인 n8n 서비스의 주소를 찾으려면:
- AWS 콘솔에서 Amazon Elastic Kubernetes Service 페이지의 Clusters 섹션을 엽니다.
- 클러스터 이름을 선택하여 구성 페이지를 엽니다.
- Resources 탭을 선택한 다음 Service and networking > Services를 선택합니다.
- n8n 서비스를 선택하고 Load balancer URLs 값을 복사합니다. DNS에 사용하기 위해 이 값에 n8n 서비스 포트(5678)를 접미사로 붙입니다.
HTTP 사용
이 가이드는 n8n-deployment.yaml
에서 정의된 서비스에 대해 HTTP 연결을 사용합니다. 그러나 Load balancer URLs 값을 클릭하면 EKS에서 "HTTPS" URL로 이동하게 되어 오류가 발생합니다. 이를 해결하기 위해 n8n 서브 도메인을 열 때는 반드시 HTTP를 사용해야 합니다.
리소스 삭제#
설정을 삭제해야 하는 경우, 다음 명령어로 매니페스트에 의해 생성된 리소스를 제거할 수 있습니다:
1 |
|