[node.js] Node.js 배포 설정 / 구성 파일을 저장하는 방법?

몇 가지 Node 앱을 개발하고 있으며 배포 관련 설정을 저장하는 좋은 패턴을 찾고있었습니다. Django 세계 (내 출신)의 일반적인 관행은 settings.py표준 설정 (시간대 등)을 포함 한 파일 local_settings.py을 배치 한 다음 배치 특정 설정을위한 것입니다. 대화 할 데이터베이스, memcache 소켓, 관리자의 전자 메일 주소 등

Node와 비슷한 패턴을 찾고 있습니다. 구성 파일 만 있으면 좋을 것이므로의 다른 모든 항목으로 채워질 app.js필요는 없지만 소스 제어가 아닌 파일에서 서버 별 구성을 갖는 방법이 중요합니다. 동일한 앱을 설정이 서로 다른 여러 서버에 배포 할 수 있으며 병합 충돌을 처리해야 할뿐 아니라 재미있는 아이디어도 아닙니다.

그래서 이것을위한 일종의 프레임 워크 / 도구가 있습니까, 아니면 모두가 스스로 무언가를 해킹합니까?



답변

package.json패키지와 config.js구성에 a 를 사용합니다 .

var config = {};

config.twitter = {};
config.redis = {};
config.web = {};

config.default_stuff =  ['red','green','blue','apple','yellow','orange','politics'];
config.twitter.user_name = process.env.TWITTER_USER || 'username';
config.twitter.password=  process.env.TWITTER_PASSWORD || 'password';
config.redis.uri = process.env.DUOSTACK_DB_REDIS;
config.redis.host = 'hostname';
config.redis.port = 6379;
config.web.port = process.env.WEB_PORT || 9980;

module.exports = config;

내 프로젝트에서 구성을로드합니다.

var config = require('./config');

그리고 내가에서 내 물건에 액세스 할 수 있습니다 config.db_host, config.db_port등 …이 나에게 내가 소스 제어에서 암호를 저장하지 않으려면 환경 변수에 저장하거나 사용하는 하드 코딩 매개 변수 또는 매개 변수를 할 수 있습니다.

또한 package.json의존성 섹션을 생성 하고 삽입합니다.

"dependencies": {
  "cradle": "0.5.5",
  "jade": "0.10.4",
  "redis": "0.5.11",
  "socket.io": "0.6.16",
  "twitter-node": "0.0.2",
  "express": "2.2.0"
}

프로젝트를 로컬 컴퓨터에 복제 npm install하면 패키지를 설치하기 위해 실행 됩니다. 여기 에 대한 자세한 정보 .

프로젝트는 GitHub에 저장되며 프로덕션 서버에 리모컨이 추가되었습니다.


답변

Node v0.5.x부터 JSON 파일이 필요할 수 있습니다 ( 이 답변 참조). ).

config.json :

{
    "username" : "root",
    "password" : "foot"
}

app.js :

var config = require('./config.json');
log_in(config.username, config.password);


답변

훨씬 나중에, 구성 관리를위한 꽤 좋은 Node.js 모듈을 찾았습니다 : nconf .

간단한 예 :

var nconf = require('nconf');

// First consider commandline arguments and environment variables, respectively.
nconf.argv().env();

// Then load configuration from a designated file.
nconf.file({ file: 'config.json' });

// Provide default values for settings not provided above.
nconf.defaults({
    'http': {
        'port': 1337
    }
});

// Once this is in place, you can just use nconf.get to get your settings.
// So this would configure `myApp` to listen on port 1337 if the port
// has not been overridden by any of the three configuration inputs
// mentioned above.
myApp.listen(nconf.get('http:port'));

또한 Redis에 설정을 저장 하고 구성 파일을 작성하며 상당히 견고한 API를 보유하고 있으며 Flatiron의 일부로 Node.js 상점 인 Nodejitsu의 지원을받습니다 . 프레임 워크 이니셔티브의 있습니다. 상당히 미래 지향적입니다.

Github에서 nconf를 확인하십시오 .


답변

내 솔루션은 매우 간단합니다.

./config/index.js에서 환경 구성을로드하십시오.

var env = process.env.NODE_ENV || 'development'
  , cfg = require('./config.'+env);

module.exports = cfg;

./config/config.global.js에서 일부 기본값을 정의하십시오.

var config = module.exports = {};

config.env = 'development';
config.hostname = 'dev.example.com';

//mongo database
config.mongo = {};
config.mongo.uri = process.env.MONGO_URI || 'localhost';
config.mongo.db = 'example_dev';

./config/config.test.js의 기본값을 재정의하십시오.

var config = require('./config.global');

config.env = 'test';
config.hostname = 'test.example';
config.mongo.db = 'example_test';

module.exports = config;

./models/user.js에서 사용 :

var mongoose = require('mongoose')
, cfg = require('../config')
, db = mongoose.createConnection(cfg.mongo.uri, cfg.mongo.db);

테스트 환경에서 앱 실행 :

NODE_ENV=test node ./app.js


답변

12 개의 앱 의 신조를 따르는 dotenv 를 볼 수도 있습니다 .

나는 node-config를 사용했지만 그 이유로 dotenv를 만들었습니다. 루비의 dotenv 라이브러리에서 완전히 영감을 얻었습니다.

사용법은 매우 쉽습니다.

var dotenv = require('dotenv');
dotenv.load();

그런 다음 .env 파일을 만들고 다음과 같이 설정을 저장하십시오.

S3_BUCKET=YOURS3BUCKET
SECRET_KEY=YOURSECRETKEYGOESHERE
OTHER_SECRET_STUFF=my_cats_middle_name

그것은 nodejs에 대한 dotenv입니다.


답변

npm을 사용하여 스크립트 (env 등)를 시작하고 있습니까?

.env파일 을 사용하는 경우 파일을 포함하고 package.json
npm을 사용 하여 파일 을 소스 / 시작할 수 있습니다.

예:

{
  "name": "server",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node test.js",
    "start-dev": "source dev.env; node test.js",
    "start-prod": "source prod.env; node test.js"
  },
  "dependencies": {
    "mysql": "*"
  }
}

그런 다음 npm 스크립트를 실행하십시오.

$ npm start-dev

여기에 설명되어 있습니다 https://gist.github.com/ericelliott/4152984
Eric Elliot의 모든 크레딧


답변

$ HOST$ NODE_ENV 변수 (RoR과 약간 유사)에 따라 구성 파일을로드 하는 node-config 를 참조하십시오. documentation .

이것은 다른 배포 설정 (에 매우 유용 할 수 있습니다 development, test또는 production).