我正在开发一个 clojure Web 应用程序,使用 leiningen 2 进行构建和部署。这是一个非常普通的 web 应用程序,我正在使用 compojure、ring 和 lein-beanstalk。我的应用程序需要同时使用数据库凭据和 S3 凭据,我不确定在我的应用程序中存储和访问它们的最佳方式。
使用 leiningen 2 处理需要与我的应用程序一起部署的数据库凭据等敏感信息的常用方法是什么?
我可以在弹性豆茎上设置环境变量,但如果可能的话,我想避免这条路线。
我正在开发一个 clojure Web 应用程序,使用 leiningen 2 进行构建和部署。这是一个非常普通的 web 应用程序,我正在使用 compojure、ring 和 lein-beanstalk。我的应用程序需要同时使用数据库凭据和 S3 凭据,我不确定在我的应用程序中存储和访问它们的最佳方式。
使用 leiningen 2 处理需要与我的应用程序一起部署的数据库凭据等敏感信息的常用方法是什么?
我可以在弹性豆茎上设置环境变量,但如果可能的话,我想避免这条路线。
有两种方法可以做到。一种是使用环境变量,如果您的所有配置值都是字符串并且您不需要任意嵌套,这很好。您最好的选择是 Environ:https ://github.com/weavejester/environ
另一个不错的选择是从类路径中读取 Clojure 数据文件。您可以使用 dir 将开发配置设置检查到您的项目中,dev-resources
并使用部署工具将生产配置放在类路径中。这里的优点是您的配置可以是带有嵌套映射等的任意 Clojure 值。对此最好的是 Carica:https ://github.com/sonian/carica
我非常喜欢使用环境变量来跟踪变量环境。;-)
其他人使用选项传递它们-Ddb=foo
并阅读它们(System/getProperty "db")
看看 Confijulate——我为实现这种模式而创建的一个库:
https://github.com/bbbates/confijulate
您可以将密码或密钥存储在外部文件中,并通过系统属性将其加载。在连接到 S3 或 dB 的函数中,您可以使用通过相同机制加载的密钥对其进行解密。只需确保您读入的文件只能由 Web 用户(tomcat 或 jboss 或您与 beanstalk 一起使用的任何容器)读取。