处理NodeJS环境特定配置的策略(密钥等)

时间:2017-10-09 16:08:09

标签: node.js

我们目前在nodejs中使用'nconf'npm模块来使用单个json配置文件来处理特定于环境的配置。然后将此配置检入git存储库并由应用程序使用。但是,随着应用程序的增长,我们发现配置文件现在具有机密凭据信息。我想找出每个环境处理这些凭据配置的好方法。我在许多论坛中读到,这些论坛在启动节点服务器时提供这些凭据作为环境运行时参数,而不是将它们存储在源存储库中。如果您手动启动服务器,这很好,但我们正计划进行dockerized自动化容器部署。在这种情况下,我们必须在某处存储凭证配置,因此寻找有关处理这种情况的良好策略的建议。

2 个答案:

答案 0 :(得分:0)

我认为这取决于您使用的基础设施。例如,如果你使用heroku,你可以在那里设置ENV_VARS就可以了。 如果您以管理员身份拥有服务器,则可以设置这些变量,并且只知道谁有权访问该服务器。

答案 1 :(得分:0)

我已经使用Heroku和.env节点库做了类似的事情。

如果找到服务器从.env文件启动,则此库会推送一组环境变量。

仅在本地环境中创建.env文件,并将其设置在.gitignore文件中,以免上传到您的遥控器。

您的 .env 文件如下所示:

AMAZON_CLIENT_ID=ABCDEFG
AMAZON_CLIENT_SECRET=CATDOGCOW

我喜欢将所有配置变量或常量放在一个文件中,这样我就可以找到它们,而不是在代码中广泛使用。

所以我创建了一个名为 config.js 的文件,看起来像这样

require('dotenv').config({silent: true});

module.exports = {
    AMAZON_CLIENT_ID:process.env.AMAZON_CLIENT_ID,
    AMAZON_CLIENT_SECRET:process.env.AMAZON_CLIENT_SECRET,
}

至少在Heroku中,我可以在Heroku网站上手动设置所有这些环境变量,我认为你可以在Docker中做类似的事情。

然后在代码中的任何位置使用它,如:

var config = require('./config');
//some random code

if(req.query.amzclientid == config.AMAZON_CLIENT_ID)

我知道它不是Docker,但是如果你有兴趣了解更多上述内容,我写了一篇关于它的tutorial