在Yesod和Keter

时间:2015-10-14 15:09:58

标签: haskell deployment web-deployment yesod keter

我正在使用Yesod构建一个Web应用程序,目前我正在通过环境变量(根据The Twelve-Factor App)传递API密钥等秘密,以避免将这些值存储在版本控制的配置文件中。例如,我按照以下方式在开发模式下运行我的应用程序:

SOME_API_KEY=value yesod devel

我的config/settings.yml文件中有一个值,该文件是根据此环境变量定义的,其值为空值,如下所示:

meetup-api-key: "_env:SOME_API_KEY:"

要使用Keter进行部署,我使用yesod keter命令构建Keter软件包,并将生成的文件放入Keter的incoming目录中。由于我使用了环境变量配置,因此我的应用的.keter文件不包含SOME_API_KEY值(这是有意的)。

如何将SOME_API_KEY传递到我在Keter中运行的应用实例?

我希望至少在以下三个原因中避免将值加到我的keter-config.yaml中:

  1. 它不如环境变量方法安全。
  2. 直接嵌入到Keter本身的配置文件中,与应用程序的配置相反,如果不停止并重新启动整个Keter进程,则无法更改密码。
  3. 环境变量将传递到由Keter管理的每个应用程序中。
  4. 我希望有一些"最佳实践"在这种情况下。

1 个答案:

答案 0 :(得分:1)

将您的秘密设置为服务器上的环境变量,并使用forward-env中的config/keter.yml将其转发到您的应用,如以下补丁中所示:https://github.com/snoyberg/keter/commit/9e9fca314fb78860fb5c9b08cad212d92b0b20d4