背景
在企业应用中,为保证产品质量,因此我们希望产线运行的系统和我们测试通过的系统为相同的代码,但是实际情况是开发环境,测试环境,产线环境配置变量不尽相同,给程序可靠发布带来一定的风险。为此我们寻求一种简单的方式实现各环境发布包为同一个包。本文主要介绍前端发布过程中如何解决Nginx通过动态获取环境变量实现版本可靠发布。
前置条件
本demo 基于docker实现,请自行安装docker 环境。
方案
通过根据环境不同,启动不同的首页,实现加载不同内容。
实现过程
一,创建Ngix配置模板文件
1.首先创建文件夹demo.
2.在demo文件夹中创建文件夹nginx.
3.在nginx文件夹中创建文件 default.template
server {
listen 80;
server_name localhost;
#charset koi8-r;
access_log /var/log/nginx/host.access.log main;
error_log /var/log/nginx/error.log error;
location / {
if ($request_filename ~* .*\.(?:index.htm|index.html)$) ## 配置页面不缓存index.html和index.htm结尾的文件
{
add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate";
}
root /usr/share/nginx/html;
index $envname.index.html $envname.index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
我们在默认启动首页前面设置变量$envname,docker 启动的时候动态替换该变量实现不同首页加载需求
二,创建dockerfile
#拉取nginx镜像
FROM nginx
#把本地的dist文件夹下所有内容复制到/usr/share/nginx/html下
COPY dist/ /usr/share/nginx/html/
##将nginx配置模板复制过去到指定目录
COPY nginx/default.template /etc/nginx/conf.d/
#将docker环境下的命令行路径切换到/etc/nginx/conf.d下执行
WORKDIR /etc/nginx/conf.d
#添加环境变量的写入
ENTRYPOINT envsubst '$envname' < default.template > default.conf && cat default.conf && nginx -g 'daemon off;'
三,把html 文件夹拷贝到demo文件夹
dev.index.html 内容为dev
gqc.index.html 内容为gqc
prd.index.html 内容为prd
以实现根据配置读取默认启动首页的效果

四,打包镜像
在根目录demo文件夹内执行docker build . -t nginxdemo命令将本地资源打包成镜像,镜像名为 nginxdemo

五,运行镜像
执行命令: docker run --name nginxdemo -d -p 8080:80 -e envname=dev nginxdemo 启动镜像

访问端口 localhost:8080 可以看到输出内容为dev

再次执行命令: docker run --name nginxdemo-prd -d -p 8081:80 -e envname=prd nginxdemo 启动镜像

访问 localhost:8081 可以看到输出内容为prd

以上就是本次功能实现的整体效果,主要依赖 envsubst 命令实现环境变量写入到nginx config文件
全部代码:https://files.cnblogs.com/files/mnps/demo.zip?t=1654784525
浙公网安备 33010602011771号