2012-05-22 5 views
29

지금 당장 node.js 서버를 프로덕션 서버에 배포 할 때마다 다양한 연결을 위해 모든 IP/DNS/사용자 이름/암호를 변경해야합니다. 내 데이터베이스와 외부 API.내 node.js 인스턴스가 dev 또는 production인지 확인

이 프로세스는 귀찮습니다. 현재 실행중인 node.js 인스턴스가 cloud9ide에 있는지 또는 실제로 내 프로덕션 즐거운 스마트 머신인지 확인하는 방법이 있습니까?

node.js 인스턴스가 실행중인 서버에서 (실행 코드로) detemrine을 실행할 수있는 경우 prod 또는 dev에 값을 설정하는 조건을 추가합니다.

+0

node.js 앱이 HTTP 서버입니까? –

+0

예. 또한 mongodb에 연결되어 있습니다. – guiomie

답변

44

는 일반적으로이 같은 생산의 노드 응용 프로그램을 실행해야 익스프레스, Socket.IO 및 기타 사용 process.env.NODE_ENV

NODE_ENV=production node app.js

응용 프로그램 환경을 알아낼 수 있습니다.

개발 중에는 이것을 생략하고 보통 node app.js으로 앱을 정상적으로 실행할 수 있습니다.

당신은 다음과 같은 코드에서 환경을 감지 할 수 있습니다 :

var env = process.env.NODE_ENV || 'dev'; 
loadConfigFile(env + '.json', doStuff); 

자료 :

사실

How do you detect the environment in an express.js app?

+3

Express 3.x 및 4.x에서 env 변수는 'express'(여기) (https://github.com/visionmedia/express/blob/master/lib/application.js#L52)에서 'development '. – Ryley

9

나는 환경을 설정하는 가장 쉬운 방법은 응용 프로그램에 명령 줄 인수를 전달하는 것입니다 생각합니다 감사합니다.

node ./server.js dev 

스크립트에서이 인수를 처리하고 필요한 구성을 설정해야합니다.

var env = process.argv[2] || 'dev'; 
switch (env) { 
    case 'dev': 
     // Setup development config 
     break; 
    case 'prod': 
     // Setup production config 
     break; 
} 

또한 구성 과정을 좀 더 쉽게 만드는 module을 만들었습니다. 어쩌면 그것은 당신을 도울 것입니다.

+1

+1 dev에서 stage, production까지 여러 설정을 만들 수 있습니다. –

2

을, 나는 데이터베이스 연결 정보, 암호 등의 설정 값을 저장하는 것이 좋습니다 않을 것이다, 액세스 토큰 및 다음과 같은 이유로 실제 응용 프로그램 코드의 내부에서 액세스 할 수 있습니다.

  1. 이러한 값을 하드 코딩하면 나중에 변경할 수 없습니다. 이러한 값을 변경하려면 응용 프로그램의 새 버전을 릴리스해야합니다.

  2. 프로덕션 수준의 구성 데이터와 암호를 코드에 저장해서는 안되기 때문에 심각한 보안 위반 사항입니다. 이 민감한 데이터를 유출하는 것은 매우 쉽습니다.

더 나은 방법은이 데이터를 외부화하여 실행 중에 응용 프로그램에 전달하는 것입니다. 이는 일반적으로 환경 변수를 통해 수행됩니다. 서로 다른 환경간에 변경이 가능한 각 데이터의 평화에 대해 고유 한 환경 변수를 정의하면됩니다.

예 : DB_HOST, DB_USER, DB_PASSWORD.

$ NODE_ENV=production DB_HOST=1.2.3.4 DB_USER=someusername DB_PASSWORD=somerandompassword /bin/node app.js 

사실,이 값이 암호화 코드베이스에 추가하고 배포하는 동안 암호를 해독 할 수있다 : 그럼 당신은 생산에 응용 프로그램 당신에게 이런 식으로 그 값을 전달할 수 있습니다. 그러나 해독 키가 배포 시스템에 안전하게 저장되거나 릴리스 엔지니어가 대화식으로 제공하는지 확인하십시오. Shippable allows to do this 상자에서 꺼내십시오.

매우 편리한 dotenv module을 사용할 수 있기 때문에 개발 환경에서 더 간단 해집니다. 그냥 프로젝트의 루트 디렉토리에 .env 파일을 생성하고,이 파일에 모든 변수를 추가

DB_HOST=1.2.3.4 
DB_USER=someusername 
DB_PASSWORD=somerandompassword 

을하지만, 각 개발자는 아마 개인 구성을 갖고 싶어 때문에, 당신 VCS에서 제외해야합니다. .env.dist 파일을 만들어 기본 구성을 포함 할 수 있으며 나중에 템플릿으로 사용할 수 있습니다 : cp .env.dist .env.


또한 I 자동 CLI 인수 및 NODE_ENV 변수 모두를 분석하여 환경을 검출 할 수있는 재사용 가능한 모듈을 구현했다. 이는 개발자 머신에서 유용 할 수 있습니다. CLI 인수를 $ node app.js --prod과 같은 Node.js 프로그램에 전달하여 환경을 쉽게 변경할 수 있기 때문입니다. Gulp와 함께 사용하는 것이 좋습니다 : $ gulp build --prod.

detect-environment's page에 대한 자세한 내용 및 사용 사례를 참조하십시오.

관련 문제