100 lines
2.4 KiB
JavaScript
100 lines
2.4 KiB
JavaScript
const { resolve } = require("path");
|
|
const { execSync } = require("child_process");
|
|
const { 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) {
|
|
process.stderr.write(`Error: ${error.sqlMessage}\n`);
|
|
process.exit(1);
|
|
}
|
|
});
|
|
|
|
con.end();
|
|
};
|
|
|
|
// Register Exit handler to stop Docker containers on exit
|
|
const exitHandler = function exitHandler() {
|
|
stop(dockerOptions).then(
|
|
() => {
|
|
process.stdout.write("\n");
|
|
process.exit();
|
|
},
|
|
err => {
|
|
process.stderr.write(`Error: ${err.message}\n`);
|
|
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(
|
|
() => {
|
|
process.stdout.write(
|
|
"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 {
|
|
process.stderr.write(
|
|
"Error: No IP address for Docker containers. Aborting.\n",
|
|
);
|
|
process.exit(1);
|
|
}
|
|
},
|
|
err => {
|
|
process.strerr.write(`Error: ${err.message}\n`);
|
|
process.exit(1);
|
|
},
|
|
);
|