问题标签 [12factor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
heroku - 管理和存储 Heroku/Cloudfoundry 应用程序使用的工件/库(例如 jar)
我已经阅读了 12-factor-app manifesto 并且我有以下疑问:我可以在哪里以及如何存储一个内部库,这样一个 jar 将被我的几个 Heroku 或 Cloudfoundry 应用程序使用?
所有这一切都请记住,该库/jar 的代码库是在 Github 中进行版本控制的。
logging - 12Factor 应用程序:使用 Fluentd 捕获标准输出/标准错误日志
通过阅读12factor的以下帖子,我想出了一个问题,我想看看你们是如何处理这个问题的。
基本上,应用程序应该直接写入 stdout/stderr。无论如何将这些流直接重定向到fluentd(不绑定到rsyslog/syslog)?随着我越来越了解 fluentd,我相信它将成为来自多个应用程序/平台的日志聚合的绝佳工具。
这样做的主要原因是,如果应用程序是跨平台的,rsyslog/syslog 可能不可用,据我了解,使用日志框架(需要所需的配置才能工作)将违反 12factor。
谢谢!
ruby-on-rails - 如何在 Rails 中使用“12 factor app”方式进行图像处理
我很难找出在我的 Rails 项目中进行图像上传的最佳方法,同时仍然遵守“12 因素应用程序”标准。
基本上,我想让用户上传他们自己的个人资料图片。我知道我可以使用 Paperclip 来实现这一点,但我仍然需要使用 ImageMagick 之类的东西来调整图像大小并准备要在我的应用程序中使用的图片。
根据 12 Factor 应用程序的第 2 节,依赖项(http://12factor.net/dependencies):
十二因素应用程序从不依赖于系统范围包的隐式存在。
十二因素应用程序也不依赖于任何系统工具的隐含存在。示例包括使用 ImageMagick 或 curl。
它说你不应该在本地使用 ImageMagick。这是有道理的,但你会如何处理图像呢?
提前感谢您提供的任何建议!
django - 在 jenkins 构建中包含 .env 文件的最佳实践是什么?
这是我的情况:我有一个 Django 应用程序,它依赖于存储在.env
文件中的配置值。此.env
文件与源代码控制分开,以保持敏感信息的私密性。这个 Django 应用程序部署在 docker 容器中,我设置了 jenkins,以便在将更改签入我们的 git 存储库时重建容器。.env
除非构建环境中存在文件,否则构建将失败。包含该文件的最佳方法是什么?
我目前已将 jenkins 设置为执行将文件写入构建环境的 shell 命令,但我不禁觉得这是次优的,安全方面的。有什么更好的方法来做到这一点?
git - 多个应用程序共享相同的代码:如何避免这种违反 12 要素应用程序宣言的行为
我有两个 java 应用程序,它们都依赖于一个库(即我的域模型)。
我部署到促进 12 要素架构的 PaaS(即 Heroku)。
我使用 Git/Github 作为 SCM。
我不确定如何使用 Git 组织我的模块的源代码,以便两个应用程序可以共享依赖项/库并仍然尊重 12 因素宣言。
我正在考虑导入库的源代码,git pull -s subtree
因此将库的源代码包含在两个应用程序的源代码中。
现在:这是否尊重 12 要素应用程序宣言?请参阅:http: //12factor.net/codebase。
多个应用程序共享相同的代码违反了十二因素。这里的解决方案是将共享代码分解到可以通过依赖管理器包含的库中。
这似乎明显违反了 12 要素应用宣言……
现在 Heroku 不提供依赖管理器功能。
那么有人可以建议并提供最佳实践吗?
symfony - 如何使用 Consul 服务发现处理 Symfony2 的运行时配置
我们的团队目前正在探索使用 Consul 为 Symfony2 应用程序服务发现的想法。处于相对前沿,讨论的方式很少。到目前为止,我们已经发现:
- 运行时配置先前已被击落。
- 存在一个包来处理这样的用例,但最近也没有看到很多活动。
- 所述捆绑包的一位贡献者建议外部参数可能是问题的答案。
- Sensio 创建了自己的 Consul SDK。但是,文档/官方博客文章re:Symfony2集成的方式似乎很少
- Consol提供了可以在各种变化时触发的手表
当前的想法是探索利用 Consul 观察者重新触发缓存构建以及外部参数。也就是说,如果服务半频繁地更改,则对此类操作的开销存在一些担忧。
基于上述内容,以及对 Consul/Symfony 内部的了解,这是一种可取的方法吗?如果不是,为什么,以及有哪些替代方案?
python - 用于 Docker 微服务部署的十二要素应用程序
我真的很喜欢十二因素宣言背后的想法。我正在尝试将它们应用于 Python/Django 项目的小型微服务式部署。Django 项目打包在一个通过 Docker Hub 部署的 Docker 容器中。
我想了解的一件事是如何处理配置文件和环境变量。12 要素应用程序的普遍看法是配置应该存储为环境变量,而不是源代码控制。我正在考虑使用检查环境变量的django-environ.env
以及在 dev 中使用的文件来实现这一点。
那么如何在生产环境中设置这些环境变量呢?
- 在 Docker 中,可以像
ENV
在 Dockerfile ( doc ) 中一样声明环境变量。所以我可以在那里添加这些信息,但是我用源代码签入 Dockerfile,所以这会破坏目的。 - 我可以为生产创建一个附加
.env
文件,而不是将其签入源代码管理。我可以在使用命令.env
构建映像时复制此生产文件。COPY
但这意味着开发人员将有权访问数据库凭据。 - 设置自定义构建触发器,以便在源代码管理中更新代码时发出构建触发器。在构建映像时,此构建节点会添加此
.env
文件,并部署到服务器。
我觉得第三种选择是唯一有意义的选择。但即使在这种情况下,配置项仍然存储在文件中,而不是真正存储在环境变量中。
任何想法如何去做?
heroku - 尊重部署在 Cloudfoundry 或 Heroku 上的 Gradle/Spring 应用程序的代码库因素(来自 12 因素应用程序宣言)
我的问题与 12 要素应用程序宣言的第一个要素有关:代码库。(见http://12factor.net/codebase)。
TL;博士:
这个因素表明代码库和部署之间存在一对一的关系,因此在这种情况下,您不应该为两个应用程序使用相同的代码库(存储库)
我的要求:我有一个网站 Spring 应用程序和一个批处理 Spring 应用程序都共享一个公共代码,即域模型(JPA 实体类)。我需要能够分享这个通用代码。而且这两个应用程序在任何时候都需要使用相同版本的通用代码。
我当前的设置:我目前在 github 上有三个“顶级”存储库:
- 领域模型(JPA 实体类)回购
- 网站应用程序仓库
- 领域模型目录/gradle 项目(包含在 中
git subtree pull/push
)
- 领域模型目录/gradle 项目(包含在 中
- 批处理应用程序仓库
- 领域模型目录/gradle 项目(包含在 中
git subtree pull/push
)
- 领域模型目录/gradle 项目(包含在 中
另请注意,域模型存储库是单独存在的(如上所述),但也嵌套在网站和批处理应用程序存储库中。我使用 agit subtree pull/push
是为了将此域模型存储库作为目录和一个 gradle 项目包含在其他两个存储库中。这样做的原因是 Heroku 从 repos 构建代码本身。
所有这些都非常繁琐且容易出错。
有人可以建议更好的解决方案吗?
security - 在标准输入中传递应用程序配置是环境变量的安全替代方案吗?
我正在尝试找出 Web 应用程序配置的最佳方法。目标是:
- 可配置性。强制在部署时指定配置。确保配置与代码或可部署工件分开。
- 安全。防止秘密从部署环境中泄露。
- 简单。确保解决方案简单,并且对 OS 进程的概念很自然。
- 灵活性。不对配置的存储位置做任何假设。
根据12 因素应用程序Web 应用程序配置最好在环境变量中提供。它简单灵活,但看起来有一些与此相关的安全问题。
另一种方法可能是将所有配置作为命令行参数传递。这对操作系统来说又是简单、灵活和自然的,但整个配置随后在主机的进程列表中可见。这可能是也可能不是问题(我不是操作系统专家),但至少解决方案很麻烦。
流行的框架Dropwizard采用混合方法,其中命令行参数指定配置文件位置,并从那里读取配置。问题是它打破了对我的配置(本地文件)位置的假设的灵活性约束。它还使我的应用程序实现了文件访问,虽然这在大多数语言/框架/库中通常很容易实现,但本质上并不简单。
我正在考虑另一种方法,即在应用程序的stdin
. 最终cat my-config-file.yml | ./my-web-app
,在本地存储文件甚至wget https://secure-config-provider/my-config-file.yml | ./my-web-app
. 管道似乎很简单,并且是 OS 进程的原生。它看起来非常灵活,并且将配置如何提供到主机操作系统的问题分开。
问题是它是否符合安全约束。假设一旦管道内容被消费,它就永远消失了,这是否安全?
我无法通过谷歌搜索任何尝试此操作的人,因此提出了这个问题。