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