使用nodejs打造多环境组合网关
2019-02-05 本文已影响5人
王小杰at2019
随着产品规模扩大,本地启动所有服务组件逐渐变得既费时又费事,工程师们只能在本地运行一部分待调试的组件,然后利用公共测试环境上的其余组件组成完整系统。

需要的软件 centos7 docker nginx nodejs
启动自己的服务 tomcat 参数介绍
docker run --name live \
-p 8089:8080 \
-v /root/webapp/live:/usr/local/tomcat/webapps \
-v /root/webapp/live/logs:/usr/local/tomcat/logs \
--restart=on-failure:3 \
-d tomcat:7.0
安装dns服务器 (docker bind)
bind 参数介绍
逗号隔开多个 WILDCARD_DNS='tld1=1.1.1.1[=tld],tld2=2.2.2.2[=tld2]'
docker run \
-p 53:53/tcp \
-p 53:53/udp \
-e WILDCARD_DNS='zm.gaiay.net.cn=192.168.31.100' \
-e DNS_FORWARDER='192.168.0.231' \
--name dns \
-d \
-t cytopia/bind
清理DNS缓存
ipconfig /flushdns
dns 查找示例
nslookup www.baidu.com
C:\Users\WangYa>nslookup www.baidu.com
服务器: UnKnown
Address: 192.168.31.100
非权威应答:
名称: www.a.shifen.com
Addresses: 119.75.213.61
119.75.216.20
Aliases: www.baidu.com
代理脚本
console.log("服务初始化............................");
const express = require('express');
const app = express();
const proxy = require('http-proxy-middleware');
let port = 80;
const mysql = require('mysql');
function loadConfig() {
let connection = mysql.createConnection({
host: '192.168.0.227',
port:'16234',
user: 'root',
password: '1234',
database: 'proxy'
});
connection.connect();
connection.query(" select * from config where `enable`=1 order by length(path) desc ", function (e, rs) {
for (let row of rs) {
console.log(row.path + " " + row.target);
app.use(row.path, proxy({target: row.target, changeOrigin: true}));
}
// 其他走公共
app.use('/', proxy({target: 'https://zm.gaiay.net.cn', changeOrigin: true}));
app.listen(port);
console.log('启动完成:' + port)
});
connection.end();
}
loadConfig();
pm2 管理工具
npm i pm2 -g
pm2 start app.js
pm2 monit
pm2 list
pm2 stop
pm2 restart
pm2 delete