몇 가지 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
).