我应该在哪里存储节点服务器的秘密string?

那么,我有一个问题。 我怎样才能存储密码,数据库url和重要的string不应该去我的公共版本控制?

我已经提出了3个解决scheme。 第一个只适用于dev:

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

config.js

 module.exports = { 'serverPort' : '8182' } 

第二个应该在dev和prod上工作。 但config.js文件被添加到.gitignore文件中,所以不会上传到服务器。 当服务器试图要求config.js并且找不到时,它会抛出一个错误。

 var config = require('./config'); var port = process.env.PORT || config.serverPort; 

第三个是只使用process.envvariables,但这只适用于生产。 而且,如果我在本地机器上进行testing,则可能需要粘贴我的秘密string,并在发送到公共版本控制之前记得删除它。

所以我该怎么做?

常见的解决scheme是将一个config.js.example文件添加到版本控制(包含空/虚拟值来logging可用的文件)。

然后你添加config.js到.gitignore(或其他任何适合你的VCS)。

要运行你的应用程序,只需将config.js.example复制到config.js并input正确的值即可。

当然, config.js的path可以从一个环境variables中获取,以便轻松使用不同的configuration – 但是,您仍然不会将实际的configuration文件置于版本控制之下(除非您有一个单独的configuration文件私人回购等)

总是要求configuration文件存在是有道理的。 即使在发展。 尽pipe默认设置可能是合适的,但很多应用程序的开发人员都希望configuration这些东西,或者只是使用非默认值进行testing。

这是我的build议:

1.使用文件和envvariables的组合

您可以使用configuration文件和process.envvariables混合pipe理秘密string。

你可以做这样的事情:

 var port = process.env.PORT || config.serverPort; 

从现在开始,与docker工作是规则,你应该尝试这一个。

2.使用样本

您可以使用您应该定义的variables的示例将config.json.example添加到回购库中,但在此处您必须记住在部署到生产环境时对其进行更改。

只要记住添加真正的config.json.gitignore文件。 这不是我的首选,但仍然是一个select。