Azure에서 n8n 호스팅하기
n8n v2.29이 호스팅 가이드는 Azure에서 n8n을 셀프 호스팅하는 방법을 보여줍니다. Azure 커맨드라인 도구가 필요합니다. 이 섹션의 상세 내용은 n8n 공식 문서를 참조하세요. Azure는 n8n 호스팅에 적합한 여러 방법을 제공합니다.
이 호스팅 가이드는 Azure에서 n8n을 셀프 호스팅하는 방법을 보여줍니다. 필요한 리소스와 역방향 프록시를 관리하기 위해 Kubernetes를 사용하며, 데이터베이스 백엔드로 Postgres를 사용하는 n8n을 대상으로 합니다.
사전 준비 사항#
Azure 커맨드라인 도구가 필요합니다.
이 섹션의 상세 내용은 n8n 공식 문서를 참조하세요.
이 섹션의 상세 내용은 n8n 공식 문서를 참조하세요.
호스팅 옵션#
Azure는 n8n 호스팅에 적합한 여러 방법을 제공합니다. 여기에는 컨테이너 실행에 최적화된 Azure Container Instances, Linux 가상 머신, 그리고 Kubernetes로 컨테이너를 실행하는 Azure Kubernetes Service가 포함됩니다.
이 가이드에서는 호스팅 옵션으로 Azure Kubernetes Service(AKS)를 사용합니다. Kubernetes를 사용하면 약간의 추가 복잡성과 구성이 필요하지만, 수요 변화에 따라 n8n을 확장하는 데 가장 좋은 방법입니다.
이 가이드의 단계에서는 Azure UI와 커맨드라인 도구를 함께 사용하지만, 대부분의 작업은 둘 중 하나만으로도 수행할 수 있습니다.
Azure Kubernetes Service 열기#
Azure 포털에서 Kubernetes services를 선택합니다.
클러스터 생성#
Kubernetes services 페이지에서 Create > Create a Kubernetes cluster를 선택합니다.
필요에 맞는 구성 옵션을 선택한 다음, 완료되면 Create를 선택합니다.
Kubectl 컨텍스트 설정#
이 가이드의 나머지 단계에서는 Azure 인스턴스를 Kubectl 컨텍스트로 설정해야 합니다. 클러스터 인스턴스의 연결 세부 정보는 해당 인스턴스의 상세 페이지를 연 다음 Connect 버튼을 클릭하면 확인할 수 있습니다. 결과로 나오는 코드 스니펫은 터미널에 붙여넣고 실행하여 로컬 Kubernetes 설정이 새 클러스터를 사용하도록 변경하는 단계를 보여줍니다.
구성 리포지터리 클론하기#
Kubernetes와 n8n에는 일련의 구성 파일이 필요합니다. 이 리포지터리에서 해당 파일을 클론할 수 있습니다. 다음 단계에서는 어떤 파일이 무엇을 구성하는지, 그리고 무엇을 변경해야 하는지 알려줍니다.
다음 명령으로 리포지터리를 클론합니다.
git clone https://github.com/n8n-io/n8n-hosting.git
그리고 디렉터리를 변경합니다.
cd n8n-hosting/kubernetes
Postgres 구성하기#
대규모 n8n 배포의 경우, Postgres는 SQLite보다 더 견고한 데이터베이스 백엔드를 제공합니다.
영구 스토리지용 볼륨 구성하기#
파드가 재시작되어도 데이터를 유지하려면 Postgres 배포에 영구 볼륨이 필요합니다. 기본 스토리지 클래스가 이 용도에 적합하며, postgres-claim0-persistentvolumeclaim.yaml 매니페스트에 정의되어 있습니다.
Postgres 환경 변수#
Postgres는 컨테이너에서 실행 중인 애플리케이션에 전달할 몇 가지 환경 변수를 설정해야 합니다.
예시 postgres-secret.yaml 파일에는 자신의 값으로 교체해야 하는 플레이스홀더가 포함되어 있습니다. Postgres는 데이터베이스를 생성할 때 이 세부 정보를 사용합니다.
postgres-deployment.yaml 매니페스트는 이 매니페스트 파일의 값을 사용하여 애플리케이션 파드로 전송합니다.
n8n 구성하기#
파일 스토리지용 볼륨 생성하기#
n8n을 실행하는 데 필수는 아니지만, 영구 볼륨을 사용하는 것은 다음 경우에 필요합니다.
- 바이너리 데이터 노드와 같이 파일과 상호 작용하는 노드를 사용하는 경우.
- 재시작 시에도 수동 n8n 암호화 키를 유지하려는 경우. 이렇게 하면 시작 시 키가 포함된 파일이 파일 스토리지에 저장됩니다.
n8n-claim0-persistentvolumeclaim.yaml 매니페스트가 이를 생성하며, n8n Deployment는 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를 정의하며, CPU는 Kubernetes가 처리하도록 둡니다. 이 값은 필요에 맞게 변경할 수 있습니다. 참고로, n8n 클라우드 제품의 리소스 값은 다음과 같습니다.
이 섹션의 상세 내용은 n8n 공식 문서를 참조하세요.
선택 사항: 환경 변수#
환경 변수를 사용하여 n8n 설정과 동작을 구성할 수 있습니다.
n8n-secret.yaml 파일을 생성합니다. n8n 환경 변수에 대한 자세한 내용은 환경 변수를 참고하세요.
배포#
두 개의 배포 매니페스트(n8n-deployment.yaml, postgres-deployment.yaml)는 n8n과 Postgres 애플리케이션을 Kubernetes에 정의합니다.
이 매니페스트들은 다음을 정의합니다.
- 정의된 환경 변수를 각 애플리케이션 파드로 전송
- 사용할 컨테이너 이미지 정의
resources오브젝트로 리소스 소비 한도 설정- 앞서 정의한
volumes와, 컨테이너 내 볼륨을 마운트할 경로를 정의하는volumeMounts - 스케일링 및 재시작 정책. 예시 매니페스트는 각 파드의 인스턴스를 하나씩 정의합니다. 필요에 맞게 이 값을 변경해야 합니다.
서비스#
두 개의 서비스 매니페스트(postgres-service.yaml, n8n-service.yaml)는 Kubernetes 로드 밸런서를 사용하여 각각 포트 5432와 5678로 서비스를 외부에 노출합니다.
Kubernetes 클러스터로 전송하기#
다음 명령으로 모든 매니페스트를 클러스터로 전송합니다.
kubectl apply -f .
네임스페이스 오류
해당 리소스가 아직 준비되지 않아 "n8n" 네임스페이스를 찾을 수 없다는 오류 메시지가 표시될 수 있습니다. 같은 명령을 다시 실행하거나, 다음 명령으로 네임스페이스 매니페스트를 먼저 적용할 수 있습니다.
kubectl apply -f namespace.yaml
DNS 설정하기#
n8n은 일반적으로 서브도메인에서 동작합니다. 서브도메인용 DNS 레코드를 제공업체에서 생성하고 이를 n8n 서비스의 IP 주소로 지정합니다. n8n 서비스의 IP 주소는 사용하려는 클러스터의 Services & ingresses 메뉴 항목에서 External IP 열을 통해 확인할 수 있습니다. URL에 n8n 포트인 "5678"을 추가해야 합니다.
리소스 삭제하기#
다음 명령으로 매니페스트가 생성한 리소스를 제거합니다.
kubectl delete -f .
다음 단계#
이 섹션의 상세 내용은 n8n 공식 문서를 참조하세요.