Refactor gulp and config
This commit is contained in:
parent
2415619a13
commit
e7d3ff9272
87
gulpfile.js
87
gulpfile.js
|
@ -13,9 +13,8 @@ const path = require('path');
|
||||||
|
|
||||||
// Configuration
|
// Configuration
|
||||||
|
|
||||||
const defaultService = 'salix';
|
const isWindows = /^win/.test(process.platform);
|
||||||
const defaultPort = 3000;
|
const env = process.env.NODE_ENV ? process.env.NODE_ENV : 'development';
|
||||||
const devServerPort = 8081;
|
|
||||||
|
|
||||||
const langs = ['es', 'en'];
|
const langs = ['es', 'en'];
|
||||||
const srcDir = './client';
|
const srcDir = './client';
|
||||||
|
@ -26,6 +25,16 @@ const buildDir = `${nginxDir}/static`;
|
||||||
const modules = require('./client/modules.json');
|
const modules = require('./client/modules.json');
|
||||||
const webpackConfig = require('./webpack.config.js');
|
const webpackConfig = require('./webpack.config.js');
|
||||||
|
|
||||||
|
let proxyConf = require(`${nginxDir}/config.json`);
|
||||||
|
let proxyEnvFile = `${nginxDir}/config.${env}.json`;
|
||||||
|
|
||||||
|
if (fs.existsSync(proxyEnvFile))
|
||||||
|
Object.assign(proxyConf, require(proxyEnvFile));
|
||||||
|
|
||||||
|
const defaultService = proxyConf.main;
|
||||||
|
const defaultPort = proxyConf.defaultPort;
|
||||||
|
const devServerPort = proxyConf.devServerPort;
|
||||||
|
|
||||||
// Development
|
// Development
|
||||||
|
|
||||||
gulp.task('default', () => {
|
gulp.task('default', () => {
|
||||||
|
@ -37,26 +46,25 @@ gulp.task('client', ['clean'], () => {
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('services', callback => {
|
gulp.task('services', callback => {
|
||||||
let isWindows = /^win/.test(process.platform);
|
let command = isWindows
|
||||||
let command = isWindows ? 'docker inspect dblocal | findstr Status' : 'docker inspect dblocal | grep Status';
|
? 'docker inspect dblocal | findstr Status'
|
||||||
|
: 'docker inspect dblocal | grep Status';
|
||||||
|
|
||||||
exec(command, (err, stdout, stderr) => {
|
exec(command, (err, stdout, stderr) => {
|
||||||
|
if (err) return callback(err);
|
||||||
let isNotRunning = !stdout.includes('running');
|
let isNotRunning = !stdout.includes('running');
|
||||||
if (isNotRunning) {
|
if (isNotRunning)
|
||||||
runSequence('docker-wait', 'services-run', callback);
|
runSequence('docker-wait', 'services-run', callback);
|
||||||
} else {
|
else
|
||||||
runSequence('services-run', callback);
|
runSequence('services-run', callback);
|
||||||
}
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('services-run', async () => {
|
gulp.task('services-run', async () => {
|
||||||
const services = await getServices();
|
const services = await getServices();
|
||||||
|
|
||||||
for (let service of services)
|
for (let service of services)
|
||||||
require(service.index).start(service.port);
|
require(service.index).start(service.port);
|
||||||
|
|
||||||
await renderNginxConf(services, 'development');
|
|
||||||
return gulp.start('nginx');
|
return gulp.start('nginx');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -72,13 +80,13 @@ gulp.task('e2e-run', () => {
|
||||||
|
|
||||||
gulp.task('clean', () => {
|
gulp.task('clean', () => {
|
||||||
const del = require('del');
|
const del = require('del');
|
||||||
return del([`${buildDir}/*`, `!${buildDir}/templates`, `!${buildDir}/images`], {force: true});
|
return del([`${buildDir}/*`, `${nginxDir}/temp/*`, `!${buildDir}/templates`, `!${buildDir}/images`], {force: true});
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('install', () => {
|
gulp.task('install', () => {
|
||||||
const install = require('gulp-install');
|
const install = require('gulp-install');
|
||||||
const jsonFile = [];
|
let jsonFile = [];
|
||||||
const services = fs.readdirSync(servicesDir);
|
let services = fs.readdirSync(servicesDir);
|
||||||
services.push('..');
|
services.push('..');
|
||||||
services.forEach(service => {
|
services.forEach(service => {
|
||||||
jsonFile.push(`${servicesDir}/${service}/package.json`);
|
jsonFile.push(`${servicesDir}/${service}/package.json`);
|
||||||
|
@ -98,7 +106,7 @@ gulp.task('build', ['clean'], () => {
|
||||||
return gulp.start('routes', 'locales', 'webpack', 'build-conf');
|
return gulp.start('routes', 'locales', 'webpack', 'build-conf');
|
||||||
});
|
});
|
||||||
|
|
||||||
gulp.task('build-conf', async callback => {
|
gulp.task('build-conf', async () => {
|
||||||
let compose = await fs.readFile('./docker-compose.tpl.yml', 'utf8');
|
let compose = await fs.readFile('./docker-compose.tpl.yml', 'utf8');
|
||||||
|
|
||||||
const yaml = require('js-yaml');
|
const yaml = require('js-yaml');
|
||||||
|
@ -129,58 +137,73 @@ gulp.task('build-conf', async callback => {
|
||||||
let ymlString = yaml.safeDump(composeYml);
|
let ymlString = yaml.safeDump(composeYml);
|
||||||
await fs.writeFile('./docker-compose.yml', ymlString);
|
await fs.writeFile('./docker-compose.yml', ymlString);
|
||||||
|
|
||||||
await renderNginxConf(services, 'production');
|
await buildNginxConf();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Services
|
// Services
|
||||||
|
|
||||||
async function getServices() {
|
let services;
|
||||||
let startPort = defaultPort + 1;
|
|
||||||
let servicesData = [];
|
|
||||||
|
|
||||||
const services = fs.readdirSync(servicesDir);
|
async function getServices() {
|
||||||
|
if (services) return services;
|
||||||
|
|
||||||
|
let startPort = defaultPort + 1;
|
||||||
|
services = [];
|
||||||
|
|
||||||
|
const serviceDirs = await fs.readdir(servicesDir);
|
||||||
const exclude = ['loopback'];
|
const exclude = ['loopback'];
|
||||||
|
|
||||||
for (let service of services) {
|
for (let service of serviceDirs) {
|
||||||
let index = `${servicesDir}/${service}/server/server.js`;
|
let index = `${servicesDir}/${service}/server/server.js`;
|
||||||
if (!await fs.exists(index) || exclude.indexOf(service) !== -1) continue;
|
if (!await fs.exists(index) || exclude.indexOf(service) !== -1) continue;
|
||||||
|
|
||||||
let port = service == defaultService ? defaultPort : startPort++;
|
let port = service == defaultService ? defaultPort : startPort++;
|
||||||
servicesData.push({
|
services.push({
|
||||||
name: service,
|
name: service,
|
||||||
index: index,
|
index: index,
|
||||||
port: port
|
port: port
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return servicesData;
|
return services;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Nginx
|
// Nginx
|
||||||
|
|
||||||
gulp.task('nginx', callback => {
|
gulp.task('nginx', async () => {
|
||||||
let isWindows = /^win/.test(process.platform);
|
await buildNginxConf();
|
||||||
let command = isWindows ? 'start.cmd' : 'start.sh';
|
let command = isWindows ? 'start.cmd' : 'start.sh';
|
||||||
command = path.join(`${nginxDir}/${command}`);
|
command = path.join(`${nginxDir}/${command}`);
|
||||||
exec(command, (err, stdout, stderr) => {
|
return new Promise((resolve, reject) => {
|
||||||
if (stderr) console.log(stderr);
|
exec(command, (err, stdout, stderr) => {
|
||||||
callback(err);
|
if (stderr) console.log(stderr);
|
||||||
|
if (err) return reject(err);
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
async function renderNginxConf(services, env) {
|
async function buildNginxConf() {
|
||||||
const mustache = require('mustache');
|
const mustache = require('mustache');
|
||||||
|
|
||||||
let params = {
|
let params = {
|
||||||
services: services,
|
services: await getServices(),
|
||||||
defaultService: defaultService,
|
defaultService: defaultService,
|
||||||
defaultPort: defaultPort,
|
defaultPort: defaultPort,
|
||||||
devServerPort: devServerPort
|
devServerPort: devServerPort,
|
||||||
|
port: proxyConf.port,
|
||||||
|
host: proxyConf.host
|
||||||
};
|
};
|
||||||
let template = await fs.readFile(`${nginxDir}/nginx.${env}.mst`, 'utf8');
|
|
||||||
|
let confFile = `${nginxDir}/nginx.${env}.mst`;
|
||||||
|
|
||||||
|
if (!await fs.exists(confFile))
|
||||||
|
confFile = `${nginxDir}/nginx.mst`;
|
||||||
|
|
||||||
|
let template = await fs.readFile(confFile, 'utf8');
|
||||||
let nginxConf = mustache.render(template, params);
|
let nginxConf = mustache.render(template, params);
|
||||||
|
|
||||||
await fs.writeFile(`${nginxDir}/temp/nginx.${env}.conf`, nginxConf);
|
await fs.writeFile(`${nginxDir}/temp/nginx.conf`, nginxConf);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Webpack
|
// Webpack
|
||||||
|
|
|
@ -1,5 +1,2 @@
|
||||||
|
|
||||||
mysqldump --defaults-extra-file=connect.ini --default-character-set=utf8 --no-data --triggers --routines --events --databases account util vn2008 vn edi bs bi pbx cache salix vncontrol hedera > 01-structure.sql
|
mysqldump --defaults-extra-file=connect.ini --default-character-set=utf8 --no-data --triggers --routines --events --databases account util vn2008 vn edi bs bi pbx cache salix vncontrol hedera > 01-structure.sql
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -38,7 +38,7 @@ module.exports = function(Self) {
|
||||||
if (changes.isActive == false && finalState.isDefaultAddress)
|
if (changes.isActive == false && finalState.isDefaultAddress)
|
||||||
throw new UserError('The default consignee can not be unchecked');
|
throw new UserError('The default consignee can not be unchecked');
|
||||||
|
|
||||||
if (changes.isDefaultAddress == true) {
|
if (changes.isDefaultAddress == true && finalState.isActive != false) {
|
||||||
let filter = {
|
let filter = {
|
||||||
clientFk: finalState.clientFk,
|
clientFk: finalState.clientFk,
|
||||||
isDefaultAddress: {neq: false}
|
isDefaultAddress: {neq: false}
|
||||||
|
|
|
@ -32,15 +32,13 @@ module.exports = {
|
||||||
return this.response.status(401).send({message: 'Token expired'});
|
return this.response.status(401).send({message: 'Token expired'});
|
||||||
|
|
||||||
// Set proxy host
|
// Set proxy host
|
||||||
let host = this.request.headers.host.split(':')[0];
|
let proxy = config.proxy;
|
||||||
let proxy;
|
|
||||||
|
|
||||||
if (host == '127.0.0.1')
|
if (!proxy)
|
||||||
proxy = config.proxy.localhost;
|
proxy = {
|
||||||
else if (process.env.NODE_ENV == 'production')
|
host: 'localhost',
|
||||||
proxy = config.proxy.salix;
|
port: 80
|
||||||
else if (process.env.NODE_ENV == 'development')
|
};
|
||||||
proxy = config.proxy.testSalix;
|
|
||||||
|
|
||||||
this.request.proxyHost = `http://${proxy.host}:${proxy.port}`;
|
this.request.proxyHost = `http://${proxy.host}:${proxy.port}`;
|
||||||
this.request.user = {
|
this.request.user = {
|
||||||
|
|
|
@ -1,23 +1,20 @@
|
||||||
var path = require('path');
|
var fs = require('fs-extra');
|
||||||
let defaultFile = 'datasources.json';
|
|
||||||
|
|
||||||
function getFile(fileName) {
|
let env = process.env.NODE_ENV ? process.env.NODE_ENV : 'development';
|
||||||
return require(path.join(__dirname, `/config/${fileName}`));
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
let config = require(`${__dirname}/config/datasources.json`);
|
||||||
let envFile = 'datasources.development.json';
|
let configEnvFile = `${__dirname}/config/datasources.${env}.json`;
|
||||||
|
|
||||||
if (process.env.NODE_ENV === 'test')
|
if (fs.existsSync(configEnvFile))
|
||||||
envFile = 'datasources.test.json';
|
Object.assign(config, require(configEnvFile));
|
||||||
|
|
||||||
config = getFile(envFile);
|
let proxyConf = require(`../../nginx/config.json`);
|
||||||
} catch (e) {
|
let proxyEnvFile = `../../nginx/config.${env}.json`;
|
||||||
if (e.code == 'MODULE_NOT_FOUND')
|
|
||||||
config = getFile(defaultFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
config.proxy = require('../../nginx/config.json');
|
if (fs.existsSync(proxyEnvFile))
|
||||||
|
Object.assign(proxyConf, require(proxyEnvFile));
|
||||||
|
|
||||||
|
config.proxy = proxyConf;
|
||||||
config.package = require('../package.json');
|
config.package = require('../package.json');
|
||||||
|
|
||||||
module.exports = config;
|
module.exports = config;
|
||||||
|
|
|
@ -3,7 +3,7 @@ FROM nginx
|
||||||
RUN rm /etc/nginx/nginx.conf
|
RUN rm /etc/nginx/nginx.conf
|
||||||
RUN rm /etc/nginx/conf.d/default.conf
|
RUN rm /etc/nginx/conf.d/default.conf
|
||||||
|
|
||||||
COPY tmp/nginx.production.conf /etc/nginx/nginx.conf
|
COPY tmp/nginx.conf /etc/nginx/nginx.conf
|
||||||
COPY static /usr/share/nginx/html
|
COPY static /usr/share/nginx/html
|
||||||
|
|
||||||
RUN apt-get update && apt-get -y install vim dnsmasq dnsutils
|
RUN apt-get update && apt-get -y install vim dnsmasq dnsutils
|
||||||
|
|
|
@ -1,14 +1,7 @@
|
||||||
{
|
{
|
||||||
"localhost": {
|
"main": "salix",
|
||||||
"host": "localhost",
|
"defaultPort": 3000,
|
||||||
"port": 5000
|
"devServerPort": 8081,
|
||||||
},
|
"host": "localhost",
|
||||||
"testSalix": {
|
"port": 5000
|
||||||
"host": "test-salix",
|
|
||||||
"port": 80
|
|
||||||
},
|
|
||||||
"salix": {
|
|
||||||
"host": "salix",
|
|
||||||
"port": 80
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"host": "salix",
|
||||||
|
"port": 80
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"host": "test-salix",
|
||||||
|
"port": 80
|
||||||
|
}
|
|
@ -21,8 +21,8 @@ http {
|
||||||
scgi_temp_path temp/scgi;
|
scgi_temp_path temp/scgi;
|
||||||
|
|
||||||
server {
|
server {
|
||||||
listen 5000;
|
listen {{port}};
|
||||||
server_name localhost;
|
server_name {{host}};
|
||||||
autoindex off;
|
autoindex off;
|
||||||
|
|
||||||
{{#services}}
|
{{#services}}
|
||||||
|
|
|
@ -6,15 +6,15 @@ events {
|
||||||
}
|
}
|
||||||
|
|
||||||
http {
|
http {
|
||||||
sendfile on;
|
sendfile on;
|
||||||
gzip on;
|
gzip on;
|
||||||
default_type application/octet-stream;
|
default_type application/octet-stream;
|
||||||
resolver 127.0.0.1;
|
resolver 127.0.0.1;
|
||||||
include /etc/nginx/mime.types;
|
include /etc/nginx/mime.types;
|
||||||
|
|
||||||
server {
|
server {
|
||||||
listen 80;
|
listen {{port}};
|
||||||
server_name localhost;
|
server_name {{host}};
|
||||||
autoindex off;
|
autoindex off;
|
||||||
|
|
||||||
root /usr/share/nginx/html;
|
root /usr/share/nginx/html;
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
set currentDir=%cd%
|
set currentDir=%cd%
|
||||||
set nginxPrefix=%currentDir%\services\nginx
|
set nginxPrefix=%currentDir%\services\nginx
|
||||||
set nginxConf=%nginxPrefix%\temp\nginx.development.conf
|
set nginxConf=%nginxPrefix%\temp\nginx.conf
|
||||||
|
|
||||||
if "%1"=="" goto caseStart
|
if "%1"=="" goto caseStart
|
||||||
if "%1"=="start" goto caseStart
|
if "%1"=="start" goto caseStart
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
nginxBin="/usr/sbin/nginx"
|
nginxBin="/usr/sbin/nginx"
|
||||||
nginxPrefix="${PWD}/services/nginx"
|
nginxPrefix="${PWD}/services/nginx"
|
||||||
nginxConf="$nginxPrefix/temp/nginx.development.conf"
|
nginxConf="$nginxPrefix/temp/nginx.conf"
|
||||||
|
|
||||||
if [ ! -f $nginxBin ]; then
|
if [ ! -f $nginxBin ]; then
|
||||||
nginxBin="nginx"
|
nginxBin="nginx"
|
||||||
|
|
|
@ -1,23 +1,20 @@
|
||||||
var path = require('path');
|
var fs = require('fs-extra');
|
||||||
let defaultFile = 'datasources.json';
|
|
||||||
|
|
||||||
function getFile(fileName) {
|
let env = process.env.NODE_ENV ? process.env.NODE_ENV : 'development';
|
||||||
return require(path.join(__dirname, `/config/${fileName}`));
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
let config = require(`${__dirname}/config/datasources.json`);
|
||||||
let envFile = 'datasources.development.json';
|
let configEnvFile = `${__dirname}/config/datasources.${env}.json`;
|
||||||
|
|
||||||
if (process.env.NODE_ENV === 'test')
|
if (fs.existsSync(configEnvFile))
|
||||||
envFile = 'datasources.test.json';
|
Object.assign(config, require(configEnvFile));
|
||||||
|
|
||||||
config = getFile(envFile);
|
let proxyConf = require(`../../nginx/config.json`);
|
||||||
} catch (e) {
|
let proxyEnvFile = `../../nginx/config.${env}.json`;
|
||||||
if (e.code == 'MODULE_NOT_FOUND')
|
|
||||||
config = getFile(defaultFile);
|
|
||||||
}
|
|
||||||
|
|
||||||
config.proxy = require('../../nginx/config.json');
|
if (fs.existsSync(proxyEnvFile))
|
||||||
|
Object.assign(proxyConf, require(proxyEnvFile));
|
||||||
|
|
||||||
|
config.proxy = proxyConf;
|
||||||
config.package = require('../package.json');
|
config.package = require('../package.json');
|
||||||
|
|
||||||
module.exports = config;
|
module.exports = config;
|
||||||
|
|
Loading…
Reference in New Issue