标签: 12factor

如何使angularjs应用程序12兼容配置

我正在努力使一个angularjs应用程序12因素兼容配置(http://12factor.net/config).

它应该取决于环境,我不应该看到的话development,test,production在代码等.

例如,变量可以存储在bash env中.我可以将它们传递给网络服务器.

我已经想到了一个.erb模板文件erb config.js.erb > config.js,但是如果我在应用程序运行时更改了一个变量,我必须重做它.

我已经找到了这篇文章http://mindthecode.com/how-to-use-environment-variables-in-your-angular-application/

但这是一个很大的谎言和Grunt.js这样做,真的......无论如何.

我知道12factor哲学不是为前端应用而制作的,但我的角度应用程序可以在许多不同的服务器中部署在许多环境中,并且不会伤害任何人来尝试正确地做事:).

谢谢 !

编辑:

我想使用的配置参数有些像:

app:
   api:
       url: "The url of the api server"
       port: 8080
   cdn:
       images: "url of my images caching service"
   google:
       oauth:
           "api_key": "The api key used for that deployment"
   #other external frontend services
Run Code Online (Sandbox Code Playgroud)

其他编辑:

这个家伙有点回答:http://bahmutov.calepin.co/inject-valid-constants-into-angular.html,我发现它有点丑陋,完全绑定到angularjs; 但它的确有效!

angularjs 12factor

5
推荐指数
1
解决办法
1060
查看次数

使用Webpack编写12因子应用程序?

您将如何编写12因子的webpack / expressjs应用程序?特别是,我希望在运行时通过expressjs服务器上的环境变量提供一些应用程序配置。

目前,我在<script>标签中创建了一个全局Config对象,并通过渲染模板和传递值来填充它,但是我想使用webpack外部并将其包装为适当的模块。有没有人尝试这样做,或者有类似的解决方案?

12factor systemjs webpack

5
推荐指数
1
解决办法
237
查看次数

dotenv是否与十二要素应用程序相矛盾?

我已经阅读了十二因子应用程序的配置-第三部分,并在NodeJS中搜索了一种方法。似乎大多数人推荐dotenv将配置存储在环境变量中。

但是,dotenv似乎与“十二要素应用程序”相矛盾,因为:

另一种配置方法是使用未检入版本控制的配置文件,例如Rails中的config / database.yml。与使用已检查到代码存储库中的常量相比,这是一个巨大的改进,但仍然存在缺陷:容易将配置文件错误地检入存储库中;有一种趋势是配置文件分散在不同的位置和不同的格式,这使得很难在一处查看和管理所有配置。此外,这些格式倾向于特定于语言或框架。

十二因子应用程序将配置存储在环境变量中(通常缩写为env vars或env)。Env var易于在部署之间进行更改,而无需更改任何代码。与配置文件不同,它们很少有可能被意外检入代码存储库;与自定义配置文件或其他配置机制(例如Java系统属性)不同,它们是与语言和操作系统无关的标准。

理解此语句后,似乎可以使用dotenv创建一个配置文件.env,然后将其导出为环境变量。

由于.env文件可能会意外地签入代码存储库,因此这不会违反十二要素应用程序吗?

environment-variables node.js 12factor

5
推荐指数
2
解决办法
528
查看次数

如何在已部署的SF4应用程序上处理环境变量

Symfony从Symfony 3开始引入了一个新的Dotenv组件,它允许我们将环境变量作为应用程序参数来处理.这看起来非常好,根据12factor app宣言,这是最好的做法.

现在,关于Symfony 4,他们进一步推进了这种做法,这就是我开始通过.env文件使用环境变量的原因.

然后我想部署并且我意识到.env文件不能保留在服务器上,因为它与具有parameters.yml文件相同.

所以我一直在深入研究文档,我发现这篇文章解释了我们可以通过一些webserver指令直接创建环境变量.这对于通过FPM执行的代码非常有用,但它并没有告诉我们如何通过CLI运行命令时如何处理环境变量.

我怎样才能做到这一点?是否应该存储等效的.env文件?但那么参数会重复吗?

我欢迎任何帮助;)

deployment symfony 12factor

5
推荐指数
1
解决办法
360
查看次数


配置文件特定属性与环境变量

使用Spring-boot,我们可以在Profile特定属性文件中存储不同环境的配置参数,但是这会使配置成为12因素原则不推荐的代码的一部分.

