背景
在项目设计/POC阶段,演示项目的快速构建制品库演示。
规划与设计
- 规划制品库占用端口
2. 规划制品库占用目录
// 制品存储目录
/home/web/workbase/warehouse/
Nginx作为Web服务器,以nodejs + mysql管理制品包及部署日志,部署过程通过动态修改nginx.conf,在规划区域增加、修改配置,通用exec重启Nginx服务完成。
界面
制品包部署
按照部署方式,可以定义唯一路由名称,默认部署在端口5001上。
setNginx({ uuid, routeName,isRewrite }) {
return new Promise((resolve, reject) => {
// 这个api提供了node读写conf文件的功能
NginxConfFile.create('/usr/local/nginx/conf/nginx.conf', function (err, conf) {
if (err) {
console.log(err);
return;
}
// 存在多个模块是通过数组方式访问(5001--->对接制品仓库)
let servers = conf.nginx.http[0].server;
let isExistServer_5001 = servers.some(item => item.listen[0]._value == '5001')
if (!isExistServer_5001) {
conf.nginx.http[0]._add('server');
servers[servers.length - 1]._add('listen', '5001');
servers[servers.length - 1]._add('server_name', 'localhost');
}
let server_5001 = servers.find(item => item.listen[0]._value == '5001')
//root已经存在
if (server_5001.location) {
for (var i = server_5001.location.length - 1; i >= 0; i--) {
if (server_5001.location[i].root && server_5001.location[i].root[0]._value == `/home/web/workbase/warehouse/${uuid}`) {
server_5001._remove('location', i)
}
}
for (var i = server_5001.location.length - 1; i >= 0; i--) {
if (server_5001.location[i]._value == `@rewrites_${routeName}`) {
server_5001._remove('location', i)
}
}
//路由匹配重复
let routeExp = `/${routeName}`
let isExistRouteName = server_5001.location.some(item => item._value == routeExp)
if (isExistRouteName) {
resolve(false);
}
}
// blocks with values:
server_5001._add('location', `/${routeName}`);
const locationLen = server_5001.location.length;
server_5001.location[locationLen - 1]._add('root', `/home/web/workbase/warehouse/${uuid}`);
server_5001.location[locationLen - 1]._add('index', 'index.html index.htm');
if(isRewrite == 1){
server_5001.location[server_5001.location.length - 1]._add('try_files', `$uri $uri/ @rewrites_${routeName}`);
server_5001._add('location', `@rewrites_${routeName}`);
server_5001.location[server_5001.location.length - 1]._add('rewrite', `^(.*)$ /${routeName}/index.html last`);
}
resolve(true);
});
})
}
// 路由名称earth,即会在规划的server区域增加一条location
location /earth {
root /home/web/workbase/warehouse/b204ea10-3501-11ee-97a8-456e7dae90d8;
index index.html index.htm;
}
重写路由Rewrite用于解决React、Vue等打包项目router history模式下刷新白屏问题,单一静态Html制品包不用额外处理。
部署日志,采集标准部署的deploy.json信息获取git commit信息,完成部署监控。