Учетные данные базы данных и leiningen?
Я работаю над веб-приложением clojure, используя leiningen 2 для сборки и развертывания. Это очень ванильный webapp, и я использую compojure, ring и lein-beanstalk. Мое приложение должно использовать как учетные данные базы данных, так и учетные данные S3, и я не уверен, что лучший способ сохранить и получить доступ к ним в моем приложении.
Каков общий способ обработки чувствительных вещей, таких как учетные данные базы данных, которые необходимо развернуть с моим приложением, используя leiningen 2?
мне удалось настроить переменные среды на эластичном бобовом стебле, но я хотел бы избежать этого маршрута, если это возможно.
Ответы
Ответ 1
Два способа сделать это. Один из них - использовать переменные среды, что приятно, если все ваши значения конфигурации являются строками, и вам не требуется произвольная вложенность. Лучше всего здесь Environ: https://github.com/weavejester/environ
Другим приятным вариантом является чтение файлов данных Clojure из пути к классам. Вы можете проверить настройки конфигурации dev в своем проекте с помощью директории dev-resources
и поместить конфигурацию производства в путь к классам с помощью инструмента развертывания. Преимущество здесь в вашей конфигурации может быть произвольным значением Clojure с вложенными картами и т.д. Самое приятное для этого - Carica: https://github.com/sonian/carica
Ответ 2
Я очень люблю использовать переменные среды для отслеживания переменных окружений.; -)
Другие передают их с помощью параметров -Ddb=foo
и читают их с помощью (System/getProperty "db")
Ответ 3
Взгляните на Confijulate - библиотеку, которую я создал для реализации этого шаблона:
https://github.com/bbbates/confijulate
Вы можете хранить пароли или ключи во внешнем файле и загружать его через системное свойство. В функции, которая подключается к S3 или дБ, вы можете расшифровать ее, используя ключ, загруженный с помощью того же механизма. Просто убедитесь, что файл, который вы читаете, читается только пользователем сети (tomcat или jboss или любым другим контейнером, который вы используете с beanstalk).