Nodejs項目在docker中如何在dev、st、生產等環境切換配置

項目一般經歷過dev、st、uat等環節之後才能正式部署到生產。對於不同的環境有不同的配置,比如數據庫配置、反向代理配置等等。大部分項目可以通過環境變量配置區分dev、st、uat、prd等環境。Nodejs項目也可以採用這種方式實現切換。

以部署在docker中的nodejs爲例,闡述如何在不同環境中使用不同的反向代理。

項目概況:nodejs項目,express框架,部署在docker中,使用反向代理請求不同項目的資源。

一、反向代理配置

比如,需要配置dev的反向代理,新建一個專門用於dev反向代理的文件,dev-proxy.js

module.exports = function(){
    var proxy-middle = require('http-proxy-middleware');

    this.setProxy=function(app){
        app.use('/A',proxy-middle({
               target:'http://A.com/',
               changeOrigin:true,
               pathRewrite:{'^/A':''}
        }));
    }
}

在nodejs中使用http-proxy-middleware插件實現反向代理。

setProxy中需要將express的一個實例作爲參數傳入,並在反向代理文件中逐個配置需要代理的路由。

二、docker中的環境變量設置

項目部署在Kubernetes中,在部署文件中設置環境變量,如對dev環境的部署文件關於環境變量的配置如下:

apiVersion: v1
kind: Pod
metadata:
  name: ips-demo
  labels:
    domain: DMZ
spec:
  containers:
  - name: ips-tomcat
    image: ipscloud.com/tomcat:1.0
    env:
    - name: ENV
      value: DEV

最後兩行name:ENV,value:DEV實現了dev環境中配置ENV爲DEV,通過讀取ENV的值判斷。

三、node中讀取環境變量並配置反向代理

在Node中讀取Kubernetes設置的環境變量也比較簡單:

var app = new express();
switch ((process.env.ENV_TYP).toUpperCase()) {
    case 'DEV':
        ProxyConfig = require('./proxy/dev-proxy');
        break;
    case 'ST':
        ProxyConfig = require('./proxy/st-proxy');
        break;
    case 'PRD':
        ProxyConfig = require('./proxy/prd-proxy');
        break;
    default:
        ProxyConfig = require('./proxy/dev-proxy');
        break;
}
new ProxyConfig().setProxy(app);

這樣就簡單實現了node中在不同的環境中配置不同的反向代理。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章