Files
windycoys/build/serve.js
2019-01-12 10:37:24 +00:00

94 lines
2.3 KiB
JavaScript

const { resolve } = require('path');
const { execSync } = require('child_process');
const { exec, upAll, stop } = require('docker-compose');
const browsersync = require('browser-sync');
const mysql = require('mysql');
const name = 'windycoys';
const dockerOptions = {
cwd: resolve(__dirname),
log: true,
};
const browserSyncOptions = {
files: [
'theme/**/*',
],
watchtask: true,
open: false,
};
const mysqlConfig = {
user: 'root',
password: 'password',
database: 'wordpress',
};
process.env.COMPOSE_PROJECT_NAME = name;
// Get IP address
const getIpAddr = function getIpAddr(id) {
return execSync(`docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' ${id}`).toString('utf8').trim();
};
// Update URIs in MYSQL database
const updateUriData = function updateUriData(wordpress, db) {
mysqlConfig.host = db;
const con = mysql.createConnection(mysqlConfig);
con.connect();
const query = `UPDATE wp_options SET option_value='http://${wordpress}' WHERE option_name in ('siteurl', 'home')`;
con.query(query, (error) => {
if (error) {
console.error('Error', error.sqlMessage);
process.exit(1);
}
});
con.end();
};
// Register Exit handler to stop Docker containers on exit
const exitHandler = function exitHandler() {
stop(dockerOptions).then(
() => {
console.log('\n');
process.exit();
},
(err) => {
console.error('Error:', err.message);
process.exit(1);
},
);
};
process.on('beforeExit', exitHandler.bind());
process.on('SIGINT', exitHandler.bind());
process.on('SIGUSR1', exitHandler.bind());
process.on('SIGUSR2', exitHandler.bind());
process.on('uncaughtException', exitHandler.bind());
// Start Docker containers
upAll(dockerOptions).then(
() => {
console.log('Docker containers launched, starting browser-sync...');
const wordpress = getIpAddr(`${name}_wordpress_1`);
const db = getIpAddr(`${name}_db_1`);
if (wordpress && db) {
updateUriData(wordpress, db);
const bs = browsersync.create();
browserSyncOptions.proxy = wordpress;
bs.init(browserSyncOptions);
} else {
console.error('Error', 'No IP address for Docker containers. Aborting.');
process.exit(1);
}
},
(err) => {
console.error('Error', err.message);
process.exit(1);
},
);