Node.js + Express 웹 애플리케이션을 패키징하고 배포하는 방법은 무엇입니까?


83

저는 Node.js 프로그래밍을 처음 접했고 최근에 (익스프레스, 백본 및 기타 무료보기 기술, mongoDB 포함)을 사용하여 샘플 작업 웹 애플리케이션을 만들었습니다. 이제 스테이징 환경에 동일하게 배포하고 싶은 시점에이 애플리케이션을 패키징하고 배포하는 방법을 잘 모르겠습니다. [mongoDb 관리 및 별도 설정 가능]

저는 Java 세계에서 왔으며 거기에서 서블릿 컨테이너에 배포되는 웹 응용 프로그램을위한 재사용 가능한 라이브러리 및 war / ear 패키지를위한 jar를 만듭니다. 이제이 경우 node.js 자체가 웹 컨테이너 역할을하므로 웹앱을 어떻게 패키징합니까?

  1. Express를 사용하여 빌드 된 패키징 노드 웹앱의 표준 형식 / 가이드 라인이 있습니까? (노드 앱을위한 유사한 jar / war 패키징 시스템이 있습니까?)
  2. 패키징 된 후 어떻게 배포합니까? 자체 컨테이너이기 때문에 exe가 될까요?

추신 : 지금은 필요한 모든 소스 파일을 스테이징 환경에 수동으로 복사하고 npm 명령을 실행하여 해당 컴퓨터의 모든 종속성을 다운로드 한 다음 '영구'또는 다른 메커니즘을 사용하여 내 server.js를 실행할 생각입니다. (또한 앱이 충돌하고 영원히 실패하는 경우에 대비하여 일종의 모니터링을 추가하십시오) 이것이 올바른 방법인지 확실하지 않습니까? 이 문제를 해결하는 표준화 된 방법이 있어야한다고 확신합니다.


내 자바 프로젝트의 경우 Maven을 빌드 / 배포 도구로 사용합니다. 예전에는 개미도 경험이 있습니다. Grunt for Node.js를 살펴 보았지만 작업에서 이해할 수있는 것은 사전 처리 작업 (예 : 축소, 연결, JSHint 등)을 수행하고 앱 패키징에 대해 언급하지 않은 다음 설치를 말합니다. (maven이하는 것과 같은) 저장소에.
KBJ

답변:


45

표준화 된 방법은 없지만 올바른 길을 가고 있습니다. 귀하의 경우 package.json최신 상태로 잘 유지, 당신은 단지를 제외하고, 생산 시스템 / 우편 / 복제 앱 디렉토리를 복사 할 수 있습니다 node_modules.

프로덕션 시스템에서 테스트가있는 경우 실행 npm install하여 종속성을 설치 npm test하고 마지막으로NODE_ENV=production node server.js

forever와 같은 래퍼 주제를 포함하는 매우 도움이된다고 생각한 최근 슬라이드는 여기 에서 찾을 수 있습니다 .


응답이 지연되어 죄송합니다. 가능한 모든 조합을 시도한 후 위의 제안 자체로 끝났습니다. 감사!
KBJ 2014

5
npm이 인터넷에서 모듈을 다운로드하는 것을 원하지 않으면 어떻게합니까? 대신 패키지 안에있는 모든 것을 배송하고 싶습니다. node_modules 폴더도 배송 할 수 있습니까? 작동합니까? 내가 묻는 이유는 내 응용 프로그램이 인터넷 연결없이 인트라넷 환경에서 실행될 수 있기 때문입니다.
Stefan

2
@Stefan 함께 제공되는 모듈에 따라 다릅니다. 순수한 JS가 아닌 일부 모듈을 먼저 빌드해야하므로 다른 환경으로 이동하면 모듈이 손상 될 수 있습니다. 나는 아직 이것을 다룰 필요가 없었지만 npm 캐시를 사용 하면 캐시를 전체 패키지 목록으로 채운 다음 거기에서 설치 (및 빌드)함으로써 실행 가능한 솔루션을 제공 할 수 있습니다.
MildlySerious

89

Node.js애플리케이션 배포 는 매우 쉬운 일입니다. Maven에는 pom.xml. 의 관련 개념은 Node.js입니다 package.json. 에 대한 종속성을 지정할 수 있습니다 package.json. 에서 환경 설정을 수행 할 수도 있습니다 package.json. 예를 들어 개발 환경에서는 다음과 같이 말할 수 있습니다.

단위 테스트를 실행하고 싶습니다.

그러나 생산 중;

단위 테스트를 건너 뛰고 싶습니다.

.m2폴더 아래에 maven에 대한 로컬 저장소가 있습니다. Node.js에는 node_modulesNode.js 프로젝트 아래 에 폴더가 있습니다. 이름으로 모듈 폴더를 볼 수 있습니다.

grunt이 답변 의 일부로 갑시다 . Grunt프론트 엔드 자산, html, javascript, css에 대한 작업 관리자입니다. 예를 들어 배포하기 전에 html, css, javascript 이미지를 축소 할 수 있습니다. 또한 넣을 수 있습니다 grunt에서 작업 실행 기능을 package.json.

샘플 애플리케이션을 보려면 여기 에서 예제 블로그 애플리케이션을 찾을 수 있습니다 . 폴더 구조 및 package.json참조를 확인하십시오 .

