码农坡

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

背景

在企业应用中,为保证产品质量,因此我们希望产线运行的系统和我们测试通过的系统为相同的代码,但是实际情况是开发环境,测试环境,产线环境配置变量不尽相同,给程序可靠发布带来一定的风险。为此我们寻求一种简单的方式实现各环境发布包为同一个包。本文主要介绍前端发布过程中如何解决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

 

posted on 2022-06-09 22:24  码农坡  阅读(2162)  评论(0编辑  收藏  举报