标签: 12factor

如何将环境变量传递给前端Web应用程序?

我试图容纳一个前端Web应用程序,我有麻烦弄清楚如何传递环境变量.该应用程序是一个Angular应用程序,因此它是100%客户端.

在典型的后端服务中,传递环境变量很容易,因为一切都在同一主机上运行,​​因此后端服务可以轻松选择环境变量.但是,在前端应用程序中,这是不同的:应用程序在客户端的浏览器中运行.

我想通过环境变量配置我的应用程序,因为这使部署更容易.所有配置都可以完成,docker-compose.yml无需维护多个映像,每个映像都适用于所有可能的环境.只有一个不可变的图像.这遵循12因素应用原则,可以在https://12factor.net/config上找到.

我正在构建我的应用程序映像如下:

FROM node:alpine as builder
COPY package.json ./
RUN npm i && mkdir /app && cp -R ./node_modules ./app
WORKDIR /app
COPY . .
RUN $(npm bin)/ng build

FROM nginx:alpine
COPY nginx/default.conf /etc/nginx/conf.d/
RUN rm -rf /usr/share/nginx/html/*
COPY --from=builder /app/dist /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]
Run Code Online (Sandbox Code Playgroud)

app/config.ts,我有:

export const config = {
    REST_API_URL: 'http://default-url-to-my-backend-rest-api'
};
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想在我的网站上做这样的事情docker-compose.yml:

backend:
  image: ...
frontend:
  image: my-frontend-app
  environment:
    - REST_API_URL=http://backend:8080/api
Run Code Online (Sandbox Code Playgroud)

所以我相信我应该改变它app/config.ts来替换REST_API_URL …

environment-variables 12factor docker dockerfile

20
推荐指数
3
解决办法
7606
查看次数

在12因子应用程序中管理配置

我很高兴在Heroku上使用Rails,就像我可以调整Heroku应用程序的配置属性而无需提交更改xyz.yml和重新部署.

在我的Rails应用程序中完全取消Yaml配置文件会很好,并尽可能地依赖于在ENV中存储配置.这与12因素配置原则一致.

但是,从基于Yaml的配置管理切换到基于Heroku/12因子的配置管理有一些权衡.

  • 虽然部署(qa,stage,prod,dev,demo,labs)的增加确实会导致Yaml文件的激增,但是复制粘贴非常容易创建新的配置文件.我没有看到在Heroku中将配置配置文件从一个部署"复制"到另一个部署的方法.
  • 在repo中存储配置数据意味着,在Heroku的情况下,部署和配置以及应用程序都可以在一次操作中完成.如果我要将配置从Yaml文件移到ENV变量中,我将不得不在部署后在单独的步骤中配置我的应用程序.

希望听到那些在私有应用程序中使用过12因子样式配置的人,以及他们如何在许多部署中管理大量配置变量.

  • 您如何快速配置新部署?
  • 你在哪里保留配置变量的权威来源,如果不是回购?你如何在开发者中分发它?

谢谢!

configuration ruby-on-rails heroku 12factor

18
推荐指数
2
解决办法
3203
查看次数

12Factor App:使用Fluentd捕获stdout/stderr日志

通过阅读12factor中的以下帖子,我想出了一个问题,我想检查一下你们如何处理这个问题.

基本上,应用程序应直接写入stdout/stderr.反正将这些流直接重定向到流畅(不绑定到rsyslog/syslog)?随着我越来越清楚流利,我相信它将成为来自多个应用/平台的日志聚合的绝佳工具.

这样做的主要原因是,如果应用程序是跨平台的,则rsyslog/syslog可能不可用,并且据我所知,使用日志框架(需要使用它们所需的配置)将违反12factor.

谢谢!

logging 12factor fluentd

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

何处存储12因素应用程序的SSL证书

一个十二因素应用程序预计将在环境中存储配置.

这是否包括SSL证书和密钥文件,它们可以是"大"(至少是kb的倍数),并且(取决于格式)通常包含不可打印的字符(至少是换行符).

或者预期环境只是指向证书/密钥文件名?(例如,当尝试通过Docker进行部署时,这似乎可能不太理想 - 我们真的不想在Docker镜像中存储私钥,对吗?但是,这可能是一个单独的问题.)

ssl-certificate 12factor

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

如何使用Consul服务发现处理Symfony2的运行时配置

我们的团队目前正在使用Consul探索Symfony2应用程序的服务发现概念.处于相对边界,讨论的方式很少.到目前为止,我们已经发现:

目前的想法是探索利用Consul观察者重新触发缓存构建以及外部参数.也就是说,如果服务半频繁地改变,那么对这种操作的开销存在一些担忧.

基于上述内容以及Consul/Symfony内部的知识,这是一种可行的方法吗?如果没有,为什么,有什么替代品?

service-discovery symfony 12factor consul runtime-configuration

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

存储 12 因素应用程序的配置的过程是什么?

我主要将应用程序构建为 12 因素应用程序,现在正在研究配置部分。

目前,我有单独的用于开发和生产的配置文件,通过构建过程,我们可以构建开发或生产映像。代码100%相同;唯一改变的是配置。

现在我 100% 明白,在 12 因素应用程序中,配置应该来自外部源,例如:环境变量,或者可能是保险库等安全存储。

因此,各种文章和博客都没有提到配置是如何存储/处理配置的。如果代码单独存放在自己的 Git 存储库中,并且没有存储任何配置,那么我们如何处理配置呢?

我们是否将实际的配置值存储在单独的 Git 存储库中,然后通过使用某种触发器的构建过程以某种方式在目标环境(Kubernetes 配置映射、marathon JSON 配置、Vault 等)上合并/推送/执行这些配置值?

build jenkins 12factor kubernetes dcos

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

在Heroku上部署Django应用程序:我可以在.env文件中手动设置环境变量吗?我是否需要安装autoenv,heroku-config等工具?

我的目标:

我打算遵循"The Twelve-Factor App"方法在Heroku上构建我的Django应用程序.

介绍:

我正在关注"Heroku上的Django入门"快速入门指南.目前我有以下目录结构:

~/Projects/
    hellodjango_rep/
        .env (empty)
        .git
        .gitignore
        Procfile
        requirements.txt
        hellodjango/
            manage.py
            hellodjango/
                __init__.py
                settings/
                urls.py
                wsgi.py
Run Code Online (Sandbox Code Playgroud)

我安装了django-toolbelt,创建了我的简单Django应用程序,在我的Procfile中启动了这个过程...一切似乎工作正常,但是当我为Heroku环境配置应用程序并添加时问题就开始了:

import dj_database_url
DATABASES['default'] =  dj_database_url.config()
Run Code Online (Sandbox Code Playgroud)

到我的settings.py文件的底部.

我将应用程序的存储库推送到Heroku,$ heroku open成功访问了我的浏览器中的应用程序,但是本地:dj_database_url.config() 返回了一个空字典.

本地:

OS X 10.8.4
pip == 1.4.1
virtualenv == 1.10.1
virtualenvwrapper == 4.1.1
wsgiref == 0.1.2
Postgres.app在5432端口上运行

环境变量:

mac-pol:hellodjango_rep oubiga$ python
>>> import os
>>> os.environ

{
  'PROJECT_HOME': '/Users/oubiga/Projects'... 
  'PATH': '/usr/local/heroku/bin:/usr/local/share/python:/usr/local/bin:/Applications/Postgres.app/Contents/MacOS/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin'... 
  'HOME': '/Users/oubiga'... 
  'WORKON_HOME': '/Users/oubiga/Envs'... 
  'VIRTUALENVWRAPPER_HOOK_DIR': '/Users/oubiga/Envs'... 
  'PWD': '/Users/oubiga/Projects/hellodjango_rep'
}
Run Code Online (Sandbox Code Playgroud)

hellodjango_venv:

Django == 1.5.2 …

django heroku environment-variables gunicorn 12factor

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

12因素app配置和Java

我正在阅读12因素应用宣言http://12factor.net/.宣言建议在Enviornment变量中存储应用程序的配置数据.这是否意味着像DB用户名/密码,资源URL这样的属性应该存储为Java Env变量的一部分而不是属性文件?这是一种存储信息的安全方式吗?对我来说,这似乎是存储信息的一种非常笨重的方式.是否有可以共享的最佳实践/经验?

我能想到的一个选项是在横向上运行单独的配置服务,并使用Env属性连接到配置服务,然后查询配置服务以获取更详细的配置数据.

java config 12factor

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

尊重部署在Cloudfoundry或Heroku上的Gradle/Spring应用程序的代码库因子(来自12因素应用程序宣言)

我的问题涉及12因素应用宣言的第一个因素:代码库.(见http://12factor.net/codebase).

TL; DR:

这个因素表明代码库和部署之间存在一对一的关系,所以在这种情况下,你不应该为两个应用程序使用相同的代码库(存储库)

我的要求:我有一个网站Spring应用程序和一个批处理Spring应用程序共享一个公共代码,即域模型(JPA实体类).我需要能够分享这个共同的代码.而这两个应用程序需要使用的通用代码相同的版本在任何一个时间.

我目前的设置:我目前在github上有三个"顶级"存储库:

  • 域模型(JPA实体类)repo
  • 网站应用程序回购
    • 域模型目录/ gradle项目(包括在内git subtree pull/push)
  • 批量应用程序repo
    • 域模型目录/ gradle项目(包括在内git subtree pull/push)

另请注意,域模型存储库单独存在(如上所述),但也嵌套在网站和批处理应用程序存储库中.我使用a git subtree pull/push来包含此域模型仓库作为目录和另外两个仓库中的gradle项目.原因是Heroku从repos构建代码本身.

所有这些都非常乏味且容易出错.

有人可以建议更好的解决方案吗?

github heroku gradle cloud-foundry 12factor

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

12因子方法和客户端Web应用程序

这个问题非常开放,但是有没有资源讨论(一页)客户端Javascript应用程序的12 Factor方法?如果它考虑采用12 Factor方法来构建使用EmberJS的Web应用程序,那就更好了.

ember.js 12factor

8
推荐指数
0
解决办法
270
查看次数