배포의 경우 시작 응용 프로그램을위한 heroku 배포를 제안합니다. 여기에서 방법을 찾을 수 있습니다 . 이것은 간단한 git 기반 배포입니다.

프로젝트 실행 부분에서 환경을 설정 NODE_ENV=development하고 node app.js. 여기 app.js당신의 프로젝트에 있습니다.

다음은 java 및 nodejs에 대한 상대적 개념입니다.

  1. maven clean install => npm install
  2. .m2폴더 => node_modules(프로젝트 폴더 아래)
  3. mvn test=> npm test(의 테스트 섹션 package.json)
  4. junit,, powermock... => mocha , node-unit , ...
  5. Spring MVC=> Express.JS
  6. pom.xml => package.json
  7. import package => require('module_name')

매우 유용한. package.json에서 종속성 변경으로 인한 중단 가능성을 최소화하기 위해 버전을 지정하는 방법이 있습니까?
mikijov

2
@MikiJ 확실히, 모듈 (종속성)의 버전을 지정할 수 있습니다. 시맨틱 버전 관리는 package.json에서 사용됩니다. 자세한 내용 은 여기 에서 확인할 수 있습니다
Hüseyin BABAL

Nice Java-노드 비교. 큰!! 감사!!
Alejandro Teixeira Muñoz

큰.!! Java에서 War 파일과 동등한 것이 있습니까? 소스 파일 대신 클래스 파일 만 배포 할 것이기 때문에 전체 JS 파일을 배포하는 대신 노드에 이와 유사한 것이 있습니까?
Mdumanoj

@ HüseyinBABAL 당신의 비유가 완전히 정확하지 않습니다. 때문에이 mvn clean install쉽게 세계 어느 서버에 배포 할 수있는 번들 .war 파일 생성 java -jar *.war서버에서 그것을 실행합니다. 하지만 내 노드 프로젝트에 번들 파일을 어떻게 만들 수 있습니까? 그리고 어떻게 서버에서 실행할 수 있습니까!
KNDheeraj

6
  1. Express를 사용하여 빌드 된 패키징 노드 웹앱의 표준 형식 / 가이드 라인이 있습니까? (노드 앱을위한 유사한 jar / war 패키징 시스템이 있습니까?)

예, CommonJS 패키지 사양 :

이 사양은 CommonJS 프로그램 및 라이브러리 배포를위한 CommonJS 패키지 형식을 설명합니다. CommonJS 패키지는 모듈, 코드 및 기타 자산 모음을 단일 형식으로 일관되게 래핑 한 것입니다. CommonJS 구성 요소의 편리한 전달, 설치 및 관리를위한 기반을 제공합니다.

다음 질문 :

2. 패키징 된 후 어떻게 배포합니까? 자체 컨테이너이기 때문에 exe가 될까요?

나는 생산을 위해 Heroku 에 배포하라는 Hüseyin의 제안을 두 번째로 합니다. 개발 및 준비를 위해 각각 VirtualBox 및 Amazon EC2와 함께 Node-Appliance 를 사용합니다 .

이 프로그램은 build-debian-cloud 또는 Debian-VirtualBox-Appliance에 의해 구축 된 Debian 머신을 가져 와서 git을 통해 배포 된 Node 애플리케이션을 실행할 수있는 Node.js "appliance"로 변환합니다.

웹앱은 exe.


1
단순한 질문에 답하는 것 이상을 해주셔서 감사합니다.
monsto 2015-06-03

6

이것이 해결책을 찾는 누군가에게 도움이되기를 바랍니다. Node js 앱의 패키징은 "npm pack"명령을 사용하여 수행 할 수 있습니다. 프로덕션 / 스테이징 환경에서 실행할 수있는 애플리케이션의 zip 파일을 생성합니다.


5

이에 접근하는 몇 가지 방법 :

  • 코드가 아닌 모든 것을 제외하고 ( node_modules/**) Git 리포지토리로 코드를 푸시 한 다음 스테이징 환경에서 가져와 실행 npm install하여 모든 종속성을 복원합니다.

  • 그것으로부터 NPM 패키지를 생성하고, npm당신의 스테이징 환경에서 그것을 통해 설치하십시오 (이것은 또한 모든 의존성을 처리해야합니다)

  • Grunt다음을 통해 종속성을 복원하는 것보다 스테이징 환경에 수동 복사 / ssh 파일 (로 자동화 가능 )npm


2

zeit의 pkg 모듈을 사용했습니다. linux / win / macos를위한 크로스 플랫폼 결과물을 생성 할 수 있습니다. 실제로 프로덕션에서 사용했으며 문제없이 잘 작동합니다.

모든 js 스크립트를 가져 와서 단일 파일로 패키징합니다.

내가 사용한 이유는 소스 코드 보안에 도움이되기 때문입니다. 이렇게하면 고객 환경에서 프로덕션 환경에서 애플리케이션에 액세스 할 수 있지만 소스 코드에는 액세스 할 수 없습니다.

또한 장점 중 하나는 프로덕션 환경에서 노드 바이너리도 빌드 내부에 패키징되기 때문에 실제로 고객이 node.js를 설치할 필요가 없다는 것입니다.

https://www.npmjs.com/package/pkg

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.