angular - 在图像上使用服务器环境变量

标签 angular kubernetes

我有一个用 angular4 编写的应用程序, 我在生产和沙箱上运行,

我创建一个镜像,然后部署到 kubernetes 上

我有一些不同于沙箱和生产的环境变量,目前我构建了两个不同的图像,一个用于沙箱,一个用于 制作:

src/envirnments 下的环境:

environment.prod.ts

export const environment = {
  production: true,
  server_url: 'https://api.example.com/app/',
};

environment.sandbox.ts

export const environment = {
  production: false,
  server_url: 'https://api-sandbox.example.com/app/',
};

建筑形象:

生产:ng build --prod

沙盒: ng build--prod --env=sandbox

现在,我该如何使用外部环境变量呢? 像 applicatoion.getEnvirnment('server_url') 这样的东西,我不需要为每个环境创建一个图像吗?

这是我的deployment.yaml:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: angular-web-app
  namespace: production
spec:
  replicas: 1
  revisionHistoryLimit: 1
  strategy:
      type: RollingUpdate
  template:
    metadata:
      labels:
        app: angular-web-app
    spec:
      containers:
      - name: angular-web-app
        image: us.gcr.io/my-com/angular-web-app:06.01.2018
        ports:
        - containerPort: 80
        env:
        - name: SERVER_URL
          value: https://api.example.com

这是我的 dockerfile:

FROM nginx
COPY dist /usr/share/nginx/html
EXPOSE 80
EXPOSE 443

构建图像:

ng build --prod --env=sandbox
docker build --rm -t ${REGISTRY}/${CONTAINER}:${TAG} .

我将环境变量添加到部署中,我希望应用程序从那里获取值

最佳答案

或者您可以从本地配置 json 读取,然后使用卷, 为你们每个环境都有单独的配置映射see

src/assets/config 下放置配置 json,

在您的代码中,从配置文件中读取 url:

private getConfigJSONFile() {
     return this.http.get("/assets/config/env-vars.json").map((res:any) => res.json())
   }

现在在 kubernetes 上创建配置:

这是配置文件:

configs/env-variables.json

{
  "api_server_url": "https://api.example.com"
}

创建配置

kubectl create configmap angular-env-vars --from-file=env-vars.json=configs/env-variables.json

在您的部署中使用卷:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: angular-web-app
spec:
  replicas: 1
  revisionHistoryLimit: 1
  strategy:
      type: RollingUpdate
  template:
    metadata:
      labels:
        app: angular-web-app
    spec:
      containers:
      - name: angular-web-app
        image: us.gcr.io/my-com/angular-web-app:06.01.2018
        volumeMounts:
        - name: env-vars
          mountPath: /usr/share/nginx/html/assets/config
        ports:
        - containerPort: 80
      volumes:
      - name: env-vars
        configMap:
          name: angular-env-vars

关于angular - 在图像上使用服务器环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49475002/

相关文章:

elasticsearch - 使用 Elasticsearch 和 Kubernetes 进行数据存储的最佳实践

kubernetes - 哪些kubernetes标识符最多必须包含63个字符?

docker - 将自签名 SSL 证书用于部署镜像

node.js - Angular 4 生产部署工作流程

javascript - 构建 Angular 6 应用程序后运行命令行

Ionic 中的 Angular 2 react 形式复选框验证

kubernetes - 如何在 Kubernetes 上设置安全的 cockroachdb 以便从 NodeJs 访问

docker - Kubernetes pod 部署失败; docker 镜像丢失/放错文件位置?

html - 多行按钮组 Bootstrap 中按钮的圆 Angular

split - Angular2 拆分字符串(管道?)