使用Angular应用程序在Nginx中管理环境

3
我正在使用Angular 5、Nginx作为我的前端应用程序和Node.js作为后端。所有内容将在Docker中运行。
我需要为后端和前端创建多个环境(staging、production等)。处理后端很容易,我在Docker compose中使用NODE_ENV。但前端如何处理呢?
由于我使用AOT编译的Angular,通过在Nginx中服务于dist目录,我不知道如何动态更改env。目前我找到的唯一解决方案是使用ng build --env=staging为每个env构建多个前端版本,将每个Docker映像推送到DTR,并通过env名称获取这些映像。
这很繁琐,我想知道是否有人遇到了同样的问题并找到了更好的方法。或者整个做法本身就是一个坏主意?
欢迎任何线索!

请看这里: https://dev59.com/wqrka4cB1Zd3GeqPaDbr#49559443 - David
我不太了解Docker,但是你不能创建一个任务,根据环境将正确的配置文件复制到正确的位置吗?你的构建可以包含多个config.xxx.json文件,该任务会将正确的文件复制到config.json中。 - David
Docker 有两个阶段:1. 构建镜像,包含所有所需的文件。2. 执行镜像,带有一些可选的环境变量。我只需要在第二阶段操作。 - NorTicUs
你说得对,这个方法可以行。有点取巧,但绝对是一个解决办法。谢谢@David。 - NorTicUs
否则,我认为有一些使用nginx和lua访问环境变量的方法,这意味着您可以根据nginx规则提供不同的conf.json。但这可能比脚本选项更复杂。 - David
显示剩余2条评论
1个回答

0

您可以使用在运行时检索的json文件中的配置创建一个包,就像这里所示

如果您有多个config.[envName].json文件(每个环境一个),那么当您运行图像时,您需要将相应环境的文件复制到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配置文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接