在 yesod 应用程序中存储 API 密钥和其他 'secrets' 的位置

Where to store API keys and other 'secrets' in a yesod app

我正在尝试一个 yesod 应用程序,我最终会把它放在 github 或类似的应用程序上。

我将使用带有 google 的 oauth2,这意味着我必须提供电子邮件和秘密令牌。我显然不想 github.

将这些存储在 yesod 脚手架应用程序中的好地方是什么?我希望将它存储在一个单独的文件中,例如 config/secret.yml,这样我就可以将它放入 git/mercurial 的忽略文件中并且永远不会提交它。

但我不知道如何包含这样的文件。或者如果 yesod 已经提供了这样的文件。 config/settings.yml 似乎是可能的,但在 github.

中有我想要的条目

所以我的问题是,在一个 yesod 脚手架应用程序中。我可以在哪里存储秘密密钥,以便我可以轻松地将其从版本控制系统中排除?

有很多方法可以解决这个问题,主要取决于您喜欢哪种风格的 devops/hosting。一种选择是在配置文件中放置一个虚拟值,并在 运行 时间用环境变量覆盖它(参见:https://github.com/yesodweb/yesod/wiki/Configuration#overriding-configuration-values-with-environment-variables)。您还可以有一个额外的生产设置文件,它会覆盖默认配置文件中的值,这就是测试套件的工作方式。一种完全不同的方法是在生产中使用像保险库这样的系统并查询它以获取您的安全凭证。

编辑 阐明其中一种方法:

  1. 使用您不会覆盖的设置创建一个新的 YAML 文件,例如在 config/production.yml:

    copyright: This is a copyright notice for production
    
  2. 当您 运行 应用程序时,传入一个命令行参数,给出配置文件的位置