3

我正在写一篇关于十二因素应用程序的论文,我想知道你是否可以在这里帮助我。

十二因素应用程序的第三个因素状态:在环境中存储配置。(https://12factor.net/config)。根据页面,部署之间可能会有所不同的所有配置都应提取到环境变量中。

我想知道在创建例如 Rails 应用程序时如何在开发过程中应用。目前,我看到两种在我看来都不完美的方法。

  • 将环境变量存储在.bashrc.zshrc等文件中。我不知道如何使用这种方法管理测试和开发环境,因为两者都需要使用相同环境变量的特定配置。此外,在处理多个项目时,这会使 shell 充满变量,但它似乎符合十二因素应用程序方法。
  • 使用像https://github.com/bkeepers/dotenv这样的工具,它使用作为项目一部分的文件来存储配置,因此与 Rails 框架已经提供的 secrets.yml 或 database.yml 没有太大区别并且不完全符合十二因素应用程序的想法(仍然可以不小心检查到代码库中,并且大部分与语言无关)

我的观点正确吗?我想知道是否有任何最佳实践来解决这个问题。

谢谢!

4

1 回答 1

2

基本上,可以根据您的上下文访问环境变量。运行进程、系统、应用程序的用户都可以修改您可以在应用程序中的任何给定时间/地点访问的变量集。所以,你把它们放在哪里取决于你的应用程序的需求——你需要在同一台服务器上隔离不同的应用程序吗?您是否需要有效管理数十个应用程序?您是否需要配置和填充新的服务器环境?等等。

至于选项,这是我所经历的:

这些.*rc文件适用于这种配置,即使您可能不喜欢它的味道这些使它们可供 Environment 运行 files 的用户使用ubuntu,因此如果您的登录用户是,但您的服务作为其他用户运行,它可能对您不起作用,例如www-dataor httpd

Dotenv 也很好,因为它在运行时将变量注入到实际的 ENV 中。不完美,但仍然可以接受恕我直言(假设您从未将这些变量提交给 vc,正如您所指出的那样)。 这使得它们可用于使用 Dotenv 的单个应用程序

其他方法是(对于 Web 应用程序)将它们放入 Apache 或 Nginx(或其他 Web 服务器)配置中。它们可以放在虚拟主机定义层或服务/守护程序配置层的环境中(尽管我认为 Nginx 不支持虚拟主机环境)。这使得这些服务启动的任何应用程序都可以使用这些变量。这对于网站或 Web 应用程序很常见。

您还可以设置 Environment server-wide:/etc/profile/etc/environment. 这使得它们可用于整个系统上的任何服务。

除此之外(多服务器应用程序、复杂托管等)更多的是 Ops 的问题 - 管理多个配置集仍然与 12-Factor 应用程序相关,但不会有一个简单的答案:)

这是很酷的事情:

您不必立即做出决定!使用环境变量是一种非常灵活的方法!您可以在开发 Macbook 上使用 DotEnv,将它们放在暂存环境中的 Apache 中,.bashrc用于您的测试/集成服务器,然后将它们/etc/environment放在您定制的 Lighttpd 生产服务器上。让您的应用程序期望您的配置位于 ENV 中意味着您的应用程序不必关心它是如何到达那里的

于 2017-01-21T05:09:28.407 回答