2014-02-20 3 views
2

일관되고시기 적절하게 프로덕션 환경에 일부 웹 서비스를 배포하는 방법을 찾고 있습니다.NodeJS 프로덕션 배포 모범 사례

저는 현재 Anagers가 제공 한 여러 가상 시스템에 대한 특정 소프트웨어 버전의 수동 배포 작업으로 끝나는 배포 파이프 라인을 구현 중입니다. 아이디어는 버전 A를 사용하는 x 개의 인스턴스를 제공하고 이미 버전 B를 실행중인 인스턴스를 y 개 갖는 것입니다. 그런 다음 트래픽을 이미지화하고 가볍게 훑어보십시오. 동일한 메커니즘을 통해 내가 이미 만든 이미지를 사용하여 세트에서 새로운 VM을 확장 할 수 있습니다.

  1. TGZ

CI를 환경을 단위 테스트 등을 통과 한 프로젝트에서 타르볼을 구축 할 것이다 : 나는 다음과 같은 옵션을 고려했지만 프로그래머 뭔가 내가 바라 보는거야 궁금했다

통합 테스트. 선택적으로 depednencies가 번들로 제공됩니다 (프로덕션 시스템에서 npm install을 실행하지 않고 공용 또는 개인 npm 저장소에 네트워크 연결을 사용하지 않아도 됨).

여기에서 가장 중요한 문제는 시스템 라이브러리에 의존하는 모든 종속 항목이 다른 컴퓨터 (동일한 이미지 임에도 불구하고)에 구축된다는 것입니다. 나는 이것을 좋아하지 않는다.

  1. NPM

CI를 환경 프로비저닝 후 특정 버전을 체크하는 개인 NPM 저장소와 Ansible 배포 스크립트에 게시 할 것입니다. 다시 말하지만 배포하려는 경우 외부 서비스에 의존해야합니다. 나는 이것을 좋아하지 않는다. 될

  1. 힘내

모든 시스템에 의존 모듈은 세계적으로 프로비저닝의 일부로 설치 및 기타 모든 종속 저장소에 확인됩니다. 이것은 델타가 푸시되고 응용 프로그램 데몬이 프로세스 관리자에 의해 거의 즉시 자동으로 재시작 될 수있는 차별화 된 배치를 수행 할 수있는 유연성을 제공합니다. 종속성은 절대적으로 제한됩니다.

이것은 확장 할 때까지 새 VM을 돌릴 필요가 없음을 의미합니다. 배치는 모든 활성 인스턴스로 곧장 푸시 될 수 있습니다.

답변

1

우선 배포 방법에 관계없이 새 코드를 배포하는 동안 요청을 삭제하지 않아야합니다. 하나의 간단한 접근법은 전환 이전에로드 밸런서에서 노드를 제거하는 것입니다. 그렇게하기 전에 보류중인 요청, 연결 열기 또는 조기 종료로 인해 부정적인 영향을받는 사항이 있는지 평가하고 평가할 수도 있습니다. 또는 up 모듈과 같은 것일 수도 있습니다.

대부분의 사람들은 모듈을 제어하는 ​​소스를 권장하지 않습니다. 귀하의 package.jsonbundledDependencies 신고서를 사용하면서 귀하의 node_modules이 (가) npm install에서 이미 입력 된 .tgz가 귀하의 모든 문제를 다루는 것으로 보입니다. 이 방법을 사용하면 노드의 npm install이 모든 것을 다시 다운로드 및 설치하지 않습니다. 하지만 시스템 라이브러리 관련 문제를 다루는 node-gyp 구현을 다시 빌드합니다.

또한 git 태그를 사용하여 특정 종속성 및 페이로드가있는 버전을보다 쉽게 ​​추적 할 수 있습니다. 수동으로 코드를 배포하는 것은 지루할 수 있으므로 인터페이스에서 데이터베이스에있는 x 개의 알려진 서버 항목을 반복하면서 루틴을 자동화하는 것이 좋습니다. docker.io이 관심의 대상이 될 수 있습니다.