mirror of
https://github.com/TryGhost/Ghost.git
synced 2025-02-17 23:44:39 -05:00
101 lines
2.5 KiB
JavaScript
101 lines
2.5 KiB
JavaScript
|
const path = require('path');
|
||
|
const fs = require('fs').promises;
|
||
|
const {spawn} = require('child_process');
|
||
|
|
||
|
/**
|
||
|
* Run a command and stream output to the console
|
||
|
*
|
||
|
* @param {string} command
|
||
|
* @param {string[]} args
|
||
|
* @param {object} options
|
||
|
*/
|
||
|
async function runAndStream(command, args, options) {
|
||
|
return new Promise((resolve, reject) => {
|
||
|
const child = spawn(command, args, {
|
||
|
stdio: 'inherit',
|
||
|
...options
|
||
|
});
|
||
|
|
||
|
child.on('close', (code) => {
|
||
|
if (code === 0) {
|
||
|
resolve(code);
|
||
|
} else {
|
||
|
reject(new Error(`'${command} ${args.join(' ')}' exited with code ${code}`));
|
||
|
}
|
||
|
});
|
||
|
|
||
|
});
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Removes node dependencies and cleans up local caches
|
||
|
*/
|
||
|
function clean() {
|
||
|
require('./clean');
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Adjust config.local.json for Docker Compose setup
|
||
|
*/
|
||
|
async function adjustConfig() {
|
||
|
console.log('Adjusting configuration...');
|
||
|
const coreFolder = path.join(__dirname, '../../ghost/core');
|
||
|
const currentConfigPath = path.join(coreFolder, 'config.local.json');
|
||
|
let currentConfig;
|
||
|
try {
|
||
|
currentConfig = require(currentConfigPath);
|
||
|
} catch (err) {
|
||
|
currentConfig = {};
|
||
|
}
|
||
|
|
||
|
currentConfig.database = {
|
||
|
client: 'mysql',
|
||
|
docker: true,
|
||
|
connection: {
|
||
|
host: 'mysql',
|
||
|
user: 'root',
|
||
|
password: 'root',
|
||
|
database: 'ghost'
|
||
|
}
|
||
|
};
|
||
|
|
||
|
currentConfig.adapters = {
|
||
|
...currentConfig.adapters,
|
||
|
Redis: {
|
||
|
host: 'redis',
|
||
|
port: 6379
|
||
|
}
|
||
|
};
|
||
|
|
||
|
currentConfig.server = {
|
||
|
...currentConfig.server,
|
||
|
host: '0.0.0.0',
|
||
|
port: 2368
|
||
|
};
|
||
|
|
||
|
try {
|
||
|
await fs.writeFile(currentConfigPath, JSON.stringify(currentConfig, null, 4));
|
||
|
} catch (err) {
|
||
|
console.error('Failed to write config.local.json', err);
|
||
|
console.log(`Please add the following to config.local.json:\n`, JSON.stringify(currentConfig, null, 4));
|
||
|
process.exit(1);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
async function buildContainer() {
|
||
|
console.log('Building container...');
|
||
|
await runAndStream('docker-compose', ['build'], {});
|
||
|
}
|
||
|
|
||
|
async function runMigrations() {
|
||
|
console.log('Running migrations...');
|
||
|
await runAndStream('docker-compose', ['run', '--rm', '-w', '/home/ghost/ghost/core', 'ghost', 'yarn', 'knex-migrator', 'init'], {cwd: path.join(__dirname, '../../')});
|
||
|
}
|
||
|
|
||
|
(async () => {
|
||
|
clean();
|
||
|
await adjustConfig();
|
||
|
await buildContainer();
|
||
|
await runMigrations();
|
||
|
})();
|