相反,12 -factor建议在环境中存储配置(这里,配置专门表示其值在不同环境中变化的参数).

在环境Vs特定于配置文件的属性文件中存储配置的优缺点是什么?

spring development-environment config 12factor spring-boot

4
推荐指数
1
解决办法
1249
查看次数

在不同环境中运行的react.js redux生成版本中将环境变量呈现给浏览器

https://github.com/gothinkster/react-redux-realworld-example-app上的react redux realworld.io应用程序的自述文件说要编辑以src/agent.js将其更改API_ROOT为指向不同的后端api实例.我们想要进行设置,以便API_ROOT可以通过在我们运行生产构建的多个环境(例如,"staging"和"live")中不同的环境变量来定义.

我们按照12factor.net原则在openshift kubernetes上运行容器,其中代码构建一次,然后通过环境进行推广.我们可以使用单个命令启动新环境,因此我们不希望在代码中有一个switch语句来命名每个环境,并且硬编码每个环境的后端API_ROOT.相反,我希望能够使用环境变量在新环境中运行现有生产构建容器映像,将其更改API_ROOT为指向我们要测试的正确后端API.

我查看了许多不同的博客,stackoverflow答案和官方文档.主要问题是典型的解决方案process.env.API_ROOT在构建时"烘焙" 环境变量,否则就会有一个开关,将所有环境的细节硬编码到代码中.这两者都不令人满意,因为我们希望能够在现有容器中获取最新的稳定代码,并使用在那里运行的API在新环境中运行它.

到目前为止,我最接近的是编辑代码以将其呈现process.env.API_ROOT为将<script>其设置在window.API_ROOT变量上的标记.然后检查是否存在其他在为API_ROOT定义const时使用默认值.这感觉非常具有侵略性,有点脆弱,我不清楚在示例应用程序中在哪里提供这样的脚本标记的最佳位置https://github.com/gothinkster/react-redux-realworld-example-app

12factor reactjs react-redux

4
推荐指数
2
解决办法
3637
查看次数

在 Dockerfile 或 docker-compose 中定义环境变量?

在阅读了12 factor 应用程序配置点后,我决定用环境变量覆盖包含默认值的配置文件。

我有 3 个Dockerfile,一个用于 API,一个用于前端,一个用于工作人员。我有一个docker-compose.yml来运行这 3 个服务和一个数据库。

现在我想知道是否应该在Dockerfiles 或docker-compose.yml? 使用一个而不是另一个有什么区别?

environment-variables 12factor docker dockerfile docker-compose

4
推荐指数
1
解决办法
4994
查看次数

如果PHP应用程序将其缓冲的事件流写入stdout,实际输出在哪里?

我说的是来自PHP背景,但我认为这适用于其他网络服务器语言.是不是stdout所有的,如命名,标准输出?此外,不是HTTP响应的地方吗?我错过了什么吗?

php 12factor

1
推荐指数
1
解决办法
52
查看次数

Tomcat,Docker,日志记录和STDOUT?

我正在docker中运行tomcat,但看不到日志。它们被写入tomcat / logs下的各种日志文件,但是当tomcat在docker容器中运行时,我看不到它们。

这是我的Dockerfile

FROM tomcat:7-jre8
COPY target/MYAPP.war /usr/local/tomcat/webapps/MYAPP.war
RUN ["/usr/local/tomcat/bin/catalina.sh", "start"]
Run Code Online (Sandbox Code Playgroud)

这是我构建图像并从中启动容器的方式:

docker build -t MYAPP .
docker run -it --rm -p 8080:8080 --name MYAPP MYAPP
Run Code Online (Sandbox Code Playgroud)

在tomcat部署MYAPP.war之后,我的应用程序创建了日志文件:/var/log/MYAPP.log

我应该如何修改Dockerfile以及应该使用哪个命令来运行它(“ docker run ...”),以便在使用oneliner启动容器MYAPP之后立即使用“ docker run -it --rm -p -p 8080:8080 --name MYAPP MYAPP”中的/var/log/MYAPP.log的内容是否会打印到stdout?

我试图将以下命令添加到Dockerfile中,但没有帮助。

CMD tail -f /usr/local/MYAPP.log
Run Code Online (Sandbox Code Playgroud)

logging tomcat 12factor docker

1
推荐指数
2
解决办法
4680
查看次数