項目一般經歷過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中在不同的環境中配置不同的反向代理。