【问题标题】:Manage environments with an Angular app in Nginx在 Nginx 中使用 Angular 应用程序管理环境
【发布时间】:2018-09-21 16:15:24
【问题描述】:

我正在使用 Angular 5,我的前端应用使用 Nginx,后端使用 Node.js。一切都将在 Docker 中运行。

我需要为后端和前端创建多个环境(登台、生产……)。后面很简单,我在 Docker compose 中使用NODE_ENV。但是前面呢?

由于我在 AOT 中使用 Angular,在 Nginx 中为 dist 文件夹提供服务,因此我不知道如何动态更改环境。我目前找到的唯一解决方案是使用ng build --env=staging 构建多个前端版本,一个通过 env,将每个 Docker 映像推送到 DTR 中并通过 env 名称获取这些映像。

这很麻烦,我想知道是否有人遇到同样的问题并找到了更好的方法。或者也许整个事情都是个坏主意?

欢迎任何线索!

【问题讨论】:

  • 感谢您的洞察力,但我仍然需要构建 N 个 docker 映像,其中包含不同的 conf.json。理想情况下,我想使用一些环境变量,但仍然是 1 张图片。
  • 我不太了解 docker,但你不能有一个任务只是根据环境将正确的配置复制到正确的位置吗?您的构建可以包含多个 config.xxx.json 并且任务将正确的一个复制到 config.json
  • Docker 有两个阶段: 1. 你构建一个镜像,包含你需要的所有文件。 2.你“执行”一个图像,带有一些可选的环境。我只需要在第 2 阶段进行手术
  • 但是当你执行镜像的时候,你启动了一个进程,就像启动nginx一样,对吧?也许你可以启动一个 bash 文件来替换配置,然后启动 nginx?

标签: angular docker nginx environment-variables


【解决方案1】:

您可以使用 json 文件中的配置仅创建一个包,在运行时检索,如 here 所示

如果您有多个config.[envName].json 文件(每个环境1 个),那么,当您运行映像时,您需要将相应环境的一个复制到config.json,这将是angular 请求的那个)

为此,您可以运行一个 bash 脚本来复制文件(通过环境变量识别),然后在运行映像时启动 nginx,而不是直接启动 nginx

run.sh

#!/bin/sh
cp /config/folder/path/config.$ENVNAME.json /config/folder/path/config.json
#start nginx

将该文件作为您的 docker 命令运行

其他选项

如果您安装了 lua 模块,您可以编写一些动态脚本,根据某些环境变量(lua 可以访问)提供正确的 json 配置文件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 2019-09-28
    相关资源
    最近更新 更多